diff --git a/app/app.pri b/app/app.pri
index 3dc35f887cf0401f44e57cf58edb9467911bb100..7e03a9c0fa9cc860f9a31358cc220eead6766d19 100644
--- a/app/app.pri
+++ b/app/app.pri
@@ -32,11 +32,15 @@ unix:!ios:!android {
         $${PWD}/src/handlers/desktopthemehandler.h \
         $${PWD}/src/desktopthemes/kdetheme.h \
         $${PWD}/src/desktopthemes/gnometheme.h \
-        $${PWD}/src/desktopthemes/xfcetheme.h
+        $${PWD}/src/desktopthemes/xfcetheme.h \
+        $${PWD}/src/desktopthemes/cinnamontheme.h \
+        $${PWD}/src/desktopthemes/matetheme.h
 
     SOURCES += \
         $${PWD}/src/handlers/desktopthemehandler.cpp \
         $${PWD}/src/desktopthemes/kdetheme.cpp \
         $${PWD}/src/desktopthemes/gnometheme.cpp \
-        $${PWD}/src/desktopthemes/xfcetheme.cpp
+        $${PWD}/src/desktopthemes/xfcetheme.cpp \
+        $${PWD}/src/desktopthemes/cinnamontheme.cpp \
+        $${PWD}/src/desktopthemes/matetheme.cpp
 }
diff --git a/app/src/desktopthemes/cinnamontheme.cpp b/app/src/desktopthemes/cinnamontheme.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4cc86ed063e21cb26b32c4f13fd58d2438c52886
--- /dev/null
+++ b/app/src/desktopthemes/cinnamontheme.cpp
@@ -0,0 +1,46 @@
+#include "cinnamontheme.h"
+
+#include <QStringList>
+#include <QDir>
+#include <QProcess>
+
+CinnamonTheme::CinnamonTheme(const QString &path, QObject *parent)
+    : QObject(parent), path_(path)
+{
+    themeName_ = QDir(path_).dirName();
+}
+
+bool CinnamonTheme::applyAsWallpaper() const
+{
+    return setConfig("org.cinnamon.desktop.background", "picture-uri", "file://" + path_);
+}
+
+bool CinnamonTheme::applyAsIcon() const
+{
+    return setConfig("org.cinnamon.desktop.interface", "icon-theme", themeName_);
+}
+
+bool CinnamonTheme::applyAsCursor() const
+{
+    return setConfig("org.cinnamon.desktop.interface", "cursor-theme", themeName_);
+}
+
+bool CinnamonTheme::applyAsGtk3Theme() const
+{
+    return setConfig("org.cinnamon.desktop.interface", "gtk-theme", themeName_);
+}
+
+bool CinnamonTheme::applyAsMetacityTheme() const
+{
+    return setConfig("org.cinnamon.desktop.wm.preferences", "theme", themeName_);
+}
+
+bool CinnamonTheme::applyAsCinnamonTheme() const
+{
+    return setConfig("org.cinnamon.theme", "name", themeName_);
+}
+
+bool CinnamonTheme::setConfig(const QString &schema, const QString &key, const QString &value) const
+{
+    return QProcess::startDetached("gsettings", QStringList() << "set" << schema << key << value);
+}
diff --git a/app/src/desktopthemes/cinnamontheme.h b/app/src/desktopthemes/cinnamontheme.h
new file mode 100644
index 0000000000000000000000000000000000000000..07ff77a854a8b54b0f2293da4de1b2a5c1a92c29
--- /dev/null
+++ b/app/src/desktopthemes/cinnamontheme.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <QObject>
+
+class CinnamonTheme : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit CinnamonTheme(const QString &path, QObject *parent = nullptr);
+
+    bool applyAsWallpaper() const;
+    bool applyAsIcon() const;
+    bool applyAsCursor() const;
+    bool applyAsGtk3Theme() const;
+    bool applyAsMetacityTheme() const;
+    bool applyAsCinnamonTheme() const;
+
+private:
+    bool setConfig(const QString &schema, const QString &key, const QString &value) const;
+
+    QString path_;
+    QString themeName_;
+};
diff --git a/app/src/desktopthemes/matetheme.cpp b/app/src/desktopthemes/matetheme.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6e10f456567c398e932ea53bf07bc2924fdf51b4
--- /dev/null
+++ b/app/src/desktopthemes/matetheme.cpp
@@ -0,0 +1,41 @@
+#include "matetheme.h"
+
+#include <QStringList>
+#include <QDir>
+#include <QProcess>
+
+MateTheme::MateTheme(const QString &path, QObject *parent)
+    : QObject(parent), path_(path)
+{
+    themeName_ = QDir(path_).dirName();
+}
+
+bool MateTheme::applyAsWallpaper() const
+{
+    return setConfig("org.mate.background", "picture-filename", path_);
+}
+
+bool MateTheme::applyAsIcon() const
+{
+    return setConfig("org.mate.interface", "icon-theme", themeName_);
+}
+
+bool MateTheme::applyAsCursor() const
+{
+    return setConfig("org.mate.peripherals-mouse", "cursor-theme", themeName_);
+}
+
+bool MateTheme::applyAsGtk2Theme() const
+{
+    return setConfig("org.mate.interface", "gtk-theme", themeName_);
+}
+
+bool MateTheme::applyAsMetacityTheme() const
+{
+    return setConfig("org.mate.Marco.general", "theme", themeName_);
+}
+
+bool MateTheme::setConfig(const QString &schema, const QString &key, const QString &value) const
+{
+    return QProcess::startDetached("gsettings", QStringList() << "set" << schema << key << value);
+}
diff --git a/app/src/desktopthemes/matetheme.h b/app/src/desktopthemes/matetheme.h
new file mode 100644
index 0000000000000000000000000000000000000000..35032c46b02bad6cab1f0356cf854d38a2d6eea4
--- /dev/null
+++ b/app/src/desktopthemes/matetheme.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <QObject>
+
+class MateTheme : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit MateTheme(const QString &path, QObject *parent = nullptr);
+
+    bool applyAsWallpaper() const;
+    bool applyAsIcon() const;
+    bool applyAsCursor() const;
+    bool applyAsGtk2Theme() const;
+    bool applyAsMetacityTheme() const;
+
+private:
+    bool setConfig(const QString &schema, const QString &key, const QString &value) const;
+
+    QString path_;
+    QString themeName_;
+};
diff --git a/app/src/handlers/desktopthemehandler.cpp b/app/src/handlers/desktopthemehandler.cpp
index 923883c7b30801416ab45c0819ee4c7dc897d01b..20869ec8ac63d9f919df1a02ce6279852328d18a 100644
--- a/app/src/handlers/desktopthemehandler.cpp
+++ b/app/src/handlers/desktopthemehandler.cpp
@@ -8,6 +8,8 @@
 #include "desktopthemes/kdetheme.h"
 #include "desktopthemes/gnometheme.h"
 #include "desktopthemes/xfcetheme.h"
+#include "desktopthemes/cinnamontheme.h"
+#include "desktopthemes/matetheme.h"
 #endif
 
 DesktopThemeHandler::DesktopThemeHandler(QObject *parent)
@@ -38,6 +40,12 @@ QString DesktopThemeHandler::desktopEnvironment() const
     else if (currentDesktop.contains("xfce")) {
         desktop = "xfce";
     }
+    else if (currentDesktop.contains("cinnamon")) {
+        desktop = "cinnamon";
+    }
+    else if (currentDesktop.contains("mate")) {
+        desktop = "mate";
+    }
 
     return desktop;
 }
@@ -69,6 +77,21 @@ bool DesktopThemeHandler::isApplicableType(const QString &installType) const
                         << "gtk2_themes"
                         << "xfwm4_themes";
     }
+    else if (desktop == "cinnamon") {
+        applicableTypes << "wallpapers"
+                        << "icons"
+                        << "cursors"
+                        << "gtk3_themes"
+                        << "metacity_themes"
+                        << "cinnamon_themes";
+    }
+    else if (desktop == "mate") {
+        applicableTypes << "wallpapers"
+                        << "icons"
+                        << "cursors"
+                        << "gtk2_themes"
+                        << "metacity_themes";
+    }
 
     return applicableTypes.contains(installType);
 }
@@ -133,6 +156,45 @@ bool DesktopThemeHandler::applyTheme(const QString &path, const QString &install
                 return xfceTheme.applyAsXfwm4Theme();
             }
         }
+        else if (desktop == "cinnamon") {
+            CinnamonTheme cinnamonTheme(path);
+            if (installType == "wallpapers") {
+                return cinnamonTheme.applyAsWallpaper();
+            }
+            else if (installType == "icons") {
+                return cinnamonTheme.applyAsIcon();
+            }
+            else if (installType == "cursors") {
+                return cinnamonTheme.applyAsCursor();
+            }
+            else if (installType == "gtk3_themes") {
+                return cinnamonTheme.applyAsGtk3Theme();
+            }
+            else if (installType == "metacity_themes") {
+                return cinnamonTheme.applyAsMetacityTheme();
+            }
+            else if (installType == "cinnamon_themes") {
+                return cinnamonTheme.applyAsCinnamonTheme();
+            }
+        }
+        else if (desktop == "mate") {
+            MateTheme mateTheme(path);
+            if (installType == "wallpapers") {
+                return mateTheme.applyAsWallpaper();
+            }
+            else if (installType == "icons") {
+                return mateTheme.applyAsIcon();
+            }
+            else if (installType == "cursors") {
+                return mateTheme.applyAsCursor();
+            }
+            else if (installType == "gtk2_themes") {
+                return mateTheme.applyAsGtk2Theme();
+            }
+            else if (installType == "metacity_themes") {
+                return mateTheme.applyAsMetacityTheme();
+            }
+        }
     }
 
     return false;