diff --git a/src/libs/utils/qtcassert.h b/src/libs/utils/qtcassert.h
index d05be20df812dd26c742a0e84e9bafe5ad87b35d..f75d225f6e65ae19db688e04b833b69e18842f21 100644
--- a/src/libs/utils/qtcassert.h
+++ b/src/libs/utils/qtcassert.h
@@ -36,13 +36,11 @@
 
 #include <QtCore/QDebug>
 
-#ifdef Q_OS_UNIX
+// we do not use the  'do {...} while (0)' idiom here to be able to use
+// 'break' and 'continue' as 'actions'.
+
 #define QTC_ASSERT(cond, action) \
     if(cond){}else{qDebug()<<"ASSERTION"<<#cond<<"FAILED"<<__FILE__<<__LINE__;action;}
-#else
-#define QTC_ASSERT(cond, action) \
-    if(cond){}else{qDebug()<<"ASSERTION"<<#cond<<"FAILED";action;}
-#endif
 
 #endif // QTC_ASSERT_H
 
diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index 926568517daabea3ebae63d3506fda87e2f49d62..e27aa5ec41dd7941e15f6f0bf4ddaeb7114851a4 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -34,7 +34,8 @@
 #include "breakhandler.h"
 
 #include "imports.h" // TextEditor::BaseTextMark
-#include "qtcassert.h"
+
+#include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QFileInfo>
diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro
index 6b8c2e74ca45f204ef14028aeb91540da3dd1e22..3d67e19c6aae2337f008e5416c5d18d99ba5c729 100644
--- a/src/plugins/debugger/debugger.pro
+++ b/src/plugins/debugger/debugger.pro
@@ -10,8 +10,6 @@ include(../../plugins/texteditor/texteditor.pri)
 include(../../plugins/cpptools/cpptools.pri)
 include(../../libs/cplusplus/cplusplus.pri)
 
-INCLUDEPATH += ../../libs/utils
-
 # DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
 QT += gui network script
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 03f86bec2492ed19e0edc4363d8dad7965378551..37406f70cc1a6678e9506c75d320adea5711d544 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -39,7 +39,6 @@
 #include "gdboptionpage.h"
 #include "gdbengine.h"
 #include "mode.h"
-#include "qtcassert.h"
 
 #include <coreplugin/actionmanager/actionmanagerinterface.h>
 #include <coreplugin/coreconstants.h>
@@ -48,20 +47,27 @@
 #include <coreplugin/messagemanager.h>
 #include <coreplugin/modemanager.h>
 #include <coreplugin/uniqueidmanager.h>
+
 #include <cplusplus/ExpressionUnderCursor.h>
+
 #include <cppeditor/cppeditorconstants.h>
+
 #include <projectexplorer/projectexplorerconstants.h>
 #include <projectexplorer/session.h>
+
+#include <texteditor/basetexteditor.h>
 #include <texteditor/basetextmark.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/texteditorconstants.h>
-#include <texteditor/basetexteditor.h>
+
+#include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/qplugin.h>
 #include <QtCore/QObject>
 #include <QtCore/QPoint>
 #include <QtCore/QSettings>
+
 #include <QtGui/QPlainTextEdit>
 #include <QtGui/QTextBlock>
 #include <QtGui/QTextCursor>
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 13af8e3075bd145450f3d081a6de47567958185d..d7ac5b1aaa1b4897e1c51bcdcb415aefc75ec271 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -37,7 +37,6 @@
 #include "debuggermanager.h"
 #include "gdbmi.h"
 #include "procinterrupt.h"
-#include "qtcassert.h"
 
 #include "disassemblerhandler.h"
 #include "breakhandler.h"
@@ -49,6 +48,8 @@
 #include "startexternaldialog.h"
 #include "attachexternaldialog.h"
 
+#include <utils/qtcassert.h>
+
 #include <QtCore/QDebug>
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
diff --git a/src/plugins/debugger/gdbmi.cpp b/src/plugins/debugger/gdbmi.cpp
index 3beadc385fa8067186ac4f5c1f01515c753cd2cf..f14bb752e3e94f8e6b246c13988554cc697d5353 100644
--- a/src/plugins/debugger/gdbmi.cpp
+++ b/src/plugins/debugger/gdbmi.cpp
@@ -32,10 +32,10 @@
 ***************************************************************************/
 
 #include "gdbmi.h"
-#include "qtcassert.h"
+
+#include <utils/qtcassert.h>
 
 #include <QtCore/QByteArray>
-#include <QtCore/QDebug>
 #include <QtCore/QTextStream>
 
 namespace Debugger {
diff --git a/src/plugins/debugger/mode.cpp b/src/plugins/debugger/mode.cpp
index c1bbdd550f1039e8d97debd6199d66b0d9377f16..234f09c207931573e8bf8beec889944b410a00bb 100644
--- a/src/plugins/debugger/mode.cpp
+++ b/src/plugins/debugger/mode.cpp
@@ -35,7 +35,6 @@
 
 #include "debuggerconstants.h"
 #include "debuggermanager.h"
-#include "qtcassert.h"
 
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
@@ -48,10 +47,14 @@
 #include <coreplugin/outputpane.h>
 #include <coreplugin/navigationwidget.h>
 #include <coreplugin/rightpane.h>
+
 #include <projectexplorer/projectexplorerconstants.h>
 
+#include <utils/qtcassert.h>
+
 #include <QtCore/QDebug>
 #include <QtCore/QSettings>
+
 #include <QtGui/QDockWidget>
 #include <QtGui/QLabel>
 #include <QtGui/QMainWindow>
diff --git a/src/plugins/debugger/scriptengine.cpp b/src/plugins/debugger/scriptengine.cpp
index 50f9dcdf4e27bc1f37c4a71b2b22e1a6d9afaa98..e6387bfdda9a4fa7d09e2d4ab631777cf7f672f1 100644
--- a/src/plugins/debugger/scriptengine.cpp
+++ b/src/plugins/debugger/scriptengine.cpp
@@ -33,19 +33,18 @@
 
 #include "scriptengine.h"
 
-#include "qtcassert.h"
+#include "attachexternaldialog.h"
+#include "breakhandler.h"
 #include "debuggerconstants.h"
 #include "debuggermanager.h"
-
 #include "disassemblerhandler.h"
-#include "breakhandler.h"
 #include "moduleshandler.h"
 #include "registerhandler.h"
 #include "stackhandler.h"
+#include "startexternaldialog.h"
 #include "watchhandler.h"
 
-#include "startexternaldialog.h"
-#include "attachexternaldialog.h"
+#include <utils/qtcassert.h>
 
 #include <QtCore/QDateTime>
 #include <QtCore/QDebug>
diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp
index 818b6b6188822020f9f314e2fd0c32818aa80371..fd70e1e1ab9c8f785690b0cfcdd6c28da4cc6595 100644
--- a/src/plugins/debugger/stackhandler.cpp
+++ b/src/plugins/debugger/stackhandler.cpp
@@ -33,7 +33,7 @@
 
 #include "stackhandler.h"
 
-#include "qtcassert.h"
+#include <utils/qtcassert.h>
 
 #include <QtCore/QAbstractTableModel>
 #include <QtCore/QDebug>
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index e03c91f71003e04d15325b20dbba770071bb0b51..07824735ebfb28428785e749b9f371cf188c53d0 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -37,7 +37,7 @@
 #include "modeltest.h"
 #endif
 
-#include "qtcassert.h"
+#include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QEvent>
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index 1c30bbe10944bb3a5230931fcb911133291336bf..7c85aae6ae36a04e85c350bbb0c4dfbf2754d297 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -314,8 +314,8 @@ void ProjectNode::addProjectNodes(const QList<ProjectNode*> &subProjects)
             emit watcher->foldersAboutToBeAdded(this, folderNodes);
 
         foreach (ProjectNode *project, subProjects) {
-            Q_ASSERT_X(!project->parentFolderNode(), "addProjectNodes",
-                       "Project node has already a parent");
+            QTC_ASSERT(!project->parentFolderNode(),
+                qDebug("Project node has already a parent"));
             project->setParentFolderNode(this);
             foreach (NodesWatcher *watcher, m_watchers)
                 project->registerWatcher(watcher);
@@ -353,13 +353,13 @@ void ProjectNode::removeProjectNodes(const QList<ProjectNode*> &subProjects)
         for (; toRemoveIter != toRemove.constEnd(); ++toRemoveIter) {
             while ((*projectIter)->path() != (*toRemoveIter)->path()) {
                 ++projectIter;
-                Q_ASSERT_X(projectIter != m_subProjectNodes.end(), "removeProjectNodes",
-                           "Project to remove is not part of specified folder!");
+                QTC_ASSERT(projectIter != m_subProjectNodes.end(),
+                    qDebug("Project to remove is not part of specified folder!"));
             }
             while ((*folderIter)->path() != (*toRemoveIter)->path()) {
                 ++folderIter;
-                Q_ASSERT_X(folderIter != m_subFolderNodes.end(), "removeProjectNodes",
-                           "Project to remove is not part of specified folder!");
+                QTC_ASSERT(folderIter != m_subFolderNodes.end(),
+                    qDebug("Project to remove is not part of specified folder!"));
             }
             delete *projectIter;
             projectIter = m_subProjectNodes.erase(projectIter);
@@ -386,15 +386,15 @@ void ProjectNode::addFolderNodes(const QList<FolderNode*> &subFolders, FolderNod
                 watcher->foldersAboutToBeAdded(parentFolder, subFolders);
 
         foreach (FolderNode *folder, subFolders) {
-            Q_ASSERT_X(!folder->parentFolderNode(), "addFolderNodes",
-                       "Project node has already a parent folder");
+            QTC_ASSERT(!folder->parentFolderNode(),
+                qDebug("Project node has already a parent folder"));
             folder->setParentFolderNode(parentFolder);
             folder->setProjectNode(this);
             parentFolder->m_subFolderNodes.append(folder);
 
             // project nodes have to be added via addProjectNodes
-            Q_ASSERT_X(folder->nodeType() != ProjectNodeType, "addFolderNodes",
-                       "project nodes have to be added via addProjectNodes");
+            QTC_ASSERT(folder->nodeType() != ProjectNodeType,
+                qDebug("project nodes have to be added via addProjectNodes"));
         }
         qSort(parentFolder->m_subFolderNodes.begin(), parentFolder->m_subFolderNodes.end(),
               sortNodesByPath);
@@ -427,12 +427,12 @@ void ProjectNode::removeFolderNodes(const QList<FolderNode*> &subFolders,
         QList<FolderNode*>::const_iterator toRemoveIter = toRemove.constBegin();
         QList<FolderNode*>::iterator folderIter = parentFolder->m_subFolderNodes.begin();
         for (; toRemoveIter != toRemove.constEnd(); ++toRemoveIter) {
-            Q_ASSERT_X(((*toRemoveIter)->nodeType() != ProjectNodeType), "removeFolderNodes",
-                           "project nodes have to be removed via removeProjectNodes");
+            QTC_ASSERT((*toRemoveIter)->nodeType() != ProjectNodeType,
+                qDebug("project nodes have to be removed via removeProjectNodes"));
             while ((*folderIter)->path() != (*toRemoveIter)->path()) {
                 ++folderIter;
-                Q_ASSERT_X(folderIter != parentFolder->m_subFolderNodes.end(), "removeFileNodes",
-                           "Folder to remove is not part of specified folder!");
+                QTC_ASSERT(folderIter != parentFolder->m_subFolderNodes.end(),
+                    qDebug("Folder to remove is not part of specified folder!"));
             }
             delete *folderIter;
             folderIter = parentFolder->m_subFolderNodes.erase(folderIter);
@@ -460,8 +460,8 @@ void ProjectNode::addFileNodes(const QList<FileNode*> &files, FolderNode *folder
                 emit watcher->filesAboutToBeAdded(folder, files);
 
         foreach (FileNode *file, files) {
-            Q_ASSERT_X(!file->parentFolderNode(), "addFileNodes",
-                       "File node has already a parent folder");
+            QTC_ASSERT(!file->parentFolderNode(),
+                qDebug("File node has already a parent folder"));
 
             file->setParentFolderNode(folder);
             file->setProjectNode(this);
@@ -499,8 +499,8 @@ void ProjectNode::removeFileNodes(const QList<FileNode*> &files, FolderNode *fol
         for (; toRemoveIter != toRemove.constEnd(); ++toRemoveIter) {
             while ((*filesIter)->path() != (*toRemoveIter)->path()) {
                 ++filesIter;
-                Q_ASSERT_X(filesIter != folder->m_fileNodes.end(), "removeFileNodes",
-                           "File to remove is not part of specified folder!");
+                QTC_ASSERT(filesIter != folder->m_fileNodes.end(),
+                    qDebug("File to remove is not part of specified folder!"));
             }
             delete *filesIter;
             filesIter = folder->m_fileNodes.erase(filesIter);
@@ -591,8 +591,8 @@ void SessionNode::addProjectNodes(const QList<ProjectNode*> &projectNodes)
             emit watcher->foldersAboutToBeAdded(this, folderNodes);
 
         foreach (ProjectNode *project, projectNodes) {
-            Q_ASSERT_X(!project->parentFolderNode(), "addProjectNodes",
-                       "Project node has already a parent folder");
+            QTC_ASSERT(!project->parentFolderNode(),
+                qDebug("Project node has already a parent folder"));
             project->setParentFolderNode(this);
             foreach (NodesWatcher *watcher, m_watchers)
                 project->registerWatcher(watcher);
@@ -621,13 +621,13 @@ void SessionNode::removeProjectNodes(const QList<ProjectNode*> &projectNodes)
         for (; toRemoveIter != toRemove.constEnd(); ++toRemoveIter) {
             while ((*projectIter)->path() != (*toRemoveIter)->path()) {
                 ++projectIter;
-                Q_ASSERT_X(projectIter != m_projectNodes.end(), "removeProjectNodes",
-                           "Project to remove is not part of specified folder!");
+                QTC_ASSERT(projectIter != m_projectNodes.end(),
+                    qDebug("Project to remove is not part of specified folder!"));
             }
             while ((*folderIter)->path() != (*toRemoveIter)->path()) {
                 ++folderIter;
-                Q_ASSERT_X(folderIter != m_subFolderNodes.end(), "removeProjectNodes",
-                           "Project to remove is not part of specified folder!");
+                QTC_ASSERT(folderIter != m_subFolderNodes.end(),
+                    qDebug("Project to remove is not part of specified folder!"));
             }
             projectIter = m_projectNodes.erase(projectIter);
             folderIter = m_subFolderNodes.erase(folderIter);