Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 43707)
@@ -286,4 +286,5 @@
 	src/net/UINetworkRequest.h \
 	src/net/UINetworkRequestWidget.h \
+	src/net/UINetworkReply.h \
 	src/net/UINetworkCustomer.h \
 	src/net/UIUpdateManager.h \
@@ -440,4 +441,5 @@
 	src/globals/UIExtraDataEventHandler.cpp \
 	src/medium/UIMediumManager.cpp \
+	src/net/UINetworkReply.cpp \
 	src/net/UIUpdateManager.cpp \
 	src/runtime/UIActionPoolRuntime.cpp \
@@ -519,4 +521,5 @@
 	src/net/UINetworkRequest.cpp \
 	src/net/UINetworkRequestWidget.cpp \
+	src/net/UINetworkReply.cpp \
 	src/net/UINetworkCustomer.cpp \
 	src/net/UIDownloader.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp	(revision 43707)
@@ -18,8 +18,6 @@
  */
 
-/* Global includes: */
-#include <QNetworkReply>
-
-/* Local includes: */
+/* GUI includes: */
+#include <UINetworkReply.h>
 #include "UIDownloader.h"
 #include "VBoxGlobal.h"
@@ -79,5 +77,5 @@
 
 /* Network-reply canceled handler: */
-void UIDownloader::processNetworkReplyCanceled(QNetworkReply *pNetworkReply)
+void UIDownloader::processNetworkReplyCanceled(UINetworkReply *pNetworkReply)
 {
     /* Unused variables: */
@@ -89,5 +87,5 @@
 
 /* Network-reply finished handler: */
-void UIDownloader::processNetworkReplyFinished(QNetworkReply *pNetworkReply)
+void UIDownloader::processNetworkReplyFinished(UINetworkReply *pNetworkReply)
 {
     /* Process reply: */
@@ -110,5 +108,5 @@
 
 /* Handle acknowledging result: */
-void UIDownloader::handleAcknowledgingResult(QNetworkReply *pNetworkReply)
+void UIDownloader::handleAcknowledgingResult(UINetworkReply *pNetworkReply)
 {
     /* Get the final source: */
@@ -129,5 +127,5 @@
 
 /* Handle downloading result: */
-void UIDownloader::handleDownloadingResult(QNetworkReply *pNetworkReply)
+void UIDownloader::handleDownloadingResult(UINetworkReply *pNetworkReply)
 {
     /* Handle downloaded object: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h	(revision 43707)
@@ -29,5 +29,5 @@
 
 /* Forward declarations: */
-class QNetworkReply;
+class UINetworkReply;
 
 /* Downloader interface.
@@ -93,17 +93,17 @@
     void processNetworkReplyProgress(qint64 iReceived, qint64 iTotal);
     /* Network-reply cancel handler: */
-    void processNetworkReplyCanceled(QNetworkReply *pNetworkReply);
+    void processNetworkReplyCanceled(UINetworkReply *pNetworkReply);
     /* Network-reply finish handler: */
-    void processNetworkReplyFinished(QNetworkReply *pNetworkReply);
+    void processNetworkReplyFinished(UINetworkReply *pNetworkReply);
 
     /* Handle acknowledging result: */
-    virtual void handleAcknowledgingResult(QNetworkReply *pNetworkReply);
+    virtual void handleAcknowledgingResult(UINetworkReply *pNetworkReply);
     /* Handle downloading result: */
-    virtual void handleDownloadingResult(QNetworkReply *pNetworkReply);
+    virtual void handleDownloadingResult(UINetworkReply *pNetworkReply);
 
     /* Pure virtual function to ask user about downloading confirmation: */
-    virtual bool askForDownloadingConfirmation(QNetworkReply *pNetworkReply) = 0;
+    virtual bool askForDownloadingConfirmation(UINetworkReply *pNetworkReply) = 0;
     /* Pure virtual function to handle downloaded object: */
-    virtual void handleDownloadedObject(QNetworkReply *pNetworkReply) = 0;
+    virtual void handleDownloadedObject(UINetworkReply *pNetworkReply) = 0;
 
 private:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp	(revision 43707)
@@ -19,5 +19,4 @@
 
 /* Global includes: */
-#include <QNetworkReply>
 #include <QDir>
 #include <QFile>
@@ -25,4 +24,5 @@
 /* Local includes: */
 #include "UIDownloaderAdditions.h"
+#include "UINetworkReply.h"
 #include "QIFileDialog.h"
 #include "VBoxGlobal.h"
@@ -72,10 +72,10 @@
 }
 
-bool UIDownloaderAdditions::askForDownloadingConfirmation(QNetworkReply *pReply)
+bool UIDownloaderAdditions::askForDownloadingConfirmation(UINetworkReply *pReply)
 {
     return msgCenter().confirmDownloadAdditions(source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt());
 }
 
-void UIDownloaderAdditions::handleDownloadedObject(QNetworkReply *pReply)
+void UIDownloaderAdditions::handleDownloadedObject(UINetworkReply *pReply)
 {
     /* Read received data into the buffer: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h	(revision 43707)
@@ -46,6 +46,6 @@
 
     /* Virtual stuff reimplementations: */
-    bool askForDownloadingConfirmation(QNetworkReply *pReply);
-    void handleDownloadedObject(QNetworkReply *pReply);
+    bool askForDownloadingConfirmation(UINetworkReply *pReply);
+    void handleDownloadedObject(UINetworkReply *pReply);
 
     /* Variables: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp	(revision 43707)
@@ -19,5 +19,4 @@
 
 /* Global includes: */
-#include <QNetworkReply>
 #include <QDir>
 #include <QFile>
@@ -26,4 +25,5 @@
 /* Local includes: */
 #include "UIDownloaderExtensionPack.h"
+#include "UINetworkReply.h"
 #include "QIFileDialog.h"
 #include "VBoxGlobal.h"
@@ -79,10 +79,10 @@
 }
 
-bool UIDownloaderExtensionPack::askForDownloadingConfirmation(QNetworkReply *pReply)
+bool UIDownloaderExtensionPack::askForDownloadingConfirmation(UINetworkReply *pReply)
 {
     return msgCenter().confirmDownloadExtensionPack(GUI_ExtPackName, source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt());
 }
 
-void UIDownloaderExtensionPack::handleDownloadedObject(QNetworkReply *pReply)
+void UIDownloaderExtensionPack::handleDownloadedObject(UINetworkReply *pReply)
 {
     /* Read received data into the buffer: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h	(revision 43707)
@@ -46,6 +46,6 @@
 
     /* Virtual stuff reimplementations: */
-    bool askForDownloadingConfirmation(QNetworkReply *pReply);
-    void handleDownloadedObject(QNetworkReply *pReply);
+    bool askForDownloadingConfirmation(UINetworkReply *pReply);
+    void handleDownloadedObject(UINetworkReply *pReply);
 
     /* Variables: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp	(revision 43707)
@@ -19,5 +19,4 @@
 
 /* Global includes: */
-#include <QNetworkReply>
 #include <QDir>
 #include <QFile>
@@ -25,4 +24,5 @@
 /* Local includes: */
 #include "UIDownloaderUserManual.h"
+#include "UINetworkReply.h"
 #include "QIFileDialog.h"
 #include "VBoxGlobal.h"
@@ -75,10 +75,10 @@
 }
 
-bool UIDownloaderUserManual::askForDownloadingConfirmation(QNetworkReply *pReply)
+bool UIDownloaderUserManual::askForDownloadingConfirmation(UINetworkReply *pReply)
 {
     return msgCenter().confirmUserManualDownload(source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt());
 }
 
-void UIDownloaderUserManual::handleDownloadedObject(QNetworkReply *pReply)
+void UIDownloaderUserManual::handleDownloadedObject(UINetworkReply *pReply)
 {
     /* Read received data into the buffer: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h	(revision 43707)
@@ -46,6 +46,6 @@
 
     /* Virtual stuff reimplementations: */
-    bool askForDownloadingConfirmation(QNetworkReply *pReply);
-    void handleDownloadedObject(QNetworkReply *pReply);
+    bool askForDownloadingConfirmation(UINetworkReply *pReply);
+    void handleDownloadedObject(UINetworkReply *pReply);
 
     /* Variables: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h	(revision 43707)
@@ -27,5 +27,5 @@
 
 /* Forward declarations: */
-class QNetworkReply;
+class UINetworkReply;
 class QNetworkRequest;
 
@@ -47,7 +47,7 @@
     virtual void processNetworkReplyProgress(qint64 iReceived, qint64 iTotal) = 0;
     /* Network-reply cancel handler: */
-    virtual void processNetworkReplyCanceled(QNetworkReply *pReply) = 0;
+    virtual void processNetworkReplyCanceled(UINetworkReply *pReply) = 0;
     /* Network-reply finish handler: */
-    virtual void processNetworkReplyFinished(QNetworkReply *pReply) = 0;
+    virtual void processNetworkReplyFinished(UINetworkReply *pReply) = 0;
 
 protected:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h	(revision 43707)
@@ -24,5 +24,13 @@
 {
     UINetworkRequestType_HEAD,
-    UINetworkRequestType_GET
+    UINetworkRequestType_GET,
+    UINetworkRequestType_GET_Our
+};
+
+/* Network-reply types: */
+enum UINetworkReplyType
+{
+    UINetworkReplyType_Qt,
+    UINetworkReplyType_Our
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp	(revision 43707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp	(revision 43707)
@@ -0,0 +1,299 @@
+/* $Id$ */
+/** @file
+ *
+ * VBox frontends: Qt GUI ("VirtualBox"):
+ * UINetworkReply stuff implementation
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/* GUI includes: */
+#include "UINetworkReply.h"
+#include "UINetworkManager.h"
+
+/* Other VBox includes; */
+#include <iprt/err.h>
+#include <iprt/http.h>
+#include <iprt/stream.h>
+#include <iprt/initterm.h>
+#include <iprt/mem.h>
+
+/* Our network-reply thread: */
+class UINetworkReplyPrivateThread : public QThread
+{
+    Q_OBJECT;
+
+public:
+
+    /* Constructor: */
+    UINetworkReplyPrivateThread(const QNetworkRequest &request)
+        : m_request(request)
+        , m_iError(VINF_SUCCESS)
+    {
+    }
+
+    /* API: */
+    const QByteArray& readAll() const { return m_reply; }
+    int error() const { return m_iError; }
+
+private:
+
+    /* Thread runner: */
+    void run()
+    {
+        /* Init: */
+        RTR3InitExeNoArguments(RTR3INIT_FLAGS_SUPLIB);
+
+        /* Create: */
+        RTHTTP hHttp;
+        m_iError = RTHttpCreate(&hHttp);
+
+        /* Acquire: */
+        if (RT_SUCCESS(m_iError))
+        {
+            char *pszBuf = 0;
+            m_iError = RTHttpGet(hHttp,
+                                 m_request.url().toString().toAscii().constData(),
+                                 &pszBuf);
+            m_reply = QByteArray(pszBuf);
+            RTMemFree(pszBuf);
+        }
+
+        /* Destroy: */
+        RTHttpDestroy(hHttp);
+    }
+
+    /* Variables: */
+    QNetworkRequest m_request;
+    int m_iError;
+    QByteArray m_reply;
+};
+
+/* Our network-reply object: */
+class UINetworkReplyPrivate : public QObject
+{
+    Q_OBJECT;
+
+signals:
+
+    /* Notifiers: */
+    void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal);
+    void finished();
+
+public:
+
+    /* Constructor: */
+    UINetworkReplyPrivate(const QNetworkRequest &request)
+        : m_error(QNetworkReply::NoError)
+        , m_pThread(0)
+    {
+        /* Create and run network-reply thread: */
+        m_pThread = new UINetworkReplyPrivateThread(request);
+        connect(m_pThread, SIGNAL(finished()), this, SLOT(sltFinished()));
+        m_pThread->start();
+    }
+
+    /* Destructor: */
+    ~UINetworkReplyPrivate()
+    {
+        /* Terminate network-reply thread: */
+        m_pThread->wait();
+        delete m_pThread;
+        m_pThread = 0;
+    }
+
+    /* API: Abort reply: */
+    void abort()
+    {
+        m_error = QNetworkReply::OperationCanceledError;
+        emit finished();
+    }
+
+    /* API: Error-code getter: */
+    QNetworkReply::NetworkError error() const { return m_error; }
+
+    /* API: Error-string getter: */
+    QString errorString() const
+    {
+        switch (m_error)
+        {
+            case QNetworkReply::NoError:
+                break;
+            case QNetworkReply::HostNotFoundError:
+                return tr("The server has not found anything matching the URI given");
+                break;
+            case QNetworkReply::ContentAccessDenied:
+                return tr("The request is for something forbidden, authorization will not help");
+                break;
+            case QNetworkReply::ProtocolFailure:
+                return tr("The server did not understand the request due to bad syntax");
+                break;
+            default:
+                return tr("Unrecognized network error");
+                break;
+        }
+        return QString();
+    }
+
+    /* API: Reply getter: */
+    QByteArray readAll() { return m_pThread->readAll(); }
+
+private slots:
+
+    /* Handler: Thread finished: */
+    void sltFinished()
+    {
+        switch (m_pThread->error())
+        {
+            case VINF_SUCCESS:
+                m_error = QNetworkReply::NoError;
+                break;
+            case VERR_HTTP_NOT_FOUND:
+                m_error = QNetworkReply::HostNotFoundError;
+                break;
+            case VERR_HTTP_ACCESS_DENIED:
+                m_error = QNetworkReply::ContentAccessDenied;
+                break;
+            case VERR_HTTP_BAD_REQUEST:
+                m_error = QNetworkReply::ProtocolFailure;
+                break;
+            default:
+                m_error = QNetworkReply::UnknownNetworkError;
+                break;
+        }
+        emit finished();
+    }
+
+private:
+
+    /* Variables: */
+    QNetworkReply::NetworkError m_error;
+    UINetworkReplyPrivateThread *m_pThread;
+};
+
+UINetworkReply::UINetworkReply(const QNetworkRequest &request, UINetworkRequestType requestType)
+    : m_replyType(UINetworkReplyType_Qt)
+    , m_pReply(0)
+{
+    /* Create network-reply object: */
+    switch (requestType)
+    {
+        /* Prepare Qt network-reply (HEAD): */
+        case UINetworkRequestType_HEAD:
+            m_replyType = UINetworkReplyType_Qt;
+            m_pReply = gNetworkManager->head(request);
+            break;
+        /* Prepare Qt network-reply (GET): */
+        case UINetworkRequestType_GET:
+            m_replyType = UINetworkReplyType_Qt;
+            m_pReply = gNetworkManager->get(request);
+            break;
+        /* Prepare our network-reply (GET): */
+        case UINetworkRequestType_GET_Our:
+            m_replyType = UINetworkReplyType_Our;
+            m_pReply = new UINetworkReplyPrivate(request);
+            break;
+    }
+
+    /* Prepare network-reply object connections: */
+    connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64)));
+    connect(m_pReply, SIGNAL(finished()), this, SIGNAL(finished()));
+}
+
+UINetworkReply::~UINetworkReply()
+{
+    /* Cleanup network-reply object: */
+    if (m_pReply)
+    {
+        delete m_pReply;
+        m_pReply = 0;
+    }
+}
+
+QVariant UINetworkReply::header(QNetworkRequest::KnownHeaders header) const
+{
+    QVariant result;
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->header(header); break;
+        case UINetworkReplyType_Our: /* TODO: header() */ break;
+    }
+    return result;
+}
+
+QVariant UINetworkReply::attribute(QNetworkRequest::Attribute code) const
+{
+    QVariant result;
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->attribute(code); break;
+        case UINetworkReplyType_Our: /* TODO: attribute() */ break;
+    }
+    return result;
+}
+
+void UINetworkReply::abort()
+{
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: qobject_cast<QNetworkReply*>(m_pReply)->abort(); break;
+        case UINetworkReplyType_Our: qobject_cast<UINetworkReplyPrivate*>(m_pReply)->abort(); break;
+    }
+}
+
+QNetworkReply::NetworkError UINetworkReply::error() const
+{
+    QNetworkReply::NetworkError result = QNetworkReply::NoError;
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->error(); break;
+        case UINetworkReplyType_Our: result = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->error(); break;
+    }
+    return result;
+}
+
+QString UINetworkReply::errorString() const
+{
+    QString strResult;
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: strResult = qobject_cast<QNetworkReply*>(m_pReply)->errorString(); break;
+        case UINetworkReplyType_Our: strResult = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->errorString(); break;
+    }
+    return strResult;
+}
+
+QByteArray UINetworkReply::readAll()
+{
+    QByteArray result;
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->readAll(); break;
+        case UINetworkReplyType_Our: result = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->readAll(); break;
+    }
+    return result;
+}
+
+QUrl UINetworkReply::url() const
+{
+    QUrl result;
+    switch (m_replyType)
+    {
+        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->url(); break;
+        case UINetworkReplyType_Our: /* TODO: url() */ break;
+    }
+    return result;
+}
+
+#include "UINetworkReply.moc"
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h	(revision 43707)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h	(revision 43707)
@@ -0,0 +1,66 @@
+/** @file
+ *
+ * VBox frontends: Qt GUI ("VirtualBox"):
+ * UINetworkReply stuff declaration
+ */
+
+/*
+ * Copyright (C) 2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef __UINetworkReply_h__
+#define __UINetworkReply_h__
+
+/* Qt includes: */
+#include <QPointer>
+#include <QThread>
+#include <QNetworkReply>
+
+/* GUI includes: */
+#include "UINetworkDefs.h"
+
+/* Forward declarations: */
+class UINetworkReplyPrivateThread;
+
+/* Network-reply interface: */
+class UINetworkReply : public QObject
+{
+    Q_OBJECT;
+
+signals:
+
+    /* Notifiers: */
+    void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal);
+    void finished();
+
+public:
+
+    /* Constructor/destructor: */
+    UINetworkReply(const QNetworkRequest &request, UINetworkRequestType requestType);
+    ~UINetworkReply();
+
+    /* API: */
+    QVariant header(QNetworkRequest::KnownHeaders header) const;
+    QVariant attribute(QNetworkRequest::Attribute code) const;
+    void abort();
+    QNetworkReply::NetworkError error() const;
+    QString errorString() const;
+    QByteArray readAll();
+    QUrl url() const;
+
+private:
+
+    /* Variables: */
+    UINetworkReplyType m_replyType;
+    QPointer<QObject> m_pReply;
+};
+
+#endif // __UINetworkReply_h__
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp	(revision 43707)
@@ -18,8 +18,8 @@
  */
 
-/* Global includes: */
+/* Qt includes: */
 #include <QNetworkReply>
 
-/* Local includes: */
+/* GUI includes: */
 #include "UINetworkRequest.h"
 #include "UINetworkRequestWidget.h"
@@ -96,9 +96,10 @@
     m_fRunning = false;
 
-    /* Get sender network-reply: */
-    QNetworkReply *pNetworkReply = static_cast<QNetworkReply*>(sender());
+    /* Make sure network-reply still valid: */
+    if (!m_pReply)
+        return;
 
     /* If network-request was canceled: */
-    if (pNetworkReply->error() == QNetworkReply::OperationCanceledError)
+    if (m_pReply->error() == QNetworkReply::OperationCanceledError)
     {
         /* Notify network-manager: */
@@ -106,8 +107,8 @@
     }
     /* If network-reply has no errors: */
-    else if (pNetworkReply->error() == QNetworkReply::NoError)
+    else if (m_pReply->error() == QNetworkReply::NoError)
     {
         /* Check if redirection required: */
-        QUrl redirect = pNetworkReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
+        QUrl redirect = m_pReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
         if (redirect.isValid())
         {
@@ -148,7 +149,7 @@
         {
             /* Notify particular network-request listeners: */
-            emit sigFailed(pNetworkReply->errorString());
+            emit sigFailed(m_pReply->errorString());
             /* Notify general network-requests listeners: */
-            emit sigFailed(m_uuid, pNetworkReply->errorString());
+            emit sigFailed(m_uuid, m_pReply->errorString());
         }
     }
@@ -201,22 +202,7 @@
 {
     /* Make network-request: */
-    switch (m_type)
-    {
-        case UINetworkRequestType_HEAD:
-        {
-            m_pReply = gNetworkManager->head(m_request);
-            break;
-        }
-        case UINetworkRequestType_GET:
-        {
-            m_pReply = gNetworkManager->get(m_request);
-            break;
-        }
-        default:
-            break;
-    }
-
+    m_pReply = new UINetworkReply(m_request, m_type);
+    AssertMsg(m_pReply, ("Unable to make network-request!\n"));
     /* Prepare listeners for m_pReply: */
-    AssertMsg(m_pReply, ("Unable to make network-request!\n"));
     connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(sltHandleNetworkReplyProgress(qint64, qint64)));
     connect(m_pReply, SIGNAL(finished()), this, SLOT(sltHandleNetworkReplyFinish()));
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h	(revision 43707)
@@ -20,12 +20,12 @@
 #define __UINetworkRequest_h__
 
-/* Global includes: */
+/* Qt includes: */
 #include <QUuid>
 #include <QNetworkRequest>
-#include <QNetworkReply>
 #include <QPointer>
 
-/* Local inludes: */
+/* GUI inludes: */
 #include "UINetworkDefs.h"
+#include "UINetworkReply.h"
 
 /* Forward declarations: */
@@ -71,5 +71,5 @@
     const QString& description() const { return m_strDescription; }
     UINetworkCustomer* customer() { return m_pCustomer; }
-    QNetworkReply* reply() { return m_pReply; }
+    UINetworkReply* reply() { return m_pReply; }
 
 private slots:
@@ -109,5 +109,5 @@
     QString m_strDescription;
     UINetworkCustomer *m_pCustomer;
-    QPointer<QNetworkReply> m_pReply;
+    QPointer<UINetworkReply> m_pReply;
     bool m_fRunning;
 };
Index: /trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp	(revision 43706)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp	(revision 43707)
@@ -19,5 +19,4 @@
 
 /* Qt includes: */
-#include <QNetworkReply>
 #include <QTimer>
 #include <QDir>
@@ -30,4 +29,5 @@
 #include "UINetworkManager.h"
 #include "UINetworkCustomer.h"
+#include "UINetworkRequest.h"
 #include "VBoxGlobal.h"
 #include "UIMessageCenter.h"
@@ -131,7 +131,7 @@
     void processNetworkReplyProgress(qint64, qint64) {}
     /* Network reply canceled handler dummy: */
-    void processNetworkReplyCanceled(QNetworkReply*) {}
+    void processNetworkReplyCanceled(UINetworkReply*) {}
     /* Network reply canceled handler dummy: */
-    void processNetworkReplyFinished(QNetworkReply*) {}
+    void processNetworkReplyFinished(UINetworkReply*) {}
 };
 
@@ -196,9 +196,13 @@
         request.setUrl(url);
         request.setRawHeader("User-Agent", strUserAgent.toAscii());
+#ifdef Q_WS_X11
+        createNetworkRequest(request, UINetworkRequestType_GET_Our, tr("Checking for a new VirtualBox version..."));
+#else /* Q_WS_X11 */
         createNetworkRequest(request, UINetworkRequestType_GET, tr("Checking for a new VirtualBox version..."));
+#endif /* !Q_WS_X11 */
     }
 
     /* Handle network reply canceled: */
-    void processNetworkReplyCanceled(QNetworkReply* /* pReply */)
+    void processNetworkReplyCanceled(UINetworkReply* /* pReply */)
     {
         /* Notify about step completion: */
@@ -207,5 +211,5 @@
 
     /* Handle network reply: */
-    void processNetworkReplyFinished(QNetworkReply *pReply)
+    void processNetworkReplyFinished(UINetworkReply *pReply)
     {
         /* Deserialize incoming data: */
