diff --git a/src/plugins/projectexplorer/abstractmakestep.cpp b/src/plugins/projectexplorer/abstractmakestep.cpp
index b08f713c018906a626ac47506a5850a81c5778bf..85f2a45d224139553bc94934f3140bc25a1ec383 100644
--- a/src/plugins/projectexplorer/abstractmakestep.cpp
+++ b/src/plugins/projectexplorer/abstractmakestep.cpp
@@ -97,24 +97,25 @@ void AbstractMakeStep::setBuildParser(const QString &parser)
 
     if (m_buildParser) {
         m_buildParserName = parser;
-        connect(m_buildParser, SIGNAL(addToOutputWindow(const QString &)),
-                this, SIGNAL(addToOutputWindow(const QString &)),
+        connect(m_buildParser, SIGNAL(addToOutputWindow(QString)),
+                this, SIGNAL(addToOutputWindow(QString)),
                 Qt::DirectConnection);
-        connect(m_buildParser, SIGNAL(addToTaskWindow(const QString &, int, int, const QString &)),
-                this, SLOT(slotAddToTaskWindow(const QString &, int, int, const QString &)),
+        connect(m_buildParser, SIGNAL(addToTaskWindow(ProjectExplorer::TaskWindow::Task)),
+                this, SLOT(slotAddToTaskWindow(ProjectExplorer::TaskWindow::Task)),
                 Qt::DirectConnection);
-        connect(m_buildParser, SIGNAL(enterDirectory(const QString &)),
-                this, SLOT(addDirectory(const QString &)),
+        connect(m_buildParser, SIGNAL(enterDirectory(QString)),
+                this, SLOT(addDirectory(QString)),
                 Qt::DirectConnection);
-        connect(m_buildParser, SIGNAL(leaveDirectory(const QString &)),
-                this, SLOT(removeDirectory(const QString &)),
+        connect(m_buildParser, SIGNAL(leaveDirectory(QString)),
+                this, SLOT(removeDirectory(QString)),
                 Qt::DirectConnection);
     }
 }
 
-void AbstractMakeStep::slotAddToTaskWindow(const QString & fn, int type, int linenumber, const QString & description)
+void AbstractMakeStep::slotAddToTaskWindow(const TaskWindow::Task &task)
 {
-    QString filePath = fn;
+    TaskWindow::Task editable(task);
+    QString filePath = QDir::cleanPath(task.file.trimmed());
     if (!filePath.isEmpty() && !QDir::isAbsolutePath(filePath)) {
         // We have no save way to decide which file in which subfolder
         // is meant. Therefore we apply following heuristics:
@@ -123,8 +124,6 @@ void AbstractMakeStep::slotAddToTaskWindow(const QString & fn, int type, int lin
         // 3. Check if file is unique in whole project
         // 4. Otherwise give up
 
-        filePath = filePath.trimmed();
-
         QList<QFileInfo> possibleFiles;
         foreach (const QString &dir, m_openDirectories) {
             QFileInfo candidate(dir + QLatin1Char('/') + filePath);
@@ -151,7 +150,7 @@ void AbstractMakeStep::slotAddToTaskWindow(const QString & fn, int type, int lin
             }
         }
         if (possibleFiles.count() == 1) {
-            filePath = possibleFiles.first().filePath();
+            editable.file = possibleFiles.first().filePath();
         } else {
             // More then one filename, so do a better compare
             // Chop of any "../"
@@ -166,12 +165,12 @@ void AbstractMakeStep::slotAddToTaskWindow(const QString & fn, int type, int lin
                 }
             }
             if (count == 1)
-                filePath = possibleFilePath;
+                editable.file = possibleFilePath;
             else
                 qWarning() << "Could not find absolute location of file " << filePath;
         }
     }
-    emit addToTaskWindow(filePath, type, linenumber, description);
+    emit addToTaskWindow(editable);
 }
 
 void AbstractMakeStep::addDirectory(const QString &dir)
diff --git a/src/plugins/projectexplorer/abstractmakestep.h b/src/plugins/projectexplorer/abstractmakestep.h
index 87c2ea7da9beba26ece97e59ef431aa87b25d257..b2195b79d0995c0b7fd2aeaf869efca55a02a741 100644
--- a/src/plugins/projectexplorer/abstractmakestep.h
+++ b/src/plugins/projectexplorer/abstractmakestep.h
@@ -32,6 +32,7 @@
 
 #include "projectexplorer_export.h"
 #include "abstractprocessstep.h"
+#include "taskwindow.h"
 
 namespace ProjectExplorer {
 class BuildStep;
@@ -59,7 +60,7 @@ protected:
     void setBuildParser(const QString &parser);
     QString buildParser() const;
 private slots:
-    void slotAddToTaskWindow(const QString & fn, int type, int linenumber, const QString & description);
+    void slotAddToTaskWindow(const ProjectExplorer::TaskWindow::Task &task);
     void addDirectory(const QString &dir);
     void removeDirectory(const QString &dir);
 private:
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index 92671035563f43120142c5390782da5e5f0cb7a3..a585b40874d38f61b2506e19269322f94cb42e81 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -87,6 +87,7 @@ BuildManager::BuildManager(ProjectExplorerPlugin *parent)
     pm->addObject(m_taskWindow);
 
     m_taskWindow->addCategory(Constants::TASK_CATEGORY_COMPILE, tr("Compile", "Category for compiler isses listened under 'Build Issues'"));
+    m_taskWindow->addCategory(Constants::TASK_CATEGORY_BUILDSYSTEM, tr("Buildsystem", "Category for build system isses listened under 'Build Issues'"));
 
     connect(m_taskWindow, SIGNAL(tasksChanged()),
             this, SIGNAL(tasksChanged()));
@@ -126,8 +127,8 @@ void BuildManager::cancel()
         // (And we want those to be before the cancel message.)
         QTimer::singleShot(0, this, SLOT(emitCancelMessage()));
 
-        disconnect(m_currentBuildStep, SIGNAL(addToTaskWindow(QString, int, int, QString)),
-                   this, SLOT(addToTaskWindow(QString, int, int, QString)));
+        disconnect(m_currentBuildStep, SIGNAL(addToTaskWindow(ProjectExplorer::TaskWindow::Task)),
+                   this, SLOT(addToTaskWindow(ProjectExplorer::TaskWindow::Task)));
         disconnect(m_currentBuildStep, SIGNAL(addToOutputWindow(QString)),
                    this, SLOT(addToOutputWindow(QString)));
         decrementActiveBuildSteps(m_currentBuildStep->project());
@@ -230,10 +231,8 @@ void BuildManager::showBuildResults()
     //toggleTaskWindow();
 }
 
-void BuildManager::addToTaskWindow(const QString &file, int type, int line, const QString &description)
+void BuildManager::addToTaskWindow(const ProjectExplorer::TaskWindow::Task &task)
 {
-    TaskWindow::Task task(TaskWindow::TaskType(type), description, file, line,
-                           Constants::TASK_CATEGORY_COMPILE);
     m_taskWindow->addTask(task);
 }
 
@@ -247,8 +246,8 @@ void BuildManager::nextBuildQueue()
     if (m_canceling)
         return;
 
-    disconnect(m_currentBuildStep, SIGNAL(addToTaskWindow(QString, int, int, QString)),
-                this, SLOT(addToTaskWindow(QString, int, int, QString)));
+    disconnect(m_currentBuildStep, SIGNAL(addToTaskWindow(ProjectExplorer::TaskWindow::Task)),
+               this, SLOT(addToTaskWindow(ProjectExplorer::TaskWindow::Task)));
     disconnect(m_currentBuildStep, SIGNAL(addToOutputWindow(QString)),
                this, SLOT(addToOutputWindow(QString)));
 
@@ -290,8 +289,8 @@ void BuildManager::nextStep()
         m_buildQueue.pop_front();
         m_configurations.pop_front();
 
-        connect(m_currentBuildStep, SIGNAL(addToTaskWindow(QString, int, int, QString)),
-                this, SLOT(addToTaskWindow(QString, int, int, QString)));
+        connect(m_currentBuildStep, SIGNAL(addToTaskWindow(ProjectExplorer::TaskWindow::Task)),
+                this, SLOT(addToTaskWindow(ProjectExplorer::TaskWindow::Task)));
         connect(m_currentBuildStep, SIGNAL(addToOutputWindow(QString)),
                 this, SLOT(addToOutputWindow(QString)));
 
diff --git a/src/plugins/projectexplorer/buildmanager.h b/src/plugins/projectexplorer/buildmanager.h
index 58795ee5e1775de335780bfc4a71bbd6c912f78b..4d34a63a1ee5fa2fd7852acd73e8cb3437a20c9d 100644
--- a/src/plugins/projectexplorer/buildmanager.h
+++ b/src/plugins/projectexplorer/buildmanager.h
@@ -31,6 +31,7 @@
 #define BUILDMANAGER_H
 
 #include "projectexplorer_export.h"
+#include "taskwindow.h"
 
 #include <QtCore/QObject>
 #include <QtCore/QStringList>
@@ -45,7 +46,6 @@ namespace Internal {
     class BuildProgressFuture;
 }
 
-class TaskWindow;
 class BuildStep;
 class Project;
 class ProjectExplorerPlugin;
@@ -92,7 +92,7 @@ signals:
     void tasksChanged();
 
 private slots:
-    void addToTaskWindow(const QString &file, int type, int line, const QString &description);
+    void addToTaskWindow(const ProjectExplorer::TaskWindow::Task &task);
     void addToOutputWindow(const QString &string);
 
     void nextBuildQueue();
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index 4943965f06cacc048187c00f543acdfafb4a989c..e78f2d7ad9d984d296314c512d3240e34e5d59f6 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -126,7 +126,7 @@ protected:
     QMap<QString, QVariant> valuesToMap(const QString & buildConfiguration);
 
 Q_SIGNALS:
-    void addToTaskWindow(const QString &filename, int type, int linenumber, const QString &description);
+    void addToTaskWindow(const ProjectExplorer::TaskWindow::Task &task);
     // The string is added to the output window
     // It should be in html format, that is properly escaped
     void addToOutputWindow(const QString &string);
diff --git a/src/plugins/projectexplorer/gccparser.cpp b/src/plugins/projectexplorer/gccparser.cpp
index e0463244670e0a4399e5c0dc3dfd117f9dde022a..f4a1e7be750e13600a103451dca349e90b0d2418 100644
--- a/src/plugins/projectexplorer/gccparser.cpp
+++ b/src/plugins/projectexplorer/gccparser.cpp
@@ -71,42 +71,36 @@ void GccParser::stdError(const QString & line)
     QString lne = line.trimmed();
     if (m_regExpLinker.indexIn(lne) > -1) {
         QString description = m_regExpLinker.cap(2);
-        emit addToTaskWindow(
-                m_regExpLinker.cap(1), //filename
-                TaskWindow::Error,
-                -1, //linenumber
-                description);
-        //qDebug()<<"m_regExpLinker"<<m_regExpLinker.cap(2);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              description,
+                                              m_regExpLinker.cap(1) /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_COMPILE));
     } else if (m_regExp.indexIn(lne) > -1) {
-        TaskWindow::TaskType type;
+        TaskWindow::Task task(TaskWindow::Unknown,
+                              m_regExp.cap(6) /* description */,
+                              m_regExp.cap(1) /* filename */,
+                              m_regExp.cap(2).toInt() /* line number */,
+                              Constants::TASK_CATEGORY_COMPILE);
         if (m_regExp.cap(5) == "warning")
-            type = TaskWindow::Warning;
+            task.type = TaskWindow::Warning;
         else if (m_regExp.cap(5) == "error")
-            type = TaskWindow::Error;
-        else
-            type = TaskWindow::Unknown;
+            task.type = TaskWindow::Error;
 
-        QString description =  m_regExp.cap(6);
-
-        emit addToTaskWindow(
-                m_regExp.cap(1), //filename
-                type,
-                m_regExp.cap(2).toInt(), //line number
-                description);
+        emit addToTaskWindow(task);
     } else if (m_regExpIncluded.indexIn(lne) > -1) {
-        emit addToTaskWindow(
-                m_regExpIncluded.cap(1), //filename
-                TaskWindow::Unknown,
-                m_regExpIncluded.cap(2).toInt(), //linenumber
-                lne //description
-                );
-    } else if (lne.startsWith(QLatin1String("collect2:"))) {
-        emit addToTaskWindow("", TaskWindow::Error, -1, lne);
-    } else if (lne.startsWith(QLatin1String("ERROR:"))) {
-        // Triggered by cpp on windows.
-        emit addToTaskWindow(QString(), TaskWindow::Error, -1, lne);
-    } else if (lne == QLatin1String("* cpp failed")) {
-        // Triggered by cpp/make on windows.
-        emit addToTaskWindow(QString(), TaskWindow::Error, -1, lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Unknown,
+                                              lne /* description */,
+                                              m_regExpIncluded.cap(1) /* filename */,
+                                              m_regExpIncluded.cap(2).toInt() /* linenumber */,
+                                              Constants::TASK_CATEGORY_COMPILE));
+    } else if (lne.startsWith(QLatin1String("collect2:")) ||
+               lne.startsWith(QLatin1String("ERROR:")) ||
+               lne == QLatin1String("* cpp failed")) {
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              lne /* description */,
+                                              QString() /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_COMPILE));
     }
 }
diff --git a/src/plugins/projectexplorer/ibuildparser.h b/src/plugins/projectexplorer/ibuildparser.h
index 40e345b7c9e016979b737b100cf7d3ba1b59d352..c1e60afa653465a9b1fdf7f36e817d93965ffaa8 100644
--- a/src/plugins/projectexplorer/ibuildparser.h
+++ b/src/plugins/projectexplorer/ibuildparser.h
@@ -31,9 +31,10 @@
 #define IBUILDPARSER_H
 
 #include "projectexplorer_export.h"
+#include "taskwindow.h"
 
 #include <QtCore/QObject>
-#include <QtCore/QStack>
+#include <QtCore/QString>
 
 namespace ProjectExplorer {
 
@@ -51,7 +52,7 @@ Q_SIGNALS:
     void enterDirectory(const QString &dir);
     void leaveDirectory(const QString &dir);
     void addToOutputWindow(const QString & string);
-    void addToTaskWindow(const QString & filename, int type, int lineNumber, const QString & description);
+    void addToTaskWindow(const ProjectExplorer::TaskWindow::Task &task);
 };
 
 class PROJECTEXPLORER_EXPORT IBuildParserFactory
diff --git a/src/plugins/projectexplorer/metatypedeclarations.h b/src/plugins/projectexplorer/metatypedeclarations.h
index 5a9f9d53df9fe87fcd0a8fd1e291f5f88045ae30..92c7b896555eaee2b71b598a1404a7e355fe2b9a 100644
--- a/src/plugins/projectexplorer/metatypedeclarations.h
+++ b/src/plugins/projectexplorer/metatypedeclarations.h
@@ -62,4 +62,6 @@ Q_DECLARE_METATYPE(QList<ProjectExplorer::Internal::CommandQObject*>)
 Q_DECLARE_METATYPE(ProjectExplorer::IBuildParser*)
 
 Q_DECLARE_METATYPE(ProjectExplorer::GlobalConfigManagerInterface*)
+Q_DECLARE_METATYPE(ProjectExplorer::TaskWindow::Task)
+
 #endif // PROJECTEXPLORERMETATYPEDECLARATIONS_H
diff --git a/src/plugins/projectexplorer/msvcparser.cpp b/src/plugins/projectexplorer/msvcparser.cpp
index c840158c023616f27c7518227432d7e82b21bc67..df8996f9688543986ced5c9670589ba2b82b94d4 100644
--- a/src/plugins/projectexplorer/msvcparser.cpp
+++ b/src/plugins/projectexplorer/msvcparser.cpp
@@ -58,24 +58,24 @@ void MsvcParser::stdOutput(const QString & line)
 {
     QString lne = line.trimmed();
     if (m_compileRegExp.indexIn(lne) > -1 && m_compileRegExp.numCaptures() == 4) {
-        emit addToTaskWindow(
-            QDir::cleanPath(m_compileRegExp.cap(1)), //filename
-            toType(m_compileRegExp.cap(3).toInt()), // PatternType
-            m_compileRegExp.cap(2).toInt(), //linenumber
-            m_compileRegExp.cap(4) //description
-            );
-
-    } else if (m_linkRegExp.indexIn(lne) > -1 && m_linkRegExp.numCaptures() == 3) {
+        emit addToTaskWindow(TaskWindow::Task(toType(m_compileRegExp.cap(3).toInt()) /* task type */,
+                                              m_compileRegExp.cap(4) /* description */,
+                                              m_compileRegExp.cap(1) /* filename */,
+                                              m_compileRegExp.cap(2).toInt() /* linenumber */,
+                                              Constants::TASK_CATEGORY_COMPILE));
+        return;
+    }
+    if (m_linkRegExp.indexIn(lne) > -1 && m_linkRegExp.numCaptures() == 3) {
         QString fileName = m_linkRegExp.cap(1);
         if (fileName.contains(QLatin1String("LINK"), Qt::CaseSensitive))
             fileName.clear();
 
-        emit addToTaskWindow(
-            QDir::cleanPath(fileName), //filename
-            toType(m_linkRegExp.cap(2).toInt()), // pattern type
-            -1, // line number
-            m_linkRegExp.cap(3) // description
-            );
+        emit addToTaskWindow(TaskWindow::Task(toType(m_linkRegExp.cap(2).toInt()) /* task type */,
+                                              m_linkRegExp.cap(3) /* description */,
+                                              fileName /* filename */,
+                                              -1 /* line number */,
+                                              Constants::TASK_CATEGORY_COMPILE));
+        return;
     }
 }
 
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index 2e2b62be885183ceeda80670695ddd707e9c3e62..b7eb833f877b3df3b6991911bf90f91be5dc2e0c 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -192,6 +192,7 @@ const char * const PROJECTEXPLORER_PAGE                = "ProjectExplorer.Projec
 
 // task categories
 const char * const TASK_CATEGORY_COMPILE = "Task.Category.Compile";
+const char * const TASK_CATEGORY_BUILDSYSTEM = "Task.Category.Buildsystem";
 
 } // namespace Constants
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/qmakeparser.cpp b/src/plugins/projectexplorer/qmakeparser.cpp
index 4350615a0c46b847c59f693330b32673c9b5e7b8..aaca5aa46bfb8ea76340c3421aab985537d5dc92 100644
--- a/src/plugins/projectexplorer/qmakeparser.cpp
+++ b/src/plugins/projectexplorer/qmakeparser.cpp
@@ -52,7 +52,11 @@ void QMakeParser::stdError(const QString & line)
     if (lne.startsWith("Project ERROR:"))
     {
         lne = lne.mid(15);
-        emit addToTaskWindow(QString(), TaskWindow::Error, -1, lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              lne /* description */,
+                                              QString() /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         return;
     }
 }
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index 2772516841cd57c859778fb45a43b3d4987524f8..a179059a2b4317f8f7d57450cda06250fece20d6 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -47,8 +47,6 @@
 #include <QtGui/QStyledItemDelegate>
 #include <QtGui/QSortFilterProxyModel>
 
-#include <QDebug>
-
 namespace ProjectExplorer {
 namespace Internal {
 
@@ -488,6 +486,8 @@ TaskWindow::TaskWindow()
     m_categoriesButton->setPopupMode(QToolButton::InstantPopup);
     m_categoriesButton->setMenu(m_categoriesMenu);
 
+    qRegisterMetaType<ProjectExplorer::TaskWindow::Task>("ProjectExplorer::TaskWindow::Task");
+
     updateActions();
 }
 
diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h
index 1b460e5876bd069bf068dfab1ce4574894e8e7e7..5595b299fcfdbfda7d0ecf8bd2ab9c06171fb6a5 100644
--- a/src/plugins/projectexplorer/taskwindow.h
+++ b/src/plugins/projectexplorer/taskwindow.h
@@ -30,7 +30,7 @@
 #ifndef TASKWINDOW_H
 #define TASKWINDOW_H
 
-#include "ibuildparser.h"
+#include "projectexplorer_export.h"
 
 #include <coreplugin/icontext.h>
 #include <coreplugin/ioutputpane.h>
@@ -65,10 +65,14 @@ public:
     };
 
     struct Task {
+        Task() : type(Unknown), line(-1)
+        { }
         Task(TaskType type_, const QString &description_,
              const QString &file_, int line_, const QString &category_) :
             type(type_), description(description_), file(file_), line(line_), category(category_)
         { }
+        ~Task()
+        { }
 
         TaskType type;
         QString description;
diff --git a/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp b/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp
index e2d73c5f2a48831ea7bbaa908bdf859edb7378b8..93c8c53b8cbe56653c77d2866219eb7aeea81844 100644
--- a/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp
@@ -70,14 +70,14 @@ AbldParser::AbldParser(const QString &name) :
     }
     QTC_ASSERT(0 != m_subparser, return);
 
-    connect(m_subparser, SIGNAL(enterDirectory(const QString &)),
-            this, SIGNAL(enterDirectory(const QString &)));
-    connect(m_subparser, SIGNAL(leaveDirectory(const QString &)),
-            this, SIGNAL(leaveDirectory(const QString &)));
-    connect(m_subparser, SIGNAL(addToOutputWindow(const QString &)),
-            this, SIGNAL(addToOutputWindow(const QString &)));
-    connect(m_subparser, SIGNAL(addToTaskWindow(const QString &, int, int, const QString &)),
-            this, SIGNAL(addToTaskWindow(const QString &, int, int, const QString &)));
+    connect(m_subparser, SIGNAL(enterDirectory(QString)),
+            this, SIGNAL(enterDirectory(QString)));
+    connect(m_subparser, SIGNAL(leaveDirectory(QString)),
+            this, SIGNAL(leaveDirectory(QString)));
+    connect(m_subparser, SIGNAL(addToOutputWindow(QString)),
+            this, SIGNAL(addToOutputWindow(QString)));
+    connect(m_subparser, SIGNAL(addToTaskWindow(ProjectExplorer::TaskWindow::Task)),
+            this, SIGNAL(addToTaskWindow(ProjectExplorer::TaskWindow::Task)));
 }
 
 AbldParser::~AbldParser()
@@ -97,35 +97,39 @@ void AbldParser::stdOutput(const QString &line)
     QString lne = line.trimmed();
     // possible ABLD.bat errors:
     if (lne.startsWith("Is Perl, version ")) {
-        emit addToTaskWindow(
-                QString(), //filename
-                TaskWindow::Error,
-                -1, //linenumber
-                lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              lne /* description */,
+                                              QString() /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         return;
     }
     if (lne.startsWith("FATAL ERROR:")) {
-        emit addToTaskWindow(QString(), TaskWindow::Error,
-                             -1, lne.mid(12));
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              lne /* description */,
+                                              QString() /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         m_waitingForStdOutContinuation = false;
         return;
     }
 
     if (m_perlIssue.indexIn(lne) > -1) {
         m_waitingForStdOutContinuation = true;
-        TaskWindow::TaskType type;
-        if (m_perlIssue.cap(1) == QLatin1String("WARNING"))
-            type = TaskWindow::Warning;
-        else if (m_perlIssue.cap(1) == QLatin1String("ERROR"))
-            type = TaskWindow::Error;
-        else
-            type = TaskWindow::Unknown;
-
         m_currentFile = m_perlIssue.cap(2);
         m_currentLine = m_perlIssue.cap(3).toInt();
 
-        emit addToTaskWindow(m_currentFile, type,
-                             m_currentLine, m_perlIssue.cap(4));
+        TaskWindow::Task task(TaskWindow::Unknown,
+                              m_perlIssue.cap(4) /* description */,
+                              m_currentFile, m_currentLine,
+                              Constants::TASK_CATEGORY_BUILDSYSTEM);
+
+        if (m_perlIssue.cap(1) == QLatin1String("WARNING"))
+            task.type = TaskWindow::Warning;
+        else if (m_perlIssue.cap(1) == QLatin1String("ERROR"))
+            task.type = TaskWindow::Error;
+
+        emit addToTaskWindow(task);
         return;
     }
 
@@ -135,9 +139,10 @@ void AbldParser::stdOutput(const QString &line)
     }
 
     if (m_waitingForStdOutContinuation) {
-        emit addToTaskWindow(m_currentFile,
-                             TaskWindow::Unknown,
-                             m_currentLine, lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Unknown,
+                                              lne /* description */,
+                                              m_currentFile, m_currentLine,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         m_waitingForStdOutContinuation = true;
         return;
     }
@@ -157,18 +162,20 @@ void AbldParser::stdError(const QString &line)
     if (lne.startsWith("ABLD ERROR:") ||
         lne.startsWith("This project does not support ") ||
         lne.startsWith("Platform ")) {
-        emit addToTaskWindow(
-                QString(), // filename,
-                TaskWindow::Error,
-                -1, // linenumber
-                lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              lne /* description */,
+                                              QString() /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         return;
     }
 
     if (lne.startsWith("Died at ")) {
-        emit addToTaskWindow(QString(),
-                             TaskWindow::Error,
-                             -1, lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              lne /* description */,
+                                              QString() /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         m_waitingForStdErrContinuation = false;
         return;
     }
@@ -184,25 +191,29 @@ void AbldParser::stdError(const QString &line)
     }
     if (lne.startsWith("WARNING: ")) {
         QString description = lne.mid(9);
-        emit addToTaskWindow(m_currentFile,
-                             TaskWindow::Warning,
-                             -1, description);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Warning, description,
+                                              m_currentFile,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         m_waitingForStdErrContinuation = true;
         return;
     }
     if (lne.startsWith("ERROR: ")) {
         QString description = lne.mid(7);
-        emit addToTaskWindow(m_currentFile,
-                             TaskWindow::Error,
-                             -1, description);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error, description,
+                                              m_currentFile,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         m_waitingForStdErrContinuation = true;
         return;
     }
     if (m_waitingForStdErrContinuation)
     {
-        emit addToTaskWindow(m_currentFile,
-                             TaskWindow::Unknown,
-                             -1, lne);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Unknown,
+                                              lne /* description */,
+                                              m_currentFile,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_BUILDSYSTEM));
         m_waitingForStdErrContinuation = true;
         return;
     }
diff --git a/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp b/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp
index 07d56ebc708f0287171e9fc60a0bd7be1cd3541c..0b671f811384446e3c39e5ec972a9f6847378294 100644
--- a/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp
@@ -74,44 +74,35 @@ void RvctParser::stdOutput(const QString &line)
 void RvctParser::stdError(const QString &line)
 {
     QString lne = line.trimmed();
-
     if (m_linkerProblem.indexIn(lne) > -1) {
-       QString description = m_linkerProblem.cap(2);
-       emit addToTaskWindow(
-           m_linkerProblem.cap(1), //filename
-           TaskWindow::Error,
-           -1, //linenumber
-           description);
+       emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                             m_linkerProblem.cap(2) /* description */,
+                                             m_linkerProblem.cap(1) /* filename */,
+                                             -1 /* linenumber */,
+                                             Constants::TASK_CATEGORY_COMPILE));
    } else if (m_warningOrError.indexIn(lne) > -1) {
-       TaskWindow::TaskType type;
+       m_lastFile = m_warningOrError.cap(1);
+       m_lastLine = m_warningOrError.cap(2).toInt();
+
+       TaskWindow::Task task(TaskWindow::Unknown,
+                             m_warningOrError.cap(5) /* description */,
+                             m_lastFile, m_lastLine,
+                             Constants::TASK_CATEGORY_COMPILE);
        if (m_warningOrError.cap(4) == "Warning")
-           type = TaskWindow::Warning;
+           task.type = TaskWindow::Warning;
        else if (m_warningOrError.cap(4) == "Error")
-           type = TaskWindow::Error;
-       else
-           type = TaskWindow::Unknown;
-
-       QString description =  m_warningOrError.cap(5);
+           task.type = TaskWindow::Error;
 
        m_additionalInfo = true;
-       m_lastFile = m_warningOrError.cap(1);
-       m_lastLine = m_warningOrError.cap(2).toInt();
 
-       emit addToTaskWindow(
-           m_lastFile, //filename
-           type,
-           m_lastLine, //line number
-           description);
+       emit addToTaskWindow(task);
    } else if (m_doneWithFile.indexIn(lne) > -1) {
        m_additionalInfo = false;
    } else if (m_additionalInfo) {
        // Report any lines after a error/warning message as these contain
        // additional information on the problem.
-       emit addToTaskWindow(
-           m_lastFile, //filesname
-           TaskWindow::Unknown,
-           m_lastLine, //linenumber
-           lne //description
-       );
+       emit addToTaskWindow(TaskWindow::Task(TaskWindow::Unknown, lne,
+                                             m_lastFile,  m_lastLine,
+                                             Constants::TASK_CATEGORY_COMPILE));
    }
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp
index 6c8156370bb0395b4984fd68c3daa07dedc85cee..6b8d4a0a721a072245e09bbfe37b79c502bddc55 100644
--- a/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp
@@ -67,17 +67,16 @@ void WinscwParser::stdOutput(const QString &line)
     }
 
     if (m_compilerProblem.indexIn(lne) > -1) {
-        QString fileName(m_compilerProblem.cap(1));
-        int lineNumber(m_compilerProblem.cap(2).toInt());
-        QString description(m_compilerProblem.cap(3));
-        TaskWindow::TaskType type(TaskWindow::Error);
-
-        if (description.startsWith("warning: ")) {
-            type = TaskWindow::Warning;
-            description = description.mid(9);
+        TaskWindow::Task task(TaskWindow::Error,
+                              m_compilerProblem.cap(3) /* description */,
+                              m_compilerProblem.cap(1) /* filename */,
+                              m_compilerProblem.cap(2).toInt() /* linenumber */,
+                              Constants::TASK_CATEGORY_COMPILE);
+        if (task.description.startsWith("warning: ")) {
+            task.type = TaskWindow::Warning;
+            task.description = task.description.mid(9);
         }
-
-        emit addToTaskWindow(fileName, type, lineNumber, description);
+        emit addToTaskWindow(task);
     }
 }
 
@@ -86,11 +85,10 @@ void WinscwParser::stdError(const QString &line)
     QString lne = line.trimmed();
 
     if (m_linkerProblem.indexIn(lne) > -1) {
-        QString description = m_linkerProblem.cap(2);
-        emit addToTaskWindow(
-                m_linkerProblem.cap(1), //filename
-                TaskWindow::Error,
-                -1, //linenumber
-                description);
+        emit addToTaskWindow(TaskWindow::Task(TaskWindow::Error,
+                                              m_linkerProblem.cap(2) /* description */,
+                                              m_linkerProblem.cap(1) /* filename */,
+                                              -1 /* linenumber */,
+                                              Constants::TASK_CATEGORY_COMPILE));
     }
 }