diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp
index ba8b86e0cc6bbc27c6c588c0212c9b9f71b9a07f..132823810e4827b5be34e2181a88a16a4841a978 100644
--- a/src/plugins/analyzerbase/analyzerplugin.cpp
+++ b/src/plugins/analyzerbase/analyzerplugin.cpp
@@ -66,8 +66,8 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri
 
     // Task integration.
     //: Category under which Analyzer tasks are listed in Issues view
-    ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub()
-            ->addCategory(Core::Id(Constants::ANALYZERTASK_ID), tr("Analyzer"));
+    ProjectExplorer::ProjectExplorerPlugin::taskHub()
+            ->addCategory(Constants::ANALYZERTASK_ID, tr("Analyzer"));
 
     return true;
 }
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index e9a3c480ab48a66c76688c4e07623933440b1637..4f037ca002dd658271b015833680c85e6ec5b88f 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -1861,12 +1861,12 @@ void DebuggerEngine::checkForReleaseBuild(const DebuggerStartParameters &sp)
 TaskHub *DebuggerEnginePrivate::taskHub()
 {
     if (!m_taskHub) {
-        m_taskHub = ProjectExplorerPlugin::instance()->taskHub();
-        m_taskHub->addCategory(Core::Id(Debugger::Constants::TASK_CATEGORY_DEBUGGER_DEBUGINFO),
+        m_taskHub = ProjectExplorerPlugin::taskHub();
+        m_taskHub->addCategory(Debugger::Constants::TASK_CATEGORY_DEBUGGER_DEBUGINFO,
                                tr("Debug Information"));
-        m_taskHub->addCategory(Core::Id(Debugger::Constants::TASK_CATEGORY_DEBUGGER_TEST),
+        m_taskHub->addCategory(Debugger::Constants::TASK_CATEGORY_DEBUGGER_TEST,
                                tr("Debugger Test"));
-        m_taskHub->addCategory(Core::Id(Debugger::Constants::TASK_CATEGORY_DEBUGGER_RUNTIME),
+        m_taskHub->addCategory(Debugger::Constants::TASK_CATEGORY_DEBUGGER_RUNTIME,
                                tr("Debugger Runtime"));
     }
     return m_taskHub;
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 72eb2d3df4b329b8036587d6fc9fe1726935878a..664776e7baed96776bf7604c11e851b3c275c015 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -458,7 +458,7 @@ static bool fixupEngineTypes(DebuggerStartParameters &sp, RunConfiguration *rc,
 DebuggerRunControl *DebuggerRunControlFactory::doCreate
     (const DebuggerStartParameters &sp0, RunConfiguration *rc, QString *errorMessage)
 {
-    TaskHub *th = ProjectExplorerPlugin::instance()->taskHub();
+    TaskHub *th = ProjectExplorerPlugin::taskHub();
     th->clearTasks(Debugger::Constants::TASK_CATEGORY_DEBUGGER_DEBUGINFO);
     th->clearTasks(Debugger::Constants::TASK_CATEGORY_DEBUGGER_TEST);
     th->clearTasks(Debugger::Constants::TASK_CATEGORY_DEBUGGER_RUNTIME);
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index 32e7455d857867f8adf31244023dc79f3bf9390a..e312a17bef8d961f3a8b98e1440c803cbe35c1db 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -126,7 +126,7 @@ BuildManager::BuildManager(ProjectExplorerPlugin *parent, QAction *cancelBuildAc
     d->m_outputWindow = new Internal::CompileOutputWindow(this, cancelBuildAction);
     ExtensionSystem::PluginManager::addObject(d->m_outputWindow);
 
-    d->m_taskHub = ProjectExplorerPlugin::instance()->taskHub();
+    d->m_taskHub = ProjectExplorerPlugin::taskHub();
     d->m_taskWindow = new Internal::TaskWindow(d->m_taskHub);
     ExtensionSystem::PluginManager::addObject(d->m_taskWindow);
 
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index d498a9ffa6be77d11bb4a56f490d85217c1dd6d5..ba31d98664c98de3cb743182a9746ed40a38a893 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1656,9 +1656,9 @@ BuildManager *ProjectExplorerPlugin::buildManager() const
     return d->m_buildManager;
 }
 
-TaskHub *ProjectExplorerPlugin::taskHub() const
+TaskHub *ProjectExplorerPlugin::taskHub()
 {
-    return d->m_taskHub;
+    return m_instance->d->m_taskHub;
 }
 
 void ProjectExplorerPlugin::buildStateChanged(Project * pro)
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 640346dc7b10ec1787ab2f314db5b06aa287a3f4..7afb133016540a79f62edc9eefb5f763a581b4cd 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -92,7 +92,7 @@ public:
     Project *startupProject() const;
 
     BuildManager *buildManager() const;
-    TaskHub *taskHub() const;
+    static TaskHub *taskHub();
 
     bool saveModifiedFiles();
 
diff --git a/src/plugins/projectexplorer/removetaskhandler.cpp b/src/plugins/projectexplorer/removetaskhandler.cpp
index 3138a25885d82bbae5c9e4b56566d26be8d4fbb7..d652a64763a7410ef80550b264a11ef650d830ac 100644
--- a/src/plugins/projectexplorer/removetaskhandler.cpp
+++ b/src/plugins/projectexplorer/removetaskhandler.cpp
@@ -39,7 +39,7 @@ using namespace ProjectExplorer::Internal;
 
 void RemoveTaskHandler::handle(const ProjectExplorer::Task &task)
 {
-    ProjectExplorerPlugin::instance()->taskHub()->removeTask(task);
+    ProjectExplorerPlugin::taskHub()->removeTask(task);
 }
 
 QAction *RemoveTaskHandler::createAction(QObject *parent) const
diff --git a/src/plugins/projectexplorer/task.cpp b/src/plugins/projectexplorer/task.cpp
index 8fb79e097ab52c3dd04b389d68261482e3e6d072..9f6796e1b80235cc230818424f9ecca2fde8bc6a 100644
--- a/src/plugins/projectexplorer/task.cpp
+++ b/src/plugins/projectexplorer/task.cpp
@@ -44,7 +44,7 @@ Task::Task() : taskId(0), type(Unknown), line(-1)
 { }
 
 Task::Task(TaskType type_, const QString &description_,
-           const Utils::FileName &file_, int line_, const Core::Id &category_) :
+           const Utils::FileName &file_, int line_, Core::Id category_) :
     taskId(s_nextId), type(type_), description(description_),
     file(file_), line(line_), movedLine(line_), category(category_)
 {
@@ -57,7 +57,9 @@ void Task::addMark(TextEditor::BaseTextMark *mark)
 }
 
 bool Task::isNull() const
-{ return taskId == 0; }
+{
+    return taskId == 0;
+}
 
 void Task::clear()
 {
diff --git a/src/plugins/projectexplorer/task.h b/src/plugins/projectexplorer/task.h
index a789f8951e6b48c844f687b07f63089db3c755d4..98782b201d9899dd02b44ecee6b4c88746abfb72 100644
--- a/src/plugins/projectexplorer/task.h
+++ b/src/plugins/projectexplorer/task.h
@@ -53,8 +53,8 @@ public:
     };
 
     Task();
-    Task(TaskType type_, const QString &description_,
-         const Utils::FileName &file_, int line_, const Core::Id &category_);
+    Task(TaskType type, const QString &description,
+         const Utils::FileName &file, int line, Core::Id category);
 
     bool isNull() const;
     void clear();
diff --git a/src/plugins/projectexplorer/taskhub.cpp b/src/plugins/projectexplorer/taskhub.cpp
index eb7272db096332396d59585fc25d5efdfb4249ba..6af95161157639e2caf2be725ae1ad8c4182e290 100644
--- a/src/plugins/projectexplorer/taskhub.cpp
+++ b/src/plugins/projectexplorer/taskhub.cpp
@@ -54,19 +54,19 @@ private:
 
 void TaskMark::updateLineNumber(int lineNumber)
 {
-    ProjectExplorerPlugin::instance()->taskHub()->updateTaskLineNumber(m_id, lineNumber);
+    ProjectExplorerPlugin::taskHub()->updateTaskLineNumber(m_id, lineNumber);
     BaseTextMark::updateLineNumber(lineNumber);
 }
 
 void TaskMark::updateFileName(const QString &fileName)
 {
-    ProjectExplorerPlugin::instance()->taskHub()->updateTaskFileName(m_id, fileName);
+    ProjectExplorerPlugin::taskHub()->updateTaskFileName(m_id, fileName);
     BaseTextMark::updateFileName(fileName);
 }
 
 void TaskMark::removedFromEditor()
 {
-    ProjectExplorerPlugin::instance()->taskHub()->updateTaskLineNumber(m_id, -1);
+    ProjectExplorerPlugin::taskHub()->updateTaskLineNumber(m_id, -1);
 }
 
 bool TaskMark::isClickable() const
@@ -76,7 +76,7 @@ bool TaskMark::isClickable() const
 
 void TaskMark::clicked()
 {
-    ProjectExplorerPlugin::instance()->taskHub()->taskMarkClicked(m_id);
+    ProjectExplorerPlugin::taskHub()->taskMarkClicked(m_id);
 }
 
 TaskHub::TaskHub()
@@ -92,7 +92,7 @@ TaskHub::~TaskHub()
 
 }
 
-void TaskHub::addCategory(const Core::Id &categoryId, const QString &displayName, bool visible)
+void TaskHub::addCategory(Core::Id categoryId, const QString &displayName, bool visible)
 {
     emit categoryAdded(categoryId, displayName, visible);
 }
@@ -112,7 +112,7 @@ void TaskHub::addTask(Task task)
     }
 }
 
-void TaskHub::clearTasks(const Core::Id &categoryId)
+void TaskHub::clearTasks(Core::Id categoryId)
 {
     emit tasksCleared(categoryId);
 }
diff --git a/src/plugins/projectexplorer/taskhub.h b/src/plugins/projectexplorer/taskhub.h
index 90f77abd75eb9b5c012a941b2bf0b9624548cf94..211f65783d76ca409f34e5e2ee5afa0911837b2e 100644
--- a/src/plugins/projectexplorer/taskhub.h
+++ b/src/plugins/projectexplorer/taskhub.h
@@ -46,9 +46,9 @@ public:
     virtual ~TaskHub();
 
 public slots:
-    void addCategory(const Core::Id &categoryId, const QString &displayName, bool visible = true);
+    void addCategory(Core::Id categoryId, const QString &displayName, bool visible = true);
     void addTask(ProjectExplorer::Task task);
-    void clearTasks(const Core::Id &categoryId = Core::Id());
+    void clearTasks(Core::Id categoryId = Core::Id());
     void removeTask(const ProjectExplorer::Task &task);
 
 public:
@@ -63,10 +63,10 @@ public:
     QIcon taskTypeIcon(ProjectExplorer::Task::TaskType t) const;
 
 signals:
-    void categoryAdded(const Core::Id &categoryId, const QString &displayName, bool visible);
+    void categoryAdded(Core::Id categoryId, const QString &displayName, bool visible);
     void taskAdded(const ProjectExplorer::Task &task);
     void taskRemoved(const ProjectExplorer::Task &task);
-    void tasksCleared(const Core::Id &categoryId);
+    void tasksCleared(Core::Id categoryId);
     void taskFileNameUpdated(unsigned int id, const QString &fileName);
     void taskLineNumberUpdated(unsigned int id, int line);
     void categoryVisibilityChanged(const Core::Id &categoryId, bool visible);
diff --git a/src/plugins/qbsprojectmanager/qbslogsink.cpp b/src/plugins/qbsprojectmanager/qbslogsink.cpp
index e22cd6391cdfbb7a411d25082e8b977dec226374..c51a661461b2f7848b9376bfa76ab44add1586c4 100644
--- a/src/plugins/qbsprojectmanager/qbslogsink.cpp
+++ b/src/plugins/qbsprojectmanager/qbslogsink.cpp
@@ -49,7 +49,7 @@ namespace Internal {
 
 QbsLogSink::QbsLogSink(QObject *parent) : QObject(parent)
 {
-    ProjectExplorer::TaskHub *hub = ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub();
+    ProjectExplorer::TaskHub *hub = ProjectExplorer::ProjectExplorerPlugin::taskHub();
     connect(this, SIGNAL(newTask(ProjectExplorer::Task)),
             hub, SLOT(addTask(ProjectExplorer::Task)), Qt::QueuedConnection);
 }
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 5b8ac5b7907f6e19509bced47944600ab5457787..fd20573f11200c294739084026bfd3dcfd1bb1d7 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -85,7 +85,7 @@ static const char CONFIGURATION_PATH[] = "<configuration>";
 
 ProjectExplorer::TaskHub *taskHub()
 {
-    return ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub();
+    return ProjectExplorer::ProjectExplorerPlugin::taskHub();
 }
 
 
@@ -393,8 +393,7 @@ void QbsProject::parse(const QVariantMap &config, const Utils::Environment &env,
     QTC_ASSERT(!dir.isNull(), return);
 
     // Clear buildsystem related tasks:
-    ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub()
-            ->clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
+    taskHub()->clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
 
     qbs::SetupProjectParameters params;
     params.setBuildConfiguration(config);
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp
index bf3de646965a615f43ddd24820a21823b3d634a0..bfd7933822470d1dd4a0966d5ce0acd90caa5267 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.cpp
+++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp
@@ -248,7 +248,7 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e
 
 void QmlJSEditorPlugin::extensionsInitialized()
 {
-    TaskHub *taskHub = ProjectExplorerPlugin::instance()->taskHub();
+    TaskHub *taskHub = ProjectExplorerPlugin::taskHub();
     taskHub->addCategory(Constants::TASK_CATEGORY_QML, tr("QML"));
     taskHub->addCategory(Constants::TASK_CATEGORY_QML_ANALYSIS, tr("QML Analysis"), false);
 }
@@ -348,7 +348,7 @@ void QmlJSEditorPlugin::currentEditorChanged(Core::IEditor *editor)
 void QmlJSEditorPlugin::runSemanticScan()
 {
     m_qmlTaskManager->updateSemanticMessagesNow();
-    TaskHub *hub = ProjectExplorerPlugin::instance()->taskHub();
+    TaskHub *hub = ProjectExplorerPlugin::taskHub();
     hub->setCategoryVisibility(Constants::TASK_CATEGORY_QML_ANALYSIS, true);
     hub->requestPopup();
 }
diff --git a/src/plugins/qmljseditor/qmltaskmanager.cpp b/src/plugins/qmljseditor/qmltaskmanager.cpp
index 88efb0cb7365760230033ab963680ceb93081d00..44ce4d0c1663e75409d9feae18b3ff473a69b701 100644
--- a/src/plugins/qmljseditor/qmltaskmanager.cpp
+++ b/src/plugins/qmljseditor/qmltaskmanager.cpp
@@ -54,7 +54,7 @@ QmlTaskManager::QmlTaskManager(QObject *parent) :
     m_taskHub(0),
     m_updatingSemantic(false)
 {
-    m_taskHub = ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub();
+    m_taskHub = ProjectExplorer::ProjectExplorerPlugin::taskHub();
 
     // displaying results incrementally leads to flickering
 //    connect(&m_messageCollector, SIGNAL(resultsReadyAt(int,int)),
diff --git a/src/plugins/qnx/bardescriptoreditor.cpp b/src/plugins/qnx/bardescriptoreditor.cpp
index b623680e6fe717833d72117f8f1119a7cdbcc61c..8f28abac302bf4986b21105b8361c69ab4ccb019 100644
--- a/src/plugins/qnx/bardescriptoreditor.cpp
+++ b/src/plugins/qnx/bardescriptoreditor.cpp
@@ -116,13 +116,9 @@ void BarDescriptorEditor::changeEditorPage(QAction *action)
     setActivePage(static_cast<EditorPage>(action->data().toInt()));
 }
 
-ProjectExplorer::TaskHub *BarDescriptorEditor::taskHub()
-{
-    return ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub();
-}
-
 void BarDescriptorEditor::setActivePage(BarDescriptorEditor::EditorPage page)
 {
+    ProjectExplorer::TaskHub *taskHub = ProjectExplorer::ProjectExplorerPlugin::taskHub();
     BarDescriptorEditorWidget *editorWidget = qobject_cast<BarDescriptorEditorWidget *>(widget());
     QTC_ASSERT(editorWidget, return);
 
@@ -134,14 +130,14 @@ void BarDescriptorEditor::setActivePage(BarDescriptorEditor::EditorPage page)
     if (page == Source) {
         editorWidget->setXmlSource(m_file->xmlSource());
     } else if (prevPage == Source) {
-        taskHub()->clearTasks(Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR);
+        taskHub->clearTasks(Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR);
         QString errorMsg;
         int errorLine;
         if (!m_file->loadContent(editorWidget->xmlSource(), &errorMsg, &errorLine)) {
             const ProjectExplorer::Task task(ProjectExplorer::Task::Error, errorMsg, Utils::FileName::fromString(m_file->filePath()),
                                        errorLine, Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR);
-            taskHub()->addTask(task);
-            taskHub()->requestPopup();
+            taskHub->addTask(task);
+            taskHub->requestPopup();
 
             foreach (QAction *action, m_actionGroup->actions())
                 if (action->data().toInt() == Source)
diff --git a/src/plugins/qnx/bardescriptoreditor.h b/src/plugins/qnx/bardescriptoreditor.h
index 1c3c47737a7a36ff3dd42e9e1219b4031fb963b4..cf0397fc7510845808b1756103f1c42c3ab99873 100644
--- a/src/plugins/qnx/bardescriptoreditor.h
+++ b/src/plugins/qnx/bardescriptoreditor.h
@@ -39,15 +39,10 @@ class QActionGroup;
 class QToolBar;
 QT_END_NAMESPACE
 
-namespace ProjectExplorer {
-    class TaskHub;
-}
-
 namespace Qnx {
 namespace Internal {
 
 class BarDescriptorDocument;
-
 class BarDescriptorEditorWidget;
 
 class BarDescriptorEditor : public Core::IEditor
@@ -74,8 +69,6 @@ private slots:
     void changeEditorPage(QAction *action);
 
 private:
-    ProjectExplorer::TaskHub *taskHub();
-
     void setActivePage(EditorPage page);
 
     BarDescriptorDocument *m_file;
diff --git a/src/plugins/qnx/qnxplugin.cpp b/src/plugins/qnx/qnxplugin.cpp
index 019c4412bff4c6f8958204c92f20ff40214bdd99..d37a92ea04c85040d4cc75f707cd3bf2544d1d5e 100644
--- a/src/plugins/qnx/qnxplugin.cpp
+++ b/src/plugins/qnx/qnxplugin.cpp
@@ -121,7 +121,7 @@ bool QNXPlugin::initialize(const QStringList &arguments, QString *errorString)
 
 void QNXPlugin::extensionsInitialized()
 {
-    ProjectExplorer::ProjectExplorerPlugin::instance()->taskHub()->addCategory(Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR,
+    ProjectExplorer::ProjectExplorerPlugin::taskHub()->addCategory(Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR,
                                                                                tr("Bar Descriptor"));
 }