diff --git a/src/app/app.pri b/src/app/app.pri
index 5ccff3b1fc7a6da846cbed2977f9e51f2e2c8727..15ac50a30c18383817997767773a4cdb59f52e32 100644
--- a/src/app/app.pri
+++ b/src/app/app.pri
@@ -6,10 +6,12 @@ QT += \
     svg
 
 HEADERS += \
+    $${PWD}/handlers/confighandler.h \
     $${PWD}/handlers/ocsurlhandler.h
 
 SOURCES += \
     $${PWD}/main.cpp \
+    $${PWD}/handlers/confighandler.cpp \
     $${PWD}/handlers/ocsurlhandler.cpp
 
 RESOURCES += \
diff --git a/src/app/handlers/confighandler.cpp b/src/app/handlers/confighandler.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7d1111575b848823487e14cd41eeb8cdd04092ef
--- /dev/null
+++ b/src/app/handlers/confighandler.cpp
@@ -0,0 +1,61 @@
+#include "confighandler.h"
+
+#include "qtlib_dir.h"
+
+ConfigHandler::ConfigHandler(QObject *parent)
+    : QObject(parent)
+{
+    appConfig_ = qtlib::Config(":/configs");
+}
+
+QJsonObject ConfigHandler::getAppConfigApplication()
+{
+    if (appConfigApplication_.isEmpty()) {
+        appConfigApplication_ = appConfig_.get("application");
+    }
+    return appConfigApplication_;
+}
+
+QJsonObject ConfigHandler::getAppConfigInstallTypes()
+{
+    if (appConfigInstallTypes_.isEmpty()) {
+        QJsonObject installTypes = appConfig_.get("install_types");
+        foreach (const QString &key, installTypes.keys()) {
+            QJsonObject installtype = installTypes[key].toObject();
+            installtype["destination"] = convertPathString(installtype["destination"].toString());
+            installtype["generic_destination"] = convertPathString(installtype["generic_destination"].toString());
+            installTypes[key] = installtype;
+        }
+        QJsonObject installTypesAlias = appConfig_.get("install_types_alias");
+        foreach (const QString &key, installTypesAlias.keys()) {
+            QJsonObject installTypeAlias = installTypesAlias[key].toObject();
+            QString baseKey = installTypeAlias["base"].toString();
+            if (installTypes.contains(baseKey)) {
+                QJsonObject installType = installTypes[baseKey].toObject();
+                installType["base"] = baseKey;
+                installType["name"] = installTypeAlias["name"].toString();
+                installTypes[key] = installType;
+            }
+        }
+        appConfigInstallTypes_ = installTypes;
+    }
+    return appConfigInstallTypes_;
+}
+
+QString ConfigHandler::convertPathString(const QString &path)
+{
+    QString newPath = path;
+    if (newPath.contains("$HOME")) {
+        newPath.replace("$HOME", qtlib::Dir::homePath());
+    }
+    else if (newPath.contains("$XDG_DATA_HOME")) {
+        newPath.replace("$XDG_DATA_HOME", qtlib::Dir::genericDataPath());
+    }
+    else if (newPath.contains("$KDEHOME")) {
+        newPath.replace("$KDEHOME", qtlib::Dir::kdehomePath());
+    }
+    else if (newPath.contains("$APP_DATA")) {
+        newPath.replace("$APP_DATA", qtlib::Dir::genericDataPath() + "/" + getAppConfigApplication()["id"].toString());
+    }
+    return newPath;
+}
diff --git a/src/app/handlers/confighandler.h b/src/app/handlers/confighandler.h
new file mode 100644
index 0000000000000000000000000000000000000000..247afc85f936d325f4477afe8bf907a22403eb44
--- /dev/null
+++ b/src/app/handlers/confighandler.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include <QObject>
+#include <QJsonObject>
+
+#include "qtlib_config.h"
+
+class ConfigHandler : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit ConfigHandler(QObject *parent = 0);
+
+public slots:
+    QJsonObject getAppConfigApplication();
+    QJsonObject getAppConfigInstallTypes();
+
+private:
+    QString convertPathString(const QString &path);
+
+    qtlib::Config appConfig_;
+    QJsonObject appConfigApplication_;
+    QJsonObject appConfigInstallTypes_;
+};