diff --git a/src/handlers/xdgurl.cpp b/src/handlers/xdgurl.cpp
index b63b2eced9f556c8958c592e9323fca6ab0974a5..97069e53a1b7437f1d2c5e7e46684544232fe01b 100644
--- a/src/handlers/xdgurl.cpp
+++ b/src/handlers/xdgurl.cpp
@@ -190,10 +190,29 @@ bool XdgUrl::_uncompressArchive(const QString &path, const QString &targetDir)
     return false;
 }
 
-void XdgUrl::_saveDownloadedFile(const QTemporaryFile &temporaryFile)
+void XdgUrl::_saveDownloadedFile(QNetworkReply *reply)
 {
     QJsonObject result;
 
+    QTemporaryFile temporaryFile;
+
+    if (!temporaryFile.open()) {
+        result["error"] = QString("save_error");
+        emit finished(Utility::Json::convertObjToStr(result));
+        return;
+    }
+
+    temporaryFile.write(reply->readAll());
+
+    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 destination = _destinations[_metadata["type"].toString()].toString();
     QString path = destination + "/" + _metadata["filename"].toString();
 
@@ -211,7 +230,7 @@ void XdgUrl::_saveDownloadedFile(const QTemporaryFile &temporaryFile)
     emit finished(Utility::Json::convertObjToStr(result));
 }
 
-void XdgUrl::_installDownloadedFile(const QTemporaryFile &temporaryFile)
+void XdgUrl::_installDownloadedFile(QNetworkReply *reply)
 {
 }
 
@@ -240,30 +259,11 @@ void XdgUrl::_downloaded(QNetworkReply *reply)
         return;
     }
 
-    QTemporaryFile temporaryFile;
-
-    if (!temporaryFile.open()) {
-        result["error"] = QString("save_error");
-        emit finished(Utility::Json::convertObjToStr(result));
-        return;
-    }
-
-    temporaryFile.write(reply->readAll());
-
-    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;
-    }
-
     if (_metadata["command"].toString() == "download") {
-        _saveDownloadedFile(temporaryFile);
+        _saveDownloadedFile(reply);
     }
     else if (_metadata["command"].toString() == "install") {
-        _installDownloadedFile(temporaryFile);
+        _installDownloadedFile(reply);
     }
 }
 
diff --git a/src/handlers/xdgurl.h b/src/handlers/xdgurl.h
index fe6b64c2040efe482ac0127effd1168ebf5bbf16..9fcccc425a16fff6cb8ad511a9da265fde55379f 100644
--- a/src/handlers/xdgurl.h
+++ b/src/handlers/xdgurl.h
@@ -4,7 +4,6 @@
 #include <QObject>
 #include <QJsonObject>
 
-class QTemporaryFile;
 class QNetworkReply;
 
 namespace Core {
@@ -38,8 +37,8 @@ private:
     QJsonObject _loadArchiveTypes();
     bool _installPlasmapkg(const QString &path, const QString &type = "plasmoid");
     bool _uncompressArchive(const QString &path, const QString &targetDir);
-    void _saveDownloadedFile(const QTemporaryFile &temporaryFile);
-    void _installDownloadedFile(const QTemporaryFile &temporaryFile);
+    void _saveDownloadedFile(QNetworkReply *reply);
+    void _installDownloadedFile(QNetworkReply *reply);
 
 private slots:
     void _downloaded(QNetworkReply *reply);