diff --git a/src/handlers/xdgurl.cpp b/src/handlers/xdgurl.cpp
index 0e2efa2eb57a5899f8a641bb7eeb37d4aba6aa04..8b8b547fcde6617cfd5929dfce708bed4cafd90e 100644
--- a/src/handlers/xdgurl.cpp
+++ b/src/handlers/xdgurl.cpp
@@ -157,6 +157,72 @@ void XdgUrl::_saveDownloadedFile(QNetworkReply *reply)
 
 void XdgUrl::_installDownloadedFile(QNetworkReply *reply)
 {
+    QJsonObject result;
+
+    QTemporaryFile temporaryFile;
+
+    if (!temporaryFile.open() || temporaryFile.write(reply->readAll()) == -1) {
+        result["error"] = QString("save_error");
+        emit finished(Utility::Json::convertObjToStr(result));
+        return;
+    }
+
+    QMimeDatabase mimeDb;
+    QString mimeType = mimeDb.mimeTypeForFile(temporaryFile.fileName()).name();
+
+    if (mimeType == "text/html" || mimeType == "application/xhtml+xml") {
+        result["error"] = QString("filetype_error");
+        emit finished(Utility::Json::convertObjToStr(result));
+        return;
+    }
+
+    QString type = _metadata["type"].toString();
+    QString destination = _destinations[type].toString();
+    QString path = destination + "/" + _metadata["filename"].toString();
+
+    Utility::File::makeDir(destination);
+    Utility::File::remove(path); // Remove previous downloaded file
+
+    if ((type == "plasma_plasmoids" || type == "plasma4_plasmoids" || type == "plasma5_plasmoids")
+            && Utility::Package::installPlasmapkg(temporaryFile.fileName(), "plasmoid")) {
+        qInfo("The plasmoid has been installed");
+    }
+    else if ((type == "plasma_look_and_feel" || type == "plasma5_look_and_feel")
+             && Utility::Package::installPlasmapkg(temporaryFile.fileName(), "lookandfeel")) {
+        qInfo("The plasma look and feel has been installed");
+    }
+    else if ((type == "plasma_desktopthemes" || type == "plasma5_desktopthemes")
+             && Utility::Package::installPlasmapkg(temporaryFile.fileName(), "theme")) {
+        qInfo("The plasma desktop theme has been installed");
+    }
+    else if (type == "kwin_effects"
+             && Utility::Package::installPlasmapkg(temporaryFile.fileName(), "kwineffect")) {
+        qInfo("The KWin effect has been installed");
+    }
+    else if (type == "kwin_scripts"
+             && Utility::Package::installPlasmapkg(temporaryFile.fileName(), "kwinscript")) {
+        qInfo("The KWin script has been installed");
+    }
+    else if (type == "kwin_tabbox"
+             && Utility::Package::installPlasmapkg(temporaryFile.fileName(), "windowswitcher")) {
+        qInfo("The KWin window switcher has been installed");
+    }
+    else if (Utility::Package::uncompressArchive(temporaryFile.fileName(), destination)) {
+        qInfo("The archive file has been uncompressed into " + destination);
+    }
+    else if (temporaryFile.copy(path)) {
+        qInfo("Saved the file as " + path);
+    }
+    else {
+        result["error"] = QString("install_error");
+        emit finished(Utility::Json::convertObjToStr(result));
+        return;
+    }
+
+    result["success"] = QString("install_success");
+    result["destination"] = destination;
+    result["path"] = path;
+    emit finished(Utility::Json::convertObjToStr(result));
 }
 
 /**