diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index 6ed55492e50479b8531474d28971bf17ddd4afbe..e7d3011a7677ff132f46378e1d99538a201614d1 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -963,7 +963,21 @@ void Preprocessor::processElif(TokenIterator firstToken, TokenIterator lastToken
     } else if (iflevel == 0 && !skipping()) {
         // std::cerr << "*** WARNING #else without #if" << std::endl;
     } else if (!_true_test[iflevel] && !_skipping[iflevel - 1]) {
-        const Value result = evalExpression(tk.dot(), lastToken, _source);
+
+        const char *first = startOfToken(*tk);
+        const char *last = startOfToken(*lastToken);
+
+        MacroExpander expandCondition (env);
+        QByteArray condition;
+        condition.reserve(256);
+        expandCondition(first, last, &condition);
+
+        QVector<Token> tokens = tokenize(condition);
+
+        const Value result = evalExpression(tokens.constBegin(),
+                                            tokens.constEnd() - 1,
+                                            condition);
+
         _true_test[iflevel] = ! result.is_zero ();
         _skipping[iflevel]  =   result.is_zero ();
     } else {
diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h
index 2b42aca64a3dcf82a63e90342746eb0b233461fa..469727c18441f1dbddce794fa1ea093859a7ac66 100644
--- a/src/plugins/coreplugin/coreconstants.h
+++ b/src/plugins/coreplugin/coreconstants.h
@@ -174,11 +174,18 @@ const char * const G_FILE_OTHER          = "QtCreator.Group.File.Other";
 const char * const G_EDIT_UNDOREDO       = "QtCreator.Group.Edit.UndoRedo";
 const char * const G_EDIT_COPYPASTE      = "QtCreator.Group.Edit.CopyPaste";
 const char * const G_EDIT_SELECTALL      = "QtCreator.Group.Edit.SelectAll";
-const char * const G_EDIT_FORMAT         = "QtCreator.Group.Edit.Format";
+const char * const G_EDIT_ADVANCED       = "QtCreator.Group.Edit.Advanced";
 
 const char * const G_EDIT_FIND           = "QtCreator.Group.Edit.Find";
 const char * const G_EDIT_OTHER          = "QtCreator.Group.Edit.Other";
 
+// advanced edit menu groups
+
+const char * const G_EDIT_FORMAT         = "QtCreator.Group.Edit.Format";
+const char * const G_EDIT_COLLAPSING     = "QtCreator.Group.Edit.Collapsing";
+const char * const G_EDIT_FONT           = "QtCreator.Group.Edit.Font";
+const char * const G_EDIT_EDITOR         = "QtCreator.Group.Edit.Editor";
+
 // window menu groups
 const char * const G_WINDOW_SIZE         = "QtCreator.Group.Window.Size";
 const char * const G_WINDOW_PANES        = "QtCreator.Group.Window.Panes";
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 75cdc7c14f8eb0e03523fe6a352a4d98740a5009..cf10f0fca66428f2d5160a00e0fcb72757380c58 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -196,6 +196,16 @@ EditorManagerPrivate::~EditorManagerPrivate()
 
 EditorManager *EditorManager::m_instance = 0;
 
+static Command *createSeparator(ActionManager *am, QObject *parent,
+                                const QString &name,
+                                const QList<int> &context)
+{
+    QAction *tmpaction = new QAction(parent);
+    tmpaction->setSeparator(true);
+    Command *cmd = am->registerAction(tmpaction, name, context);
+    return cmd;
+}
+
 EditorManager::EditorManager(ICore *core, QWidget *parent) :
     QWidget(parent),
     m_d(new EditorManagerPrivate(core, parent))
@@ -319,12 +329,24 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
 
     ActionContainer *medit = am->actionContainer(Constants::M_EDIT);
     ActionContainer *advancedMenu = am->createMenu(Constants::M_EDIT_ADVANCED);
-    medit->addMenu(advancedMenu, Constants::G_EDIT_FORMAT);
+    medit->addMenu(advancedMenu, Constants::G_EDIT_ADVANCED);
     advancedMenu->menu()->setTitle(tr("&Advanced"));
+    advancedMenu->appendGroup(Constants::G_EDIT_FORMAT);
+    advancedMenu->appendGroup(Constants::G_EDIT_COLLAPSING);
+    advancedMenu->appendGroup(Constants::G_EDIT_FONT);
+    advancedMenu->appendGroup(Constants::G_EDIT_EDITOR);
+
+    // Advanced menu separators
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Collapsing"), editManagerContext);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_COLLAPSING);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Font"), editManagerContext);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_FONT);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Editor"), editManagerContext);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
 
     cmd = am->registerAction(m_d->m_openInExternalEditorAction, Constants::OPEN_IN_EXTERNAL_EDITOR, editManagerContext);
     cmd->setDefaultKeySequence(QKeySequence(tr("Alt+V,Alt+I")));
-    advancedMenu->addAction(cmd);
+    advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
     connect(m_d->m_openInExternalEditorAction, SIGNAL(triggered()), this, SLOT(openInExternalEditor()));
 
 
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 31cb2b774299ceb50b91693c0966479c132e4efa..664dcb896135d3b43a00062c31554c7d58d5c8d6 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -402,7 +402,7 @@ void MainWindow::registerDefaultContainers()
     medit->appendGroup(Constants::G_EDIT_UNDOREDO);
     medit->appendGroup(Constants::G_EDIT_COPYPASTE);
     medit->appendGroup(Constants::G_EDIT_SELECTALL);
-    medit->appendGroup(Constants::G_EDIT_FORMAT);
+    medit->appendGroup(Constants::G_EDIT_ADVANCED);
     medit->appendGroup(Constants::G_EDIT_FIND);
     medit->appendGroup(Constants::G_EDIT_OTHER);
 
@@ -432,9 +432,9 @@ void MainWindow::registerDefaultContainers()
     ac->appendGroup(Constants::G_HELP_ABOUT);
 }
 
-static Command *createSeparator(ActionManagerPrivate *am, QObject *parent,
-                                 const QString &name,
-                                 const QList<int> &context)
+static Command *createSeparator(ActionManager *am, QObject *parent,
+                                const QString &name,
+                                const QList<int> &context)
 {
     QAction *tmpaction = new QAction(parent);
     tmpaction->setSeparator(true);
@@ -465,7 +465,7 @@ void MainWindow::registerDefaultActions()
     mfile->addAction(cmd, Constants::G_FILE_OTHER);
 
     // Edit menu separators
-    cmd =  createSeparator(am, this,  QLatin1String("QtCreator.Edit.Sep.CopyPaste"), m_globalContext);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.CopyPaste"), m_globalContext);
     medit->addAction(cmd, Constants::G_EDIT_COPYPASTE);
 
     cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.SelectAll"), m_globalContext);
@@ -474,8 +474,8 @@ void MainWindow::registerDefaultActions()
     cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Find"), m_globalContext);
     medit->addAction(cmd, Constants::G_EDIT_FIND);
 
-    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Format"), m_globalContext);
-    medit->addAction(cmd, Constants::G_EDIT_FORMAT);
+    cmd = createSeparator(am, this, QLatin1String("QtCreator.Edit.Sep.Advanced"), m_globalContext);
+    medit->addAction(cmd, Constants::G_EDIT_ADVANCED);
 
     //Tools menu separators
     cmd = createSeparator(am, this, QLatin1String("QtCreator.Tools.Sep.Options"), m_globalContext);
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 6d2431de188fb7023a695244def174ff1c2e739f..a00e3878e8e795b825649b3c7e95ac03b14a4037 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -177,7 +177,7 @@ bool FakeVimPluginPrivate::initialize(const QStringList &arguments, QString *err
 
     ActionContainer *advancedMenu =
         actionManager->actionContainer(Core::Constants::M_EDIT_ADVANCED);
-    advancedMenu->addAction(cmd);
+    advancedMenu->addAction(cmd, Core::Constants::G_EDIT_EDITOR);
 
     connect(m_installHandlerAction, SIGNAL(triggered()),
         this, SLOT(installHandler()));
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index 763d7fb65d963638afc3ffc6aad29f2f861ed3d5..f5c2a78ec7f45499baa6b23ae44a43dc067710c7 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -48,6 +48,7 @@
 #include "profilereader.h"
 #include "gdbmacrosbuildstep.h"
 
+#include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/buildmanager.h>
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectexplorer.h>
@@ -64,7 +65,6 @@
 
 #ifdef WITH_TESTS
 #include <QTest>
-#include <extensionsystem/pluginmanager.h>
 #endif
 
 using namespace Qt4ProjectManager::Internal;
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index 44b6f33b17d41bdf3df2c20ff78a974c9dcf5017..e15cbfd0096b3157ea57f1e402fcc59adc00aaa0 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -125,35 +125,34 @@ void TextEditorActionHandler::createActions()
     m_formatAction = new QAction(tr("Auto-&indent Selection"), this);
     command = am->registerAction(m_formatAction, TextEditor::Constants::AUTO_INDENT_SELECTION, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+I")));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_formatAction, SIGNAL(triggered(bool)), this, SLOT(formatAction()));
 
 
     m_visualizeWhitespaceAction = new QAction(tr("&Visualize Whitespace"), this);
     m_visualizeWhitespaceAction->setCheckable(true);
     command = am->registerAction(m_visualizeWhitespaceAction,
-                                                 TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId);
+                                 TextEditor::Constants::VISUALIZE_WHITESPACE, m_contextId);
 #ifndef Q_OS_MAC
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+V")));
 #endif
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_visualizeWhitespaceAction, SIGNAL(triggered(bool)), this, SLOT(setVisualizeWhitespace(bool)));
 
     m_cleanWhitespaceAction = new QAction(tr("Clean Whitespace"), this);
     command = am->registerAction(m_cleanWhitespaceAction,
                                  TextEditor::Constants::CLEAN_WHITESPACE, m_contextId);
 
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_cleanWhitespaceAction, SIGNAL(triggered()), this, SLOT(cleanWhitespace()));
 
     m_textWrappingAction = new QAction(tr("Enable Text &Wrapping"), this);
     m_textWrappingAction->setCheckable(true);
-    command = am->registerAction(m_textWrappingAction,
-                                                 TextEditor::Constants::TEXT_WRAPPING, m_contextId);
+    command = am->registerAction(m_textWrappingAction, TextEditor::Constants::TEXT_WRAPPING, m_contextId);
 #ifndef Q_OS_MAC
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+E, Ctrl+W")));
 #endif
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
     connect(m_textWrappingAction, SIGNAL(triggered(bool)), this, SLOT(setTextWrapping(bool)));
 
 
@@ -161,7 +160,7 @@ void TextEditorActionHandler::createActions()
     command = am->registerAction(m_unCommentSelectionAction, Constants::UN_COMMENT_SELECTION, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+/")));
     connect(m_unCommentSelectionAction, SIGNAL(triggered()), this, SLOT(unCommentSelection()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FORMAT);
 
     m_deleteLineAction = new QAction(tr("Delete &Line"), this);
     command = am->registerAction(m_deleteLineAction, Constants::DELETE_LINE, m_contextId);
@@ -172,28 +171,30 @@ void TextEditorActionHandler::createActions()
     command = am->registerAction(m_collapseAction, Constants::COLLAPSE, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+<")));
     connect(m_collapseAction, SIGNAL(triggered()), this, SLOT(collapse()));
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
 
     m_expandAction = new QAction(tr("Expand"), this);
     command = am->registerAction(m_expandAction, Constants::EXPAND, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+>")));
     connect(m_expandAction, SIGNAL(triggered()), this, SLOT(expand()));
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
 
     m_unCollapseAllAction = new QAction(tr("(Un)&Collapse All"), this);
     command = am->registerAction(m_unCollapseAllAction, Constants::UN_COLLAPSE_ALL, m_contextId);
     connect(m_unCollapseAllAction, SIGNAL(triggered()), this, SLOT(unCollapseAll()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_COLLAPSING);
 
     m_increaseFontSizeAction = new QAction(tr("Increase Font Size"), this);
     command = am->registerAction(m_increaseFontSizeAction, Constants::INCREASE_FONT_SIZE, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl++")));
     connect(m_increaseFontSizeAction, SIGNAL(triggered()), this, SLOT(increaseFontSize()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
     
     m_decreaseFontSizeAction = new QAction(tr("Decrease Font Size"), this);
     command = am->registerAction(m_decreaseFontSizeAction, Constants::DECREASE_FONT_SIZE, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+-")));
     connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize()));
-    advancedMenu->addAction(command);
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
 
     m_gotoBlockStartAction = new QAction(tr("Goto Block Start"), this);
     command = am->registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId);