diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 52aa42c734cb638e3f186d85e8abe9c7b5b893d7..312c25941c93a3845cf36d6e60dcbde4badb2151 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -35,6 +35,7 @@ SUBDIRS   = plugin_coreplugin \
             plugin_qmljseditor \
             plugin_mercurial \
             plugin_classview \
+            plugin_tasklist \
             debugger/dumper.pro
 
 contains(QT_CONFIG, declarative) {
@@ -219,3 +220,7 @@ plugin_classview.depends = plugin_coreplugin
 plugin_classview.depends += plugin_cpptools
 plugin_classview.depends += plugin_projectexplorer
 plugin_classview.depends += plugin_texteditor
+
+plugin_tasklist.subdir = tasklist
+plugin_tasklist.depends = plugin_coreplugin
+plugin_tasklist.depends += plugin_projectexplorer
diff --git a/src/plugins/projectexplorer/showineditortaskhandler.cpp b/src/plugins/projectexplorer/showineditortaskhandler.cpp
index 53c3af1aaa61636d657821934e28ea06cfbb7592..8783bcd7c0625ae68ffa6d3829579f253a151f2a 100644
--- a/src/plugins/projectexplorer/showineditortaskhandler.cpp
+++ b/src/plugins/projectexplorer/showineditortaskhandler.cpp
@@ -46,6 +46,8 @@ ShowInEditorTaskHandler::ShowInEditorTaskHandler() :
 
 bool ShowInEditorTaskHandler::canHandle(const ProjectExplorer::Task &task)
 {
+    if (task.file.isEmpty())
+        return false;
     QFileInfo fi(task.file);
     return fi.exists() && fi.isFile() && fi.isReadable();
 }
diff --git a/src/plugins/tasklist/TaskList.mimetypes.xml b/src/plugins/tasklist/TaskList.mimetypes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f167ac5184d0d730ec4d8d7088f5953cf78d4742
--- /dev/null
+++ b/src/plugins/tasklist/TaskList.mimetypes.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+    <mime-type type="text/x-tasklist">
+        <sub-class-of type="text/plain"/>
+        <comment>Qt Creator task list file</comment>
+        <glob pattern="*.tasks"/>
+    </mime-type>
+</mime-info>
diff --git a/src/plugins/tasklist/TaskList.pluginspec b/src/plugins/tasklist/TaskList.pluginspec
new file mode 100644
index 0000000000000000000000000000000000000000..18609100f91c19f3fcb7c3f250c3f244d21186b7
--- /dev/null
+++ b/src/plugins/tasklist/TaskList.pluginspec
@@ -0,0 +1,19 @@
+<plugin name="TaskList" version="2.1.80" compatVersion="2.1.80">
+    <vendor>Nokia Corporation</vendor>
+    <copyright>(C) 2010 Nokia Corporation</copyright>
+    <license>
+Commercial Usage
+
+Licensees holding valid Qt Commercial licenses may use this plugin in accordance with the Qt Commercial License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Nokia.
+
+GNU Lesser General Public License Usage
+
+Alternatively, this plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.  Please review the following information to ensure the GNU Lesser General Public License version 2.1 requirements will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+    </license>
+    <description>Use .tasks-files to populate the build issues view.</description>
+    <url>http://qt.nokia.com</url>
+    <dependencyList>
+        <dependency name="Core" version="2.1.80"/>
+	<dependency name="ProjectExplorer" version="2.1.80"/>
+    </dependencyList>
+</plugin>
diff --git a/src/plugins/tasklist/taskfilefactory.cpp b/src/plugins/tasklist/taskfilefactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8665afd8b050483554389ab94f59bf43a03ddcc5
--- /dev/null
+++ b/src/plugins/tasklist/taskfilefactory.cpp
@@ -0,0 +1,65 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "taskfilefactory.h"
+
+#include "tasklistmanager.h"
+
+using namespace TaskList::Internal;
+
+TaskFileFactory::TaskFileFactory(TaskListManager *manager) :
+    Core::IFileFactory(0),
+    m_manager(manager),
+    m_mimeTypes(QStringList() << QLatin1String("text/x-tasklist"))
+{ }
+
+TaskFileFactory::~TaskFileFactory()
+{ }
+
+QStringList TaskFileFactory::mimeTypes() const
+{
+    return m_mimeTypes;
+}
+
+QString TaskFileFactory::id() const
+{
+    return QLatin1String("ProjectExplorer.TaskFileFactory");
+}
+
+QString TaskFileFactory::displayName() const
+{
+    return tr("Task file reader");
+}
+
+Core::IFile *TaskFileFactory::open(const QString &fileName)
+{
+    Core::IFile *file = 0;
+    m_manager->setTaskFile(fileName);
+    return file;
+}
diff --git a/src/plugins/tasklist/taskfilefactory.h b/src/plugins/tasklist/taskfilefactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..93607324098ef263bd667d61df31d633c9be7ada
--- /dev/null
+++ b/src/plugins/tasklist/taskfilefactory.h
@@ -0,0 +1,64 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef TASKFILEFACTORY_H
+#define TASKFILEFACTORY_H
+
+#include <coreplugin/ifilefactory.h>
+
+#include <QtCore/QStringList>
+
+namespace TaskList {
+namespace Internal {
+
+class TaskListManager;
+
+class TaskFileFactory : public Core::IFileFactory
+{
+    Q_OBJECT
+public:
+    TaskFileFactory(TaskListManager *manager);
+    ~TaskFileFactory();
+
+    QStringList mimeTypes() const;
+
+    QString id() const;
+    QString displayName() const;
+
+    Core::IFile *open(const QString &fileName);
+
+private:
+    TaskListManager * m_manager;
+    QStringList m_mimeTypes;
+};
+
+} // namespace Internal
+} // namespace TaskList
+
+#endif // TASKFILEFACTORY_H
diff --git a/src/plugins/tasklist/tasklist.pro b/src/plugins/tasklist/tasklist.pro
new file mode 100644
index 0000000000000000000000000000000000000000..6aaa721ae76b4c7f7b656d646fdf221be2f6ac44
--- /dev/null
+++ b/src/plugins/tasklist/tasklist.pro
@@ -0,0 +1,19 @@
+TEMPLATE = lib
+TARGET = TaskList
+
+include(../../qtcreatorplugin.pri)
+include(../../plugins/coreplugin/coreplugin.pri)
+include(../../plugins/projectexplorer/projectexplorer.pri)
+
+HEADERS += tasklistplugin.h \
+    taskfilefactory.h \
+    tasklistmanager.h
+
+SOURCES += tasklistplugin.cpp \
+    taskfilefactory.cpp \
+    tasklistmanager.cpp
+
+RESOURCES += tasklist.qrc
+
+OTHER_FILES += TaskList.pluginspec \
+    TaskList.mimetypes.xml
diff --git a/src/plugins/tasklist/tasklist.qrc b/src/plugins/tasklist/tasklist.qrc
new file mode 100644
index 0000000000000000000000000000000000000000..2acafd38a54f9638da19ced3fcd831b3294a0d49
--- /dev/null
+++ b/src/plugins/tasklist/tasklist.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/tasklist">
+        <file>TaskList.mimetypes.xml</file>
+    </qresource>
+</RCC>
diff --git a/src/plugins/tasklist/tasklistmanager.cpp b/src/plugins/tasklist/tasklistmanager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ccccefe6d6e9202e4c10bc02d0f84656256f307d
--- /dev/null
+++ b/src/plugins/tasklist/tasklistmanager.cpp
@@ -0,0 +1,150 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "tasklistmanager.h"
+
+#include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/taskhub.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+
+namespace {
+const char * const TASKLIST_ID = "TaskList.ListId";
+
+ProjectExplorer::Task::TaskType typeFrom(const QString &taskType)
+{
+    QString type = taskType.toLower();
+    if (type.startsWith("warn"))
+        return ProjectExplorer::Task::Warning;
+    else if (type.startsWith("err"))
+        return ProjectExplorer::Task::Error;
+    return ProjectExplorer::Task::Unknown;
+}
+
+} // namespace
+
+using namespace TaskList::Internal;
+
+TaskListManager::TaskListManager(QObject *parent) :
+    QObject(parent),
+    m_hub(0)
+{
+    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+    m_hub = pm->getObject<ProjectExplorer::TaskHub>();
+    m_hub->addCategory(QLatin1String(TASKLIST_ID), tr("My tasks"));
+}
+
+TaskListManager::~TaskListManager()
+{ }
+
+void TaskListManager::setTaskFile(const QString &name)
+{
+    m_hub->clearTasks(QLatin1String(TASKLIST_ID));
+    parseTaskFile(name);
+}
+
+void TaskListManager::parseTaskFile(const QString &name)
+{
+    QFile tf(name);
+    if (!tf.open(QIODevice::ReadOnly))
+        return;
+    while (!tf.atEnd())
+    {
+        QStringList chunks = parseRawLine(tf.readLine());
+        if (chunks.isEmpty())
+            continue;
+
+        QString description;
+        QString file;
+        ProjectExplorer::Task::TaskType type = ProjectExplorer::Task::Unknown;
+        int line = -1;
+
+        if (chunks.count() == 1) {
+            description = chunks.at(0);
+        } else if (chunks.count() == 2) {
+            type = typeFrom(chunks.at(0));
+            description = chunks.at(1);
+        } else if (chunks.count() == 3) {
+            file = chunks.at(0);
+            type = typeFrom(chunks.at(1));
+            description = chunks.at(2);
+        } else if (chunks.count() >= 4) {
+            file = chunks.at(0);
+            bool ok;
+            line = chunks.at(1).toInt(&ok);
+            if (!ok)
+                line = -1;
+            type = typeFrom(chunks.at(2));
+            description = chunks.at(3);
+        }
+        m_hub->addTask(ProjectExplorer::Task(type, description, file, line, QLatin1String(TASKLIST_ID)));
+    }
+}
+
+QStringList TaskListManager::parseRawLine(const QByteArray &raw)
+{
+    QStringList result;
+    QString line = QString::fromUtf8(raw.constData());
+    if (line.startsWith(QChar('#')))
+        return result;
+
+    result = line.split(QChar('\t'));
+    for (int i = 0; i < result.count(); ++i)
+        result[i] = unescape(result.at(i));
+
+    return result;
+}
+
+QString TaskListManager::unescape(const QString &input) const
+{
+    QString result;
+    for (int i = 0; i < input.count(); ++i) {
+        if (input.at(i) == QChar('\\')) {
+            if (i == input.count() - 1)
+                continue;
+            if (input.at(i + 1) == QChar('n')) {
+                result.append(QChar('\n'));
+                ++i;
+                continue;
+            } else if (input.at(i + 1) == QChar('t')) {
+                result.append(QChar('\t'));
+                ++i;
+                continue;
+            } else if (input.at(i + 1) == QChar('\\')) {
+                result.append(QChar('\\'));
+                ++i;
+                continue;
+            }
+            continue;
+        }
+        result.append(input.at(i));
+    }
+    return result;
+}
diff --git a/src/plugins/tasklist/tasklistmanager.h b/src/plugins/tasklist/tasklistmanager.h
new file mode 100644
index 0000000000000000000000000000000000000000..c51f698a910245993d3ff84d0636fe7566dad026
--- /dev/null
+++ b/src/plugins/tasklist/tasklistmanager.h
@@ -0,0 +1,66 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef TASKLISTMANAGER_H
+#define TASKLISTMANAGER_H
+
+#include <QtCore/QByteArray>
+#include <QtCore/QObject>
+#include <QtCore/QStringList>
+
+namespace ProjectExplorer {
+class TaskHub;
+} // namespace ProjectExplorer
+
+namespace TaskList {
+namespace Internal {
+
+class TaskListManager : public QObject
+{
+    Q_OBJECT
+
+public:
+    TaskListManager(QObject *parent = 0);
+    ~TaskListManager();
+
+public slots:
+    void setTaskFile(const QString &name);
+
+private:
+    void parseTaskFile(const QString &name);
+    QStringList parseRawLine(const QByteArray &raw);
+    QString unescape(const QString &input) const;
+
+    ProjectExplorer::TaskHub *m_hub;
+};
+
+} // namespace Internal
+} // namespace TaskList
+
+#endif // TASKLISTMANAGER_H
diff --git a/src/plugins/tasklist/tasklistplugin.cpp b/src/plugins/tasklist/tasklistplugin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..327cf2b38c52ad6930df5a4aab765b82cb101ba5
--- /dev/null
+++ b/src/plugins/tasklist/tasklistplugin.cpp
@@ -0,0 +1,66 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "tasklistplugin.h"
+
+#include "taskfilefactory.h"
+#include "tasklistmanager.h"
+
+#include <coreplugin/icore.h>
+#include <coreplugin/mimedatabase.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QStringList>
+#include <QtCore/QtPlugin>
+
+using namespace TaskList::Internal;
+
+TaskListPlugin::TaskListPlugin()
+{ }
+
+TaskListPlugin::~TaskListPlugin()
+{ }
+
+bool TaskListPlugin::initialize(const QStringList &arguments, QString *errorMessage)
+{
+    Q_UNUSED(arguments)
+
+    Core::ICore *core = Core::ICore::instance();
+    if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":tasklist/TaskList.mimetypes.xml"), errorMessage))
+        return false;
+
+    TaskListManager * manager = new TaskListManager(this);
+    addObject(new TaskFileFactory(manager));
+    return true;
+}
+
+void TaskListPlugin::extensionsInitialized()
+{ }
+
+Q_EXPORT_PLUGIN(TaskListPlugin)
diff --git a/src/plugins/tasklist/tasklistplugin.h b/src/plugins/tasklist/tasklistplugin.h
new file mode 100644
index 0000000000000000000000000000000000000000..d28e59c821a5e617eb5b97fb8fd76a8c1884e879
--- /dev/null
+++ b/src/plugins/tasklist/tasklistplugin.h
@@ -0,0 +1,54 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef TASKLISTPLUGIN_H
+#define TASKLISTPLUGIN_H
+
+#include <extensionsystem/iplugin.h>
+
+namespace TaskList {
+namespace Internal {
+
+class TaskListPlugin : public ExtensionSystem::IPlugin
+{
+    Q_OBJECT
+
+public:
+    TaskListPlugin();
+    ~TaskListPlugin();
+
+    bool initialize(const QStringList &arguments, QString *errorMessage);
+
+    void extensionsInitialized();
+};
+
+} // namespace Internal
+} // namespace TaskList
+
+#endif // TASKLISTPLUGIN_H