diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
index 1dbc697899a46f220a58a9d8abd0c133d255752a..a69fcb3ded7d028b258809889eaa539a5dd732b0 100644
--- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
@@ -36,7 +36,10 @@
 #include "cmakehighlighter.h"
 #include "cmakeeditorfactory.h"
 #include "cmakeprojectconstants.h"
+#include "cmakeproject.h"
 
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/session.h>
 #include <texteditor/fontsettings.h>
 #include <texteditor/texteditoractionhandler.h>
 #include <texteditor/texteditorconstants.h>
@@ -55,7 +58,10 @@ CMakeEditor::CMakeEditor(CMakeEditorWidget *editor)
   : BaseTextEditor(editor),
     m_context(CMakeProjectManager::Constants::C_CMAKEEDITOR,
               TextEditor::Constants::C_TEXTEDITOR)
-{ }
+{
+    connect (this, SIGNAL(changed()),
+             this, SLOT(markAsChanged()));
+}
 
 Core::Context CMakeEditor::context() const
 {
@@ -76,6 +82,30 @@ QString CMakeEditor::id() const
     return QLatin1String(CMakeProjectManager::Constants::CMAKE_EDITOR_ID);
 }
 
+void CMakeEditor::markAsChanged()
+{
+    Core::EditorManager::instance()->
+            showEditorInfoBar(QLatin1String("CMakeEditor.RunCMake"),
+                              tr("Changes to cmake files are shown in the project tree after building."),
+                              tr("Build now"),
+                              this, SLOT(build()));
+}
+
+void CMakeEditor::build()
+{
+    QList<ProjectExplorer::Project *> projects =
+            ProjectExplorer::ProjectExplorerPlugin::instance()->session()->projects();
+    foreach (ProjectExplorer::Project *p, projects) {
+        CMakeProject *cmakeProject = qobject_cast<CMakeProject *>(p);
+        if (cmakeProject) {
+            if (cmakeProject->isProjectFile(file()->fileName())) {
+                ProjectExplorer::ProjectExplorerPlugin::instance()->buildProject(cmakeProject);
+                break;
+            }
+        }
+    }
+}
+
 //
 // CMakeEditor
 //
diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.h b/src/plugins/cmakeprojectmanager/cmakeeditor.h
index 460f90eb81e84ffa3012ab48cf83d3fbd3923904..2ce08908df048b99e393841a9443e4ff9d20eb76 100644
--- a/src/plugins/cmakeprojectmanager/cmakeeditor.h
+++ b/src/plugins/cmakeprojectmanager/cmakeeditor.h
@@ -53,6 +53,7 @@ class CMakeManager;
 
 class CMakeEditor : public TextEditor::BaseTextEditor
 {
+    Q_OBJECT
 public:
     CMakeEditor(CMakeEditorWidget *);
     Core::Context context() const;
@@ -61,6 +62,9 @@ public:
     Core::IEditor *duplicate(QWidget *parent);
     QString id() const;
     bool isTemporary() const { return false; }
+private slots:
+    void markAsChanged();
+    void build();
 private:
     const Core::Context m_context;
 };
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index 399e83f0c23027a5f3ec7f9182dfe44d861db218..a882e5ebf932ab0455a410be51c24806c73cfd15 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -97,7 +97,6 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName)
     : m_manager(manager),
       m_fileName(fileName),
       m_rootNode(new CMakeProjectNode(m_fileName)),
-      m_insideFileChanged(false),
       m_lastEditor(0)
 {
     m_file = new CMakeFile(this, fileName);
@@ -126,15 +125,8 @@ CMakeProject::~CMakeProject()
 void CMakeProject::fileChanged(const QString &fileName)
 {
     Q_UNUSED(fileName)
-    if (!activeTarget() ||
-        !activeTarget()->activeBuildConfiguration())
-        return;
 
-    if (m_insideFileChanged)
-        return;
-    m_insideFileChanged = true;
-    changeActiveBuildConfiguration(activeTarget()->activeBuildConfiguration());
-    m_insideFileChanged = false;
+    parseCMakeLists();
 }
 
 void CMakeProject::changeActiveBuildConfiguration(ProjectExplorer::BuildConfiguration *bc)
@@ -201,6 +193,8 @@ bool CMakeProject::parseCMakeLists()
         !activeTarget()->activeBuildConfiguration())
         return false;
 
+    Core::EditorManager::instance()->hideEditorInfoBar("CMakeEditor.RunCMake");
+
     // Find cbp file
     CMakeBuildConfiguration *activeBC = activeTarget()->activeBuildConfiguration();
     QString cbpFile = CMakeManager::findCbpFile(activeBC->buildDirectory());
@@ -212,12 +206,17 @@ bool CMakeProject::parseCMakeLists()
     //qDebug()<<"Parsing file "<<cbpFile;
     if (!cbpparser.parseCbpFile(cbpFile)) {
         // TODO report error
-        qDebug()<<"Parsing failed";
-        // activeBC->updateToolChain(QString::null);
         emit buildTargetsChanged();
         return false;
     }
 
+    foreach (const QString &file, m_watcher->files())
+        if (file != cbpFile)
+            m_watcher->removePath(file);
+
+    // how can we ensure that it is completly written?
+    m_watcher->addPath(cbpFile);
+
     // ToolChain
     // activeBC->updateToolChain(cbpparser.compilerName());
     m_projectName = cbpparser.projectName();
@@ -238,12 +237,6 @@ bool CMakeProject::parseCMakeLists()
         projectFiles.insert(cmakeListTxt);
     }
 
-    QSet<QString> added = projectFiles;
-    added.subtract(m_watchedFiles);
-    foreach(const QString &add, added)
-        m_watcher->addFile(add);
-    foreach(const QString &remove, m_watchedFiles.subtract(projectFiles))
-        m_watcher->removeFile(remove);
     m_watchedFiles = projectFiles;
 
     m_files.clear();
@@ -279,7 +272,6 @@ bool CMakeProject::parseCMakeLists()
     }
     cmakeCache.close();
 
-    //qDebug()<<"Updating CodeModel";
     createUiCodeModelSupport();
 
     if (!activeBC->toolChain())
@@ -317,12 +309,16 @@ bool CMakeProject::parseCMakeLists()
             m_codeModelFuture = modelmanager->updateSourceFiles(pinfo.sourceFiles);
         }
     }
-
     emit buildTargetsChanged();
     emit fileListChanged();
     return true;
 }
 
+bool CMakeProject::isProjectFile(const QString &fileName)
+{
+    return m_watchedFiles.contains(fileName);
+}
+
 QList<CMakeBuildTarget> CMakeProject::buildTargets() const
 {
     return m_buildTargets;
@@ -562,7 +558,7 @@ bool CMakeProject::fromMap(const QVariantMap &map)
         }
     }
 
-    m_watcher = new ProjectExplorer::FileWatcher(this);
+    m_watcher = new QFileSystemWatcher(this);
     connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(fileChanged(QString)));
 
     if (!parseCMakeLists()) // Gets the directory from the active buildconfiguration
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index df1b9a7a577c628a077deaf4275ca4197b7f6f4c..52540fba22907ef4a11858ae6f9a07c40fc3a93d 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -46,9 +46,11 @@
 #include <projectexplorer/filewatcher.h>
 #include <projectexplorer/buildconfiguration.h>
 #include <coreplugin/ifile.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
 
 #include <QtCore/QXmlStreamReader>
+#include <QtCore/QFileSystemWatcher>
 #include <QtGui/QPushButton>
 #include <QtGui/QLineEdit>
 
@@ -105,6 +107,8 @@ public:
 
     QString uicCommand() const;
 
+    bool isProjectFile(const QString &fileName);
+
 signals:
     /// emitted after parsing
     void buildTargetsChanged();
@@ -142,8 +146,7 @@ private:
     CMakeProjectNode *m_rootNode;
     QStringList m_files;
     QList<CMakeBuildTarget> m_buildTargets;
-    ProjectExplorer::FileWatcher *m_watcher;
-    bool m_insideFileChanged;
+    QFileSystemWatcher *m_watcher;
     QSet<QString> m_watchedFiles;
     QFuture<void> m_codeModelFuture;
 
diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp
index ddc37f12decdd3a6b2e57314d9da6d2ad7dcb511..8fcf218f79e1ef77276042eb178253afba436027 100644
--- a/src/plugins/projectexplorer/abstractprocessstep.cpp
+++ b/src/plugins/projectexplorer/abstractprocessstep.cpp
@@ -175,7 +175,7 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
 
 void AbstractProcessStep::processStarted()
 {
-    emit addOutput(tr("Starting: \"%1\" %2\n")
+    emit addOutput(tr("Starting: \"%1\" %2")
                    .arg(QDir::toNativeSeparators(m_param.effectiveCommand()),
                         m_param.prettyArguments()),
                    BuildStep::MessageOutput);
@@ -222,7 +222,7 @@ void AbstractProcessStep::stdOutput(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdOutput(line);
-    emit addOutput(line, BuildStep::NormalOutput);
+    emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
 }
 
 void AbstractProcessStep::processReadyReadStdError()
@@ -238,7 +238,7 @@ void AbstractProcessStep::stdError(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdError(line);
-    emit addOutput(line, BuildStep::ErrorOutput);
+    emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
 }
 
 void AbstractProcessStep::checkForCancel()
@@ -301,7 +301,7 @@ void AbstractProcessStep::taskAdded(const ProjectExplorer::Task &task)
 
 void AbstractProcessStep::outputAdded(const QString &string, ProjectExplorer::BuildStep::OutputFormat format)
 {
-    emit addOutput(string, format);
+    emit addOutput(string, format, BuildStep::DontAppendNewline);
 }
 
 void AbstractProcessStep::slotProcessFinished(int, QProcess::ExitStatus)
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index e737957ac6ed36f94fbd6a549031496304fcc3f4..d934305628b58dfb51154a5e5ed55a44a6f3dcbf 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -136,6 +136,7 @@ BuildManager::BuildManager(ProjectExplorerPlugin *parent)
     pm->addObject(d->m_taskWindow);
 
     qRegisterMetaType<ProjectExplorer::BuildStep::OutputFormat>();
+    qRegisterMetaType<ProjectExplorer::BuildStep::OutputNewlineSetting>();
 
     connect(d->m_taskWindow, SIGNAL(tasksChanged()),
             this, SLOT(updateTaskCount()));
@@ -198,10 +199,7 @@ void BuildManager::cancel()
         // (And we want those to be before the cancel message.)
         QTimer::singleShot(0, this, SLOT(emitCancelMessage()));
 
-        disconnect(d->m_currentBuildStep, SIGNAL(addTask(ProjectExplorer::Task)),
-                   this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-        disconnect(d->m_currentBuildStep, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                   this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
+        disconnectOutput(d->m_currentBuildStep);
         decrementActiveBuildSteps(d->m_currentBuildStep->buildConfiguration()->target()->project());
 
         d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, tr("Build canceled")); //TODO NBS fix in qtconcurrent
@@ -229,17 +227,14 @@ void BuildManager::finish()
 
 void BuildManager::emitCancelMessage()
 {
-    emit addToOutputWindow(tr("Canceled build."), BuildStep::ErrorMessageOutput);
+    addToOutputWindow(tr("Canceled build."), BuildStep::ErrorMessageOutput);
 }
 
 void BuildManager::clearBuildQueue()
 {
     foreach (BuildStep *bs, d->m_buildQueue) {
         decrementActiveBuildSteps(bs->buildConfiguration()->target()->project());
-        disconnect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
-                   this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-        disconnect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                   this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
+        disconnectOutput(bs);
     }
 
     d->m_buildQueue.clear();
@@ -329,9 +324,13 @@ void BuildManager::addToTaskWindow(const ProjectExplorer::Task &task)
     d->m_taskHub->addTask(task);
 }
 
-void BuildManager::addToOutputWindow(const QString &string, ProjectExplorer::BuildStep::OutputFormat format)
+void BuildManager::addToOutputWindow(const QString &string, BuildStep::OutputFormat format,
+    BuildStep::OutputNewlineSetting newLineSetting)
 {
-    d->m_outputWindow->appendText(string, format);
+    QString stringToWrite = string;
+    if (newLineSetting == BuildStep::DoAppendNewline)
+        stringToWrite += QLatin1Char('\n');
+    d->m_outputWindow->appendText(stringToWrite, format);
 }
 
 void BuildManager::nextBuildQueue()
@@ -339,11 +338,7 @@ void BuildManager::nextBuildQueue()
     if (d->m_canceling)
         return;
 
-    disconnect(d->m_currentBuildStep, SIGNAL(addTask(ProjectExplorer::Task)),
-               this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-    disconnect(d->m_currentBuildStep, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-               this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
-
+    disconnectOutput(d->m_currentBuildStep);
     ++d->m_progress;
     d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, msgProgress(d->m_progress, d->m_maxProgress));
     decrementActiveBuildSteps(d->m_currentBuildStep->buildConfiguration()->target()->project());
@@ -420,8 +415,8 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
         BuildStep *bs = steps.at(i);
         connect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
                 this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-        connect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
+        connect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat, ProjectExplorer::BuildStep::OutputNewlineSetting)),
+                this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat, ProjectExplorer::BuildStep::OutputNewlineSetting)));
         init = bs->init();
         if (!init)
             break;
@@ -437,13 +432,8 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
         addToOutputWindow(tr("When executing build step '%1'").arg(bs->displayName()), BuildStep::ErrorOutput);
 
         // disconnect the buildsteps again
-        for (int j = 0; j <= i; ++j) {
-            BuildStep *bs = steps.at(j);
-            disconnect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
-                       this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-            disconnect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                       this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
-        }
+        for (int j = 0; j <= i; ++j)
+            disconnectOutput(steps.at(j));
         return false;
     }
 
@@ -535,4 +525,14 @@ void BuildManager::decrementActiveBuildSteps(Project *pro)
     }
 }
 
+void BuildManager::disconnectOutput(BuildStep *bs)
+{
+    disconnect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
+               this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
+    disconnect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat,
+        ProjectExplorer::BuildStep::OutputNewlineSetting)),
+        this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat,
+            ProjectExplorer::BuildStep::OutputNewlineSetting)));
+}
+
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildmanager.h b/src/plugins/projectexplorer/buildmanager.h
index fe1862d6a0315e41b9e55d7159dabfa0e2ec5d1f..f272bc56af894dcd62439857631ea629804fac5b 100644
--- a/src/plugins/projectexplorer/buildmanager.h
+++ b/src/plugins/projectexplorer/buildmanager.h
@@ -85,7 +85,8 @@ signals:
 
 private slots:
     void addToTaskWindow(const ProjectExplorer::Task &task);
-    void addToOutputWindow(const QString &string, ProjectExplorer::BuildStep::OutputFormat);
+    void addToOutputWindow(const QString &string, ProjectExplorer::BuildStep::OutputFormat,
+        ProjectExplorer::BuildStep::OutputNewlineSetting = BuildStep::DoAppendNewline);
 
     void nextBuildQueue();
     void progressChanged();
@@ -102,6 +103,7 @@ private:
     bool buildQueueAppend(QList<BuildStep *> steps);
     void incrementActiveBuildSteps(Project *pro);
     void decrementActiveBuildSteps(Project *pro);
+    void disconnectOutput(BuildStep *bs);
 
     QScopedPointer<BuildManagerPrivate> d;
 };
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index 15f3a92235c8624eb531e8021c76ee7883cea179..29e98b7eaf2f8f558fa0707a7a4a3b92e5b8c740 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -106,14 +106,17 @@ public:
     Target *target() const;
 
     enum OutputFormat { NormalOutput, ErrorOutput, MessageOutput, ErrorMessageOutput };
+    enum OutputNewlineSetting { DoAppendNewline, DontAppendNewline };
 
 signals:
     // Add a task.
     void addTask(const ProjectExplorer::Task &task);
+
     // The string is added to the generated output, usually in the output
     // window.
     // It should be in plain text, with the format in the parameter
-    void addOutput(const QString &string, ProjectExplorer::BuildStep::OutputFormat format);
+    void addOutput(const QString &string, ProjectExplorer::BuildStep::OutputFormat format,
+        ProjectExplorer::BuildStep::OutputNewlineSetting newlineSetting = DoAppendNewline);
 };
 
 class PROJECTEXPLORER_EXPORT IBuildStepFactory :
@@ -175,5 +178,6 @@ signals:
 } // namespace ProjectExplorer
 
 Q_DECLARE_METATYPE(ProjectExplorer::BuildStep::OutputFormat)
+Q_DECLARE_METATYPE(ProjectExplorer::BuildStep::OutputNewlineSetting)
 
 #endif // BUILDSTEP_H
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 56dddf980419480777dc27d488ad34de78cd4cf8..af08b0bf26aec0df5bbfcf6ad10041705fb88321 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1691,6 +1691,12 @@ void ProjectExplorerPlugin::buildProjectOnly()
     queue(QList<Project *>() << session()->startupProject(), QStringList() << Constants::BUILDSTEPS_BUILD);
 }
 
+void ProjectExplorerPlugin::buildProject(ProjectExplorer::Project *p)
+{
+    queue(d->m_session->projectOrder(p),
+          QStringList() << Constants::BUILDSTEPS_BUILD);
+}
+
 void ProjectExplorerPlugin::buildProject()
 {
     queue(d->m_session->projectOrder(session()->startupProject()),
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 85cc013fb85b16795c320d56513a1ddb2da46f23..8b09c7df8b0ff3775470791c344e6a5d92720034 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -124,6 +124,8 @@ public:
     void addExistingFiles(ProjectExplorer::ProjectNode *projectNode, const QStringList &filePaths);
     void addExistingFiles(const QStringList &filePaths);
 
+    void buildProject(ProjectExplorer::Project *p);
+
 signals:
     void aboutToShowContextMenu(ProjectExplorer::Project *project,
                                 ProjectExplorer::Node *node);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.cpp
index 87d771eef98475cd566def316474c7fc1fe22f74..5207e8baacb2c1c02d81733af4799f817c617ced 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.cpp
@@ -190,9 +190,10 @@ void AbstractMaemoDeployStep::raiseError(const QString &errorString)
     emit error();
 }
 
-void AbstractMaemoDeployStep::writeOutput(const QString &text, OutputFormat format)
+void AbstractMaemoDeployStep::writeOutput(const QString &text, OutputFormat format,
+    OutputNewlineSetting newlineSetting)
 {
-    emit addOutput(text, format);
+    emit addOutput(text, format, newlineSetting);
 }
 
 void AbstractMaemoDeployStep::stop()
@@ -377,7 +378,7 @@ void AbstractMaemoDeployStep::handleRemoteStdout(const QString &output)
     switch (m_baseState) {
     case Deploying:
     case StopRequested:
-        writeOutput(output, NormalOutput);
+        writeOutput(output, NormalOutput, DontAppendNewline);
         break;
     default:
         break;
@@ -391,7 +392,7 @@ void AbstractMaemoDeployStep::handleRemoteStderr(const QString &output)
     switch (m_baseState) {
     case Deploying:
     case StopRequested:
-        writeOutput(output, ErrorOutput);
+        writeOutput(output, ErrorOutput, DontAppendNewline);
         break;
     default:
         break;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.h b/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.h
index 6470e30f965286976e4454e9b5a5e24d1c2ff32a..47fe4bd3250d1733e88f1e54627f88ebf491316b 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/abstractmaemodeploystep.h
@@ -89,7 +89,8 @@ protected:
     BaseState baseState() const { return m_baseState; }
 
     void raiseError(const QString &error);
-    void writeOutput(const QString &text, OutputFormat = MessageOutput);
+    void writeOutput(const QString &text, OutputFormat format = MessageOutput,
+        OutputNewlineSetting newlineSetting = DoAppendNewline);
     void setDeploymentFinished();
     const AbstractMaemoPackageCreationStep *packagingStep() const;
     QString deployMountPoint() const;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploybymountstep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploybymountstep.cpp
index 33d0b069ce8fbb0dab998ed8493e8d44a0f69050..2dbe02bf820044b49f2e134efbb13e728fdab08f 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploybymountstep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploybymountstep.cpp
@@ -147,7 +147,7 @@ void AbstractMaemoDeployByMountStep::handleMountDebugOutput(const QString &outpu
     ASSERT_BASE_STATE(QList<BaseState>() << Deploying << StopRequested);
 
     if (m_extendedState != Inactive)
-        writeOutput(output, ErrorOutput);
+        writeOutput(output, ErrorOutput, DontAppendNewline);
 }
 
 void AbstractMaemoDeployByMountStep::mount()
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
index cf6cce4d5d212b22b8b9df0dbd8305118226284d..573ca699b1046f9675d950683fcf30375ab5be67 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
@@ -144,11 +144,13 @@ void AbstractMaemoPackageCreationStep::handleBuildOutput()
     QByteArray stdOut = buildProc->readAllStandardOutput();
     stdOut.replace('\0', QByteArray()); // Output contains NUL characters.
     if (!stdOut.isEmpty())
-        emit addOutput(QString::fromLocal8Bit(stdOut), BuildStep::NormalOutput);
+        emit addOutput(QString::fromLocal8Bit(stdOut), BuildStep::NormalOutput,
+                BuildStep::DontAppendNewline);
     QByteArray errorOut = buildProc->readAllStandardError();
     errorOut.replace('\0', QByteArray());
     if (!errorOut.isEmpty()) {
-        emit addOutput(QString::fromLocal8Bit(errorOut), BuildStep::ErrorOutput);
+        emit addOutput(QString::fromLocal8Bit(errorOut), BuildStep::ErrorOutput,
+            BuildStep::DontAppendNewline);
     }
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp b/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
index d2ac2e15e2157b973c77e67b6211cb036edf94ab..bc83c73e0d438a22237736648387280a01b25e64 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
@@ -583,7 +583,7 @@ void S60CreatePackageStep::stdOutput(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdOutput(line);
-    emit addOutput(line, BuildStep::NormalOutput);
+    emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
 }
 
 void S60CreatePackageStep::processReadyReadStdError()
@@ -599,7 +599,7 @@ void S60CreatePackageStep::stdError(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdError(line);
-    emit addOutput(line, BuildStep::ErrorOutput);
+    emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
 }
 
 void S60CreatePackageStep::checkForCancel()