diff --git a/app/app.pri b/app/app.pri
index 5495172d96673f2b36daadf58ce583280ca3cd8d..768f484af6d2e4fc61a3a97b4aa3bf55ea26fa3c 100644
--- a/app/app.pri
+++ b/app/app.pri
@@ -1,3 +1,5 @@
+CONFIG += c++11
+
 QT += \
     core \
     gui \
diff --git a/app/configs/application.json b/app/configs/application.json
index d690c57350a886ab79c82e2112b405bad84687a8..60360beabb2659595301106c898ce03ae329490e 100644
--- a/app/configs/application.json
+++ b/app/configs/application.json
@@ -1,7 +1,7 @@
 {
     "id": "ocs-manager",
     "name": "ocs-manager",
-    "version": "0.1.0",
+    "version": "0.2.0",
     "organization": "Opendesktop.org",
     "domain": "org.opendesktop.ocs-manager",
     "icon": "",
diff --git a/app/configs/install_types.json b/app/configs/install_types.json
index 335de22350e81310a3820d1f0d79e6a5aea33037..87e9b33e2b5a9a07d4f99c8b91a64a85854b5309 100644
--- a/app/configs/install_types.json
+++ b/app/configs/install_types.json
@@ -6,27 +6,27 @@
     },
     "downloads": {
         "name": "Downloads",
-        "destination": "$HOME/Downloads",
+        "destination": "$XDG_DOWNLOAD_DIR",
         "generic_destination": "$APP_DATA/downloads"
     },
     "documents": {
         "name": "Documents",
-        "destination": "$HOME/Documents",
+        "destination": "$XDG_DOCUMENTS_DIR",
         "generic_destination": "$APP_DATA/documents"
     },
     "pictures": {
         "name": "Pictures",
-        "destination": "$HOME/Pictures",
+        "destination": "$XDG_PICTURES_DIR",
         "generic_destination": "$APP_DATA/pictures"
     },
     "music": {
         "name": "Music",
-        "destination": "$HOME/Music",
+        "destination": "$XDG_MUSIC_DIR",
         "generic_destination": "$APP_DATA/music"
     },
     "videos": {
         "name": "Videos",
-        "destination": "$HOME/Videos",
+        "destination": "$XDG_VIDEOS_DIR",
         "generic_destination": "$APP_DATA/videos"
     },
     "wallpapers": {
diff --git a/app/src/handlers/confighandler.cpp b/app/src/handlers/confighandler.cpp
index bcb3cd820ca411bf4ce247c9b12973e53156431b..bcb3e744f50dacf5d8b2a3ceb9ca6d8f6a670bf7 100644
--- a/app/src/handlers/confighandler.cpp
+++ b/app/src/handlers/confighandler.cpp
@@ -1,6 +1,7 @@
 #include "confighandler.h"
 
 #include <QStringList>
+#include <QStandardPaths>
 
 #include "qtlib_dir.h"
 
@@ -8,84 +9,62 @@ ConfigHandler::ConfigHandler(QObject *parent)
     : QObject(parent)
 {
     appConfig_ = qtlib::Config(":/configs");
+    importAppConfigApplication();
+    importAppConfigInstallTypes();
     usrConfig_ = qtlib::Config(qtlib::Dir::genericConfigPath() + "/" + getAppConfigApplication()["id"].toString());
 }
 
-QJsonObject ConfigHandler::getAppConfigApplication()
+QJsonObject ConfigHandler::getAppConfigApplication() const
 {
-    if (appConfigApplication_.isEmpty()) {
-        appConfigApplication_ = appConfig_.get("application");
-    }
     return appConfigApplication_;
 }
 
-QJsonObject ConfigHandler::getAppConfigInstallTypes()
+QJsonObject ConfigHandler::getAppConfigInstallTypes() const
 {
-    if (appConfigInstallTypes_.isEmpty()) {
-        QJsonObject installTypes = appConfig_.get("install_types");
-        for (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");
-        for (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_;
 }
 
-QJsonObject ConfigHandler::getUsrConfigApplication()
+QJsonObject ConfigHandler::getUsrConfigApplication() const
 {
     return usrConfig_.get("application");
 }
 
-bool ConfigHandler::setUsrConfigApplication(const QJsonObject &object)
+bool ConfigHandler::setUsrConfigApplication(const QJsonObject &object) const
 {
     return usrConfig_.set("application", object);
 }
 
-QJsonObject ConfigHandler::getUsrConfigProviders()
+QJsonObject ConfigHandler::getUsrConfigProviders() const
 {
     return usrConfig_.get("providers");
 }
 
-bool ConfigHandler::setUsrConfigProviders(const QJsonObject &object)
+bool ConfigHandler::setUsrConfigProviders(const QJsonObject &object) const
 {
     return usrConfig_.set("providers", object);
 }
 
-QJsonObject ConfigHandler::getUsrConfigCategories()
+QJsonObject ConfigHandler::getUsrConfigCategories() const
 {
     return usrConfig_.get("categories");
 }
 
-bool ConfigHandler::setUsrConfigCategories(const QJsonObject &object)
+bool ConfigHandler::setUsrConfigCategories(const QJsonObject &object) const
 {
     return usrConfig_.set("categories", object);
 }
 
-QJsonObject ConfigHandler::getUsrConfigInstalledItems()
+QJsonObject ConfigHandler::getUsrConfigInstalledItems() const
 {
     return usrConfig_.get("installed_items");
 }
 
-bool ConfigHandler::setUsrConfigInstalledItems(const QJsonObject &object)
+bool ConfigHandler::setUsrConfigInstalledItems(const QJsonObject &object) const
 {
     return usrConfig_.set("installed_items", object);
 }
 
-bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object)
+bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object) const
 {
     /* object format
     {
@@ -98,19 +77,19 @@ bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, co
         "_providerfile": "https://example.com/ocs/providers.xml"
     }
     */
-    QJsonObject providers = getUsrConfigProviders();
+    auto providers = getUsrConfigProviders();
     providers[providerKey] = object;
     return setUsrConfigProviders(providers);
 }
 
-bool ConfigHandler::removeUsrConfigProvidersProvider(const QString &providerKey)
+bool ConfigHandler::removeUsrConfigProvidersProvider(const QString &providerKey) const
 {
-    QJsonObject providers = getUsrConfigProviders();
+    auto providers = getUsrConfigProviders();
     providers.remove(providerKey);
     return setUsrConfigProviders(providers);
 }
 
-bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object)
+bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object) const
 {
     /* object format
     {
@@ -126,21 +105,21 @@ bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, c
         }
     }
     */
-    QJsonObject categories = getUsrConfigCategories();
+    auto categories = getUsrConfigCategories();
     categories[providerKey] = object;
     return setUsrConfigCategories(categories);
 }
 
-bool ConfigHandler::removeUsrConfigCategoriesProvider(const QString &providerKey)
+bool ConfigHandler::removeUsrConfigCategoriesProvider(const QString &providerKey) const
 {
-    QJsonObject categories = getUsrConfigCategories();
+    auto categories = getUsrConfigCategories();
     categories.remove(providerKey);
     return setUsrConfigCategories(categories);
 }
 
-bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType)
+bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType) const
 {
-    QJsonObject categories = getUsrConfigCategories();
+    auto categories = getUsrConfigCategories();
     QJsonObject providerCategories;
     if (categories.contains(providerKey)) {
         providerCategories = categories[providerKey].toObject();
@@ -155,7 +134,7 @@ bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey
     return setUsrConfigCategories(categories);
 }
 
-bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object)
+bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object) const
 {
     /* object format
     {
@@ -171,24 +150,67 @@ bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const
         "installed_at": 1483658977219
     }
     */
-    QJsonObject installedItems = getUsrConfigInstalledItems();
+    auto installedItems = getUsrConfigInstalledItems();
     installedItems[itemKey] = object;
     return setUsrConfigInstalledItems(installedItems);
 }
 
-bool ConfigHandler::removeUsrConfigInstalledItemsItem(const QString &itemKey)
+bool ConfigHandler::removeUsrConfigInstalledItemsItem(const QString &itemKey) const
 {
-    QJsonObject installedItems = getUsrConfigInstalledItems();
+    auto installedItems = getUsrConfigInstalledItems();
     installedItems.remove(itemKey);
     return setUsrConfigInstalledItems(installedItems);
 }
 
-QString ConfigHandler::convertPathString(const QString &path)
+void ConfigHandler::importAppConfigApplication()
+{
+    appConfigApplication_ = appConfig_.get("application");
+}
+
+void ConfigHandler::importAppConfigInstallTypes()
+{
+    auto installTypes = appConfig_.get("install_types");
+    for (const auto &key : installTypes.keys()) {
+        auto installtype = installTypes[key].toObject();
+        installtype["destination"] = convertPathString(installtype["destination"].toString());
+        installtype["generic_destination"] = convertPathString(installtype["generic_destination"].toString());
+        installTypes[key] = installtype;
+    }
+    auto installTypesAlias = appConfig_.get("install_types_alias");
+    for (const auto &key : installTypesAlias.keys()) {
+        auto installTypeAlias = installTypesAlias[key].toObject();
+        auto baseKey = installTypeAlias["base"].toString();
+        if (installTypes.contains(baseKey)) {
+            auto installType = installTypes[baseKey].toObject();
+            installType["base"] = baseKey;
+            installType["name"] = installTypeAlias["name"].toString();
+            installTypes[key] = installType;
+        }
+    }
+    appConfigInstallTypes_ = installTypes;
+}
+
+QString ConfigHandler::convertPathString(const QString &path) const
 {
-    QString newPath = path;
+    auto newPath = path;
     if (newPath.contains("$HOME")) {
         newPath.replace("$HOME", qtlib::Dir::homePath());
     }
+    else if (newPath.contains("$XDG_DOCUMENTS_DIR")) {
+        newPath.replace("$XDG_DOCUMENTS_DIR", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
+    }
+    else if (newPath.contains("$XDG_DOWNLOAD_DIR")) {
+        newPath.replace("$XDG_DOWNLOAD_DIR", QStandardPaths::writableLocation(QStandardPaths::DownloadLocation));
+    }
+    else if (newPath.contains("$XDG_PICTURES_DIR")) {
+        newPath.replace("$XDG_PICTURES_DIR", QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
+    }
+    else if (newPath.contains("$XDG_MUSIC_DIR")) {
+        newPath.replace("$XDG_MUSIC_DIR", QStandardPaths::writableLocation(QStandardPaths::MusicLocation));
+    }
+    else if (newPath.contains("$XDG_VIDEOS_DIR")) {
+        newPath.replace("$XDG_VIDEOS_DIR", QStandardPaths::writableLocation(QStandardPaths::MoviesLocation));
+    }
     else if (newPath.contains("$XDG_DATA_HOME")) {
         newPath.replace("$XDG_DATA_HOME", qtlib::Dir::genericDataPath());
     }
diff --git a/app/src/handlers/confighandler.h b/app/src/handlers/confighandler.h
index ebaa18e14ec99f246c857d38e20fe7884309fe8f..bd44739d030aec2fe98cc653aed0e7c9f2632c12 100644
--- a/app/src/handlers/confighandler.h
+++ b/app/src/handlers/confighandler.h
@@ -10,31 +10,33 @@ class ConfigHandler : public QObject
     Q_OBJECT
 
 public:
-    explicit ConfigHandler(QObject *parent = 0);
+    explicit ConfigHandler(QObject *parent = nullptr);
 
 public slots:
-    QJsonObject getAppConfigApplication();
-    QJsonObject getAppConfigInstallTypes();
-
-    QJsonObject getUsrConfigApplication();
-    bool setUsrConfigApplication(const QJsonObject &object);
-    QJsonObject getUsrConfigProviders();
-    bool setUsrConfigProviders(const QJsonObject &object);
-    QJsonObject getUsrConfigCategories();
-    bool setUsrConfigCategories(const QJsonObject &object);
-    QJsonObject getUsrConfigInstalledItems();
-    bool setUsrConfigInstalledItems(const QJsonObject &object);
-
-    bool setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object);
-    bool removeUsrConfigProvidersProvider(const QString &providerKey);
-    bool setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object);
-    bool removeUsrConfigCategoriesProvider(const QString &providerKey);
-    bool setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType);
-    bool setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object);
-    bool removeUsrConfigInstalledItemsItem(const QString &itemKey);
+    QJsonObject getAppConfigApplication() const;
+    QJsonObject getAppConfigInstallTypes() const;
+
+    QJsonObject getUsrConfigApplication() const;
+    bool setUsrConfigApplication(const QJsonObject &object) const;
+    QJsonObject getUsrConfigProviders() const;
+    bool setUsrConfigProviders(const QJsonObject &object) const;
+    QJsonObject getUsrConfigCategories() const;
+    bool setUsrConfigCategories(const QJsonObject &object) const;
+    QJsonObject getUsrConfigInstalledItems() const;
+    bool setUsrConfigInstalledItems(const QJsonObject &object) const;
+
+    bool setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object) const;
+    bool removeUsrConfigProvidersProvider(const QString &providerKey) const;
+    bool setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object) const;
+    bool removeUsrConfigCategoriesProvider(const QString &providerKey) const;
+    bool setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType) const;
+    bool setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object) const;
+    bool removeUsrConfigInstalledItemsItem(const QString &itemKey) const;
 
 private:
-    QString convertPathString(const QString &path);
+    void importAppConfigApplication();
+    void importAppConfigInstallTypes();
+    QString convertPathString(const QString &path) const;
 
     qtlib::Config appConfig_;
     qtlib::Config usrConfig_;
diff --git a/app/src/handlers/itemhandler.cpp b/app/src/handlers/itemhandler.cpp
index 6fe9a26436fda3e3ea29055aaa1c9bf2c6abfb36..d8c731a4f564bfeb9aeea018c163f2051a325134 100644
--- a/app/src/handlers/itemhandler.cpp
+++ b/app/src/handlers/itemhandler.cpp
@@ -30,7 +30,7 @@ void ItemHandler::getItem(const QString &command, const QString &url, const QStr
                           const QString &providerKey, const QString &contentId)
 {
     // Use URL as unique key for metadata, network resource, and installed item
-    QString itemKey = url;
+    auto itemKey = url;
 
     QJsonObject metadata;
     metadata["command"] = command;
@@ -48,7 +48,7 @@ void ItemHandler::getItem(const QString &command, const QString &url, const QStr
     QJsonObject result;
     result["metadata"] = metadata;
 
-    QJsonObject itemMetadataSet = metadataSet();
+    auto itemMetadataSet = metadataSet();
 
     if (itemMetadataSet.contains(itemKey)) {
         result["status"] = QString("error_downloadstart");
@@ -60,7 +60,7 @@ void ItemHandler::getItem(const QString &command, const QString &url, const QStr
     itemMetadataSet[itemKey] = metadata;
     setMetadataSet(itemMetadataSet);
 
-    qtlib::NetworkResource *resource = new qtlib::NetworkResource(itemKey, QUrl(url), true, this);
+    auto *resource = new qtlib::NetworkResource(itemKey, QUrl(url), true, this);
     connect(resource, &qtlib::NetworkResource::downloadProgress, this, &ItemHandler::downloadProgress);
     connect(resource, &qtlib::NetworkResource::finished, this, &ItemHandler::networkResourceFinished);
     resource->get();
@@ -128,14 +128,14 @@ void ItemHandler::uninstall(const QString &itemKey)
     result["message"] = tr("Uninstalling");
     emit uninstallStarted(result);
 
-    QJsonObject installedItem = configHandler_->getUsrConfigInstalledItems()[itemKey].toObject();
-    QString installType = installedItem["install_type"].toString();
+    auto installedItem = configHandler_->getUsrConfigInstalledItems()[itemKey].toObject();
+    auto installType = installedItem["install_type"].toString();
 
     qtlib::Dir destDir;
 #ifdef QTLIB_UNIX
     destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString());
 
-    for (const QJsonValue &filename : installedItem["files"].toArray()) {
+    for (const auto &filename : installedItem["files"].toArray()) {
         QFileInfo fileInfo(destDir.path() + "/" + filename.toString());
 
         // plasmapkg: Installation process has should be saved plasmapkg into destination directory
@@ -180,7 +180,7 @@ void ItemHandler::uninstall(const QString &itemKey)
 #else
     destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["generic_destination"].toString());
 
-    for (const QJsonValue &filename : installedItem["files"].toArray()) {
+    for (const auto &filename : installedItem["files"].toArray()) {
         QFileInfo fileInfo(destDir.path() + "/" + filename.toString());
         if (fileInfo.isDir()) {
             qtlib::Dir(fileInfo.filePath()).remove();
@@ -200,10 +200,10 @@ void ItemHandler::uninstall(const QString &itemKey)
 
 void ItemHandler::networkResourceFinished(qtlib::NetworkResource *resource)
 {
-    QString itemKey = resource->id();
+    auto itemKey = resource->id();
 
-    QJsonObject itemMetadataSet = metadataSet();
-    QJsonObject metadata = itemMetadataSet[itemKey].toObject();
+    auto itemMetadataSet = metadataSet();
+    auto metadata = itemMetadataSet[itemKey].toObject();
 
     QJsonObject result;
     result["metadata"] = metadata;
@@ -238,10 +238,10 @@ void ItemHandler::setMetadataSet(const QJsonObject &metadataSet)
 
 void ItemHandler::saveDownloadedFile(qtlib::NetworkResource *resource)
 {
-    QString itemKey = resource->id();
+    auto itemKey = resource->id();
 
-    QJsonObject itemMetadataSet = metadataSet();
-    QJsonObject metadata = itemMetadataSet[itemKey].toObject();
+    auto itemMetadataSet = metadataSet();
+    auto metadata = itemMetadataSet[itemKey].toObject();
 
     itemMetadataSet.remove(itemKey);
     setMetadataSet(itemMetadataSet);
@@ -252,8 +252,8 @@ void ItemHandler::saveDownloadedFile(qtlib::NetworkResource *resource)
     result["message"] = tr("Saving");
     emit saveStarted(result);
 
-    QString filename = metadata["filename"].toString();
-    QString installType = metadata["install_type"].toString();
+    auto filename = metadata["filename"].toString();
+    auto installType = metadata["install_type"].toString();
 
     qtlib::Dir destDir(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString());
     destDir.make();
@@ -277,10 +277,10 @@ void ItemHandler::saveDownloadedFile(qtlib::NetworkResource *resource)
 void ItemHandler::installDownloadedFile(qtlib::NetworkResource *resource)
 {
     // Installation pre-process
-    QString itemKey = resource->id();
+    auto itemKey = resource->id();
 
-    QJsonObject itemMetadataSet = metadataSet();
-    QJsonObject metadata = itemMetadataSet[itemKey].toObject();
+    auto itemMetadataSet = metadataSet();
+    auto metadata = itemMetadataSet[itemKey].toObject();
 
     itemMetadataSet.remove(itemKey);
     setMetadataSet(itemMetadataSet);
@@ -291,10 +291,10 @@ void ItemHandler::installDownloadedFile(qtlib::NetworkResource *resource)
     result["message"] = tr("Saving");
     emit saveStarted(result);
 
-    QString filename = metadata["filename"].toString();
-    QString installType = metadata["install_type"].toString();
+    auto filename = metadata["filename"].toString();
+    auto installType = metadata["install_type"].toString();
 
-    QString prefix = configHandler_->getAppConfigApplication()["id"].toString() + "_" + filename;
+    auto prefix = configHandler_->getAppConfigApplication()["id"].toString() + "_" + filename;
     qtlib::Dir tempDir(qtlib::Dir::tempPath() + "/" + prefix);
     tempDir.make();
     qtlib::Dir tempDestDir(tempDir.path() + "/dest");
@@ -392,7 +392,7 @@ void ItemHandler::installDownloadedFile(qtlib::NetworkResource *resource)
     destDir.make();
 
     QJsonArray installedFiles;
-    for (const QFileInfo &fileInfo : tempDestDir.list()) {
+    for (const auto &fileInfo : tempDestDir.list()) {
         installedFiles.append(QJsonValue(fileInfo.fileName()));
         if (fileInfo.isDir()) {
             qtlib::Dir(fileInfo.filePath()).move(destDir.path() + "/" + fileInfo.fileName());
diff --git a/app/src/handlers/itemhandler.h b/app/src/handlers/itemhandler.h
index 5f378c4dbc385704a2a7a5c69890b8b585e23f66..a780a7b1e7415c49f5d7de36236293ed7fc5221a 100644
--- a/app/src/handlers/itemhandler.h
+++ b/app/src/handlers/itemhandler.h
@@ -14,7 +14,7 @@ class ItemHandler : public QObject
     Q_OBJECT
 
 public:
-    explicit ItemHandler(ConfigHandler *configHandler, QObject *parent = 0);
+    explicit ItemHandler(ConfigHandler *configHandler, QObject *parent = nullptr);
 
 signals:
     void metadataSetChanged();
diff --git a/app/src/handlers/ocsapihandler.cpp b/app/src/handlers/ocsapihandler.cpp
index 7a18191cce39f76aaad5159befb84ba7aa3087dc..eccfdd7fb6475adbd1773aea435db2481d46fb56 100644
--- a/app/src/handlers/ocsapihandler.cpp
+++ b/app/src/handlers/ocsapihandler.cpp
@@ -11,15 +11,15 @@ OcsApiHandler::OcsApiHandler(ConfigHandler *configHandler, QObject *parent)
     : QObject(parent), configHandler_(configHandler)
 {}
 
-bool OcsApiHandler::addProviders(const QString &providerFileUrl)
+bool OcsApiHandler::addProviders(const QString &providerFileUrl) const
 {
-    QJsonArray providers = qtlib::OcsApi::getProviderFile(QUrl(providerFileUrl));
+    auto providers = qtlib::OcsApi::getProviderFile(QUrl(providerFileUrl));
     if (!providers.isEmpty()) {
-        for (const QJsonValue &providerValue : providers) {
-            QJsonObject provider = providerValue.toObject();
+        for (const auto &providerValue : providers) {
+            auto provider = providerValue.toObject();
             if (provider.contains("location")) {
                 // Use location (API base URL) as unique key
-                QString providerKey = provider["location"].toString();
+                auto providerKey = provider["location"].toString();
                 if (configHandler_->setUsrConfigProvidersProvider(providerKey, provider)) {
                     updateCategories(providerKey, true);
                 }
@@ -30,7 +30,7 @@ bool OcsApiHandler::addProviders(const QString &providerFileUrl)
     return false;
 }
 
-bool OcsApiHandler::removeProvider(const QString &providerKey)
+bool OcsApiHandler::removeProvider(const QString &providerKey) const
 {
     if (configHandler_->removeUsrConfigProvidersProvider(providerKey)) {
         configHandler_->removeUsrConfigCategoriesProvider(providerKey);
@@ -39,11 +39,11 @@ bool OcsApiHandler::removeProvider(const QString &providerKey)
     return false;
 }
 
-bool OcsApiHandler::updateAllCategories(bool force)
+bool OcsApiHandler::updateAllCategories(bool force) const
 {
-    QJsonObject providers = configHandler_->getUsrConfigProviders();
+    auto providers = configHandler_->getUsrConfigProviders();
     if (!providers.isEmpty()) {
-        for (const QString &providerKey : providers.keys()) {
+        for (const auto &providerKey : providers.keys()) {
             updateCategories(providerKey, force);
         }
         return true;
@@ -51,16 +51,16 @@ bool OcsApiHandler::updateAllCategories(bool force)
     return false;
 }
 
-bool OcsApiHandler::updateCategories(const QString &providerKey, bool force)
+bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) const
 {
-    QJsonObject providers = configHandler_->getUsrConfigProviders();
+    auto providers = configHandler_->getUsrConfigProviders();
 
     if (!providers.contains(providerKey)) {
         return false;
     }
 
-    QString baseUrl = providers[providerKey].toObject()["location"].toString();
-    QJsonObject response = qtlib::OcsApi(baseUrl, QUrl(baseUrl)).getContentCategories();
+    auto baseUrl = providers[providerKey].toObject()["location"].toString();
+    auto response = qtlib::OcsApi(baseUrl, QUrl(baseUrl)).getContentCategories();
 
     if (!response.contains("data")) {
         return false;
@@ -69,7 +69,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force)
     // Data type variation workaround, convert object to array
     QJsonArray responseData;
     if (response["data"].isObject()) {
-        for (const QJsonValue &dataValue : response["data"].toObject()) {
+        for (const auto &dataValue : response["data"].toObject()) {
             responseData.append(dataValue);
         }
     }
@@ -77,17 +77,17 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force)
         responseData = response["data"].toArray();
     }
 
-    QJsonObject installTypes = configHandler_->getAppConfigInstallTypes();
+    auto installTypes = configHandler_->getAppConfigInstallTypes();
 
-    QJsonObject categories = configHandler_->getUsrConfigCategories();
+    auto categories = configHandler_->getUsrConfigCategories();
     QJsonObject providerCategories;
     if (!force && categories.contains(providerKey)) {
         providerCategories = categories[providerKey].toObject();
     }
 
     QJsonObject newProviderCategories;
-    for (const QJsonValue &dataValue : responseData) {
-        QJsonObject data = dataValue.toObject();
+    for (const auto &dataValue : responseData) {
+        auto data = dataValue.toObject();
 
         // Data type variation workaround, convert int to string
         QString id;
@@ -99,9 +99,9 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force)
         }
 
         // Use category id as unique key
-        QString categoryKey = id;
+        auto categoryKey = id;
 
-        QString name = data["name"].toString();
+        auto name = data["name"].toString();
         // display_name: Not compatible to legacy OCS-API
         if (data.contains("display_name") && data["display_name"].toString() != "") {
             name = data["display_name"].toString();
@@ -113,7 +113,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force)
             parentId = data["parent_id"].toString();
         }
 
-        QString installType = configHandler_->getAppConfigApplication()["options"].toObject()["default_install_type"].toString();
+        auto installType = configHandler_->getAppConfigApplication()["options"].toObject()["default_install_type"].toString();
         if (!force && providerCategories.contains(categoryKey)) {
             installType = providerCategories[categoryKey].toObject()["install_type"].toString();
         }
@@ -136,7 +136,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force)
 
 QJsonObject OcsApiHandler::getContents(const QString &providerKeys, const QString &categoryKeys,
                                        const QString &xdgTypes, const QString &packageTypes,
-                                       const QString &search, const QString &sortmode, int pagesize, int page)
+                                       const QString &search, const QString &sortmode, int pagesize, int page) const
 {
     QJsonObject responseSet;
 
@@ -150,23 +150,23 @@ QJsonObject OcsApiHandler::getContents(const QString &providerKeys, const QStrin
         categoryKeyList = categoryKeys.split(",");
     }
 
-    QJsonObject providers = configHandler_->getUsrConfigProviders();
-    QJsonObject categories = configHandler_->getUsrConfigCategories();
+    auto providers = configHandler_->getUsrConfigProviders();
+    auto categories = configHandler_->getUsrConfigCategories();
 
-    for (const QString &providerKey : providers.keys()) {
+    for (const auto &providerKey : providers.keys()) {
         if (!providerKeyList.isEmpty() && !providerKeyList.contains(providerKey)) {
             continue;
         }
         QStringList categoryIdList;
-        QJsonObject providerCategories = categories[providerKey].toObject();
-        for (const QString &categoryKey : providerCategories.keys()) {
+        auto providerCategories = categories[providerKey].toObject();
+        for (const auto &categoryKey : providerCategories.keys()) {
             if (!categoryKeyList.isEmpty() && !categoryKeyList.contains(categoryKey)) {
                 continue;
             }
             categoryIdList.append(providerCategories[categoryKey].toObject()["id"].toString());
         }
         if (!categoryIdList.isEmpty()) {
-            QString baseUrl = providers[providerKey].toObject()["location"].toString();
+            auto baseUrl = providers[providerKey].toObject()["location"].toString();
             QUrlQuery query;
             // categories: Comma-separated list is not compatible to legacy OCS-API
             //query.addQueryItem("categories", categoryIdList.join(","));
@@ -192,12 +192,12 @@ QJsonObject OcsApiHandler::getContents(const QString &providerKeys, const QStrin
     return responseSet;
 }
 
-QJsonObject OcsApiHandler::getContent(const QString &providerKey, const QString &contentId)
+QJsonObject OcsApiHandler::getContent(const QString &providerKey, const QString &contentId) const
 {
     QJsonObject response;
-    QJsonObject providers = configHandler_->getUsrConfigProviders();
+    auto providers = configHandler_->getUsrConfigProviders();
     if (providers.contains(providerKey)) {
-        QString baseUrl = providers[providerKey].toObject()["location"].toString();
+        auto baseUrl = providers[providerKey].toObject()["location"].toString();
         response = qtlib::OcsApi(baseUrl, QUrl(baseUrl)).getContentData(contentId);
     }
     return response;
diff --git a/app/src/handlers/ocsapihandler.h b/app/src/handlers/ocsapihandler.h
index 4e4d3095e50f985c7c39f392eaccc85bdc719e5a..9e59f9ec51bf0d6924d76e5e6df773656cc313ff 100644
--- a/app/src/handlers/ocsapihandler.h
+++ b/app/src/handlers/ocsapihandler.h
@@ -10,17 +10,17 @@ class OcsApiHandler : public QObject
     Q_OBJECT
 
 public:
-    explicit OcsApiHandler(ConfigHandler *configHandler, QObject *parent = 0);
+    explicit OcsApiHandler(ConfigHandler *configHandler, QObject *parent = nullptr);
 
 public slots:
-    bool addProviders(const QString &providerFileUrl);
-    bool removeProvider(const QString &providerKey);
-    bool updateAllCategories(bool force = false);
-    bool updateCategories(const QString &providerKey, bool force = false);
+    bool addProviders(const QString &providerFileUrl) const;
+    bool removeProvider(const QString &providerKey) const;
+    bool updateAllCategories(bool force = false) const;
+    bool updateCategories(const QString &providerKey, bool force = false) const;
     QJsonObject getContents(const QString &providerKeys = "", const QString &categoryKeys = "",
                             const QString &xdgTypes = "", const QString &packageTypes = "",
-                            const QString &search = "", const QString &sortmode = "new", int pagesize = 25, int page = 0);
-    QJsonObject getContent(const QString &providerKey, const QString &contentId);
+                            const QString &search = "", const QString &sortmode = "new", int pagesize = 25, int page = 0) const;
+    QJsonObject getContent(const QString &providerKey, const QString &contentId) const;
 
 private:
     ConfigHandler *configHandler_;
diff --git a/app/src/handlers/systemhandler.cpp b/app/src/handlers/systemhandler.cpp
index 2230d8d3c6352e192f27711674b0d04bab382531..13ff4a61984b4d915f347993c12d5fd55811492e 100644
--- a/app/src/handlers/systemhandler.cpp
+++ b/app/src/handlers/systemhandler.cpp
@@ -20,7 +20,7 @@ SystemHandler::SystemHandler(QObject *parent)
     : QObject(parent)
 {}
 
-bool SystemHandler::isUnix()
+bool SystemHandler::isUnix() const
 {
 #ifdef QTLIB_UNIX
     return true;
@@ -28,7 +28,7 @@ bool SystemHandler::isUnix()
     return false;
 }
 
-bool SystemHandler::isMobileDevice()
+bool SystemHandler::isMobileDevice() const
 {
 #if defined(APP_MOBILE)
     return true;
@@ -40,9 +40,9 @@ bool SystemHandler::isMobileDevice()
     return false;
 }
 
-bool SystemHandler::openUrl(const QString &url)
+bool SystemHandler::openUrl(const QString &url) const
 {
-    QString path = url;
+    auto path = url;
     path.replace("file://localhost", "", Qt::CaseInsensitive);
     path.replace("file://", "", Qt::CaseInsensitive);
 
@@ -62,7 +62,7 @@ bool SystemHandler::openUrl(const QString &url)
     return QDesktopServices::openUrl(QUrl(url));
 }
 
-QString SystemHandler::desktopEnvironment()
+QString SystemHandler::desktopEnvironment() const
 {
     QString desktop = "unknown";
     QString currentDesktop = "";
@@ -89,9 +89,9 @@ QString SystemHandler::desktopEnvironment()
     return desktop;
 }
 
-bool SystemHandler::isApplicableType(const QString &installType)
+bool SystemHandler::isApplicableType(const QString &installType) const
 {
-    QString desktop = desktopEnvironment();
+    auto desktop = desktopEnvironment();
 
     if (installType == "wallpapers"
             && (desktop == "kde" || desktop == "gnome" || desktop == "xfce")) {
@@ -114,7 +114,7 @@ bool SystemHandler::isApplicableType(const QString &installType)
 }
 
 #ifdef QTLIB_UNIX
-bool SystemHandler::applyFile(const QString &path, const QString &installType)
+bool SystemHandler::applyFile(const QString &path, const QString &installType) const
 {
     if (QFileInfo::exists(path) && isApplicableType(installType)) {
         if (installType == "wallpapers") {
@@ -137,13 +137,13 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType)
 #endif
 
 #ifdef QTLIB_UNIX
-bool SystemHandler::applyWallpaper(const QString &path)
+bool SystemHandler::applyWallpaper(const QString &path) const
 {
-    QString desktop = desktopEnvironment();
+    auto desktop = desktopEnvironment();
 
     if (desktop == "kde") {
         // plasma5.6+
-        QDBusMessage message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript");
+        auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript");
         QVariantList arguments;
 
         QString script;
@@ -158,7 +158,7 @@ bool SystemHandler::applyWallpaper(const QString &path)
         arguments << QVariant(script);
         message.setArguments(arguments);
 
-        QDBusMessage reply = QDBusConnection::sessionBus().call(message);
+        auto reply = QDBusConnection::sessionBus().call(message);
 
         if (reply.type() == QDBusMessage::ErrorMessage) {
             qWarning() << reply.errorMessage();
@@ -167,16 +167,15 @@ bool SystemHandler::applyWallpaper(const QString &path)
         return true;
     }
     else if (desktop == "gnome") {
-        QStringList arguments;
         // gnome3
-        arguments << "set" << "org.gnome.desktop.background" << "picture-uri" << "file://" + path;
+        QStringList arguments{"set", "org.gnome.desktop.background", "picture-uri", "file://" + path};
         return QProcess::startDetached("gsettings", arguments);
         // gnome2
-        //arguments << "--type=string" << "--set" << "/desktop/gnome/background/picture_filename" << path;
+        //QStringList arguments{"--type=string", "--set", "/desktop/gnome/background/picture_filename", path};
         //return QProcess::startDetached("gconftool-2", arguments);
     }
     else if (desktop == "xfce") {
-        QDBusMessage message = QDBusMessage::createMethodCall("org.xfce.Xfconf", "/org/xfce/Xfconf", "org.xfce.Xfconf", "SetProperty");
+        auto message = QDBusMessage::createMethodCall("org.xfce.Xfconf", "/org/xfce/Xfconf", "org.xfce.Xfconf", "SetProperty");
         QVariantList arguments;
 
         QString channelValue = "xfce4-desktop";
@@ -187,7 +186,7 @@ bool SystemHandler::applyWallpaper(const QString &path)
         arguments << QVariant(channelValue) << QVariant(propertyValue) << QVariant::fromValue(valueValue);
         message.setArguments(arguments);
 
-        QDBusMessage reply = QDBusConnection::sessionBus().call(message);
+        auto reply = QDBusConnection::sessionBus().call(message);
 
         if (reply.type() == QDBusMessage::ErrorMessage) {
             qWarning() << reply.errorMessage();
@@ -198,11 +197,11 @@ bool SystemHandler::applyWallpaper(const QString &path)
     return false;
 }
 
-bool SystemHandler::applyIcon(const QString &path)
+bool SystemHandler::applyIcon(const QString &path) const
 {
     qDebug() << path;
 
-    QString desktop = desktopEnvironment();
+    auto desktop = desktopEnvironment();
 
     if (desktop == "kde") {
     }
@@ -213,11 +212,11 @@ bool SystemHandler::applyIcon(const QString &path)
     return false;
 }
 
-bool SystemHandler::applyCursor(const QString &path)
+bool SystemHandler::applyCursor(const QString &path) const
 {
     qDebug() << path;
 
-    QString desktop = desktopEnvironment();
+    auto desktop = desktopEnvironment();
 
     if (desktop == "kde") {
     }
@@ -228,11 +227,11 @@ bool SystemHandler::applyCursor(const QString &path)
     return false;
 }
 
-bool SystemHandler::applyWindowTheme(const QString &path)
+bool SystemHandler::applyWindowTheme(const QString &path) const
 {
     qDebug() << path;
 
-    QString desktop = desktopEnvironment();
+    auto desktop = desktopEnvironment();
 
     if (desktop == "kde") {
     }
diff --git a/app/src/handlers/systemhandler.h b/app/src/handlers/systemhandler.h
index f291c8a89551809a8c0c0ab1d573906ff62405e0..b4697833b8a86be062fa31a0dbfe1e7132818153 100644
--- a/app/src/handlers/systemhandler.h
+++ b/app/src/handlers/systemhandler.h
@@ -7,25 +7,25 @@ class SystemHandler : public QObject
     Q_OBJECT
 
 public:
-    explicit SystemHandler(QObject *parent = 0);
+    explicit SystemHandler(QObject *parent = nullptr);
 
 public slots:
-    bool isUnix();
-    bool isMobileDevice();
-    bool openUrl(const QString &url);
+    bool isUnix() const;
+    bool isMobileDevice() const;
+    bool openUrl(const QString &url) const;
 
-    QString desktopEnvironment();
-    bool isApplicableType(const QString &installType);
+    QString desktopEnvironment() const;
+    bool isApplicableType(const QString &installType) const;
 
 #ifdef QTLIB_UNIX
-    bool applyFile(const QString &path, const QString &installType);
+    bool applyFile(const QString &path, const QString &installType) const;
 #endif
 
 private:
 #ifdef QTLIB_UNIX
-    bool applyWallpaper(const QString &path);
-    bool applyIcon(const QString &path);
-    bool applyCursor(const QString &path);
-    bool applyWindowTheme(const QString &path);
+    bool applyWallpaper(const QString &path) const;
+    bool applyIcon(const QString &path) const;
+    bool applyCursor(const QString &path) const;
+    bool applyWindowTheme(const QString &path) const;
 #endif
 };
diff --git a/app/src/main.cpp b/app/src/main.cpp
index 15bdaf5714e60d3df7f6697d3fcc068abcebafe4..f1df5336d391c7b127974af9c0117fd10a7559d9 100644
--- a/app/src/main.cpp
+++ b/app/src/main.cpp
@@ -15,8 +15,8 @@ int main(int argc, char *argv[])
     // Init
     QGuiApplication app(argc, argv); // This is backend program, but need GUI module
 
-    ConfigHandler *configHandler = new ConfigHandler();
-    QJsonObject appConfigApplication = configHandler->getAppConfigApplication();
+    auto *configHandler = new ConfigHandler();
+    auto appConfigApplication = configHandler->getAppConfigApplication();
 
     app.setApplicationName(appConfigApplication["name"].toString());
     app.setApplicationVersion(appConfigApplication["version"].toString());
@@ -42,10 +42,10 @@ int main(int argc, char *argv[])
 
     clParser.process(app);
 
-    int port = clParser.value(clOptionPort).toInt();
+    auto port = clParser.value(clOptionPort).toInt();
 
     // Setup websocket server
-    WebSocketServer *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app);
+    auto *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app);
     QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit);
 
     if (wsServer->start()) {
diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp
index 672bb7398abcadcfcdfc9887812f4eb2c56b0dc7..14e6dc320c8a7eaa222502f671a4dc345ad49852 100644
--- a/app/src/websockets/websocketserver.cpp
+++ b/app/src/websockets/websocketserver.cpp
@@ -54,7 +54,7 @@ void WebSocketServer::stop()
     wsServer_->close();
 }
 
-bool WebSocketServer::isError()
+bool WebSocketServer::isError() const
 {
     if (wsServer_->error() != QWebSocketProtocol::CloseCodeNormal) {
         return true;
@@ -62,19 +62,19 @@ bool WebSocketServer::isError()
     return false;
 }
 
-QString WebSocketServer::errorString()
+QString WebSocketServer::errorString() const
 {
     return wsServer_->errorString();
 }
 
-QUrl WebSocketServer::serverUrl()
+QUrl WebSocketServer::serverUrl() const
 {
     return wsServer_->serverUrl();
 }
 
 void WebSocketServer::wsNewConnection()
 {
-    QWebSocket *wsClient = wsServer_->nextPendingConnection();
+    auto *wsClient = wsServer_->nextPendingConnection();
     connect(wsClient, &QWebSocket::disconnected, this, &WebSocketServer::wsDisconnected);
     connect(wsClient, &QWebSocket::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived);
     connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived);
@@ -83,7 +83,7 @@ void WebSocketServer::wsNewConnection()
 
 void WebSocketServer::wsDisconnected()
 {
-    QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
+    auto *wsClient = qobject_cast<QWebSocket *>(sender());
     if (wsClient) {
         wsClients_.removeAll(wsClient);
         wsClient->deleteLater();
@@ -92,11 +92,11 @@ void WebSocketServer::wsDisconnected()
 
 void WebSocketServer::wsTextMessageReceived(const QString &message)
 {
-    QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
+    auto *wsClient = qobject_cast<QWebSocket *>(sender());
     if (wsClient) {
         qtlib::Json json(message.toUtf8());
         if (json.isObject()) {
-            QJsonObject object = json.toObject();
+            auto object = json.toObject();
             receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray());
         }
     }
@@ -104,11 +104,11 @@ void WebSocketServer::wsTextMessageReceived(const QString &message)
 
 void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message)
 {
-    QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender());
+    auto *wsClient = qobject_cast<QWebSocket *>(sender());
     if (wsClient) {
         qtlib::Json json(message);
         if (json.isObject()) {
-            QJsonObject object = json.toObject();
+            auto object = json.toObject();
             receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray());
         }
     }
@@ -343,10 +343,10 @@ void WebSocketServer::sendMessage(const QString &id, const QString &func, const
     object["func"] = func;
     object["data"] = data;
 
-    QByteArray binaryMessage = qtlib::Json(object).toJson();
-    QString textMessage = QString::fromUtf8(binaryMessage);
+    auto binaryMessage = qtlib::Json(object).toJson();
+    auto textMessage = QString::fromUtf8(binaryMessage);
 
-    for (QWebSocket *wsClient : wsClients_) {
+    for (auto *wsClient : wsClients_) {
         wsClient->sendTextMessage(textMessage);
         //wsClient->sendBinaryMessage(binaryMessage);
     }
diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h
index 6bcebf7c28fb7d6ee4987b04ff3a89ab378f0eff..350903a064f95bd72cbf2d98118eb8cb9d611fa2 100644
--- a/app/src/websockets/websocketserver.h
+++ b/app/src/websockets/websocketserver.h
@@ -18,7 +18,7 @@ class WebSocketServer : public QObject
     Q_OBJECT
 
 public:
-    explicit WebSocketServer(ConfigHandler *configHandler, const QString &serverName = "WebSocketServer", quint16 serverPort = 0, QObject *parent = 0);
+    explicit WebSocketServer(ConfigHandler *configHandler, const QString &serverName = "WebSocketServer", quint16 serverPort = 0, QObject *parent = nullptr);
     ~WebSocketServer();
 
 signals:
@@ -28,9 +28,9 @@ signals:
 public slots:
     bool start();
     void stop();
-    bool isError();
-    QString errorString();
-    QUrl serverUrl();
+    bool isError() const;
+    QString errorString() const;
+    QUrl serverUrl() const;
 
 private slots:
     void wsNewConnection();
diff --git a/ocs-manager.pro b/ocs-manager.pro
index 18d40c3b42b72d7ffa5a6383a0972d15984d101f..0a4378a294bc01de10736bdea736ce6750475baa 100644
--- a/ocs-manager.pro
+++ b/ocs-manager.pro
@@ -10,9 +10,7 @@ TARGET = ocs-manager
 
 TEMPLATE = app
 
-CONFIG += \
-    c++11 \
-    console
+CONFIG += console
 
 CONFIG -= app_bundle
 
diff --git a/scripts/import.sh b/scripts/import.sh
index 50992b4f529fc2ae523927a50bae7cfcca4b9d6f..8fd990fb00c40f44aa290fc4138b94f14e0a6236 100644
--- a/scripts/import.sh
+++ b/scripts/import.sh
@@ -7,5 +7,5 @@
 PROJDIR="$(cd "$(dirname "${0}")/../" && pwd)"
 
 if [ ! -d "${PROJDIR}/lib/qtlib" ]; then
-    git clone https://github.com/akiraohgaki/qtlib.git -b release-0.1.0 --single-branch --depth=1 "${PROJDIR}/lib/qtlib"
+    git clone https://github.com/akiraohgaki/qtlib.git -b release-0.2.0 --single-branch --depth=1 "${PROJDIR}/lib/qtlib"
 fi