diff --git a/doc/coding-style.qdoc b/doc/coding-style.qdoc
new file mode 100644
index 0000000000000000000000000000000000000000..f028e56fe743e4ea78e3f683b649084856a2aca4
--- /dev/null
+++ b/doc/coding-style.qdoc
@@ -0,0 +1,246 @@
+/*!
+
+\contentpage{index.html}{Qt Creator}
+\page coding-style.html
+
+\title Qt Creator Coding Rules
+
+THIS IS PRELIMINARY.
+
+\section1 Introduction
+
+The aim of this section is to serve as a guide for the developers, to aid us
+to build understandable and maintainable code, to create less confusion and
+surprises when working on Qt Creator.
+
+As usual: Rules are not set in stone. If there's a good reason to break one,
+do it, preferably after making sure that there are others agreeing.
+
+This document is incomplete.
+
+In general, if you want to contribute to the main source, we expect at least
+that you:
+
+\list 1
+\o The most important rule first: KISS (keep it simple ...): always
+   use a simple implementation in favor of a more complicated one.
+   This eases maintenance a lot.
+\o Write good C++ code: Readable, well commented when necessary,
+   and taking advantage of the OO model. Follow the \l{Formatting} guidelines.
+   There are also certain \l{Code Constructs} that we try to follow.
+\o Adapt the code to the structures already existing in Qt Creator, or in
+   the case that you have better ideas, discuss them with other developers
+   before writing the code.
+\o Take advantage of Qt. Don't re-invent the wheel. Think about what parts
+   of your code are generic enough that they might be incorporated into 
+   Qt proper. 
+\o Document interfaces. Right now we use qdoc, but changing to doxygen
+   is being considered.
+\endlist
+
+
+
+\section1 Submitting Code
+
+It is implicitly understood that all patches contributed to The Qt Creator
+Project are made under under the Gnu General Public License, version 2 or later
+and 
+
+If you have a problem with that, don't contribute code.
+
+Also please don't just pop up out of the blue with a huge patch (or
+small) that changes something substantial in Qt Creator. Always discuss your
+ideas with the other developers on mailing list first.
+
+When you create the patch, please use git or use "diff -up" since we find
+that a lot easier to read than the other diff formats. Also please do not
+send patches that implements or fixes several different things; several
+patches is a much better option.
+
+We also require you to provide a commit message entry with every patch,
+this describes in detail what the patch is doing.
+
+
+
+\section1 Code Constructs
+
+We have several guidelines on code constructs, some of these exist to
+make the code faster, others to make the code clearer. Yet others
+exist to allow us to take advantage of the strong type checking
+in C++.
+
+\list 1
+\o Declaration of variables should wait as long as possible. The rule
+  is: "Don't declare it until you need it." In C++ there are a lot of
+  user defined types, and these can very often be expensive to
+  initialize. This rule connects to the next rule too.
+
+\o Make the scope of a variable as small as possible.
+
+\o Prefer preincrement to postincrement whenever possible.
+  Preincrement has potential of being faster than postincrement. Just
+  think about the obvious implementations of pre/post-increment. This
+  rule applies to decrement too.
+
+\code
+	++T;
+	--U;
+	-NOT-
+	T++; // not used in Qt Creator
+	U--; // not used in Qt Creator
+\endcode
+
+\o Try to minimize evaluation of the same code over and over. This is
+   aimed especially at loops.
+
+\code
+
+	Container::iterator end = large.end();
+	for (Container::iterator it = large.begin(); it != end; ++it) {
+		...;
+	}
+	-NOT-
+	for (Container::iterator it = large.begin();
+	     it != large.end(); ++it) {
+		...;
+	}
+\endcode
+
+
+
+\section1 Formatting
+
+\section2 Declarations
+
+Only one declaration on each line.
+\code
+	int a;
+	int b;
+	-NOT-
+	int a, b; // not used in Qt Creator
+\endcode
+
+  This is especially important when initialization is done at the same
+  time.
+\code
+	QString a = "Joe";
+	QString b = "Foo";
+	-NOT-
+	QString a = "Joe", b = "Foo"; // not used in Qt Creator
+\endcode
+	[Note that 'QString a = "Joe"' is formally calling a copy constructor 
+	on a temporary constructed from a string literal and therefore has the
+	potential of being more expensive then direct construction by
+	'QString a("joe")'. However the compiler is allowed to elide the copy
+	(even if it had side effects), and modern compilers typically do so.
+	Given these equal costs, Qt Creator code favours the '=' idiom as it is in
+	line with the traditional C-style initialization, _and_ cannot be
+	mistaken as function declaration, _and_ reduces the level of nested
+	parantheses in more initializations.]
+	
+
+\section2  Pointers and references
+
+\code
+	char *p = "flop";
+	char &c = *p;
+	-NOT-
+	char* p = "flop"; // not used in Qt Creator
+	char & c = *p;     // not used in Qt Creator
+\endcode
+
+  This is simply in line with the official Qt guide lines.
+
+  Also note that we will have:
+\code
+	const char *p;
+	-NOT-
+	char const * p; // not used in Qt Creator
+\endcode
+
+
+  Using a plain 0 for Null pointer constants is always correct and least effort
+  to type. So:
+\code
+	void *p = 0;
+	-NOT-
+	void *p = NULL; // not used in Qt Creator
+	-NOT-
+	void *p = '\0'; // not used in Qt Creator
+	-NOT-
+	void *p = 42 - 7 * 6; // also not used in Qt Creator
+\endcode
+  Note: As an exception, imported third party code as well as code
+  interfacing the "native" APIs (src/support/os_*) can use NULL.
+
+
+\section2  Operator names and parentheses
+\code
+	operator==(type)
+	-NOT-
+	operator == (type)  // not used in Qt Creator
+\endcode
+
+  The == is part of the function name, separating it makes the
+  declaration look like an expression.
+
+
+\section2 Function names and parentheses
+\code
+	void mangle()
+	-NOT-
+	void mangle ()  // not used in Qt Creator
+\endcode
+
+
+
+\section2 Naming rules
+
+  Simply follow the style of Qt proper. As examples:
+ \list
+  \o Use descriptive but simple and short names. Do not abbreviate.
+
+  \o Class names are capitalized, and function names lowercased.
+    Enums are named like Classes, values are in lower-case.
+\endlist
+
+
+
+\section2 Formatting
+
+   Adapt the formatting of your code to the one used in the
+   other parts of Qt Creator. In case there is different formatting for
+   the same construct, use the one used more often.
+
+
+\section2 Declarations
+
+  - Use this order for the access sections of your class: public,
+    protected, private. The public section is interesting for every
+    user of the class. The private section is only of interest for the
+    implementors of the class (you). [Obviously not true since this is
+    for developers, and we do not want one developer only to be able to
+    read and understand the implementation of class internals. Lgb]
+
+  - Avoid declaring global objects in the declaration file of the class.
+    If the same variable is used for all objects, use a static member.
+
+  - Avoid global or static variables.
+
+
+\section2 File headers
+
+  If you create a new file, the top of the file should include a 
+  header comment equal to the one found in other source files of Qt Creator.
+
+\section2 Documentation
+
+  The documentation is generated from source and header files.
+  You document for the other developers, not for yourself.
+  In the header you should document interfaces, i.e.  what the function does,
+   not the implementation.
+  In the .cpp files you document the implementation if the implementation 
+  in non-obvious.
+
+
+*/
diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h
index b31f0d2bc6456617e7ad1c4a4171b07c2f77a324..54de3c801ea866cac6812bac662ed8fff7e97c15 100644
--- a/src/libs/cplusplus/CppDocument.h
+++ b/src/libs/cplusplus/CppDocument.h
@@ -40,7 +40,7 @@
 
 #include <QByteArray>
 #include <QList>
-#include <QSet>
+#include <QMap>
 #include <QSharedPointer>
 #include <QString>
 #include <QStringList>
@@ -236,6 +236,16 @@ private:
     QList<MacroUse> _macroUses;
 };
 
+class CPLUSPLUS_EXPORT Snapshot: public QMap<QString, Document::Ptr>
+{
+public:
+    Snapshot()
+    { }
+
+    ~Snapshot()
+    { }
+};
+
 } // end of namespace CPlusPlus
 
 #endif // CPPDOCUMENT_H
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 67eb05d7f4aea4a4be4e3b02ee6fe315b39eead9..8b24b59f5efe8b79d9da1336dad74f5da7744eae 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -77,7 +77,7 @@ LookupContext::LookupContext(Control *control)
 LookupContext::LookupContext(Symbol *symbol,
                              Document::Ptr expressionDocument,
                              Document::Ptr thisDocument,
-                             const QMap<QString, Document::Ptr> &documents)
+                             const Snapshot &documents)
     : _symbol(symbol),
       _expressionDocument(expressionDocument),
       _thisDocument(thisDocument),
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index 36ea6a8298fa714c984110407dadad3f46046e78..18754bf6670676165a8043325caf02ada1ab542c 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -57,7 +57,7 @@ public:
     LookupContext(Symbol *symbol,
                   Document::Ptr expressionDocument,
                   Document::Ptr thisDocument,
-                  const QMap<QString, Document::Ptr> &documents);
+                  const Snapshot &documents);
 
     LookupContext(Symbol *symbol,
                   const LookupContext &context);
@@ -87,7 +87,7 @@ public:
     QList<Symbol *> resolveClassOrNamespace(Name *name) const
     { return resolveClassOrNamespace(name, visibleScopes()); }
 
-    QMap<QString, Document::Ptr> documents() const
+    Snapshot snapshot() const
     { return _documents; }
 
     enum ResolveMode {
@@ -140,7 +140,7 @@ private:
     Document::Ptr _thisDocument;
 
     // All documents.
-    QMap<QString, Document::Ptr> _documents;
+    Snapshot _documents;
 
     // Visible scopes.
     QList<Scope *> _visibleScopes;
diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp
index 53fa7e78396551314ddedc84607676946cf73e9d..cb373cce027c5a3606482a0b1cbc2e206a274949 100644
--- a/src/libs/cplusplus/TypeOfExpression.cpp
+++ b/src/libs/cplusplus/TypeOfExpression.cpp
@@ -46,9 +46,9 @@ TypeOfExpression::TypeOfExpression():
 {
 }
 
-void TypeOfExpression::setDocuments(const QMap<QString, Document::Ptr> &documents)
+void TypeOfExpression::setSnapshot(const Snapshot &documents)
 {
-    m_documents = documents;
+    m_snapshot = documents;
     m_lookupContext = LookupContext();
 }
 
@@ -59,12 +59,12 @@ QList<TypeOfExpression::Result> TypeOfExpression::operator()(const QString &expr
 {
     QString code = expression;
     if (mode == Preprocess)
-        code = preprocessedExpression(expression, m_documents, document);
+        code = preprocessedExpression(expression, m_snapshot, document);
     Document::Ptr expressionDoc = documentForExpression(code);
     m_ast = extractExpressionAST(expressionDoc);
 
     m_lookupContext = LookupContext(lastVisibleSymbol, expressionDoc,
-                                    document, m_documents);
+                                    document, m_snapshot);
 
     ResolveExpression resolveExpression(m_lookupContext);
     return resolveExpression(m_ast);
@@ -103,10 +103,12 @@ Document::Ptr TypeOfExpression::documentForExpression(const QString &expression)
     return doc;
 }
 
-void TypeOfExpression::processEnvironment(QMap<QString, Document::Ptr> documents,
+void TypeOfExpression::processEnvironment(Snapshot documents,
                                           Document::Ptr doc, Environment *env,
                                           QSet<QString> *processed) const
 {
+    if (! doc)
+        return;
     if (processed->contains(doc->fileName()))
         return;
     processed->insert(doc->fileName());
@@ -120,7 +122,7 @@ void TypeOfExpression::processEnvironment(QMap<QString, Document::Ptr> documents
 }
 
 QString TypeOfExpression::preprocessedExpression(const QString &expression,
-                                                 QMap<QString, Document::Ptr> documents,
+                                                 Snapshot documents,
                                                  Document::Ptr thisDocument) const
 {
     Environment env;
diff --git a/src/libs/cplusplus/TypeOfExpression.h b/src/libs/cplusplus/TypeOfExpression.h
index e6a9a7f4b666c8a8b1494aea273e0b1196aee6fe..87d4113f30e9f3298a6ad5505e8ae82661f2dbcf 100644
--- a/src/libs/cplusplus/TypeOfExpression.h
+++ b/src/libs/cplusplus/TypeOfExpression.h
@@ -61,7 +61,7 @@ public:
      * Also clears the lookup context, so can be used to make sure references
      * to the documents previously used are removed.
      */
-    void setDocuments(const QMap<QString, Document::Ptr> &documents);
+    void setSnapshot(const Snapshot &documents);
 
     enum PreprocessMode {
         NoPreprocess,
@@ -100,15 +100,15 @@ private:
     ExpressionAST *extractExpressionAST(Document::Ptr doc) const;
     Document::Ptr documentForExpression(const QString &expression) const;
 
-    void processEnvironment(QMap<QString, CPlusPlus::Document::Ptr> documents,
+    void processEnvironment(CPlusPlus::Snapshot documents,
                             CPlusPlus::Document::Ptr doc, CPlusPlus::Environment *env,
                             QSet<QString> *processed) const;
 
     QString preprocessedExpression(const QString &expression,
-                                   QMap<QString, CPlusPlus::Document::Ptr> documents,
+                                   CPlusPlus::Snapshot documents,
                                    CPlusPlus::Document::Ptr thisDocument) const;
 
-    QMap<QString, Document::Ptr> m_documents;
+    Snapshot m_snapshot;
     ExpressionAST *m_ast;
     LookupContext m_lookupContext;
 };
diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp
index 81a2228e669f96911aeaa84cc07f5d4284d7ec82..100fdbe717f632f25633f47050f0a239132e778a 100644
--- a/src/libs/utils/pathchooser.cpp
+++ b/src/libs/utils/pathchooser.cpp
@@ -46,11 +46,12 @@
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QLineEdit>
 #include <QtGui/QToolButton>
+#include <QtGui/QPushButton>
 
 namespace Core {
 namespace Utils {
 
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MAC
 /*static*/ const char * const PathChooser::browseButtonLabel = "Choose...";
 #else
 /*static*/ const char * const PathChooser::browseButtonLabel = "Browse...";
@@ -112,7 +113,11 @@ PathChooser::PathChooser(QWidget *parent) :
     hLayout->addWidget(m_d->m_lineEdit);
     hLayout->setSizeConstraint(QLayout::SetMinimumSize);
 
+#ifdef Q_OS_MAC
+    QPushButton *browseButton = new QPushButton;
+#else
     QToolButton *browseButton = new QToolButton;
+#endif
     browseButton->setText(tr(browseButtonLabel));
     connect(browseButton, SIGNAL(clicked()), this, SLOT(slotBrowse()));
 
diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index bf78bf94f21731eaf76738885eecbdbc19e66581..c5189e60efa64e7e0f2d567321b598255e2fd7f3 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -342,6 +342,10 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget)
 
     m_navigationComboBox = new NavComboBox(this);
     m_navigationWidget = 0;
+#ifdef Q_OS_MAC
+    // this is to avoid ugly tool bar behavior
+    m_navigationComboBox->setMaximumWidth(130);
+#endif
 
     m_toolbar = new QToolBar(this);
     m_toolbar->setContentsMargins(0, 0, 0, 0);
diff --git a/src/plugins/coreplugin/versiondialog.cpp b/src/plugins/coreplugin/versiondialog.cpp
index 0decae6cf1804dbd980d2e88e217bb2dc13a5850..e534a0d1eae0cc6cda1c9f076a8350d9603ea0eb 100644
--- a/src/plugins/coreplugin/versiondialog.cpp
+++ b/src/plugins/coreplugin/versiondialog.cpp
@@ -72,7 +72,7 @@ VersionDialog::VersionDialog(QWidget *parent)
         "<br/>"
         "Built on " __DATE__ " at " __TIME__ "<br />"
 #ifdef IDE_REVISION
-        "Using revision %5<br/>"
+        "From revision %5<br/>"
 #endif
         "<br/>"
         "<br/>"
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index e3bf12757bd3e479c7ad9a198f1efe7e746358e2..49b130ebc1cc8f8bbe84f52525ded5a77339438f 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -427,7 +427,9 @@ void CPPEditor::switchDeclarationDefinition()
     if (!m_modelManager)
         return;
 
-    Document::Ptr doc = m_modelManager->document(file()->fileName());
+    const Snapshot snapshot = m_modelManager->snapshot();
+
+    Document::Ptr doc = snapshot.value(file()->fileName());
     if (!doc)
         return;
     Symbol *lastSymbol = doc->findSymbolAt(line, column);
@@ -445,7 +447,7 @@ void CPPEditor::switchDeclarationDefinition()
 
     if (f) {
         TypeOfExpression typeOfExpression;
-        typeOfExpression.setDocuments(m_modelManager->documents());
+        typeOfExpression.setSnapshot(m_modelManager->snapshot());
         QList<TypeOfExpression::Result> resolvedSymbols = typeOfExpression(QString(), doc, lastSymbol);
         const LookupContext &context = typeOfExpression.lookupContext();
 
@@ -474,10 +476,12 @@ void CPPEditor::jumpToDefinition()
     if (!m_modelManager)
         return;
 
+    const Snapshot snapshot = m_modelManager->snapshot();
+
     // Find the last symbol up to the cursor position
     int line = 0, column = 0;
     convertPosition(position(), &line, &column);
-    Document::Ptr doc = m_modelManager->document(file()->fileName());
+    Document::Ptr doc = snapshot.value(file()->fileName());
     if (!doc)
         return;
 
@@ -503,7 +507,7 @@ void CPPEditor::jumpToDefinition()
 
     // Evaluate the type of the expression
     TypeOfExpression typeOfExpression;
-    typeOfExpression.setDocuments(m_modelManager->documents());
+    typeOfExpression.setSnapshot(m_modelManager->snapshot());
     QList<TypeOfExpression::Result> resolvedSymbols =
             typeOfExpression(expression, doc, lastSymbol);
 
@@ -572,7 +576,7 @@ Symbol *CPPEditor::findDefinition(Symbol *lastSymbol)
     QualifiedNameId *q = control.qualifiedNameId(&qualifiedName[0], qualifiedName.size());
     LookupContext context(&control);
 
-    const QMap<QString, Document::Ptr> documents = m_modelManager->documents();
+    const Snapshot documents = m_modelManager->snapshot();
     foreach (Document::Ptr doc, documents) {
         QList<Scope *> visibleScopes;
         visibleScopes.append(doc->globalSymbols());
@@ -744,7 +748,8 @@ void CPPEditor::unCommentSelection()
 
         QString endText = endBlock.text();
         int endPos = end - endBlock.position();
-        bool hasTrailingCharacters = !endText.mid(endPos).trimmed().isEmpty();
+        bool hasTrailingCharacters = !endText.left(endPos).remove(QLatin1String("//")).trimmed().isEmpty()
+                                     && !endText.mid(endPos).trimmed().isEmpty();
         if ((endPos <= endText.length() - 2
             && endText.at(endPos) == QLatin1Char('*')
              && endText.at(endPos+1) == QLatin1Char('/'))) {
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 4606bd948f346d332155e4ffc939c62a3490ba31..addf5301f79b66f5421217ade1d2a4d0d6b15c57 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -434,10 +434,12 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
     //if (! expression.isEmpty())
         //qDebug() << "***** expression:" << expression;
 
-    if (Document::Ptr thisDocument = m_manager->document(fileName)) {
+    const Snapshot snapshot = m_manager->snapshot();
+
+    if (Document::Ptr thisDocument = snapshot.value(fileName)) {
         Symbol *symbol = thisDocument->findSymbolAt(line, column);
 
-        typeOfExpression.setDocuments(m_manager->documents());
+        typeOfExpression.setSnapshot(m_manager->snapshot());
 
         QList<TypeOfExpression::Result> resolvedTypes = typeOfExpression(expression, thisDocument, symbol,
                                                                          TypeOfExpression::Preprocess);
@@ -964,8 +966,10 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
             if (Function *function = symbol->type()->asFunction()) {
                 // If the member is a function, automatically place the opening parenthesis,
                 // except when it might take template parameters.
-                if (!function->returnType().isValid()
-                    && (function->identity() && !function->identity()->isDestructorNameId())) {
+                const bool hasReturnType = function->returnType().isValid()  ||
+                                           function->returnType().isSigned() ||
+                                           function->returnType().isUnsigned();
+                if (! hasReturnType && (function->identity() && !function->identity()->isDestructorNameId())) {
                     // Don't insert any magic, since the user might have just wanted to select the class
 
                 } else if (function->templateParameterCount() != 0) {
@@ -1034,7 +1038,7 @@ void CppCodeCompletion::cleanup()
 
     // Set empty map in order to avoid referencing old versions of the documents
     // until the next completion
-    typeOfExpression.setDocuments(QMap<QString, Document::Ptr>());
+    typeOfExpression.setSnapshot(Snapshot());
 }
 
 int CppCodeCompletion::findStartOfName(const TextEditor::ITextEditor *editor)
diff --git a/src/plugins/cpptools/cpphoverhandler.cpp b/src/plugins/cpptools/cpphoverhandler.cpp
index f3831e5394d0263ce0be9840ea2ee33019c0f5b3..fab0d83b31fcc3d0c6c818857324e52cfd29fb19 100644
--- a/src/plugins/cpptools/cpphoverhandler.cpp
+++ b/src/plugins/cpptools/cpphoverhandler.cpp
@@ -165,9 +165,11 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
     QTextCursor tc(edit->document());
     tc.setPosition(pos);
 
+    const Snapshot documents = m_manager->snapshot();
+
     const int lineNumber = tc.block().blockNumber() + 1;
     const QString fileName = editor->file()->fileName();
-    Document::Ptr doc = m_manager->document(fileName);
+    Document::Ptr doc = documents.value(fileName);
     if (doc) {
         foreach (Document::DiagnosticMessage m, doc->diagnosticMessages()) {
             if (m.line() == lineNumber) {
@@ -212,7 +214,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
             Symbol *lastSymbol = doc->findSymbolAt(line, column);
 
             TypeOfExpression typeOfExpression;
-            typeOfExpression.setDocuments(m_manager->documents());
+            typeOfExpression.setSnapshot(documents);
             QList<TypeOfExpression::Result> types = typeOfExpression(expression, doc, lastSymbol);
 
             if (!types.isEmpty()) {
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 9adc892713d54fb6e8cf8a411d6ed378b01e9e5e..a02656ee8c96943d5e774970c2727a0cb53126e0 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -143,7 +143,7 @@ protected:
 
 private:
     QPointer<CppModelManager> m_modelManager;
-    CppModelManager::DocumentTable m_documents;
+    Snapshot m_snapshot;
     Environment env;
     pp m_proc;
     QStringList m_includePaths;
@@ -160,7 +160,7 @@ private:
 
 CppPreprocessor::CppPreprocessor(QPointer<CppModelManager> modelManager)
     : m_modelManager(modelManager),
-    m_documents(modelManager->documents()),
+    m_snapshot(modelManager->snapshot()),
     m_proc(this, env)
 { }
 
@@ -340,7 +340,7 @@ void CppPreprocessor::mergeEnvironment(Document::Ptr doc, QSet<QString> *process
     processed->insert(fn);
 
     foreach (QString includedFile, doc->includedFiles()) {
-        mergeEnvironment(m_documents.value(includedFile), processed);
+        mergeEnvironment(m_snapshot.value(includedFile), processed);
     }
 
     foreach (const Macro macro, doc->definedMacros()) {
@@ -386,7 +386,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type,
     }
 
     if (! contents.isEmpty()) {
-        Document::Ptr cachedDoc = m_documents.value(fileName);
+        Document::Ptr cachedDoc = m_snapshot.value(fileName);
         if (cachedDoc && m_currentDoc) {
             mergeEnvironment(cachedDoc);
         } else {
@@ -477,11 +477,8 @@ CppModelManager::CppModelManager(QObject *parent) :
 CppModelManager::~CppModelManager()
 { }
 
-Document::Ptr CppModelManager::document(const QString &fileName) const
-{ return m_documents.value(fileName); }
-
-CppModelManager::DocumentTable CppModelManager::documents() const
-{ return m_documents; }
+Snapshot CppModelManager::snapshot() const
+{ return m_snapshot; }
 
 void CppModelManager::ensureUpdated()
 {
@@ -672,7 +669,7 @@ void CppModelManager::emitDocumentUpdated(Document::Ptr doc)
 void CppModelManager::onDocumentUpdated(Document::Ptr doc)
 {
     const QString fileName = doc->fileName();
-    m_documents[fileName] = doc;
+    m_snapshot[fileName] = doc;
     QList<Core::IEditor *> openedEditors = m_core->editorManager()->openedEditors();
     foreach (Core::IEditor *editor, openedEditors) {
         if (editor->file()->fileName() == fileName) {
@@ -837,7 +834,7 @@ void CppModelManager::parse(QFutureInterface<void> &future,
 
 void CppModelManager::GC()
 {
-    DocumentTable documents = m_documents;
+    Snapshot documents = m_snapshot;
 
     QSet<QString> processed;
     QStringList todo = projectFiles();
@@ -868,7 +865,7 @@ void CppModelManager::GC()
     }
 
     emit aboutToRemoveFiles(removedFiles);
-    m_documents = documents;
+    m_snapshot = documents;
 }
 
 
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index 3b2f4e19993248a6e31c124c902568ed89947d9d..25947056203929e7fac1e17096525b8f402dd64b 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -76,8 +76,7 @@ public:
     virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const;
     virtual void updateProjectInfo(const ProjectInfo &pinfo);
 
-    virtual CPlusPlus::Document::Ptr document(const QString &fileName) const;
-    virtual DocumentTable documents() const;
+    virtual CPlusPlus::Snapshot snapshot() const;
     virtual void GC();
 
     QFuture<void> refreshSourceFiles(const QStringList &sourceFiles);
@@ -146,7 +145,7 @@ private:
     Core::ICore *m_core;
     ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
     CppHoverHandler *m_hoverHandler;
-    DocumentTable m_documents;
+    CPlusPlus::Snapshot m_snapshot;
 
     // cache
     bool m_dirty;
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h
index e3ad4fe961be962f93cf30f3f7745ca055b8faa0..6dc0da67ca0b90cac3a9abec535fbac23f676def 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.h
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.h
@@ -46,14 +46,11 @@ namespace ProjectExplorer {
 
 namespace CppTools {
 
-class CPPTOOLS_EXPORT CppModelManagerInterface
-        : public QObject
+class CPPTOOLS_EXPORT CppModelManagerInterface: public QObject
 {
     Q_OBJECT
 
 public:
-    typedef QMap<QString, CPlusPlus::Document::Ptr> DocumentTable; // ### remove me
-
     class ProjectInfo
     {
     public:
@@ -89,8 +86,7 @@ public:
     virtual void GC() = 0;
     virtual void updateSourceFiles(const QStringList &sourceFiles) = 0;
 
-    virtual CPlusPlus::Document::Ptr document(const QString &fileName) const = 0;
-    virtual DocumentTable documents() const = 0;
+    virtual CPlusPlus::Snapshot snapshot() const = 0;
 
     virtual QList<ProjectInfo> projectInfos() const = 0;
     virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0;
diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro
index 74112379e3904c195bdc5431077e08c6ec32a9b2..170f62b5bf19f348f34f5474fd6d2d5e47ab7216 100644
--- a/src/plugins/cpptools/cpptools.pro
+++ b/src/plugins/cpptools/cpptools.pro
@@ -6,7 +6,6 @@ include(cpptools_dependencies.pri)
 
 # DEFINES += QT_NO_CAST_FROM_ASCII
 DEFINES += QT_NO_CAST_TO_ASCII
-unix:QMAKE_CXXFLAGS_DEBUG += -O3
 INCLUDEPATH += .
 DEFINES += CPPTOOLS_LIBRARY
 CONFIG += help
diff --git a/src/plugins/cpptools/searchsymbols.h b/src/plugins/cpptools/searchsymbols.h
index 4997e5cf049bb72d9512c56191bf2d4d0728abcd..494455f6d85ad2e7796cd5bd32cf41b554890859 100644
--- a/src/plugins/cpptools/searchsymbols.h
+++ b/src/plugins/cpptools/searchsymbols.h
@@ -43,6 +43,7 @@
 #include <QIcon>
 #include <QMetaType>
 #include <QString>
+#include <QSet>
 
 #include <functional>
 
diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro
index 3d67e19c6aae2337f008e5416c5d18d99ba5c729..7308fb441c2da8c38ec4cd3d69599896bd44843e 100644
--- a/src/plugins/debugger/debugger.pro
+++ b/src/plugins/debugger/debugger.pro
@@ -58,7 +58,6 @@ SOURCES += attachexternaldialog.cpp \
     gdbengine.cpp \
     gdbmi.cpp \
     gdboptionpage.cpp \
-    gdbtypemacros.cpp \
     gdbengine.h \
     moduleshandler.cpp \
     moduleswindow.cpp \
@@ -79,7 +78,6 @@ FORMS += attachexternaldialog.ui \
     breakcondition.ui \
     mode.ui \
     gdboptionpage.ui \
-    gdbtypemacros.ui \
     startexternaldialog.ui \
 
 RESOURCES += debugger.qrc
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 37406f70cc1a6678e9506c75d320adea5711d544..d9217069c6849858e9737a54d2f20a7f6b3394df 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -183,7 +183,6 @@ DebuggerPlugin::DebuggerPlugin()
 {
     m_pm = 0;
     m_generalOptionPage = 0;
-    m_typeMacroPage = 0;
     m_locationMark = 0;
     m_manager = 0;
 }
@@ -202,7 +201,6 @@ void DebuggerPlugin::shutdown()
     //qDebug() << "DebuggerPlugin::~DebuggerPlugin";
     removeObject(m_debugMode);
     removeObject(m_generalOptionPage);
-    removeObject(m_typeMacroPage);
 
     // FIXME: when using the line below, BreakWindow etc gets deleted twice.
     // so better leak for now...
@@ -212,9 +210,6 @@ void DebuggerPlugin::shutdown()
     delete m_generalOptionPage;
     m_generalOptionPage = 0;
 
-    delete m_typeMacroPage;
-    m_typeMacroPage = 0;
-
     delete m_locationMark;
     m_locationMark = 0;
 
@@ -409,13 +404,10 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes
     mdebug->addAction(cmd);
 
     m_generalOptionPage = 0;
-    m_typeMacroPage = 0;
 
     // FIXME:
     m_generalOptionPage = new GdbOptionPage(&theGdbSettings());
     addObject(m_generalOptionPage);
-    m_typeMacroPage = new TypeMacroPage(&theGdbSettings());
-    addObject(m_typeMacroPage);
 
     m_locationMark = 0;
 
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index 91ffe4dbf770a43fa839f9d27e4c49818c373d2a..ebf12b5e12331b2fdb1827ec3252299b19ffe0e8 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -54,7 +54,6 @@ namespace Internal {
 class DebuggerManager;
 class DebugMode;
 class GdbOptionPage;
-class TypeMacroPage;
 class LocationMark;
 
 class DebuggerPlugin : public ExtensionSystem::IPlugin
@@ -103,7 +102,6 @@ private:
 
     ExtensionSystem::PluginManager *m_pm;
     GdbOptionPage *m_generalOptionPage;
-    TypeMacroPage *m_typeMacroPage;
 
     QString m_previousMode;
     LocationMark *m_locationMark;
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index 56106a7524468e7270340462f80df9e1a88a02ff..6b3cbb15fee9b0883386513d048939d8d7fe9b7b 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -80,7 +80,7 @@ enum DataDumperState
     DataDumperUnavailable,
 };
 
-// FIXME: Move to extra file?
+
 class GdbSettings
 {
 public:
diff --git a/src/plugins/debugger/gdboptionpage.cpp b/src/plugins/debugger/gdboptionpage.cpp
index e05b811889abf12094d267a823b45f70716a9ed9..7d6742e95827c328349ff1c0c4dc1bd78b3a9a68 100644
--- a/src/plugins/debugger/gdboptionpage.cpp
+++ b/src/plugins/debugger/gdboptionpage.cpp
@@ -58,7 +58,11 @@ GdbOptionPage::GdbOptionPage(GdbSettings *settings)
 #if defined(Q_OS_WIN32)
     defaultCommand.append(".exe");
 #endif
+    QString defaultScript = coreIFace->resourcePath() +
+        QLatin1String("/gdb/qt4macros");
+
     m_settings->m_gdbCmd   = s->value("Location", defaultCommand).toString();
+    m_settings->m_scriptFile= s->value("ScriptFile", defaultScript).toString();
     m_settings->m_gdbEnv   = s->value("Environment", "").toString();
     m_settings->m_autoRun  = s->value("AutoRun", true).toBool();
     m_settings->m_autoQuit = s->value("AutoQuit", true).toBool();
@@ -72,36 +76,50 @@ QString GdbOptionPage::name() const
 
 QString GdbOptionPage::category() const
 {
-    return "Debugger|Gdb";
+    return "Debugger";
 }
 
 QString GdbOptionPage::trCategory() const
 {
-    return tr("Debugger|Gdb");
+    return tr("Debugger");
 }
 
 QWidget *GdbOptionPage::createPage(QWidget *parent)
 {
     QWidget *w = new QWidget(parent);
     m_ui.setupUi(w);
-    m_ui.gdbEdit->setText(m_settings->m_gdbCmd);
-    m_ui.envEdit->setText(m_settings->m_gdbEnv);
+    m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command);
+    m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location"));
+    m_ui.gdbLocationChooser->setPath(m_settings->m_gdbCmd);
+    m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File);
+    m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File"));
+    m_ui.scriptFileChooser->setPath(m_settings->m_scriptFile);
+    m_ui.environmentEdit->setText(m_settings->m_gdbEnv);
     m_ui.autoStartBox->setChecked(m_settings->m_autoRun);
     m_ui.autoQuitBox->setChecked(m_settings->m_autoQuit);
-    connect(m_ui.pushButtonBrowse, SIGNAL(clicked()),
-        this, SLOT(browse()));
+
+    // FIXME
+    m_ui.autoStartBox->hide();
+    m_ui.autoQuitBox->hide();
+    m_ui.environmentEdit->hide();
+    m_ui.labelEnvironment->hide();
+
+    connect(m_ui.gdbLocationChooser, SIGNAL(changed()),
+        this, SLOT(onGdbLocationChanged()));
+    connect(m_ui.scriptFileChooser, SIGNAL(changed()),
+        this, SLOT(onScriptFileChanged()));
 
     return w;
 }
 
-void GdbOptionPage::browse()
+void GdbOptionPage::onGdbLocationChanged()
 {
-    QString fileName = QFileDialog::getOpenFileName(m_ui.pushButtonBrowse,
-            "Browse for gdb executable");
-    if (fileName.isEmpty())
-        return;
-    m_settings->m_gdbCmd = fileName;
-    m_ui.gdbEdit->setText(fileName);
+    m_settings->m_gdbCmd = m_ui.gdbLocationChooser->path();
+}
+
+void GdbOptionPage::onScriptFileChanged()
+{
+    m_settings->m_scriptFile = m_ui.scriptFileChooser->path();
 }
 
 void GdbOptionPage::finished(bool accepted)
@@ -109,10 +127,11 @@ void GdbOptionPage::finished(bool accepted)
     if (!accepted)
         return;
 
-    m_settings->m_gdbCmd   = m_ui.gdbEdit->text();
-    m_settings->m_gdbEnv   = m_ui.envEdit->text();
+    m_settings->m_gdbCmd   = m_ui.gdbLocationChooser->path();
+    m_settings->m_gdbEnv   = m_ui.environmentEdit->text();
     m_settings->m_autoRun  = m_ui.autoStartBox->isChecked();
     m_settings->m_autoQuit = m_ui.autoQuitBox->isChecked();
+    m_settings->m_scriptFile = m_ui.scriptFileChooser->path();
 
     Core::ICore *coreIFace = m_pm->getObject<Core::ICore>();
     if (!coreIFace || !coreIFace->settings())
diff --git a/src/plugins/debugger/gdboptionpage.h b/src/plugins/debugger/gdboptionpage.h
index 1d71024bac1b7ef923b9ce577041c0b0266055b8..d306e03e20f72b5b30fc8a4e103cc56b2466d94c 100644
--- a/src/plugins/debugger/gdboptionpage.h
+++ b/src/plugins/debugger/gdboptionpage.h
@@ -35,7 +35,6 @@
 #define GDBOPTIONPAGE_H
 
 #include "ui_gdboptionpage.h"
-#include "ui_gdbtypemacros.h"
 
 #include <coreplugin/dialogs/ioptionspage.h>
 
@@ -63,7 +62,8 @@ public:
     void finished(bool accepted);
 
 public slots:
-    void browse();
+    void onGdbLocationChanged();
+    void onScriptFileChanged();
 
 private:
     ExtensionSystem::PluginManager *m_pm;
@@ -72,6 +72,7 @@ private:
     GdbSettings *m_settings;
 };
 
+#if 0
 class TypeMacroPage : public Core::IOptionsPage
 {
     Q_OBJECT
@@ -87,7 +88,6 @@ public:
     void finished(bool accepted);
 
 private slots:
-    void onScriptButton();
     void onAddButton();
     void onDelButton();
     void currentItemChanged(QTreeWidgetItem *item);
@@ -100,6 +100,7 @@ private:
     GdbSettings *m_settings;
     QWidget *m_widget;
 };
+#endif
 
 } // namespace Internal
 } // namespace Debugger
diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui
index 4b58d5d7140061767fd2ce58a05c3fe1bec6f59c..580f13c0d660ebce063942c822c4d357ec9c6ed3 100644
--- a/src/plugins/debugger/gdboptionpage.ui
+++ b/src/plugins/debugger/gdboptionpage.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>433</width>
-    <height>216</height>
+    <height>233</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -23,7 +23,7 @@
    <item>
     <widget class="QGroupBox" name="groupBox">
      <property name="title">
-      <string>Gdb Debug Options</string>
+      <string>Locations</string>
      </property>
      <layout class="QGridLayout">
       <property name="margin">
@@ -32,46 +32,45 @@
       <property name="spacing">
        <number>6</number>
       </property>
-      <item row="0" column="1">
-       <widget class="QLineEdit" name="gdbEdit"/>
-      </item>
-      <item row="1" column="1" colspan="2">
-       <widget class="QLineEdit" name="envEdit"/>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="environmentEdit"/>
       </item>
       <item row="0" column="0">
-       <widget class="QLabel" name="label">
+       <widget class="QLabel" name="labelGdbLocaltion">
+        <property name="toolTip">
+         <string>This is either a full abolute path leading to the gdb binary you intend to use or the name of a gdb binary that wiull be searched in your PATH.</string>
+        </property>
         <property name="text">
          <string>Gdb Location:</string>
         </property>
-        <property name="buddy">
-         <cstring>gdbEdit</cstring>
-        </property>
        </widget>
       </item>
       <item row="1" column="0">
-       <widget class="QLabel" name="label_2">
+       <widget class="QLabel" name="labelEnvironment">
         <property name="text">
          <string>Environment:</string>
         </property>
         <property name="buddy">
-         <cstring>envEdit</cstring>
+         <cstring>environmentEdit</cstring>
         </property>
        </widget>
       </item>
-      <item row="0" column="2">
-       <widget class="QPushButton" name="pushButtonBrowse">
-        <property name="text">
-         <string/>
+      <item row="2" column="0">
+       <widget class="QLabel" name="labelGdbStartupScript">
+        <property name="toolTip">
+         <string>This is either empty or points to a file containing gdb commands that will be executed immediately after gdb starts up.</string>
         </property>
-        <property name="icon">
-         <iconset resource="../coreplugin/core.qrc">
-          <normaloff>:/qworkbench/images/fileopen.png</normaloff>:/qworkbench/images/fileopen.png</iconset>
-        </property>
-        <property name="checkable">
-         <bool>false</bool>
+        <property name="text">
+         <string>Gdb Startup Script:</string>
         </property>
        </widget>
       </item>
+      <item row="2" column="1">
+       <widget class="Core::Utils::PathChooser" name="scriptFileChooser" native="true"/>
+      </item>
+      <item row="0" column="1">
+       <widget class="Core::Utils::PathChooser" name="gdbLocationChooser" native="true"/>
+      </item>
      </layout>
     </widget>
    </item>
@@ -104,6 +103,14 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>Core::Utils::PathChooser</class>
+   <extends>QWidget</extends>
+   <header location="global">utils/pathchooser.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <resources>
   <include location="../coreplugin/core.qrc"/>
  </resources>
diff --git a/src/plugins/debugger/gdbtypemacros.cpp b/src/plugins/debugger/gdbtypemacros.cpp
index 8610d01e39d87c2c9a64ff84cbf1389a74fc11bd..89178af268f09a142239f93ebde64d76ea1c9b1d 100644
--- a/src/plugins/debugger/gdbtypemacros.cpp
+++ b/src/plugins/debugger/gdbtypemacros.cpp
@@ -109,6 +109,8 @@ QWidget *TypeMacroPage::createPage(QWidget *parent)
 
     m_widget = new QWidget(parent);
     m_ui.setupUi(m_widget);
+    m_ui.scriptFile->setPromptDialogTitle(tr("Select Gdb Script"));
+    m_ui.scriptFile->setExpectedKind(Core::Utils::PathChooser::File);
 
     connect(m_ui.addButton, SIGNAL(clicked()),
         this, SLOT(onAddButton()));
@@ -116,8 +118,8 @@ QWidget *TypeMacroPage::createPage(QWidget *parent)
     connect(m_ui.delButton, SIGNAL(clicked()),
         this, SLOT(onDelButton()));
 
-    connect(m_ui.scriptButton, SIGNAL(clicked()),
-        this, SLOT(onScriptButton()));
+    connect(m_ui.scriptFile, SIGNAL(validChanged()),
+        this, SLOT(updateButtonState()));
 
     connect(m_ui.treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
         this, SLOT(currentItemChanged(QTreeWidgetItem *)));
@@ -139,7 +141,7 @@ QWidget *TypeMacroPage::createPage(QWidget *parent)
         ++i;
     }
 
-    m_ui.scriptEdit->setText(m_settings->m_scriptFile);
+    m_ui.scriptFile->setPath(m_settings->m_scriptFile);
 
     updateButtonState();
 
@@ -152,7 +154,7 @@ void TypeMacroPage::finished(bool accepted)
 	return;
 
     m_settings->m_typeMacros.clear();
-    m_settings->m_scriptFile = m_ui.scriptEdit->text();
+    m_settings->m_scriptFile = m_ui.scriptFile->path();
 
     for (int i = 0; i < m_ui.treeWidget->topLevelItemCount(); ++i) {
         QTreeWidgetItem *item = m_ui.treeWidget->topLevelItem(i);
@@ -172,13 +174,6 @@ void TypeMacroPage::finished(bool accepted)
     }
 }
 
-void TypeMacroPage::onScriptButton()
-{
-    QString fileName = QFileDialog::getOpenFileName(m_widget, tr("Select Gdb Script"));
-    m_ui.scriptEdit->setText(fileName);
-    updateButtonState();
-}
-
 void TypeMacroPage::onAddButton()
 {
     if (m_ui.typeEdit->text().isEmpty() || m_ui.macroEdit->text().isEmpty())
diff --git a/src/plugins/debugger/gdbtypemacros.ui b/src/plugins/debugger/gdbtypemacros.ui
index aa7215577b4d1728cd34c8ec26257c0f71c5f7cf..f42514e4e499eaae2255cffd59dd74ebfa4b803f 100644
--- a/src/plugins/debugger/gdbtypemacros.ui
+++ b/src/plugins/debugger/gdbtypemacros.ui
@@ -1,146 +1,115 @@
-<ui version="4.0" >
- <author></author>
- <comment></comment>
- <exportmacro></exportmacro>
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>TypeMacroPage</class>
- <widget class="QWidget" name="TypeMacroPage" >
-  <property name="geometry" >
+ <widget class="QWidget" name="TypeMacroPage">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>519</width>
-    <height>238</height>
+    <height>263</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QVBoxLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
+  <layout class="QVBoxLayout">
+   <property name="spacing">
     <number>6</number>
    </property>
+   <property name="margin">
+    <number>9</number>
+   </property>
    <item>
-    <widget class="QGroupBox" name="groupBox" >
-     <property name="title" >
-      <string>Script File</string>
-     </property>
-     <layout class="QHBoxLayout" >
-      <property name="margin" >
-       <number>9</number>
-      </property>
-      <property name="spacing" >
-       <number>6</number>
-      </property>
-      <item>
-       <widget class="QLineEdit" name="scriptEdit" />
-      </item>
-      <item>
-       <widget class="QToolButton" name="scriptButton" >
-        <property name="minimumSize" >
-         <size>
-          <width>21</width>
-          <height>23</height>
-         </size>
-        </property>
-        <property name="text" >
-         <string>...</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <layout class="QGridLayout" >
-     <property name="margin" >
+    <layout class="QGridLayout">
+     <property name="margin">
       <number>0</number>
      </property>
-     <property name="spacing" >
+     <property name="spacing">
       <number>6</number>
      </property>
-     <item row="0" column="0" colspan="2" >
-      <widget class="QTreeWidget" name="treeWidget" >
-       <property name="rootIsDecorated" >
+     <item row="0" column="0" colspan="2">
+      <widget class="QTreeWidget" name="treeWidget">
+       <property name="rootIsDecorated">
         <bool>false</bool>
        </property>
        <column>
-        <property name="text" >
+        <property name="text">
          <string>Type</string>
         </property>
        </column>
        <column>
-        <property name="text" >
+        <property name="text">
          <string>Macro</string>
         </property>
        </column>
       </widget>
      </item>
-     <item row="1" column="2" >
-      <widget class="QToolButton" name="addButton" >
-       <property name="minimumSize" >
+     <item row="1" column="2">
+      <widget class="QToolButton" name="addButton">
+       <property name="minimumSize">
         <size>
          <width>21</width>
          <height>23</height>
         </size>
        </property>
-       <property name="text" >
+       <property name="text">
         <string>+</string>
        </property>
-       <property name="icon" >
-        <iconset resource="gdbdebugger.qrc" >:/gdbdebugger/images/newitem.png</iconset>
+       <property name="icon">
+        <iconset>
+         <normaloff>:/gdbdebugger/images/newitem.png</normaloff>:/gdbdebugger/images/newitem.png</iconset>
        </property>
       </widget>
      </item>
-     <item row="2" column="0" >
-      <widget class="QLabel" name="label_2" >
-       <property name="text" >
+     <item row="2" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
         <string>Macro Name:</string>
        </property>
       </widget>
      </item>
-     <item row="3" column="0" >
-      <widget class="QLabel" name="label_3" >
-       <property name="text" >
+     <item row="3" column="0">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
         <string>Parse as:</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1" >
-      <widget class="QLineEdit" name="macroEdit" />
+     <item row="2" column="1">
+      <widget class="QLineEdit" name="macroEdit"/>
      </item>
-     <item row="0" column="2" >
-      <layout class="QVBoxLayout" >
-       <property name="margin" >
+     <item row="0" column="2">
+      <layout class="QVBoxLayout">
+       <property name="spacing">
         <number>0</number>
        </property>
-       <property name="spacing" >
+       <property name="margin">
         <number>0</number>
        </property>
        <item>
-        <widget class="QToolButton" name="delButton" >
-         <property name="minimumSize" >
+        <widget class="QToolButton" name="delButton">
+         <property name="minimumSize">
           <size>
            <width>21</width>
            <height>23</height>
           </size>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>-</string>
          </property>
-         <property name="icon" >
-          <iconset resource="gdbdebugger.qrc" >:/gdbdebugger/images/delete.png</iconset>
+         <property name="icon">
+          <iconset>
+           <normaloff>:/gdbdebugger/images/delete.png</normaloff>:/gdbdebugger/images/delete.png</iconset>
          </property>
         </widget>
        </item>
        <item>
         <spacer>
-         <property name="orientation" >
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
@@ -150,25 +119,25 @@
        </item>
       </layout>
      </item>
-     <item row="1" column="1" >
-      <widget class="QLineEdit" name="typeEdit" />
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="typeEdit"/>
      </item>
-     <item row="1" column="0" >
-      <widget class="QLabel" name="label" >
-       <property name="text" >
+     <item row="1" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
         <string>Type:</string>
        </property>
       </widget>
      </item>
-     <item row="3" column="1" >
-      <widget class="QComboBox" name="parseAsBox" >
+     <item row="3" column="1">
+      <widget class="QComboBox" name="parseAsBox">
        <item>
-        <property name="text" >
+        <property name="text">
          <string>ASCII (char *)</string>
         </property>
        </item>
        <item>
-        <property name="text" >
+        <property name="text">
          <string>Unicode (short)</string>
         </property>
        </item>
@@ -178,9 +147,8 @@
    </item>
   </layout>
  </widget>
- <pixmapfunction></pixmapfunction>
  <resources>
-  <include location="gdbdebugger.qrc" />
+  <include location="gdbdebugger.qrc"/>
  </resources>
  <connections/>
 </ui>
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 6f443c92b47f0af150244046bb326cbd4e06bc15..5328a171aeaedd75001076214e245c9bba072e27 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -411,7 +411,7 @@ static QString niceType(QString type)
                      "std::allocator<wchar_t> >", "std::wstring");
 
         // std::vector
-        static QRegExp re1("std::vector<(.*)\\s*,std::allocator<(.*)>\\s*>");
+        static QRegExp re1("std::vector<(.*), std::allocator<(.*)>\\s*>");
         re1.setMinimal(true);
         for (int i = 0; i != 10; ++i) {
             if (re1.indexIn(type) == -1 || re1.cap(1) != re1.cap(2)) 
@@ -420,7 +420,7 @@ static QString niceType(QString type)
         }
 
         // std::list
-        static QRegExp re2("std::list<(.*)\\s*,std::allocator<(.*)>\\s*>");
+        static QRegExp re2("std::list<(.*), std::allocator<(.*)>\\s*>");
         re2.setMinimal(true);
         for (int i = 0; i != 10; ++i) {
             if (re2.indexIn(type) == -1 || re2.cap(1) != re2.cap(2)) 
@@ -428,6 +428,17 @@ static QString niceType(QString type)
             type.replace(re2.cap(0), "std::list<" + re2.cap(1) + ">");
         }
 
+        // std::map
+        static QRegExp re3("std::map<(.*), (.*), std::less<(.*)\\s*>, "
+            "std::allocator<std::pair<const (.*), (.*)\\s*> > >");
+        re3.setMinimal(true);
+        for (int i = 0; i != 10; ++i) {
+            if (re3.indexIn(type) == -1 || re3.cap(1) != re3.cap(3)
+                || re3.cap(1) != re3.cap(4) || re3.cap(2) != re3.cap(5)) 
+                break;
+            type.replace(re3.cap(0), "std::map<" + re3.cap(1) + ", " + re3.cap(2) + ">");
+        }
+
         type.replace(" >", ">");
     }
     return type;
diff --git a/src/plugins/designer/workbenchintegration.cpp b/src/plugins/designer/workbenchintegration.cpp
index 4e49218a5c4107d762eb1bdb9df8a132fc29735e..273aa2cfb82c1cb8ea1221aeabe9213d1263111d 100644
--- a/src/plugins/designer/workbenchintegration.cpp
+++ b/src/plugins/designer/workbenchintegration.cpp
@@ -95,7 +95,7 @@ QList<Document::Ptr> WorkbenchIntegration::findDocuments(const QString &uiFileNa
 
     QList<Document::Ptr> docList;
     // take all docs
-    CppTools::CppModelManagerInterface::DocumentTable docTable = cppModelManager->documents();
+    CPlusPlus::Snapshot docTable = cppModelManager->snapshot();
     foreach (Document::Ptr doc, docTable) { // we go through all documents
         QStringList includes = doc->includedFiles();
         foreach (QString include, includes) {
@@ -253,7 +253,7 @@ Document::Ptr WorkbenchIntegration::findDefinition(Function *functionDeclaration
     QualifiedNameId *q = control.qualifiedNameId(&qualifiedName[0], qualifiedName.size());
     LookupContext context(&control);
 
-    const QMap<QString, Document::Ptr> documents = cppModelManager->documents();
+    const Snapshot documents = cppModelManager->snapshot();
     foreach (Document::Ptr doc, documents) {
         QList<Scope *> visibleScopes;
         visibleScopes.append(doc->globalSymbols());
diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp
index e1b14cb9ccc627c31fff00065d560f8f7fa7e31e..7f0581fc3c3a976775b4ffc7213de87dbe0cc13e 100644
--- a/src/plugins/git/settingspage.cpp
+++ b/src/plugins/git/settingspage.cpp
@@ -77,7 +77,7 @@ QString SettingsPage::name() const
     return tr("General");
 }
 
- QString SettingsPage::category() const
+QString SettingsPage::category() const
 {
     return QLatin1String("Git");
 }
diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h
index 3315e7b2de8edf7ed6074f4ab637c822933d8564..448483c7a77c05ea528ec1938b39e416fc44b83f 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.h
+++ b/src/plugins/projectexplorer/allprojectsfilter.h
@@ -55,8 +55,8 @@ class AllProjectsFilter : public QuickOpen::BaseFileFilter
 
 public:
     AllProjectsFilter(ProjectExplorerPlugin *pe, Core::ICore *core);
-    QString trName() const { return tr("File in any project"); }
-    QString name() const { return "File in any project"; }
+    QString trName() const { return tr("Files in any project"); }
+    QString name() const { return "Files in any project"; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; }
     void refresh(QFutureInterface<void> &future);
 
diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h
index bacd3a73ea1323fd3b33b3db258583f1911f18af..3e5d216632ed36bed41b4f055cab50558c3e56a7 100644
--- a/src/plugins/projectexplorer/currentprojectfilter.h
+++ b/src/plugins/projectexplorer/currentprojectfilter.h
@@ -55,8 +55,8 @@ class CurrentProjectFilter : public QuickOpen::BaseFileFilter
 
 public:
     CurrentProjectFilter(ProjectExplorerPlugin *pe, Core::ICore *core);
-    QString trName() const { return tr("File in current project"); }
-    QString name() const { return "File in current project"; }
+    QString trName() const { return tr("Files in current project"); }
+    QString name() const { return "Files in current project"; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; }
     void refresh(QFutureInterface<void> &future);
 
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index c926320193701e29529bfb93d396ad2650eaf6d7..9e47ac404d2f688a2e68966052b7a7abcfc457cb 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -498,12 +498,8 @@ void Qt4Project::updateCodeModel()
         pinfo.sourceFiles = files;
 
         modelmanager->updateProjectInfo(pinfo);
-
-        modelmanager->GC();
         modelmanager->updateSourceFiles(pinfo.sourceFiles);
     }
-
-    // update info
 }
 
 
diff --git a/src/plugins/quickopen/directoryfilter.cpp b/src/plugins/quickopen/directoryfilter.cpp
index afc22af054e31ef7954b55cd30c2d4c32211775d..30f7fc28faef19741f6182db6bee6c3b7c271f19 100644
--- a/src/plugins/quickopen/directoryfilter.cpp
+++ b/src/plugins/quickopen/directoryfilter.cpp
@@ -62,7 +62,7 @@ QByteArray DirectoryFilter::saveState() const
     out << m_directories;
     out << m_filters;
     out << shortcutString();
-    out << defaultActiveState();
+    out << isIncludedByDefault();
     out << m_files;
     return value;
 }
@@ -120,7 +120,7 @@ bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
     m_ui.directoryList->addItems(m_directories);
     m_ui.fileTypeEdit->setText(m_filters.join(tr(",")));
     m_ui.shortcutEdit->setText(shortcutString());
-    m_ui.defaultFlag->setChecked(!defaultActiveState());
+    m_ui.defaultFlag->setChecked(!isIncludedByDefault());
     updateOptionButtons();
     if (dialog.exec() == QDialog::Accepted) {
         QMutexLocker locker(&m_lock);
diff --git a/src/plugins/quickopen/filesystemfilter.cpp b/src/plugins/quickopen/filesystemfilter.cpp
index 386523ebc43682ff849bd497590cc231ea82df4b..4631a8d9347ead3dac58b9a735b67cb0306f2f21 100644
--- a/src/plugins/quickopen/filesystemfilter.cpp
+++ b/src/plugins/quickopen/filesystemfilter.cpp
@@ -114,7 +114,7 @@ bool FileSystemFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
     ui.setupUi(&dialog);
 
     ui.hiddenFilesFlag->setChecked(m_includeHidden);
-    ui.limitCheck->setChecked(!defaultActiveState());
+    ui.limitCheck->setChecked(!isIncludedByDefault());
     ui.shortcutEdit->setText(shortcutString());
 
     if (dialog.exec() == QDialog::Accepted) {
@@ -132,7 +132,7 @@ QByteArray FileSystemFilter::saveState() const
     QDataStream out(&value, QIODevice::WriteOnly);
     out << m_includeHidden;
     out << shortcutString();
-    out << defaultActiveState();
+    out << isIncludedByDefault();
     return value;
 }
 
diff --git a/src/plugins/quickopen/filesystemfilter.h b/src/plugins/quickopen/filesystemfilter.h
index 0e895a45aabc40a672385de9b170dbe43c045644..a404da038f027fe768afecbfcd8f5223db51fcb4 100644
--- a/src/plugins/quickopen/filesystemfilter.h
+++ b/src/plugins/quickopen/filesystemfilter.h
@@ -56,8 +56,8 @@ class FileSystemFilter : public QuickOpen::IQuickOpenFilter
 
 public:
     FileSystemFilter(Core::EditorManager *editorManager, QuickOpenToolWindow *toolWindow);
-    QString trName() const { return tr("File in file system"); }
-    QString name() const { return "File in file system"; }
+    QString trName() const { return tr("Files in file system"); }
+    QString name() const { return "Files in file system"; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Medium; }
     QList<QuickOpen::FilterEntry> matchesFor(const QString &entry);
     void accept(QuickOpen::FilterEntry selection) const;
diff --git a/src/plugins/quickopen/iquickopenfilter.cpp b/src/plugins/quickopen/iquickopenfilter.cpp
index ad6441ca284442c89d16bc7278c7dc37d4e1d4c4..82922e3ba2a8fde6c772a3bc755c5eb03c20d13d 100644
--- a/src/plugins/quickopen/iquickopenfilter.cpp
+++ b/src/plugins/quickopen/iquickopenfilter.cpp
@@ -43,7 +43,9 @@
 using namespace QuickOpen;
 
 IQuickOpenFilter::IQuickOpenFilter(QObject *parent):
-    QObject(parent)
+    QObject(parent),
+    m_includedByDefault(false),
+    m_hidden(false)
 {
 }
 
@@ -62,7 +64,7 @@ QByteArray IQuickOpenFilter::saveState() const
     QByteArray value;
     QDataStream out(&value, QIODevice::WriteOnly);
     out << shortcutString();
-    out << defaultActiveState();
+    out << isIncludedByDefault();
     return value;
 }
 
@@ -91,7 +93,7 @@ bool IQuickOpenFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
     QHBoxLayout *hlayout = new QHBoxLayout;
     QLineEdit *shortcutEdit = new QLineEdit(shortcutString());
     QCheckBox *limitCheck = new QCheckBox(tr("Limit to prefix"));
-    limitCheck->setChecked(!defaultActiveState());
+    limitCheck->setChecked(!isIncludedByDefault());
 
     hlayout->addWidget(new QLabel(tr("Prefix:")));
     hlayout->addWidget(shortcutEdit);
@@ -120,12 +122,22 @@ bool IQuickOpenFilter::isConfigurable() const
     return true;
 }
 
-bool IQuickOpenFilter::defaultActiveState() const
+bool IQuickOpenFilter::isIncludedByDefault() const
 {
-    return m_default;
+    return m_includedByDefault;
 }
 
 void IQuickOpenFilter::setIncludedByDefault(bool includedByDefault)
 {
-    m_default = includedByDefault;
+    m_includedByDefault = includedByDefault;
+}
+
+bool IQuickOpenFilter::isHidden() const
+{
+    return m_hidden;
+}
+
+void IQuickOpenFilter::setHidden(bool hidden)
+{
+    m_hidden = hidden;
 }
diff --git a/src/plugins/quickopen/iquickopenfilter.h b/src/plugins/quickopen/iquickopenfilter.h
index 376b0d0fe911995854c454080200ff947e9c48b9..d5591ac940f82f272fb4f34e271b66c66d4279b8 100644
--- a/src/plugins/quickopen/iquickopenfilter.h
+++ b/src/plugins/quickopen/iquickopenfilter.h
@@ -87,26 +87,25 @@ public:
     IQuickOpenFilter(QObject *parent = 0);
     virtual ~IQuickOpenFilter() {}
 
-    /* visible name */
+    /* Visible name. */
     virtual QString trName() const = 0;
 
-    /* internal name */
+    /* Internal name. */
     virtual QString name() const = 0;
 
-    /* selection list order in case of multiple active filters (high goes on top) */
+    /* Selection list order in case of multiple active filters (high goes on top). */
     virtual Priority priority() const = 0;
 
-    /* string to type to use this filter exclusively */
-    virtual QString shortcutString() const;
-    void setShortcutString(const QString &shortcut);
+    /* String to type to use this filter exclusively. */
+    QString shortcutString() const;
 
-    /* list of matches for the given user entry */
+    /* List of matches for the given user entry. */
     virtual QList<FilterEntry> matchesFor(const QString &entry) = 0;
 
-    /* user has selected the given entry that belongs to this filter */
+    /* User has selected the given entry that belongs to this filter. */
     virtual void accept(FilterEntry selection) const = 0;
 
-    /* implement to update caches on user request, if that's a long operation */
+    /* Implement to update caches on user request, if that's a long operation. */
     virtual void refresh(QFutureInterface<void> &future) = 0;
 
     /* Saved state is used to restore the filter at start up. */
@@ -126,9 +125,11 @@ public:
      * implementation returns true. */
     virtual bool isConfigurable() const;
 
-    /* is this filter used also when the shortcutString is not used? */
-    virtual bool defaultActiveState() const;
-    void setIncludedByDefault(bool includedByDefault);
+    /* Is this filter used also when the shortcutString is not used? */
+    bool isIncludedByDefault() const;
+
+    /* Returns whether the filter should be hidden from configuration and menus. */
+    bool isHidden() const;
 
     static QString trimWildcards(const QString &str) {
         if (str.isEmpty())
@@ -143,9 +144,15 @@ public:
         return str.mid(first, last-first+1);
     }
 
+protected:
+    void setShortcutString(const QString &shortcut);
+    void setIncludedByDefault(bool includedByDefault);
+    void setHidden(bool hidden);
+
 private:
     QString m_shortcut;
-    bool m_default;
+    bool m_includedByDefault;
+    bool m_hidden;
 };
 
 } // namespace QuickOpen
diff --git a/src/plugins/quickopen/opendocumentsfilter.h b/src/plugins/quickopen/opendocumentsfilter.h
index 7b24aeeca0241067286ccb0921a6cdb52fe01b2a..6957119727e90a3bf3bd785fb786190d5f4fc918 100644
--- a/src/plugins/quickopen/opendocumentsfilter.h
+++ b/src/plugins/quickopen/opendocumentsfilter.h
@@ -54,8 +54,8 @@ class OpenDocumentsFilter : public QuickOpen::IQuickOpenFilter
 
 public:
     OpenDocumentsFilter(Core::EditorManager *editorManager);
-    QString trName() const { return tr("Open document"); }
-    QString name() const { return "Open document"; }
+    QString trName() const { return tr("Open documents"); }
+    QString name() const { return "Open documents"; }
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Medium; }
     QList<QuickOpen::FilterEntry> matchesFor(const QString &entry);
     void accept(QuickOpen::FilterEntry selection) const;
diff --git a/src/plugins/quickopen/quickopenfiltersfilter.cpp b/src/plugins/quickopen/quickopenfiltersfilter.cpp
index e8a487c7d94b57b110be1a3f12061399b36ddaed..519c56daec7dbd78046ae5cbe7921325aad084dd 100644
--- a/src/plugins/quickopen/quickopenfiltersfilter.cpp
+++ b/src/plugins/quickopen/quickopenfiltersfilter.cpp
@@ -49,7 +49,7 @@ QuickOpenFiltersFilter::QuickOpenFiltersFilter(QuickOpenPlugin *plugin,
     m_icon(QIcon(Core::Constants::ICON_NEXT))
 {
     setIncludedByDefault(true);
-    setShortcutString(QString());
+    setHidden(true);
 }
 
 QString QuickOpenFiltersFilter::trName() const
@@ -71,8 +71,8 @@ QList<FilterEntry> QuickOpenFiltersFilter::matchesFor(const QString &entry)
 {
     QList<FilterEntry> entries;
     if (entry.isEmpty()) {
-        foreach (IQuickOpenFilter* filter, m_plugin->filter()) {
-            if (!filter->shortcutString().isEmpty()) {
+        foreach (IQuickOpenFilter *filter, m_plugin->filter()) {
+            if (!filter->shortcutString().isEmpty() && !filter->isHidden()) {
                 FilterEntry entry(this,
                                   filter->shortcutString(),
                                   QVariant::fromValue(filter),
diff --git a/src/plugins/quickopen/quickopentoolwindow.cpp b/src/plugins/quickopen/quickopentoolwindow.cpp
index 211947be8d056facedf447e9107cb81e02c66928..9701923515acf4db426b2d689bca0e97c846b2a3 100644
--- a/src/plugins/quickopen/quickopentoolwindow.cpp
+++ b/src/plugins/quickopen/quickopentoolwindow.cpp
@@ -314,7 +314,7 @@ void QuickOpenToolWindow::updateFilterList()
 {
     m_filterMenu->clear();
     foreach (IQuickOpenFilter *filter, m_quickOpenPlugin->filter()) {
-        if (!filter->shortcutString().isEmpty()) {
+        if (!filter->shortcutString().isEmpty() && !filter->isHidden()) {
             QAction *action = m_filterMenu->addAction(filter->trName(), this, SLOT(filterSelected()));
             action->setData(qVariantFromValue(filter));
         }
@@ -396,7 +396,7 @@ QList<IQuickOpenFilter*> QuickOpenToolWindow::filtersFor(const QString &text, QS
     searchText = text;
     QList<IQuickOpenFilter*> activeFilters;
     foreach (IQuickOpenFilter *filter, filters)
-        if (filter->defaultActiveState())
+        if (filter->isIncludedByDefault())
             activeFilters << filter;
     return activeFilters;
 }
diff --git a/src/plugins/quickopen/settingspage.cpp b/src/plugins/quickopen/settingspage.cpp
index 76263c731badd7a09f6f6f383ec7f7045f857e43..4b1f81fc86721ad7b640c6946ed864a2edeffee5 100644
--- a/src/plugins/quickopen/settingspage.cpp
+++ b/src/plugins/quickopen/settingspage.cpp
@@ -121,8 +121,11 @@ void SettingsPage::updateFilterList()
 {
     m_ui.filterList->clear();
     foreach (IQuickOpenFilter *filter, m_filters) {
+        if (filter->isHidden())
+            continue;
+
         QString title;
-        if (filter->defaultActiveState())
+        if (filter->isIncludedByDefault())
             title = filter->trName();
         else
             title = tr("%1 (Prefix: %2)").arg(filter->trName()).arg(filter->shortcutString());
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 59ee2c005a4c4766d752b0be5e34b268bd25ef4d..1cff254452c6aaa4690a745fcaa1bf38fe4f1b8e 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -735,12 +735,15 @@ void BaseTextEditor::moveLineUpDown(bool up)
     move.clearSelection();
     move.insertText(text);
     int end = move.position();
-    move.endEditBlock();
+
     if (hasSelection) {
         move.setPosition(start);
         move.setPosition(end, QTextCursor::KeepAnchor);
     }
 
+    indent(document(), move, QChar::Null);
+    move.endEditBlock();
+
     setTextCursor(move);
 }
 
@@ -2514,7 +2517,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e)
             }
         } else if (e->button() == Qt::RightButton) {
             QMenu * contextMenu = new QMenu(this);
-            emit d->m_editable->markContextMenuRequested(editableInterface(), cursor.blockNumber(), contextMenu);
+            emit d->m_editable->markContextMenuRequested(editableInterface(), cursor.blockNumber() + 1, contextMenu);
             if (!contextMenu->isEmpty())
                 contextMenu->exec(e->globalPos());
             delete contextMenu;
@@ -2765,6 +2768,8 @@ void BaseTextEditor::handleHomeKey(bool anchor)
 
     while (character == tab || character.category() == QChar::Separator_Space) {
         ++pos;
+        if (pos == initpos)
+            break;
         character = characterAt(pos);
     }
 
@@ -2952,12 +2957,13 @@ void BaseTextEditor::markBlocksAsChanged(QList<int> blockNumbers) {
 
 TextBlockUserData::MatchType TextBlockUserData::checkOpenParenthesis(QTextCursor *cursor, QChar c)
 {
-    if (!TextEditDocumentLayout::hasParentheses(cursor->block()))
+    QTextBlock block = cursor->block();
+    if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block))
         return NoMatch;
 
-    Parentheses parenList = TextEditDocumentLayout::parentheses(cursor->block());
+    Parentheses parenList = TextEditDocumentLayout::parentheses(block);
     Parenthesis openParen, closedParen;
-    QTextBlock closedParenParag = cursor->block();
+    QTextBlock closedParenParag = block;
 
     const int cursorPos = cursor->position() - closedParenParag.position();
     int i = 0;
@@ -2982,7 +2988,8 @@ TextBlockUserData::MatchType TextBlockUserData::checkOpenParenthesis(QTextCursor
                 closedParenParag = closedParenParag.next();
                 if (!closedParenParag.isValid())
                     return NoMatch;
-                if (TextEditDocumentLayout::hasParentheses(closedParenParag)) {
+                if (TextEditDocumentLayout::hasParentheses(closedParenParag)
+                    && !TextEditDocumentLayout::ifdefedOut(closedParenParag)) {
                     parenList = TextEditDocumentLayout::parentheses(closedParenParag);
                     break;
                 }
@@ -3019,12 +3026,13 @@ TextBlockUserData::MatchType TextBlockUserData::checkOpenParenthesis(QTextCursor
 
 TextBlockUserData::MatchType TextBlockUserData::checkClosedParenthesis(QTextCursor *cursor, QChar c)
 {
-    if (!TextEditDocumentLayout::hasParentheses(cursor->block()))
+    QTextBlock block = cursor->block();
+    if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block))
         return NoMatch;
 
-    Parentheses parenList = TextEditDocumentLayout::parentheses(cursor->block());
+    Parentheses parenList = TextEditDocumentLayout::parentheses(block);
     Parenthesis openParen, closedParen;
-    QTextBlock openParenParag = cursor->block();
+    QTextBlock openParenParag = block;
 
     const int cursorPos = cursor->position() - openParenParag.position();
     int i = parenList.count() - 1;
@@ -3050,7 +3058,8 @@ TextBlockUserData::MatchType TextBlockUserData::checkClosedParenthesis(QTextCurs
                 if (!openParenParag.isValid())
                     return NoMatch;
 
-                if (TextEditDocumentLayout::hasParentheses(openParenParag)) {
+                if (TextEditDocumentLayout::hasParentheses(openParenParag)
+                    && !TextEditDocumentLayout::ifdefedOut(openParenParag)) {
                     parenList = TextEditDocumentLayout::parentheses(openParenParag);
                     break;
                 }
@@ -3092,7 +3101,7 @@ bool TextBlockUserData::findPreviousOpenParenthesis(QTextCursor *cursor, bool se
     int ignore = 0;
     while (block.isValid()) {
         Parentheses parenList = TextEditDocumentLayout::parentheses(block);
-        if (!parenList.isEmpty()) {
+        if (!parenList.isEmpty() && !TextEditDocumentLayout::ifdefedOut(block)) {
             for (int i = parenList.count()-1; i >= 0; --i) {
                 Parenthesis paren = parenList.at(i);
                 if (block == cursor->block() && position - block.position() <= paren.pos + 1)
@@ -3119,7 +3128,7 @@ bool TextBlockUserData::findNextClosingParenthesis(QTextCursor *cursor, bool sel
     int ignore = 0;
     while (block.isValid()) {
         Parentheses parenList = TextEditDocumentLayout::parentheses(block);
-        if (!parenList.isEmpty()) {
+        if (!parenList.isEmpty() && !TextEditDocumentLayout::ifdefedOut(block)) {
             for (int i = 0; i < parenList.count(); ++i) {
                 Parenthesis paren = parenList.at(i);
                 if (block == cursor->block() && position - block.position() >= paren.pos)
@@ -3144,7 +3153,7 @@ TextBlockUserData::MatchType TextBlockUserData::matchCursorBackward(QTextCursor
     cursor->clearSelection();
     const QTextBlock block = cursor->block();
 
-    if (!TextEditDocumentLayout::hasParentheses(block))
+    if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block))
         return NoMatch;
 
     const int relPos = cursor->position() - block.position();
@@ -3166,7 +3175,7 @@ TextBlockUserData::MatchType TextBlockUserData::matchCursorForward(QTextCursor *
     cursor->clearSelection();
     const QTextBlock block = cursor->block();
 
-    if (!TextEditDocumentLayout::hasParentheses(block))
+    if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block))
         return NoMatch;
 
     const int relPos = cursor->position() - block.position();
diff --git a/src/plugins/texteditor/generalsettingspage.ui b/src/plugins/texteditor/generalsettingspage.ui
index 11f6b8b997ea48feee9ae24a99274c1cb0011c54..140f94628d60464e62513533e023cb46262c0c91 100644
--- a/src/plugins/texteditor/generalsettingspage.ui
+++ b/src/plugins/texteditor/generalsettingspage.ui
@@ -66,6 +66,9 @@
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
+          <property name="minimum">
+           <number>1</number>
+          </property>
           <property name="maximum">
            <number>20</number>
           </property>
@@ -132,6 +135,9 @@
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
+          <property name="minimum">
+           <number>1</number>
+          </property>
           <property name="maximum">
            <number>20</number>
           </property>
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index dbc7eebcd3cf2f87c4a6b81618595d8089912ee7..ab5ee635b5afe67bf23a4e0aaf4f27385d73500a 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -53,6 +53,7 @@
 #include <QtNetwork/QHostAddress>
 
 #include <iostream>
+#include <map>
 #include <list>
 #include <stack>
 #include <string>
@@ -131,7 +132,6 @@ void testArray()
     }
 }
 
-
 void testQByteArray()
 {
     QByteArray ba = "Hello";
@@ -142,7 +142,6 @@ void testQByteArray()
     ba += 2;
 }
 
-
 void testQHash()
 {
     QHash<int, float> hgg0;
@@ -412,6 +411,41 @@ void testStdList()
     vec.push_back(false);
 }
 
+void testStdMap()
+{
+    std::map<uint, QStringList> ggl;
+    ggl[11] = QStringList() << "11";
+    ggl[22] = QStringList() << "22";
+
+    typedef std::map<uint, QStringList> T;
+    T ggt;
+    ggt[11] = QStringList() << "11";
+    ggt[22] = QStringList() << "22";
+
+#if 0
+    std::map<uint, float> gg0;
+    gg0[11] = 11.0;
+    gg0[22] = 22.0;
+
+
+    std::map<QString, float> gg1;
+    gg1["22.0"] = 22.0;
+
+    std::map<int, QString> gg2;
+    gg2[22] = "22.0";
+
+    std::map<QString, Foo> gg3;
+    gg3["22.0"] = Foo(22);
+    gg3["33.0"] = Foo(33);
+
+    QObject ob;
+    std::map<QString, QPointer<QObject> > map;
+    map.insert("Hallo", QPointer<QObject>(&ob));
+    map.insert("Welt", QPointer<QObject>(&ob));
+    map.insert(".", QPointer<QObject>(&ob));
+#endif
+}
+
 void testStdStack()
 {
     std::stack<int *> plist1;
@@ -795,6 +829,7 @@ int main(int argc, char *argv[])
     testArray();
 
     testStdList();
+    testStdMap();
     testStdStack();
     testStdString();
     testStdVector();