diff --git a/app/src/handlers/systemhandler.cpp b/app/src/handlers/systemhandler.cpp
index cb1f9135ad1f53eb9b66afcdd498aed969fd76df..64540080ff06be4992a161e822694761956c2413 100644
--- a/app/src/handlers/systemhandler.cpp
+++ b/app/src/handlers/systemhandler.cpp
@@ -110,7 +110,11 @@ bool SystemHandler::isApplicableType(const QString &installType) const
                         << "gnome_shell_themes";
     }
     else if (desktop == "xfce") {
-        applicableTypes << "wallpapers";
+        applicableTypes << "wallpapers"
+                        << "icons"
+                        << "cursors"
+                        << "gtk2_themes"
+                        << "xfwm4_themes";
     }
 
     return applicableTypes.contains(installType);
@@ -121,22 +125,23 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c
 {
     if (QFileInfo::exists(path) && isApplicableType(installType)) {
         auto desktop = desktopEnvironment();
+        auto themeName = QFileInfo(path).fileName();
 
         if (desktop == "kde") {
             if (installType == "wallpapers") {
                 return applyKdeWallpaper(path);
             }
             else if (installType == "icons") {
-                return applyKdeIcon(path);
+                return applyKdeIcon(themeName);
             }
             else if (installType == "cursors") {
-                return applyKdeCursor(path);
+                return applyKdeCursor(themeName);
             }
             else if (installType == "plasma5_desktopthemes") {
-                return applyKdePlasmaDesktoptheme(path);
+                return applyKdePlasmaDesktoptheme(themeName);
             }
             else if (installType == "aurorae_themes") {
-                return applyKdeAuroraeTheme(path);
+                return applyKdeAuroraeTheme(themeName);
             }
         }
         else if (desktop == "gnome") {
@@ -144,22 +149,34 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c
                 return applyGnomeWallpaper(path);
             }
             else if (installType == "icons") {
-                return applyGnomeIcon(path);
+                return applyGnomeIcon(themeName);
             }
             else if (installType == "cursors") {
-                return applyGnomeCursor(path);
+                return applyGnomeCursor(themeName);
             }
             else if (installType == "gtk3_themes") {
-                return applyGnomeGtk3Theme(path);
+                return applyGnomeGtk3Theme(themeName);
             }
             else if (installType == "gnome_shell_themes") {
-                return applyGnomeGnomeShellTheme(path);
+                return applyGnomeGnomeShellTheme(themeName);
             }
         }
         else if (desktop == "xfce") {
             if (installType == "wallpapers") {
                 return applyXfceWallpaper(path);
             }
+            else if (installType == "icons") {
+                return applyXfceIcon(themeName);
+            }
+            else if (installType == "cursors") {
+                return applyXfceCursor(themeName);
+            }
+            else if (installType == "gtk2_themes") {
+                return applyXfceGtk2Theme(themeName);
+            }
+            else if (installType == "xfwm4_themes") {
+                return applyXfceXfwm4Theme(themeName);
+            }
         }
     }
 
@@ -168,7 +185,7 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c
 #endif
 
 #ifdef QTLIB_UNIX
-bool SystemHandler::evaluateScriptWithPlasmaShell(const QString &script) const
+bool SystemHandler::setConfigWithPlasmaShell(const QString &script) const
 {
     auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript");
     message.setArguments(QVariantList() << QVariant(script));
@@ -192,62 +209,52 @@ bool SystemHandler::applyKdeWallpaper(const QString &path) const
         << "d.writeConfig('Image', 'file://" + path + "');"
         << "}";
 
-    return evaluateScriptWithPlasmaShell(script);
+    return setConfigWithPlasmaShell(script);
 }
 
-bool SystemHandler::applyKdeIcon(const QString &path) const
+bool SystemHandler::applyKdeIcon(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-
     QString script;
     QTextStream out(&script);
     out << "var c = ConfigFile('kdeglobals');"
         << "c.group = 'Icons';"
         << "c.writeEntry('Theme', '" + themeName + "');";
 
-    if (evaluateScriptWithPlasmaShell(script)) {
-        QProcess::startDetached("kquitapp5 plasmashell");
-        QProcess::startDetached("kstart5 plasmashell");
+    if (setConfigWithPlasmaShell(script)) {
+        QProcess::startDetached("kquitapp5 plasmashell && kstart5 plasmashell");
         return true;
     }
     return false;
 }
 
-bool SystemHandler::applyKdeCursor(const QString &path) const
+bool SystemHandler::applyKdeCursor(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-
     QString script;
     QTextStream out(&script);
     out << "var c = ConfigFile('kcminputrc');"
         << "c.group = 'Mouse';"
         << "c.writeEntry('cursorTheme', '" + themeName + "');";
 
-    return evaluateScriptWithPlasmaShell(script);
+    return setConfigWithPlasmaShell(script);
 }
 
-bool SystemHandler::applyKdePlasmaDesktoptheme(const QString &path) const
+bool SystemHandler::applyKdePlasmaDesktoptheme(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-
     QString script;
     QTextStream out(&script);
     out << "var c = ConfigFile('plasmarc');"
         << "c.group = 'Theme';"
         << "c.writeEntry('name', '" + themeName + "');";
 
-    if (evaluateScriptWithPlasmaShell(script)) {
-        QProcess::startDetached("kquitapp5 plasmashell");
-        QProcess::startDetached("kstart5 plasmashell");
+    if (setConfigWithPlasmaShell(script)) {
+        QProcess::startDetached("kquitapp5 plasmashell && kstart5 plasmashell");
         return true;
     }
     return false;
 }
 
-bool SystemHandler::applyKdeAuroraeTheme(const QString &path) const
+bool SystemHandler::applyKdeAuroraeTheme(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-
     QString script;
     QTextStream out(&script);
     out << "var c = ConfigFile('kwinrc');"
@@ -255,57 +262,48 @@ bool SystemHandler::applyKdeAuroraeTheme(const QString &path) const
         << "c.writeEntry('library', 'org.kde.kwin.aurorae');"
         << "c.writeEntry('theme', '__aurorae__svg__" + themeName + "');";
 
-    if (evaluateScriptWithPlasmaShell(script)) {
-        auto refreshMessage = QDBusMessage::createMethodCall("org.kde.KWin", "/KWin", "org.kde.KWin", "reconfigure");
-        QDBusConnection::sessionBus().call(refreshMessage);
+    if (setConfigWithPlasmaShell(script)) {
+        auto message = QDBusMessage::createMethodCall("org.kde.KWin", "/KWin", "org.kde.KWin", "reconfigure");
+        QDBusConnection::sessionBus().call(message);
         return true;
     }
     return false;
 }
 
-bool SystemHandler::applyGnomeWallpaper(const QString &path) const
+bool SystemHandler::setConfigWithGsettings(const QString &schema, const QString &key, const QString &value) const
 {
-    QStringList arguments{"set", "org.gnome.desktop.background", "picture-uri", "file://" + path};
-    return QProcess::startDetached("gsettings", arguments);
+    return QProcess::startDetached("gsettings", QStringList() << "set" << schema << key << value);
 }
 
-bool SystemHandler::applyGnomeIcon(const QString &path) const
+bool SystemHandler::applyGnomeWallpaper(const QString &path) const
 {
-    auto themeName = QFileInfo(path).fileName();
-    QStringList arguments{"set", "org.gnome.desktop.interface", "icon-theme", themeName};
-    return QProcess::startDetached("gsettings", arguments);
+    return setConfigWithGsettings("org.gnome.desktop.background", "picture-uri", "file://" + path);
 }
 
-bool SystemHandler::applyGnomeCursor(const QString &path) const
+bool SystemHandler::applyGnomeIcon(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-    QStringList arguments{"set", "org.gnome.desktop.interface", "cursor-theme", themeName};
-    return QProcess::startDetached("gsettings", arguments);
+    return setConfigWithGsettings("org.gnome.desktop.interface", "icon-theme", themeName);
 }
 
-bool SystemHandler::applyGnomeGtk3Theme(const QString &path) const
+bool SystemHandler::applyGnomeCursor(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-    QStringList arguments{"set", "org.gnome.desktop.interface", "gtk-theme", themeName};
-    return QProcess::startDetached("gsettings", arguments);
+    return setConfigWithGsettings("org.gnome.desktop.interface", "cursor-theme", themeName);
 }
 
-bool SystemHandler::applyGnomeGnomeShellTheme(const QString &path) const
+bool SystemHandler::applyGnomeGtk3Theme(const QString &themeName) const
 {
-    auto themeName = QFileInfo(path).fileName();
-    QStringList arguments{"set", "org.gnome.shell.extensions.user-theme", "name", themeName};
-    return QProcess::startDetached("gsettings", arguments);
+    return setConfigWithGsettings("org.gnome.desktop.interface", "gtk-theme", themeName);
 }
 
-bool SystemHandler::applyXfceWallpaper(const QString &path) const
+bool SystemHandler::applyGnomeGnomeShellTheme(const QString &themeName) const
 {
-    QString channelValue = "xfce4-desktop";
-    //QString propertyValue = "/backdrop/screen0/monitor0/image-path";
-    QString propertyValue = "/backdrop/screen0/monitor0/workspace0/last-image";
-    QDBusVariant valueValue(path);
+    return setConfigWithGsettings("org.gnome.shell.extensions.user-theme", "name", themeName);
+}
 
+bool SystemHandler::setConfigWithXfconf(const QString &channel, const QString &property, const QString &value) const
+{
     auto message = QDBusMessage::createMethodCall("org.xfce.Xfconf", "/org/xfce/Xfconf", "org.xfce.Xfconf", "SetProperty");
-    message.setArguments(QVariantList() << QVariant(channelValue) << QVariant(propertyValue) << QVariant::fromValue(valueValue));
+    message.setArguments(QVariantList() << QVariant(channel) << QVariant(property) << QVariant::fromValue(QDBusVariant(value)));
     auto reply = QDBusConnection::sessionBus().call(message);
 
     if (reply.type() == QDBusMessage::ErrorMessage) {
@@ -314,4 +312,29 @@ bool SystemHandler::applyXfceWallpaper(const QString &path) const
     }
     return true;
 }
+
+bool SystemHandler::applyXfceWallpaper(const QString &path) const
+{
+    return setConfigWithXfconf("xfce4-desktop", "/backdrop/screen0/monitor0/workspace0/last-image", path);
+}
+
+bool SystemHandler::applyXfceIcon(const QString &themeName) const
+{
+    return setConfigWithXfconf("xsettings", "/Net/IconThemeName", themeName);
+}
+
+bool SystemHandler::applyXfceCursor(const QString &themeName) const
+{
+    return setConfigWithXfconf("xsettings", "/Gtk/CursorThemeName", themeName);
+}
+
+bool SystemHandler::applyXfceGtk2Theme(const QString &themeName) const
+{
+    return setConfigWithXfconf("xsettings", "/Net/ThemeName", themeName);
+}
+
+bool SystemHandler::applyXfceXfwm4Theme(const QString &themeName) const
+{
+    return setConfigWithXfconf("xfwm4", "/general/theme", themeName);
+}
 #endif
diff --git a/app/src/handlers/systemhandler.h b/app/src/handlers/systemhandler.h
index 06cd247a85ddef772a5752a2afe21779ff7d4828..8a346191ae947cd31c3533d7ebf1e9af01e5c1e5 100644
--- a/app/src/handlers/systemhandler.h
+++ b/app/src/handlers/systemhandler.h
@@ -23,19 +23,25 @@ public slots:
 
 private:
 #ifdef QTLIB_UNIX
-    bool evaluateScriptWithPlasmaShell(const QString &script) const;
+    bool setConfigWithPlasmaShell(const QString &script) const;
     bool applyKdeWallpaper(const QString &path) const;
-    bool applyKdeIcon(const QString &path) const;
-    bool applyKdeCursor(const QString &path) const;
-    bool applyKdePlasmaDesktoptheme(const QString &path) const;
-    bool applyKdeAuroraeTheme(const QString &path) const;
+    bool applyKdeIcon(const QString &themeName) const;
+    bool applyKdeCursor(const QString &themeName) const;
+    bool applyKdePlasmaDesktoptheme(const QString &themeName) const;
+    bool applyKdeAuroraeTheme(const QString &themeName) const;
 
+    bool setConfigWithGsettings(const QString &schema, const QString &key, const QString &value) const;
     bool applyGnomeWallpaper(const QString &path) const;
-    bool applyGnomeIcon(const QString &path) const;
-    bool applyGnomeCursor(const QString &path) const;
-    bool applyGnomeGtk3Theme(const QString &path) const;
-    bool applyGnomeGnomeShellTheme(const QString &path) const;
+    bool applyGnomeIcon(const QString &themeName) const;
+    bool applyGnomeCursor(const QString &themeName) const;
+    bool applyGnomeGtk3Theme(const QString &themeName) const;
+    bool applyGnomeGnomeShellTheme(const QString &themeName) const;
 
+    bool setConfigWithXfconf(const QString &channel, const QString &property, const QString &value) const;
     bool applyXfceWallpaper(const QString &path) const;
+    bool applyXfceIcon(const QString &themeName) const;
+    bool applyXfceCursor(const QString &themeName) const;
+    bool applyXfceGtk2Theme(const QString &themeName) const;
+    bool applyXfceXfwm4Theme(const QString &themeName) const;
 #endif
 };