diff --git a/src/plugins/cpaster/codepasterprotocol.cpp b/src/plugins/cpaster/codepasterprotocol.cpp
index 26406a3150c387e54cbe48bf1d21b29b962882c8..57a21dee21997c75ba089fa6d951154a13251c1f 100644
--- a/src/plugins/cpaster/codepasterprotocol.cpp
+++ b/src/plugins/cpaster/codepasterprotocol.cpp
@@ -118,17 +118,22 @@ Core::IOptionsPage* CodePasterProtocol::settingsPage()
 
 void CodePasterProtocol::fetchFinished()
 {
-    if (reply->error()) {
-        ICore::instance()->messageManager()->printToOutputPane(reply->errorString(), true);
+    QString title;
+    QString content;
+    bool error = reply->error();
+    if (error) {
+        content = reply->errorString();
     } else {
-        QString data = reply->readAll();
-        if (data.contains("<B>No such paste!</B>"))
-            ICore::instance()->messageManager()->printToOutputPane(tr("No such paste"), true);
-        QString title = QString::fromLatin1("Codepaster: %1").arg(fetchId);
-        EditorManager::instance()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR, &title, data);
+        content = reply->readAll();
+        if (content.contains("<B>No such paste!</B>")) {
+            content = tr("No such paste");
+            error = true;
+        }
+        title = QString::fromLatin1("Codepaster: %1").arg(fetchId);
     }
     reply->deleteLater();
     reply = 0;
+    emit fetchDone(title, content, error);
 }
 
 void CodePasterProtocol::listFinished()
diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp
index d4ca9a4daf695b19fec6f2fc425e23080af7ef52..3dffbcadd3e7439ce7473cc50343ad06dd17bbbd 100644
--- a/src/plugins/cpaster/cpasterplugin.cpp
+++ b/src/plugins/cpaster/cpasterplugin.cpp
@@ -95,6 +95,8 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m
                             0};
     for(int i=0; protos[i] != 0; ++i) {
         connect(protos[i], SIGNAL(pasteDone(QString)), this, SLOT(finishPost(QString)));
+        connect(protos[i], SIGNAL(fetchDone(QString,QString,bool)),
+                this, SLOT(finishFetch(QString,QString,bool)));
         m_settingsPage->addProtocol(protos[i]->name());
         if (protos[i]->hasSettings())
             addObject(protos[i]->settingsPage());
@@ -251,4 +253,16 @@ void CodepasterPlugin::finishPost(const QString &link)
                                                            m_settingsPage->displayOutput());
 }
 
+void CodepasterPlugin::finishFetch(const QString &titleDescription,
+                                   const QString &content,
+                                   bool error)
+{
+    QString title = titleDescription;
+    if (error) {
+        ICore::instance()->messageManager()->printToOutputPane(content, true);
+    } else {
+        EditorManager::instance()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR, &title, content);
+    }
+}
+
 Q_EXPORT_PLUGIN(CodepasterPlugin)
diff --git a/src/plugins/cpaster/cpasterplugin.h b/src/plugins/cpaster/cpasterplugin.h
index ea2af4a7e8b279ef86de9d90411acffcb62e6008..210a26d1f106c497603023b78abd77658f67b0cb 100644
--- a/src/plugins/cpaster/cpasterplugin.h
+++ b/src/plugins/cpaster/cpasterplugin.h
@@ -64,6 +64,9 @@ public slots:
     void post();
     void fetch();
     void finishPost(const QString &link);
+    void finishFetch(const QString &titleDescription,
+                     const QString &content,
+                     bool error);
 
 private:
     QAction *m_postAction;
diff --git a/src/plugins/cpaster/pastebindotcomprotocol.cpp b/src/plugins/cpaster/pastebindotcomprotocol.cpp
index 166fb936325ad4da950974706c38ccc2f7bbde48..4dc047cd512f0d2e3eb34885f151daefa7cca893 100644
--- a/src/plugins/cpaster/pastebindotcomprotocol.cpp
+++ b/src/plugins/cpaster/pastebindotcomprotocol.cpp
@@ -115,14 +115,18 @@ void PasteBinDotComProtocol::postRequestFinished(int id, bool error)
 
 void PasteBinDotComProtocol::fetchFinished()
 {
-    if (reply->error()) {
-        ICore::instance()->messageManager()->printToOutputPane(reply->errorString(), true);
+    QString title;
+    QString content;
+    bool error = reply->error();
+    if (error) {
+        content = reply->errorString();
     } else {
-        QString title = QString::fromLatin1("Pastebin.com: %1").arg(fetchId);
-        QString data = reply->readAll();
-        EditorManager::instance()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR, &title, data);
+        title = QString::fromLatin1("Pastebin.com: %1").arg(fetchId);
+        content = reply->readAll();
     }
     reply->deleteLater();
+    reply = 0;
+    emit fetchDone(title, content, error);
 }
 
 Core::IOptionsPage* PasteBinDotComProtocol::settingsPage()
diff --git a/src/plugins/cpaster/protocol.h b/src/plugins/cpaster/protocol.h
index a45c04790c65e01fe794f396ca8385a874bd934b..5b45326c06c6db9ed58ebda05b310c0045a8fef0 100644
--- a/src/plugins/cpaster/protocol.h
+++ b/src/plugins/cpaster/protocol.h
@@ -61,6 +61,9 @@ public:
 
 signals:
     void pasteDone(const QString &link);
+    void fetchDone(const QString &titleDescription,
+                   const QString &content,
+                   bool error);
 };
 
 #endif // PROTOCOL_H