diff --git a/src/plugins/projectexplorer/taskmodel.cpp b/src/plugins/projectexplorer/taskmodel.cpp
index 0db5926e0fdc9f15d20a2272f0547bc199d7026d..dcebb02f6b3ca58771a2a8484539c6f2f8c27f17 100644
--- a/src/plugins/projectexplorer/taskmodel.cpp
+++ b/src/plugins/projectexplorer/taskmodel.cpp
@@ -114,14 +114,21 @@ QList<Task> TaskModel::tasks(const Core::Id &categoryId) const
     return taskList;
 }
 
+bool sortById(const Task &task, unsigned int id)
+{
+    return task.taskId < id;
+}
+
 void TaskModel::addTask(const Task &task)
 {
     Q_ASSERT(m_categories.keys().contains(task.category));
     CategoryData &data = m_categories[task.category];
     CategoryData &global = m_categories[Core::Id()];
 
-    beginInsertRows(QModelIndex(), m_tasks.count(), m_tasks.count());
-    m_tasks.append(task);
+    QList<Task>::iterator it = qLowerBound(m_tasks.begin(), m_tasks.end(),task.taskId, sortById);
+    int i = it - m_tasks.begin();
+    beginInsertRows(QModelIndex(), i, i);
+    m_tasks.insert(it, task);
     data.addTask(task);
     global.addTask(task);
     endInsertRows();
diff --git a/src/plugins/projectexplorer/taskmodel.h b/src/plugins/projectexplorer/taskmodel.h
index d977b2547f2d9d8fb09d063a302c15e6e98c50db..1dfb6733c9370e9d1cfe8345def39360dcf7b99a 100644
--- a/src/plugins/projectexplorer/taskmodel.h
+++ b/src/plugins/projectexplorer/taskmodel.h
@@ -116,7 +116,7 @@ private:
     };
 
     QHash<Core::Id,CategoryData> m_categories; // category id to data
-    QList<Task> m_tasks;   // all tasks (in order of insertion)
+    QList<Task> m_tasks;   // all tasks (in order of id)
 
     QHash<QString,bool> m_fileNotFound;
     int m_maxSizeOfFileName;