diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 5b9b36d1282cec5e5bbc943e1d72f52b8f19b621..c70e3b75a4383943092ccea033c0350d57a656ce 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -109,7 +109,7 @@ int qtGhVersion = QT_VERSION;
 
 
   'P(d, name, value)' roughly expands to:
-        d << (name) << "='" << value << "'";
+        d << (name) << "=\"" << value << "\"";
 
   Useful (i.e. understood by the IDE) names include:
 
@@ -551,7 +551,7 @@ void QDumper::addCommaIfNeeded()
     if (pos == 0)
         return;
     char c = qDumpOutBuffer[pos - 1];
-    if (c == '}' || c == '\'' || c == ']')
+    if (c == '}' || c == '"' || c == ']')
         put(',');
 }
 
@@ -630,7 +630,7 @@ void QDumper::endHash()
 void QDumper::putEllipsis()
 {
     addCommaIfNeeded();
-    *this << "{name='<incomplete>',value='',type='" << innertype << "'}";
+    *this << "{name=\"<incomplete>\",value=\"\",type=\"" << innertype << "\"}";
 }
 
 //
@@ -642,7 +642,7 @@ void QDumper::putEllipsis()
 #define P(dumper,name,value) \
     do { \
         dumper.addCommaIfNeeded(); \
-        dumper << (name) << "='" << value << "'"; \
+        dumper << (name) << "=\"" << value << "\""; \
     } while (0)
 
 // simple string property
@@ -740,7 +740,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr
             return;
         case 'B':
             if (isEqual(type, "QByteArray")) {
-                d << key << "encoded='1',";
+                d << key << "encoded=\"1\",";
                 P(d, key, *(QByteArray*)addr);
             }
             return;
@@ -769,7 +769,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr
             return;
         case 'S':
             if (isEqual(type, "QString")) {
-                d << key << "encoded='1',";
+                d << key << "encoded=\"1\",";
                 P(d, key, *(QString*)addr);
             }
             return;
@@ -839,7 +839,7 @@ static void qDumpQByteArray(QDumper &d)
             unsigned char u = (isprint(c) && c != '\'' && c != '"') ? c : '?';
             sprintf(buf, "%02x  (%u '%c')", c, c, u);
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             P(d, "value", buf);
             d.endHash();
         }
@@ -1104,14 +1104,14 @@ static void qDumpQHash(QDumper &d)
         while (node != end) {
             d.beginHash();
                 if (simpleKey) {
-                    P(d, "name", "[" << i << "]");
+                    P(d, "name", i);
                     qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key");
                     if (simpleValue)
                         qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
                     P(d, "type", valueType);
                     P(d, "addr", addOffset(node, valueOffset));
                 } else {
-                    P(d, "name", "[" << i << "]");
+                    P(d, "name", i);
                     //P(d, "exp", "*(char*)" << node);
                     P(d, "exp", "*('"NS"QHashNode<" << keyType << "," << valueType << " >'*)" << node);
                     P(d, "type", "'"NS"QHashNode<" << keyType << "," << valueType << " >'");
@@ -1215,7 +1215,7 @@ static void qDumpQList(QDumper &d)
         d << ",children=[";
         for (int i = 0; i != n; ++i) {
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             if (innerTypeIsPointer) {
                 void *p = ldata.d->array + i + pdata->begin;
                 if (p) {
@@ -1275,7 +1275,7 @@ static void qDumpQLinkedList(QDumper &d)
         const void *p = deref(ldata);
         for (int i = 0; i != n; ++i) {
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             const void *addr = addOffset(p, 2 * sizeof(void*));
             qDumpInnerValueOrPointer(d, d.innertype, stripped, addr);
             p = deref(p);
@@ -1414,7 +1414,7 @@ static void qDumpQMap(QDumper &d)
 
         while (node != end) {
             d.beginHash();
-                P(d, "name", "[" << i << "]");
+                P(d, "name", i);
                 if (simpleKey) {
                     P(d, "type", valueType);
                     qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key");
@@ -1660,7 +1660,7 @@ static void qDumpQObjectMethodList(QDumper &d)
             const QMetaMethod & method = mo->method(i);
             int mt = method.methodType();
             d.beginHash();
-            P(d, "name", "["  << i << "] " << mo->indexOfMethod(method.signature())
+            P(d, "name", i << " " << mo->indexOfMethod(method.signature())
                 << " " << method.signature());
             P(d, "value", (mt == QMetaMethod::Signal ? "<Signal>" : "<Slot>") << " (" << mt << ")");
             d.endHash();
@@ -1712,11 +1712,11 @@ static void qDumpQObjectSignal(QDumper &d)
         for (int i = 0; i != connList.size(); ++i) {
             const QObjectPrivate::Connection &conn = connList.at(i);
             d.beginHash();
-                P(d, "name", "[" << i << "] receiver");
+                P(d, "name", i << " receiver");
                 qDumpInnerValueHelper(d, NS"QObject *", conn.receiver);
             d.endHash();
             d.beginHash();
-                P(d, "name", "[" << i << "] slot");
+                P(d, "name", i << " slot");
                 P(d, "type", "");
                 if (conn.receiver) 
                     P(d, "value", conn.receiver->metaObject()->method(conn.method).signature());
@@ -1725,7 +1725,7 @@ static void qDumpQObjectSignal(QDumper &d)
                 P(d, "numchild", "0");
             d.endHash();
             d.beginHash();
-                P(d, "name", "[" << i << "] type");
+                P(d, "name", i << " type");
                 P(d, "type", "");
                 P(d, "value", "<" << qConnectionTypes[conn.method] << " connection>");
                 P(d, "numchild", "0");
@@ -1756,7 +1756,7 @@ static void qDumpQObjectSignalList(QDumper &d)
                 int k = mo->indexOfSignal(method.signature());
                 const QObjectPrivate::ConnectionList &connList = qConnectionList(ob, k);
                 d.beginHash();
-                P(d, "name", "[" << k << "]");
+                P(d, "name", k);
                 P(d, "value", method.signature());
                 P(d, "numchild", connList.size());
                 //P(d, "numchild", "1");
@@ -1796,17 +1796,17 @@ static void qDumpQObjectSlot(QDumper &d)
                     const QMetaMethod & method =
                         sender.sender->metaObject()->method(sender.signal);
                     d.beginHash();
-                        P(d, "name", "[" << s << "] sender");
+                        P(d, "name", s << " sender");
                         qDumpInnerValueHelper(d, NS"QObject *", sender.sender);
                     d.endHash();
                     d.beginHash();
-                        P(d, "name", "[" << s << "] signal");
+                        P(d, "name", s << " signal");
                         P(d, "type", "");
                         P(d, "value", method.signature());
                         P(d, "numchild", "0");
                     d.endHash();
                     d.beginHash();
-                        P(d, "name", "[" << s << "] type");
+                        P(d, "name", s << " type");
                         P(d, "type", "");
                         P(d, "value", "<" << qConnectionTypes[conn.method] << " connection>");
                         P(d, "numchild", "0");
@@ -1843,7 +1843,7 @@ static void qDumpQObjectSlotList(QDumper &d)
             if (method.methodType() == QMetaMethod::Slot) {
                 d.beginHash();
                 int k = mo->indexOfSlot(method.signature());
-                P(d, "name", "[" << k << "]");
+                P(d, "name", k);
                 P(d, "value", method.signature());
 
                 // count senders. expensive...
@@ -1911,7 +1911,7 @@ static void qDumpQSet(QDumper &d)
         for (int bucket = 0; bucket != hd->numBuckets && i <= 10000; ++bucket) {
             for (node = hd->buckets[bucket]; node->next; node = node->next) {
                 d.beginHash();
-                P(d, "name", "[" << i << "]");
+                P(d, "name", i);
                 P(d, "type", d.innertype);
                 P(d, "exp", "(('"NS"QHashNode<" << d.innertype
                     << ","NS"QHashDummyValue>'*)"
@@ -1970,7 +1970,7 @@ static void qDumpQStringList(QDumper &d)
         d << ",children=[";
         for (int i = 0; i != n; ++i) {
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             P(d, "value", list[i]);
             P(d, "valueencoded", "1");
             d.endHash();
@@ -2008,7 +2008,7 @@ static void qDumpQVariantHelper(const void *data, QString *value,
         *numchild = 0;
         break;
     case QVariant::String:
-        *value = QLatin1Char('\'') + v.toString() + QLatin1Char('\'');
+        *value = QLatin1Char('"') + v.toString() + QLatin1Char('"');
         *numchild = 0;
         break;
     case QVariant::StringList:
@@ -2108,7 +2108,7 @@ static void qDumpQVector(QDumper &d)
         d << ",children=[";
         for (int i = 0; i != n; ++i) {
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             qDumpInnerValueOrPointer(d, d.innertype, stripped,
                 addOffset(v, i * innersize + typeddatasize));
             d.endHash();
@@ -2156,7 +2156,7 @@ static void qDumpStdList(QDumper &d)
         it = list.begin();
         for (int i = 0; i < 1000 && it != list.end(); ++i, ++it) {
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             qDumpInnerValueOrPointer(d, d.innertype, stripped, it.operator->());
             d.endHash();
         }
@@ -2218,7 +2218,7 @@ static void qDumpStdMap(QDumper &d)
                 d.endHash();
             } else {
                 d.beginHash();
-                P(d, "name", "[" << i << "]");
+                P(d, "name", i);
                 P(d, "addr", it.operator->());
                 P(d, "type", pairType);
                 d.endHash();
@@ -2240,9 +2240,9 @@ static void qDumpStdString(QDumper &d)
         qCheckAccess(str.c_str() + str.size() - 1);
     }
 
-    d << ",value='";
+    d << ",value=\"";
     d.putBase64Encoded(str.c_str(), str.size());
-    d << "'";
+    d << "\"";
     P(d, "valueencoded", "1");
     P(d, "type", "std::string");
     P(d, "numchild", "0");
@@ -2305,7 +2305,7 @@ static void qDumpStdVector(QDumper &d)
         d << ",children=[";
         for (int i = 0; i != n; ++i) {
             d.beginHash();
-            P(d, "name", "[" << i << "]");
+            P(d, "name", i);
             qDumpInnerValueOrPointer(d, d.innertype, stripped,
                 addOffset(v->start, i * innersize));
             d.endHash();
@@ -2482,54 +2482,54 @@ void qDumpObjectData440(
         // They are mentioned here nevertheless. For types that not listed
         // here, dumpers won't be used.
         d << "dumpers=["
-            "'"NS"QByteArray',"
-            "'"NS"QDateTime',"
-            "'"NS"QDir',"
-            "'"NS"QFile',"
-            "'"NS"QFileInfo',"
-            "'"NS"QHash',"
-            "'"NS"QHashNode',"
-            "'"NS"QImage',"
-            "'"NS"QLinkedList',"
-            "'"NS"QList',"
-            "'"NS"QLocale',"
-            "'"NS"QMap',"
-            "'"NS"QMapNode',"
-            "'"NS"QModelIndex',"
+            "\""NS"QByteArray\","
+            "\""NS"QDateTime\","
+            "\""NS"QDir\","
+            "\""NS"QFile\","
+            "\""NS"QFileInfo\","
+            "\""NS"QHash\","
+            "\""NS"QHashNode\","
+            "\""NS"QImage\","
+            "\""NS"QLinkedList\","
+            "\""NS"QList\","
+            "\""NS"QLocale\","
+            "\""NS"QMap\","
+            "\""NS"QMapNode\","
+            "\""NS"QModelIndex\","
             #if QT_VERSION >= 0x040500
-            "'"NS"QMultiMap',"
+            "\""NS"QMultiMap\","
             #endif
-            "'"NS"QObject',"
-            "'"NS"QObjectMethodList',"   // hack to get nested properties display
-            "'"NS"QObjectPropertyList',"
+            "\""NS"QObject\","
+            "\""NS"QObjectMethodList\","   // hack to get nested properties display
+            "\""NS"QObjectPropertyList\","
             #if PRIVATE_OBJECT_ALLOWED
-            "'"NS"QObjectSignal',"
-            "'"NS"QObjectSignalList',"
-            "'"NS"QObjectSlot',"
-            "'"NS"QObjectSlotList',"
+            "\""NS"QObjectSignal\","
+            "\""NS"QObjectSignalList\","
+            "\""NS"QObjectSlot\","
+            "\""NS"QObjectSlotList\","
             #endif // PRIVATE_OBJECT_ALLOWED
-            // << "'"NS"QRegion',"
-            "'"NS"QSet',"
-            "'"NS"QString',"
-            "'"NS"QStringList',"
-            "'"NS"QTextCodec',"
-            "'"NS"QVariant',"
-            "'"NS"QVector',"
-            "'"NS"QWidget',"
-            "'string',"
-            "'wstring',"
-            "'std::basic_string',"
-            "'std::list',"
-            "'std::map',"
-            "'std::string',"
-            "'std::vector',"
-            "'std::wstring',"
+            // << "\""NS"QRegion\","
+            "\""NS"QSet\","
+            "\""NS"QString\","
+            "\""NS"QStringList\","
+            "\""NS"QTextCodec\","
+            "\""NS"QVariant\","
+            "\""NS"QVector\","
+            "\""NS"QWidget\","
+            "\"string\","
+            "\"wstring\","
+            "\"std::basic_string\","
+            "\"std::list\","
+            "\"std::map\","
+            "\"std::string\","
+            "\"std::vector\","
+            "\"std::wstring\","
             "]";
         d << ",qtversion=["
-            "'" << ((QT_VERSION >> 16) & 255) << "',"
-            "'" << ((QT_VERSION >> 8)  & 255) << "',"
-            "'" << ((QT_VERSION)       & 255) << "']";
-        d << ",namespace='"NS"'";
+            "\"" << ((QT_VERSION >> 16) & 255) << "\","
+            "\"" << ((QT_VERSION >> 8)  & 255) << "\","
+            "\"" << ((QT_VERSION)       & 255) << "\"]";
+        d << ",namespace=\""NS"\"";
         d.disarm();
     }
 
diff --git a/src/plugins/coreplugin/images/sidebaricon.png b/src/plugins/coreplugin/images/sidebaricon.png
index 8aab325d6efbccee7b903a02c70e225cea3aaed7..b7951415874932b2291b06a274ec973633cc0f96 100644
Binary files a/src/plugins/coreplugin/images/sidebaricon.png and b/src/plugins/coreplugin/images/sidebaricon.png differ
diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp
index af361aacbb90e4c2d2177abb88fe4542b3d8ac34..72b86d85d7cf8db3381035ad6dcae0aff2179115 100644
--- a/src/plugins/coreplugin/manhattanstyle.cpp
+++ b/src/plugins/coreplugin/manhattanstyle.cpp
@@ -518,7 +518,8 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption
                     painter->drawLine(rect.bottomLeft(), rect.bottomRight());
                 }
  #ifndef Q_WS_MAC
-               else if (option->state & State_MouseOver) {
+               else if (option->state & State_Enabled &&
+                        option->state & State_MouseOver) {
                     QColor lighter(255, 255, 255, 35);
                     painter->fillRect(rect, lighter);
                     painter->drawLine(rect.topRight(), rect.bottomRight());
diff --git a/src/plugins/cppeditor/CppEditor.mimetypes.xml b/src/plugins/cppeditor/CppEditor.mimetypes.xml
index cd79d5f441e8fce957468e1b6ba909a1e3b5e6a3..0c58890e9b5d25d494bd5aef11f41a6b312ee70d 100644
--- a/src/plugins/cppeditor/CppEditor.mimetypes.xml
+++ b/src/plugins/cppeditor/CppEditor.mimetypes.xml
@@ -133,5 +133,6 @@
         <glob pattern="*.cxx"/>
         <glob pattern="*.c++"/>
         <glob pattern="*.C"/>
+        <glob pattern="*.inl"/>
     </mime-type>
 </mime-info>
diff --git a/src/plugins/cpptools/completionsettingspage.ui b/src/plugins/cpptools/completionsettingspage.ui
index 372c225943f49146915140cd5dfa38950669be6c..c71a2abc821b731ab9bcb96c5421c70eae07c117 100644
--- a/src/plugins/cpptools/completionsettingspage.ui
+++ b/src/plugins/cpptools/completionsettingspage.ui
@@ -15,33 +15,42 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QCheckBox" name="caseSensitive">
-     <property name="text">
-      <string>&amp;Case-sensitive completion</string>
-     </property>
-     <property name="checked">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QCheckBox" name="autoInsertBraces">
-     <property name="text">
-      <string>&amp;Automatically insert braces</string>
-     </property>
-     <property name="checked">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QCheckBox" name="partiallyComplete">
-     <property name="text">
-      <string>Autocomplete common &amp;prefix</string>
-     </property>
-     <property name="checked">
-      <bool>true</bool>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Completion Settings</string>
      </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QCheckBox" name="caseSensitive">
+        <property name="text">
+         <string>&amp;Case-sensitive completion</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="autoInsertBraces">
+        <property name="text">
+         <string>&amp;Automatically insert braces</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="partiallyComplete">
+        <property name="text">
+         <string>Autocomplete common &amp;prefix</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
    <item>
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 7b0e6c24273b37bf50216f8b1d113fa56396dec0..8180c7cfd106d0a41d3ce4dd5f2d8aa87c7358a8 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -888,7 +888,9 @@ void DebuggerManager::executeDebuggerCommand(const QString &command)
 
 void DebuggerManager::sessionLoaded()
 {
-    exitDebugger();
+    cleanupViews();
+    setStatus(DebuggerProcessNotReady);
+    setBusyCursor(false);
     loadSessionData();
 }
 
@@ -1092,6 +1094,28 @@ bool DebuggerManager::useFastStart() const
     return 0; // && m_settings.m_useFastStart;
 }
 
+void DebuggerManager::setUseCustomDumpers(bool on)
+{
+    m_settings.m_useCustomDumpers = on;
+    engine()->setUseCustomDumpers(on);
+}
+
+void DebuggerManager::setUseFastStart(bool on)
+{
+    m_settings.m_useFastStart = on;
+}
+
+void DebuggerManager::setDebugDumpers(bool on)
+{
+    m_settings.m_debugDumpers = on;
+    engine()->setDebugDumpers(on);
+}
+
+void DebuggerManager::setSkipKnownFrames(bool on)
+{
+    m_settings.m_skipKnownFrames = on;
+}
+
 void DebuggerManager::queryCurrentTextEditor(QString *fileName, int *lineNumber,
     QObject **object)
 {
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index 5d5e7abd0da7f5e475fde605698004d4d4aa9cd0..e16941a79f51414f1bc1ef45d323107f747de244 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -167,8 +167,6 @@ private:
     virtual WatchHandler *watchHandler() = 0;
 
     virtual void showApplicationOutput(const QString &data) = 0;
-    //virtual QAction *useCustomDumpersAction() const = 0;
-    //virtual QAction *debugDumpersAction() const = 0;
     virtual bool skipKnownFrames() const = 0;
     virtual bool debugDumpers() const = 0;
     virtual bool useCustomDumpers() const = 0;
@@ -283,6 +281,11 @@ public slots:
 
     void showStatusMessage(const QString &msg, int timeout = -1); // -1 forever
 
+    void setUseCustomDumpers(bool on);
+    void setDebugDumpers(bool on);
+    void setSkipKnownFrames(bool on);
+    void setUseFastStart(bool on);
+
 private slots:
     void showDebuggerOutput(const QString &prefix, const QString &msg);
     void showDebuggerInput(const QString &prefix, const QString &msg);
@@ -312,9 +315,7 @@ private:
     StackHandler *stackHandler() { return m_stackHandler; }
     ThreadsHandler *threadsHandler() { return m_threadsHandler; }
     WatchHandler *watchHandler() { return m_watchHandler; }
-    //QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; }
-    //QAction *useToolTipsAction() const { return m_useToolTipsAction; }
-    //QAction *debugDumpersAction() const { return m_debugDumpersAction; }
+
     bool skipKnownFrames() const;
     bool debugDumpers() const;
     bool useCustomDumpers() const;
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 4f7e0b1a897d750d3270e60f598056aa8ffcc726..3f9cfc6caaa9a7e0d2f592b40686da1bf375f4dc 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -251,6 +251,7 @@ public:
     void finish() {} // automatically calls "apply"
 
 private:
+    friend class DebuggerPlugin;
     Ui::GdbOptionPage m_ui;
 
     DebuggerSettings m_settings;
@@ -300,6 +301,10 @@ QWidget *GdbOptionPage::createPage(QWidget *parent)
 
     //m_dumpLogAction = new QAction(this);
     //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes"));
+    //
+    connect(m_ui.checkBoxUseCustomDumpers, SIGNAL(clicked(bool)),
+        m_plugin->m_manager, SLOT(setUseCustomDumpers(bool)));
+
     return w;
 }
 
@@ -560,10 +565,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes
     connect(resetToSimpleAction, SIGNAL(triggered()),
         m_manager, SLOT(setSimpleDockWidgetArrangement()));
 
-
-    m_generalOptionPage = 0;
-
-    // FIXME:
+   // FIXME:
     m_generalOptionPage = new GdbOptionPage(this);
     addObject(m_generalOptionPage);
 
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 4b84c88cb7f239946978bbff2db487de492a2cd0..c559bcb2c1ca351716f03c6e369ab560e030bdae 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -253,6 +253,7 @@ void GdbEngine::init()
     m_gdbVersion = 100;
     m_shared = 0;
     m_outputCodec = QTextCodec::codecForLocale();
+    m_dataDumperState = DataDumperUninitialized;
 
     m_oldestAcceptableToken = -1;
 
@@ -733,7 +734,7 @@ void GdbEngine::handleResultRecord(const GdbResultRecord &record)
         --m_pendingRequests;
         PENDING_DEBUG("   TYPE " << cmd.type << " DECREMENTS PENDING TO: "
             << m_pendingRequests << cmd.command);
-        if (m_pendingRequests == 0)
+        if (m_pendingRequests <= 0)
             updateWatchModel2();
     } else {
         PENDING_DEBUG("   UNKNOWN TYPE " << cmd.type << " LEAVES PENDING AT: "
@@ -1760,14 +1761,6 @@ void GdbEngine::setDebugDumpers(bool on)
     }
 }
 
-//QByteArray GdbEngine::dumperChannel() const
-//{
-//    return m_dumperServer->serverName().toLatin1();
-//    //QByteArray ba;
-//    //ba.setNum(m_dumperServer->serverPort());
-//    //return ba;
-//}
-
 
 //////////////////////////////////////////////////////////////////////
 //
@@ -2889,11 +2882,11 @@ static QString sizeofTypeExpression(const QString &type)
     return "sizeof(" + gdbQuoteTypes(type) + ")";
 }
 
-void GdbEngine::setCustomDumpersWanted(bool on)
+void GdbEngine::setUseCustomDumpers(bool on)
 {
+    //qDebug() << "SWITCHING ON/OFF DUMPER DEBUGGING:" << on;
     Q_UNUSED(on);
-    // FIXME: a bit too harsh, but otherwise the treeview
-    // sometimes look funny
+    // FIXME: a bit too harsh, but otherwise the treeview sometimes look funny
     //m_expandedINames.clear();
     updateLocals();
 }
@@ -3060,15 +3053,15 @@ void GdbEngine::runCustomDumper(const WatchData & data0, bool dumpChildren)
 
     //qDebug() << "CMD: " << cmd;
 
-    sendSynchronizedCommand(cmd, WatchDumpCustomValue1, QVariant::fromValue(data));
+    QVariant var;
+    var.setValue(data);
+    sendSynchronizedCommand(cmd, WatchDumpCustomValue1, var);
 
     q->showStatusMessage(
         tr("Retrieving data for watch view (%1 requests pending)...")
             .arg(m_pendingRequests + 1), 10000);
 
     // retrieve response
-    QVariant var;
-    var.setValue(data);
     sendSynchronizedCommand("p (char*)qDumpOutBuffer", WatchDumpCustomValue2, var);
 }
 
@@ -3276,7 +3269,7 @@ void GdbEngine::updateWatchModel2()
         return;
     }
 
-    PENDING_DEBUG("REBUILDING MODEL")
+    PENDING_DEBUG("REBUILDING MODEL");
     emit gdbInputAvailable(QString(),
         "[" + currentTime() + "]    <Rebuild Watchmodel>");
     q->showStatusMessage(tr("Finished retrieving data."), 400);
@@ -3307,7 +3300,8 @@ void GdbEngine::handleQueryDataDumper2(const GdbResultRecord &record)
     QByteArray out = output.data();
     out = out.mid(out.indexOf('"') + 2); // + 1 is success marker
     out = out.left(out.lastIndexOf('"'));
-    out = out.replace('\'', '"');
+    //out.replace('\'', '"');
+    out.replace("\\", "");
     out = "dummy={" + out + "}";
     //qDebug() << "OUTPUT: " << out;
 
@@ -3461,7 +3455,7 @@ void GdbEngine::handleDumpCustomValue1(const GdbResultRecord &record,
     } else if (record.resultClass == GdbResultError) {
         // Record an extra result, as the socket result will be lost
         // in transmission
-        --m_pendingRequests;
+        //--m_pendingRequests;
         QString msg = record.data.findChild("msg").data();
         //qDebug() << "CUSTOM DUMPER ERROR MESSAGE: " << msg;
 #ifdef QT_DEBUG
@@ -3476,12 +3470,12 @@ void GdbEngine::handleDumpCustomValue1(const GdbResultRecord &record,
             return;
         }
 #endif
-        if (msg.startsWith("The program being debugged was sig"))
-            msg = strNotInScope;
-        if (msg.startsWith("The program being debugged stopped while"))
-            msg = strNotInScope;
-        data.setError(msg);
-        insertData(data);
+        //if (msg.startsWith("The program being debugged was sig"))
+        //    msg = strNotInScope;
+        //if (msg.startsWith("The program being debugged stopped while"))
+        //    msg = strNotInScope;
+        //data.setError(msg);
+        //insertData(data);
     }
 }
 
@@ -3492,219 +3486,209 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record,
     QTC_ASSERT(data.isValid(), return);
     //qDebug() << "CUSTOM VALUE RESULT: " << record.toString();
     //qDebug() << "FOR DATA: " << data.toString() << record.resultClass;
-    if (record.resultClass == GdbResultDone) {
-        GdbMi output = record.data.findChild("consolestreamoutput");
-        QByteArray out = output.data();
-        out = out.mid(out.indexOf('"') + 2);  // + 1  is the 'success marker'
-        out = out.left(out.lastIndexOf('"'));
-        out = out.replace('\'', '"');
-        out = "dummy={" + out + "}";
-        //qDebug() << "OUTPUT: " << out;
-
-        GdbMi contents;
-        contents.fromString(out);
-        //qDebug() << "CONTENTS" << contents.toString(true);
-
-        if (!contents.isValid()) {
-             qDebug() << "INVALID";
-             // custom dumper produced no output
-             if (data.isValueNeeded())
-                 data.setValue("<unknown>");
-             if (data.isTypeNeeded())
-                 data.setType("<unknown>");
-             if (data.isChildrenNeeded())
-                 data.setChildCount(0);
-             if (data.isChildCountNeeded())
-                 data.setChildCount(0);
-             data.setValueToolTip("<custom dumper produced no output>");
-             insertData(data);
-        } else {
-            setWatchDataType(data, contents.findChild("type"));
-            setWatchDataValue(data, contents.findChild("value"),
-                contents.findChild("valueencoded").data().toInt());
-            setWatchDataAddress(data, contents.findChild("addr"));
-            setWatchDataChildCount(data, contents.findChild("numchild"));
-            setWatchDataValueToolTip(data, contents.findChild("valuetooltip"));
-            setWatchDataValueDisabled(data, contents.findChild("valuedisabled"));
-            setWatchDataEditValue(data, contents.findChild("editvalue"));
-            if (qq->watchHandler()->isDisplayedIName(data.iname)) {
-                GdbMi editvalue = contents.findChild("editvalue");
-                if (editvalue.isValid()) {
-                    setWatchDataEditValue(data, editvalue);
-                    qq->watchHandler()->showEditValue(data);
-                }
-            }
-            if (!qq->watchHandler()->isExpandedIName(data.iname))
-                data.setChildrenUnneeded();
-            GdbMi children = contents.findChild("children");
-            if (children.isValid() || !qq->watchHandler()->isExpandedIName(data.iname))
-                data.setChildrenUnneeded();
-            data.setValueUnneeded();
+    if (record.resultClass != GdbResultDone) {
+        qDebug() << "STRANGE CUSTOM DUMPER RESULT DATA: " << data.toString();
+        return;
+    }
 
-            // try not to repeat data too often
-            WatchData childtemplate;
-            setWatchDataType(childtemplate, contents.findChild("childtype"));
-            setWatchDataChildCount(childtemplate, contents.findChild("childnumchild"));
-            //qDebug() << "DATA: " << data.toString();
-            insertData(data);
-            foreach (GdbMi item, children.children()) {
-                WatchData data1 = childtemplate;
-                data1.name = item.findChild("name").data();
-                data1.iname = data.iname + "." + data1.name;
-                //qDebug() << "NAMEENCODED: " << item.findChild("nameencoded").data()
-                //    << item.findChild("nameencoded").data()[1];
-                if (item.findChild("nameencoded").data()[0] == '1')
-                    data1.name = QByteArray::fromBase64(data1.name.toUtf8());
-                QString key = item.findChild("key").data();
-                if (!key.isEmpty())
-                    data1.name += " (" + key + ")";
-                setWatchDataType(data1, item.findChild("type"));
-                setWatchDataExpression(data1, item.findChild("exp"));
-                setWatchDataChildCount(data1, item.findChild("numchild"));
-                setWatchDataValue(data1, item.findChild("value"),
-                    item.findChild("valueencoded").data().toInt());
-                setWatchDataAddress(data1, item.findChild("addr"));
-                setWatchDataValueToolTip(data1, item.findChild("valuetooltip"));
-                setWatchDataValueDisabled(data1, item.findChild("valuedisabled"));
-                if (!qq->watchHandler()->isExpandedIName(data1.iname))
-                    data1.setChildrenUnneeded();
-                //qDebug() << "HANDLE CUSTOM SUBCONTENTS:" << data1.toString();
-                insertData(data1);
-            }
-        }
-        //qDebug() << "HANDLE CUSTOM VALUE CONTENTS: " << data.toString();
-    } else if (record.resultClass == GdbResultError) {
-        // FIXME: Should not happen here, i.e. could be removed
-        QString msg = record.data.findChild("msg").data();
-        //qDebug() << "CUSTOM DUMPER ERROR MESSAGE: " << msg;
-        if (msg.startsWith("The program being debugged was sig"))
-            msg = strNotInScope;
-        if (msg.startsWith("The program being debugged stopped while"))
-            msg = strNotInScope;
-        data.setError(msg);
+    GdbMi output = record.data.findChild("consolestreamoutput");
+    QByteArray out = output.data();
+
+    int markerPos = out.indexOf('"') + 1; // position of 'success marker'
+    if (markerPos == -1 || out.at(markerPos) == 'f') {  // 't' or 'f'
+        // custom dumper produced no output
+        data.setError(strNotInScope);
         insertData(data);
-    } else {
-        qDebug() << "STRANGE CUSTOM DUMPER RESULT DATA: " << data.toString();
+        return;
+    }
+
+    out = out.mid(markerPos +  1);
+    out = out.left(out.lastIndexOf('"'));
+    out.replace("\\", "");
+    out = "dummy={" + out + "}";
+    
+    GdbMi contents;
+    contents.fromString(out);
+    //qDebug() << "CONTENTS" << contents.toString(true);
+    if (!contents.isValid()) {
+        data.setError(strNotInScope);
+        insertData(data);
+        return;
+    }
+
+    setWatchDataType(data, contents.findChild("type"));
+    setWatchDataValue(data, contents.findChild("value"),
+        contents.findChild("valueencoded").data().toInt());
+    setWatchDataAddress(data, contents.findChild("addr"));
+    setWatchDataChildCount(data, contents.findChild("numchild"));
+    setWatchDataValueToolTip(data, contents.findChild("valuetooltip"));
+    setWatchDataValueDisabled(data, contents.findChild("valuedisabled"));
+    setWatchDataEditValue(data, contents.findChild("editvalue"));
+    if (qq->watchHandler()->isDisplayedIName(data.iname)) {
+        GdbMi editvalue = contents.findChild("editvalue");
+        if (editvalue.isValid()) {
+            setWatchDataEditValue(data, editvalue);
+            qq->watchHandler()->showEditValue(data);
+        }
+    }
+    if (!qq->watchHandler()->isExpandedIName(data.iname))
+        data.setChildrenUnneeded();
+    GdbMi children = contents.findChild("children");
+    if (children.isValid() || !qq->watchHandler()->isExpandedIName(data.iname))
+        data.setChildrenUnneeded();
+    data.setValueUnneeded();
+
+    // try not to repeat data too often
+    WatchData childtemplate;
+    setWatchDataType(childtemplate, contents.findChild("childtype"));
+    setWatchDataChildCount(childtemplate, contents.findChild("childnumchild"));
+    //qDebug() << "DATA: " << data.toString();
+    insertData(data);
+    foreach (GdbMi item, children.children()) {
+        WatchData data1 = childtemplate;
+        data1.name = item.findChild("name").data();
+        data1.iname = data.iname + "." + data1.name;
+        if (!data1.name.isEmpty() && data1.name.at(0).isDigit())
+            data1.name = '[' + data1.name + ']';
+        //qDebug() << "NAMEENCODED: " << item.findChild("nameencoded").data()
+        //    << item.findChild("nameencoded").data()[1];
+        if (item.findChild("nameencoded").data()[0] == '1')
+            data1.name = QByteArray::fromBase64(data1.name.toUtf8());
+        QString key = item.findChild("key").data();
+        if (!key.isEmpty())
+            data1.name += " (" + key + ")";
+        setWatchDataType(data1, item.findChild("type"));
+        setWatchDataExpression(data1, item.findChild("exp"));
+        setWatchDataChildCount(data1, item.findChild("numchild"));
+        setWatchDataValue(data1, item.findChild("value"),
+            item.findChild("valueencoded").data().toInt());
+        setWatchDataAddress(data1, item.findChild("addr"));
+        setWatchDataValueToolTip(data1, item.findChild("valuetooltip"));
+        setWatchDataValueDisabled(data1, item.findChild("valuedisabled"));
+        if (!qq->watchHandler()->isExpandedIName(data1.iname))
+            data1.setChildrenUnneeded();
+        //qDebug() << "HANDLE CUSTOM SUBCONTENTS:" << data1.toString();
+        insertData(data1);
     }
 }
 
 void GdbEngine::updateLocals()
 {
-    setTokenBarrier();
+setTokenBarrier();
 
-    m_pendingRequests = 0;
-    PENDING_DEBUG("\nRESET PENDING");
-    m_toolTipCache.clear();
-    m_toolTipExpression.clear();
-    qq->watchHandler()->reinitializeWatchers();
+m_pendingRequests = 0;
+PENDING_DEBUG("\nRESET PENDING");
+m_toolTipCache.clear();
+m_toolTipExpression.clear();
+qq->watchHandler()->reinitializeWatchers();
 
-    int level = currentFrame();
-    // '2' is 'list with type and value'
-    QString cmd = QString("-stack-list-arguments 2 %1 %2").arg(level).arg(level);
-    sendSynchronizedCommand(cmd, StackListArguments);                 // stage 1/2
-    // '2' is 'list with type and value'
-    sendSynchronizedCommand("-stack-list-locals 2", StackListLocals); // stage 2/2
+int level = currentFrame();
+// '2' is 'list with type and value'
+QString cmd = QString("-stack-list-arguments 2 %1 %2").arg(level).arg(level);
+sendSynchronizedCommand(cmd, StackListArguments);                 // stage 1/2
+// '2' is 'list with type and value'
+sendSynchronizedCommand("-stack-list-locals 2", StackListLocals); // stage 2/2
 }
 
 void GdbEngine::handleStackListArguments(const GdbResultRecord &record)
 {
-    // stage 1/2
-
-    // Linux:
-    // 12^done,stack-args=
-    //   [frame={level="0",args=[
-    //     {name="argc",type="int",value="1"},
-    //     {name="argv",type="char **",value="(char **) 0x7..."}]}]
-    // Mac:
-    // 78^done,stack-args=
-    //    {frame={level="0",args={
-    //      varobj=
-    //        {exp="this",value="0x38a2fab0",name="var21",numchild="3",
-    //             type="CurrentDocumentFind *  const",typecode="PTR",
-    //             dynamic_type="",in_scope="true",block_start_addr="0x3938e946",
-    //             block_end_addr="0x3938eb2d"},
-    //      varobj=
-    //         {exp="before",value="@0xbfffb9f8: {d = 0x3a7f2a70}",
-    //              name="var22",numchild="1",type="const QString  ...} }}}
-    //
-    // In both cases, iterating over the children of stack-args/frame/args
-    // is ok.
-    m_currentFunctionArgs.clear();
-    if (record.resultClass == GdbResultDone) {
-        const GdbMi list = record.data.findChild("stack-args");
-        const GdbMi frame = list.findChild("frame");
-        const GdbMi args = frame.findChild("args");
-        m_currentFunctionArgs = args.children();
-    } else if (record.resultClass == GdbResultError) {
-        qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen";
-    }
+// stage 1/2
+
+// Linux:
+// 12^done,stack-args=
+//   [frame={level="0",args=[
+//     {name="argc",type="int",value="1"},
+//     {name="argv",type="char **",value="(char **) 0x7..."}]}]
+// Mac:
+// 78^done,stack-args=
+//    {frame={level="0",args={
+//      varobj=
+//        {exp="this",value="0x38a2fab0",name="var21",numchild="3",
+//             type="CurrentDocumentFind *  const",typecode="PTR",
+//             dynamic_type="",in_scope="true",block_start_addr="0x3938e946",
+//             block_end_addr="0x3938eb2d"},
+//      varobj=
+//         {exp="before",value="@0xbfffb9f8: {d = 0x3a7f2a70}",
+//              name="var22",numchild="1",type="const QString  ...} }}}
+//
+// In both cases, iterating over the children of stack-args/frame/args
+// is ok.
+m_currentFunctionArgs.clear();
+if (record.resultClass == GdbResultDone) {
+    const GdbMi list = record.data.findChild("stack-args");
+    const GdbMi frame = list.findChild("frame");
+    const GdbMi args = frame.findChild("args");
+    m_currentFunctionArgs = args.children();
+} else if (record.resultClass == GdbResultError) {
+    qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen";
+}
 }
 
 void GdbEngine::handleStackListLocals(const GdbResultRecord &record)
 {
-    // stage 2/2
+// stage 2/2
 
-    // There could be shadowed variables
-    QList<GdbMi> locals = record.data.findChild("locals").children();
-    locals += m_currentFunctionArgs;
+// There could be shadowed variables
+QList<GdbMi> locals = record.data.findChild("locals").children();
+locals += m_currentFunctionArgs;
 
-    setLocals(locals);
+setLocals(locals);
 }
 
 void GdbEngine::setLocals(const QList<GdbMi> &locals) 
 { 
-    //qDebug() << m_varToType;
-    QHash<QString, int> seen;
-
-    foreach (const GdbMi &item, locals) {
-        // Local variables of inlined code are reported as 
-        // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this",
-        // numchild="1",type="const QtSharedPointer::Basic<CPlusPlus::..."
-        // We do not want these at all. Current hypotheses is that those
-        // "spurious" locals have _two_ "exp" field. Try to filter them:
-        #ifdef Q_OS_MAC
-        int numExps = 0;
-        foreach (const GdbMi &child, item.children())
-            numExps += int(child.name() == "exp");
-        if (numExps > 1)
-            continue;
-        QString name = item.findChild("exp").data();
-        #else
-        QString name = item.findChild("name").data();
-        #endif
-        int n = seen.value(name);
-        if (n) {
-            seen[name] = n + 1;
-            WatchData data;
-            data.iname = "local." + name + QString::number(n + 1);
-            data.name = name + QString(" <shadowed %1>").arg(n);
-            //data.setValue("<shadowed>");
+//qDebug() << m_varToType;
+QHash<QString, int> seen;
+
+foreach (const GdbMi &item, locals) {
+    // Local variables of inlined code are reported as 
+    // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this",
+    // numchild="1",type="const QtSharedPointer::Basic<CPlusPlus::..."
+    // We do not want these at all. Current hypotheses is that those
+    // "spurious" locals have _two_ "exp" field. Try to filter them:
+    #ifdef Q_OS_MAC
+    int numExps = 0;
+    foreach (const GdbMi &child, item.children())
+        numExps += int(child.name() == "exp");
+    if (numExps > 1)
+        continue;
+    QString name = item.findChild("exp").data();
+    #else
+    QString name = item.findChild("name").data();
+    #endif
+    int n = seen.value(name);
+    if (n) {
+        seen[name] = n + 1;
+        WatchData data;
+        data.iname = "local." + name + QString::number(n + 1);
+        data.name = name + QString(" <shadowed %1>").arg(n);
+        //data.setValue("<shadowed>");
+        setWatchDataValue(data, item.findChild("value"));
+        data.setType("<shadowed>");
+        data.setChildCount(0);
+        insertData(data);
+    } else {
+        seen[name] = 1;
+        WatchData data;
+        data.iname = "local." + name;
+        data.name = name;
+        data.exp = name;
+        data.framekey = m_currentFrame + data.name;
+        setWatchDataType(data, item.findChild("type"));
+        // set value only directly if it is simple enough, otherwise
+        // pass through the insertData() machinery
+        if (isIntOrFloatType(data.type) || isPointerType(data.type))
             setWatchDataValue(data, item.findChild("value"));
-            data.setType("<shadowed>");
-            data.setChildCount(0);
-            insertData(data);
-        } else {
-            seen[name] = 1;
-            WatchData data;
-            data.iname = "local." + name;
-            data.name = name;
-            data.exp = name;
-            data.framekey = m_currentFrame + data.name;
-            setWatchDataType(data, item.findChild("type"));
-            // set value only directly if it is simple enough, otherwise
-            // pass through the insertData() machinery
-            if (isIntOrFloatType(data.type) || isPointerType(data.type))
-                setWatchDataValue(data, item.findChild("value"));
-            if (!qq->watchHandler()->isExpandedIName(data.iname))
-                data.setChildrenUnneeded();
-            if (isPointerType(data.type) || data.name == "this")
-                data.setChildCount(1);
-            if (0 && m_varToType.contains(data.framekey)) {
-                qDebug() << "RE-USING " << m_varToType.value(data.framekey);
-                data.setType(m_varToType.value(data.framekey));
-            }
-            insertData(data);
+        if (!qq->watchHandler()->isExpandedIName(data.iname))
+            data.setChildrenUnneeded();
+        if (isPointerType(data.type) || data.name == "this")
+            data.setChildCount(1);
+        if (0 && m_varToType.contains(data.framekey)) {
+            qDebug() << "RE-USING " << m_varToType.value(data.framekey);
+            data.setType(m_varToType.value(data.framekey));
         }
+        insertData(data);
+    }
     }
 }
 
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index 60493a53e582233c19efbd7cd42e3b95f82cf17b..a603aee375dc5732cbd066b79fb06f97ef8f36b2 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -134,6 +134,9 @@ private:
     void loadSymbols(const QString &moduleName);
     void loadAllSymbols();
 
+    void setDebugDumpers(bool on);
+    void setUseCustomDumpers(bool on);
+
     //
     // Own stuff
     //
@@ -167,9 +170,6 @@ private:
     void updateLocals();
 
 private slots:
-    void setDebugDumpers(bool on);
-    void setCustomDumpersWanted(bool on);
-
     void handleResponse();
 
     void gdbProcError(QProcess::ProcessError error);
diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h
index 50fbafda5593731781a1b273c5be506a3de38b2e..1558d140ee62ed6d4a467c15d24b0243a7e1d19e 100644
--- a/src/plugins/debugger/idebuggerengine.h
+++ b/src/plugins/debugger/idebuggerengine.h
@@ -86,6 +86,8 @@ public:
     virtual void loadAllSymbols() = 0;
 
     virtual void reloadRegisters() = 0;
+    virtual void setDebugDumpers(bool on) = 0;
+    virtual void setUseCustomDumpers(bool on) = 0;
 };
 
 } // namespace Internal
diff --git a/src/plugins/debugger/scriptengine.h b/src/plugins/debugger/scriptengine.h
index 0f7cc47ac1feafc66ee24a924064de345aa44c57..b7f37f2cc67b8a8372ec959e35c08dd219583cd3 100644
--- a/src/plugins/debugger/scriptengine.h
+++ b/src/plugins/debugger/scriptengine.h
@@ -101,6 +101,9 @@ private:
     void loadSessionData() {}
     void saveSessionData() {}
 
+    void setDebugDumpers(bool) {}
+    void setUseCustomDumpers(bool) {}
+
     void assignValueInDebugger(const QString &expr, const QString &value);
     void executeDebuggerCommand(const QString & command);
 
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index b2c43b28f646e260dbd26bdb27e95b3d26fc540b..a00b7fad7cee054f50749a62962b8404101c5d4b 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -255,7 +255,6 @@ QString WatchData::toString() const
     return res;
 }
 
-
 static bool iNameSorter(const WatchData &d1, const WatchData &d2)
 {
     if (d1.level != d2.level)
@@ -265,19 +264,9 @@ static bool iNameSorter(const WatchData &d1, const WatchData &d2)
         QString name1 = d1.iname.section('.', level, level);
         QString name2 = d2.iname.section('.', level, level);
         //MODEL_DEBUG(" SORT: " << name1 << name2 << (name1 < name2));
-
-        if (name1 != name2) {
-            // This formerly used inames. in this case 'lastIndexOf' probably
-            // makes more sense.
-            if (name1.startsWith('[') && name2.startsWith('[')) {
-                return name1.mid(1, name1.indexOf(']') - 1).toInt()
-                     < name2.mid(1, name2.indexOf(']') - 1).toInt();
-                // numbers should be sorted according to their numerical value
-                //int pos = d1.name.lastIndexOf('.');
-                //if (pos != -1 && pos + 1 != d1.name.size() && d1.name.at(pos + 1).isDigit())
-                //    return d1.name.size() < d2.name.size();
-                // fall through
-            }
+        if (name1 != name2 && !name1.isEmpty() && !name2.isEmpty()) {
+            if (name1.at(0).isDigit() && name2.at(0).isDigit())
+                return name1.toInt() < name2.toInt();
             return name1 < name2;
         }
     }
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index d8cbeff59e4e526896d48f55d5b641d46ada8aea..e23ba991fb071e3b96934509dff8fa4543a96e6e 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -391,6 +391,7 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
             return true;
         }
         m_mode = CommandMode;
+        updateMiniBuffer();
         return false;
     }
 
@@ -436,6 +437,7 @@ void FakeVimHandler::Private::setupWidget()
         m_plaintextedit->setLineWrapMode(QPlainTextEdit::NoWrap);
     }
     m_wasReadOnly = EDITOR(isReadOnly());
+    //EDITOR(setReadOnly(true)); 
     showBlackMessage("vi emulation mode.");
     updateMiniBuffer();
 }
@@ -780,6 +782,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         m_commandHistoryIndex = m_commandHistory.size() - 1;
         updateMiniBuffer();
     } else if (key == '/' || key == '?') {
+        enterExMode(); // to get the cursor disabled
         m_mode = (key == '/') ? SearchForwardMode : SearchBackwardMode;
         m_commandBuffer.clear();
         m_searchHistory.append(QString());
@@ -879,13 +882,12 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         m_opcount = m_mvcount;
         m_mvcount.clear();
         m_submode = DeleteSubMode;
-    } else if (key == 'd') {
-        //setAnchor();
+    } else if (key == 'd' && m_visualMode == VisualLineMode) {
         leaveVisualMode();
         int beginLine = lineForPosition(m_marks['<']);
         int endLine = lineForPosition(m_marks['>']);
         selectRange(beginLine, endLine);
-        recordRemoveSelectedText();
+        m_registers[m_register] = recordRemoveSelectedText();
     } else if (key == 'D') {
         setAnchor();
         recordBeginGroup();
@@ -1071,10 +1073,6 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         m_subsubdata = key;
     } else if (key == 'u') {
         undo();
-    } else if (key == 'U') {
-        // FIXME: this is non-vim, but as Ctrl-R is taken globally
-        // we have a substitute here
-        redo();
     } else if (key == control('u')) {
         int sline = cursorLineOnScreen();
         // FIXME: this should use the "scroll" option, and "count"
@@ -1112,7 +1110,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         if (leftDist() > 0) {
             setAnchor();
             moveLeft(qMin(count(), leftDist()));
-            recordRemoveSelectedText();
+            m_registers[m_register] = recordRemoveSelectedText();
         }
         finishMovement();
     } else if (key == 'y' && m_visualMode == NoVisualMode) {
@@ -1223,6 +1221,8 @@ bool FakeVimHandler::Private::handleInsertMode(int key, int, const QString &text
         QString str = QString(m_config[ConfigTabStop].toInt(), ' ');
         m_lastInsertion.append(str);
         m_tc.insertText(str);
+    } else if (key >= control('a') && key <= control('z')) {
+        // ignore these
     } else if (!text.isEmpty()) {
         m_lastInsertion.append(text);
         if (m_submode == ReplaceSubMode) {
@@ -2114,10 +2114,6 @@ FakeVimHandler::~FakeVimHandler()
 
 bool FakeVimHandler::eventFilter(QObject *ob, QEvent *ev)
 {
-    //if (ev->type() == QEvent::KeyPress || ev->type() == QEvent::ShortcutOverride)
-    //    qDebug() << ob << ev->type() << qApp << d->editor()
-    //        << QEvent::KeyPress << QEvent::ShortcutOverride;
-
     if (ev->type() == QEvent::KeyPress && ob == d->editor())
         return d->handleEvent(static_cast<QKeyEvent *>(ev));
 
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index d1ab5b40630882a24b4a30810498353d790bccb4..2f0a389432874ef598a95eb0c5d57dc4fe2d3afd 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -126,7 +126,6 @@ private slots:
 private:
     FakeVimPlugin *q;
     QAction *m_installHandlerAction; 
-    Core::ICore *m_core;
 };
 
 } // namespace Internal
@@ -136,7 +135,6 @@ FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin)
 {       
     q = plugin;
     m_installHandlerAction = 0;
-    m_core = 0;
 }
 
 FakeVimPluginPrivate::~FakeVimPluginPrivate()
@@ -149,10 +147,7 @@ void FakeVimPluginPrivate::shutdown()
 
 bool FakeVimPluginPrivate::initialize()
 {
-    m_core = Core::ICore::instance();
-    QTC_ASSERT(m_core, return false);
-
-    Core::ActionManager *actionManager = m_core->actionManager();
+    Core::ActionManager *actionManager = Core::ICore::instance()->actionManager();
     QTC_ASSERT(actionManager, return false);
 
     QList<int> globalcontext;
@@ -174,7 +169,7 @@ bool FakeVimPluginPrivate::initialize()
         this, SLOT(installHandlerOnCurrentEditor()));
 
     // EditorManager
-    QObject *editorManager = m_core->editorManager();
+    QObject *editorManager = Core::ICore::instance()->editorManager();
     connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)),
         this, SLOT(editorAboutToClose(Core::IEditor*)));
     connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)),
@@ -187,7 +182,7 @@ void FakeVimPluginPrivate::installHandler(Core::IEditor *editor)
 {
     QWidget *widget = editor->widget();
     
-    FakeVimHandler *handler = new FakeVimHandler(widget, this);
+    FakeVimHandler *handler = new FakeVimHandler(widget, widget);
 
     connect(handler, SIGNAL(extraInformationChanged(QString)),
         this, SLOT(showExtraInformation(QString)));
@@ -239,9 +234,9 @@ void FakeVimPluginPrivate::writeFile(bool *handled,
     if (editor && editor->file()->fileName() == fileName) {
         // Handle that as a special case for nicer interaction with core
         Core::IFile *file = editor->file();
-        m_core->fileManager()->blockFileChange(file);
+        Core::ICore::instance()->fileManager()->blockFileChange(file);
         file->save(fileName);
-        m_core->fileManager()->unblockFileChange(file);
+        Core::ICore::instance()->fileManager()->unblockFileChange(file);
         *handled = true;
     } 
 }
@@ -258,33 +253,17 @@ void FakeVimPluginPrivate::removeHandler()
 
 void FakeVimPluginPrivate::editorOpened(Core::IEditor *editor)
 {
-    Q_UNUSED(editor);
     //qDebug() << "OPENING: " << editor << editor->widget();
-    //installHandler(editor);
-
-#if 1
     QSettings *s = ICore::instance()->settings();
     bool automatic = s->value("textInteractionSettings/UseVim").toBool();
-    //qDebug() << "USE VIM: " << automatic;
     if (automatic)
        installHandler(editor);
-#endif
-
-#if 0
-    QWidget *widget = editor->widget();
-    if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(widget)) {
-        InteractionSettings settings = bt->interactionSettings();
-        qDebug() << "USE VIM: " << settings.m_useVim;
-        if (settings.m_useVim)
-            installHandler(editor);
-    }
-#endif
 }
 
 void FakeVimPluginPrivate::editorAboutToClose(Core::IEditor *editor)
 {
+    //qDebug() << "CLOSING: " << editor << editor->widget();
     Q_UNUSED(editor);
-    //qDebug() << "CLOSING: " << editor;
 }
 
 void FakeVimPluginPrivate::showCommandBuffer(const QString &contents)
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 9e07f46f69ffcafaeae916bee377f5ba195f225c..3eddaa5e0eca2bdaa2c52d522a25fe4a255f5ddc 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -98,7 +98,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
         }
     }
     if (needsSetup)
-        qDebug() << m_helpEngine->setupData();
+        m_helpEngine->setupData();
 }
 
 HelpPlugin::HelpPlugin() :
@@ -450,9 +450,12 @@ void HelpPlugin::extensionsInitialized()
 #endif
         QHelpEngineCore hc(fi.absoluteFilePath());
         hc.setupData();
-        if (!hc.registerDocumentation(qchFileName))
-            qDebug() << hc.error();
-        needsSetup = true;
+        QString fileNamespace = QHelpEngineCore::namespaceName(qchFileName);
+        if (!fileNamespace.isEmpty() && !hc.registeredDocumentations().contains(fileNamespace)) {
+            if (!hc.registerDocumentation(qchFileName))
+                qDebug() << hc.error();
+            needsSetup = true;
+        }
     }
 
     int i = m_helpEngine->customValue(
diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp
index 1da33786a2f04d1d544f2a889a9ad3d1f8fdf62c..859cef01af16a4b8d2d3039ffc8b5323a973d228 100644
--- a/src/plugins/projectexplorer/projecttreewidget.cpp
+++ b/src/plugins/projectexplorer/projecttreewidget.cpp
@@ -74,13 +74,6 @@ public:
         setContextMenuPolicy(Qt::CustomContextMenu);
         setUniformRowHeights(true);
         setTextElideMode(Qt::ElideNone);
-        setAlternatingRowColors(true);
-        QPalette pal = palette();
-        if (pal.base().color() == Qt::white) { // Leave dark themes as they are
-            pal.setBrush(QPalette::AlternateBase, QColor(239, 239, 239));
-            setPalette(pal);
-        }
-        setProperty("AlternateEmpty", true); // Let Manhattan to override style default
 //        setExpandsOnDoubleClick(false);
     }
 
diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..be3cf2ddf27b778a9f2ad934e1d94498da46ab42
--- /dev/null
+++ b/src/plugins/texteditor/behaviorsettingspage.cpp
@@ -0,0 +1,187 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file.  Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception
+** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+
+#include "behaviorsettingspage.h"
+#include "interactionsettings.h"
+#include "storagesettings.h"
+#include "tabsettings.h"
+#include "ui_behaviorsettingspage.h"
+
+#include <coreplugin/icore.h>
+
+#include <QtCore/QSettings>
+
+using namespace TextEditor;
+
+struct BehaviorSettingsPage::BehaviorSettingsPagePrivate
+{
+    explicit BehaviorSettingsPagePrivate(const BehaviorSettingsPageParameters &p);
+
+    const BehaviorSettingsPageParameters m_parameters;
+    Ui::BehaviorSettingsPage m_page;
+    TabSettings m_tabSettings;
+    StorageSettings m_storageSettings;
+    InteractionSettings m_interactionSettings;
+};
+
+BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate
+    (const BehaviorSettingsPageParameters &p)
+  : m_parameters(p)
+{
+    if (const QSettings *s = Core::ICore::instance()->settings()) {
+        m_tabSettings.fromSettings(m_parameters.settingsPrefix, s);
+        m_storageSettings.fromSettings(m_parameters.settingsPrefix, s);
+        m_interactionSettings.fromSettings(m_parameters.settingsPrefix, s);
+    }
+}
+
+BehaviorSettingsPage::BehaviorSettingsPage(const BehaviorSettingsPageParameters &p,
+                                 QObject *parent)
+  : Core::IOptionsPage(parent),
+    m_d(new BehaviorSettingsPagePrivate(p))
+{
+}
+
+BehaviorSettingsPage::~BehaviorSettingsPage()
+{
+    delete m_d;
+}
+
+QString BehaviorSettingsPage::name() const
+{
+    return m_d->m_parameters.name;
+}
+
+QString BehaviorSettingsPage::category() const
+{
+    return m_d->m_parameters.category;
+}
+
+QString BehaviorSettingsPage::trCategory() const
+{
+    return m_d->m_parameters.trCategory;
+}
+
+QWidget *BehaviorSettingsPage::createPage(QWidget *parent)
+{
+    QWidget *w = new QWidget(parent);
+    m_d->m_page.setupUi(w);
+    settingsToUI();
+    return w;
+}
+
+void BehaviorSettingsPage::apply()
+{
+    TabSettings newTabSettings;
+    StorageSettings newStorageSettings;
+    InteractionSettings newInteractionSettings;
+
+    settingsFromUI(newTabSettings, newStorageSettings, newInteractionSettings);
+
+    Core::ICore *core = Core::ICore::instance();
+    QSettings *s = core->settings();
+
+    if (newTabSettings != m_d->m_tabSettings) {
+        m_d->m_tabSettings = newTabSettings;
+        if (s)
+            m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+
+        emit tabSettingsChanged(newTabSettings);
+    }
+
+    if (newStorageSettings != m_d->m_storageSettings) {
+        m_d->m_storageSettings = newStorageSettings;
+        if (s)
+            m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+
+        emit storageSettingsChanged(newStorageSettings);
+    }
+
+    if (newInteractionSettings != m_d->m_interactionSettings) {
+        m_d->m_interactionSettings = newInteractionSettings;
+        if (s)
+            m_d->m_interactionSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+    }
+}
+
+void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings,
+                                         StorageSettings &storageSettings,
+                                         InteractionSettings &interactionSettings) const
+{
+    tabSettings.m_spacesForTabs = m_d->m_page.insertSpaces->isChecked();
+    tabSettings.m_autoIndent = m_d->m_page.autoIndent->isChecked();
+    tabSettings.m_smartBackspace = m_d->m_page.smartBackspace->isChecked();
+    tabSettings.m_tabSize = m_d->m_page.tabSize->value();
+    tabSettings.m_indentSize = m_d->m_page.indentSize->value();
+
+    storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked();
+    storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked();
+    storageSettings.m_cleanIndentation = m_d->m_page.cleanIndentation->isChecked();
+    storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked();
+
+    interactionSettings.m_useVim = m_d->m_page.useVim->isChecked();
+}
+
+void BehaviorSettingsPage::settingsToUI()
+{
+    const TabSettings &tabSettings = m_d->m_tabSettings;
+    m_d->m_page.insertSpaces->setChecked(tabSettings.m_spacesForTabs);
+    m_d->m_page.autoIndent->setChecked(tabSettings.m_autoIndent);
+    m_d->m_page.smartBackspace->setChecked(tabSettings.m_smartBackspace);
+    m_d->m_page.tabSize->setValue(tabSettings.m_tabSize);
+    m_d->m_page.indentSize->setValue(tabSettings.m_indentSize);
+
+    const StorageSettings &storageSettings = m_d->m_storageSettings;
+    m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace);
+    m_d->m_page.inEntireDocument->setChecked(storageSettings.m_inEntireDocument);
+    m_d->m_page.cleanIndentation->setChecked(storageSettings.m_cleanIndentation);
+    m_d->m_page.addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine);
+
+    const InteractionSettings &interactionSettings = m_d->m_interactionSettings;
+    m_d->m_page.useVim->setChecked(interactionSettings.m_useVim);
+}
+
+TabSettings BehaviorSettingsPage::tabSettings() const
+{
+    return m_d->m_tabSettings;
+}
+
+StorageSettings BehaviorSettingsPage::storageSettings() const
+{
+    return m_d->m_storageSettings;
+}
+
+InteractionSettings BehaviorSettingsPage::interactionSettings() const
+{
+    return m_d->m_interactionSettings;
+}
diff --git a/src/plugins/texteditor/generalsettingspage.h b/src/plugins/texteditor/behaviorsettingspage.h
similarity index 77%
rename from src/plugins/texteditor/generalsettingspage.h
rename to src/plugins/texteditor/behaviorsettingspage.h
index 1f70fd6b0b0d5e8240703e08ba20f56be330ef60..68f7b4082960d07fc878cbf5c979f6b1cbd5df5f 100644
--- a/src/plugins/texteditor/generalsettingspage.h
+++ b/src/plugins/texteditor/behaviorsettingspage.h
@@ -31,8 +31,8 @@
 **
 ***************************************************************************/
 
-#ifndef GENERALSETTINGSPAGE_H
-#define GENERALSETTINGSPAGE_H
+#ifndef BEHAVIORSETTINGSPAGE_H
+#define BEHAVIORSETTINGSPAGE_H
 
 #include "texteditor_global.h"
 
@@ -44,10 +44,9 @@ namespace TextEditor {
 
 struct TabSettings;
 struct StorageSettings;
-struct DisplaySettings;
 struct InteractionSettings;
 
-struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters
+struct BehaviorSettingsPageParameters
 {
     QString name;
     QString category;
@@ -55,13 +54,13 @@ struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters
     QString settingsPrefix;
 };
 
-class TEXTEDITOR_EXPORT GeneralSettingsPage : public Core::IOptionsPage
+class BehaviorSettingsPage : public Core::IOptionsPage
 {
     Q_OBJECT
 
 public:
-    GeneralSettingsPage(const GeneralSettingsPageParameters &p, QObject *parent);
-    virtual ~GeneralSettingsPage();
+    BehaviorSettingsPage(const BehaviorSettingsPageParameters &p, QObject *parent);
+    virtual ~BehaviorSettingsPage();
 
     // IOptionsPage
     QString name() const;
@@ -74,27 +73,21 @@ public:
 
     TabSettings tabSettings() const;
     StorageSettings storageSettings() const;
-    DisplaySettings displaySettings() const;
     InteractionSettings interactionSettings() const;
 
-    void setDisplaySettings(const DisplaySettings &);
-
 signals:
     void tabSettingsChanged(const TextEditor::TabSettings &);
     void storageSettingsChanged(const TextEditor::StorageSettings &);
-    void displaySettingsChanged(const TextEditor::DisplaySettings &);
 
 private:
     void settingsFromUI(TabSettings &rc,
                         StorageSettings &storageSettings,
-                        DisplaySettings &displaySettings,
-                        InteractionSettings &interactionSettings
-        ) const;
+                        InteractionSettings &interactionSettings) const;
     void settingsToUI();
-    struct GeneralSettingsPagePrivate;
-    GeneralSettingsPagePrivate *m_d;
+    struct BehaviorSettingsPagePrivate;
+    BehaviorSettingsPagePrivate *m_d;
 };
 
 } // namespace TextEditor
 
-#endif // GENERALSETTINGSPAGE_H
+#endif // BEHAVIORSETTINGSPAGE_H
diff --git a/src/plugins/texteditor/generalsettingspage.ui b/src/plugins/texteditor/behaviorsettingspage.ui
similarity index 78%
rename from src/plugins/texteditor/generalsettingspage.ui
rename to src/plugins/texteditor/behaviorsettingspage.ui
index 301ee8bdf558dc4cc1f40877014d0caf7b163ca6..a2fb68e5b20b123e774adcd3e9f451a752dc54ec 100644
--- a/src/plugins/texteditor/generalsettingspage.ui
+++ b/src/plugins/texteditor/behaviorsettingspage.ui
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>TextEditor::generalSettingsPage</class>
- <widget class="QWidget" name="TextEditor::generalSettingsPage">
+ <class>TextEditor::BehaviorSettingsPage</class>
+ <widget class="QWidget" name="TextEditor::BehaviorSettingsPage">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>514</width>
-    <height>475</height>
+    <width>484</width>
+    <height>398</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -255,71 +255,6 @@
     </widget>
    </item>
    <item row="2" column="0">
-    <widget class="QGroupBox" name="groupBoxDisplaySettings">
-     <property name="title">
-      <string>Display Settings</string>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="1">
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <widget class="QCheckBox" name="showWrapColumn">
-          <property name="text">
-           <string>Display right &amp;margin at column</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QSpinBox" name="wrapColumn">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="maximum">
-           <number>999</number>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="enableTextWrapping">
-        <property name="text">
-         <string>Enable text &amp;wrapping</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="displayLineNumbers">
-        <property name="text">
-         <string>Display line &amp;numbers</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1">
-       <widget class="QCheckBox" name="visualizeWhitespace">
-        <property name="text">
-         <string>&amp;Visualize whitespace</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="displayFoldingMarkers">
-        <property name="text">
-         <string>Display &amp;folding markers</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1">
-       <widget class="QCheckBox" name="highlightCurrentLine">
-        <property name="text">
-         <string>Highlight current &amp;line</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="3" column="0">
     <widget class="QGroupBox" name="groupBoxInteractionSettings">
      <property name="title">
       <string>Interaction Settings</string>
@@ -335,7 +270,7 @@
      </layout>
     </widget>
    </item>
-   <item row="4" column="0">
+   <item row="3" column="0">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -373,20 +308,14 @@
    <signal>toggled(bool)</signal>
    <receiver>cleanIndentation</receiver>
    <slot>setEnabled(bool)</slot>
-  </connection>
-  <connection>
-   <sender>showWrapColumn</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>wrapColumn</receiver>
-   <slot>setEnabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>399</x>
-     <y>308</y>
+     <x>20</x>
+     <y>20</y>
     </hint>
     <hint type="destinationlabel">
-     <x>474</x>
-     <y>308</y>
+     <x>20</x>
+     <y>20</y>
     </hint>
    </hints>
   </connection>
diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7f47290b3f488be872e093f33dc1bcb6cab89c1a
--- /dev/null
+++ b/src/plugins/texteditor/displaysettingspage.cpp
@@ -0,0 +1,153 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file.  Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception
+** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+
+#include "displaysettingspage.h"
+#include "displaysettings.h"
+#include "ui_displaysettingspage.h"
+
+#include <coreplugin/icore.h>
+
+#include <QtCore/QSettings>
+
+using namespace TextEditor;
+
+struct DisplaySettingsPage::DisplaySettingsPagePrivate
+{
+    explicit DisplaySettingsPagePrivate(const DisplaySettingsPageParameters &p);
+
+    const DisplaySettingsPageParameters m_parameters;
+    Ui::DisplaySettingsPage m_page;
+    DisplaySettings m_displaySettings;
+};
+
+DisplaySettingsPage::DisplaySettingsPagePrivate::DisplaySettingsPagePrivate
+    (const DisplaySettingsPageParameters &p)
+    : m_parameters(p)
+{
+    if (const QSettings *s = Core::ICore::instance()->settings()) {
+        m_displaySettings.fromSettings(m_parameters.settingsPrefix, s);
+    }
+}
+
+DisplaySettingsPage::DisplaySettingsPage(const DisplaySettingsPageParameters &p,
+                                         QObject *parent)
+  : Core::IOptionsPage(parent),
+    m_d(new DisplaySettingsPagePrivate(p))
+{
+}
+
+DisplaySettingsPage::~DisplaySettingsPage()
+{
+    delete m_d;
+}
+
+QString DisplaySettingsPage::name() const
+{
+    return m_d->m_parameters.name;
+}
+
+QString DisplaySettingsPage::category() const
+{
+    return m_d->m_parameters.category;
+}
+
+QString DisplaySettingsPage::trCategory() const
+{
+    return m_d->m_parameters.trCategory;
+}
+
+QWidget *DisplaySettingsPage::createPage(QWidget *parent)
+{
+    QWidget *w = new QWidget(parent);
+    m_d->m_page.setupUi(w);
+    settingsToUI();
+    return w;
+}
+
+void DisplaySettingsPage::apply()
+{
+    DisplaySettings newDisplaySettings;
+
+    settingsFromUI(newDisplaySettings);
+
+    Core::ICore *core = Core::ICore::instance();
+    QSettings *s = core->settings();
+
+    if (newDisplaySettings != m_d->m_displaySettings) {
+        m_d->m_displaySettings = newDisplaySettings;
+        if (s)
+            m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+
+        emit displaySettingsChanged(newDisplaySettings);
+    }
+}
+
+void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const
+{
+    displaySettings.m_displayLineNumbers = m_d->m_page.displayLineNumbers->isChecked();
+    displaySettings.m_textWrapping = m_d->m_page.enableTextWrapping->isChecked();
+    displaySettings.m_showWrapColumn = m_d->m_page.showWrapColumn->isChecked();
+    displaySettings.m_wrapColumn = m_d->m_page.wrapColumn->value();
+    displaySettings.m_visualizeWhitespace = m_d->m_page.visualizeWhitespace->isChecked();
+    displaySettings.m_displayFoldingMarkers = m_d->m_page.displayFoldingMarkers->isChecked();
+    displaySettings.m_highlightCurrentLine = m_d->m_page.highlightCurrentLine->isChecked();
+}
+
+void DisplaySettingsPage::settingsToUI()
+{
+    const DisplaySettings &displaySettings = m_d->m_displaySettings;
+    m_d->m_page.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers);
+    m_d->m_page.enableTextWrapping->setChecked(displaySettings.m_textWrapping);
+    m_d->m_page.showWrapColumn->setChecked(displaySettings.m_showWrapColumn);
+    m_d->m_page.wrapColumn->setValue(displaySettings.m_wrapColumn);
+    m_d->m_page.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace);
+    m_d->m_page.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers);
+    m_d->m_page.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine);
+}
+
+DisplaySettings DisplaySettingsPage::displaySettings() const
+{
+    return m_d->m_displaySettings;
+}
+
+void DisplaySettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySettings)
+{
+    if (newDisplaySettings != m_d->m_displaySettings) {
+        m_d->m_displaySettings = newDisplaySettings;
+        Core::ICore *core = Core::ICore::instance();
+        if (QSettings *s = core->settings())
+            m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
+
+        emit displaySettingsChanged(newDisplaySettings);
+    }
+}
diff --git a/src/plugins/texteditor/displaysettingspage.h b/src/plugins/texteditor/displaysettingspage.h
new file mode 100644
index 0000000000000000000000000000000000000000..3337cafa922c1575840bf153fe3487a732b44397
--- /dev/null
+++ b/src/plugins/texteditor/displaysettingspage.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact:  Qt Software Information (qt-info@nokia.com)
+**
+**
+** Non-Open Source Usage
+**
+** Licensees may use this file in accordance with the Qt Beta Version
+** License Agreement, Agreement version 2.2 provided with the Software or,
+** alternatively, in accordance with the terms contained in a written
+** agreement between you and Nokia.
+**
+** GNU General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the packaging
+** of this file.  Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+**
+** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt GPL Exception
+** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
+**
+***************************************************************************/
+
+#ifndef DISPLAYSETTINGSPAGE_H
+#define DISPLAYSETTINGSPAGE_H
+
+#include "texteditor_global.h"
+
+#include <coreplugin/dialogs/ioptionspage.h>
+
+#include <QtCore/QObject>
+
+namespace TextEditor {
+
+struct DisplaySettings;
+
+struct DisplaySettingsPageParameters
+{
+    QString name;
+    QString category;
+    QString trCategory;
+    QString settingsPrefix;
+};
+
+class DisplaySettingsPage : public Core::IOptionsPage
+{
+    Q_OBJECT
+
+public:
+    DisplaySettingsPage(const DisplaySettingsPageParameters &p, QObject *parent);
+    virtual ~DisplaySettingsPage();
+
+    // IOptionsPage
+    QString name() const;
+    QString category() const;
+    QString trCategory() const;
+
+    QWidget *createPage(QWidget *parent);
+    void apply();
+    void finish() { }
+
+    DisplaySettings displaySettings() const;
+    void setDisplaySettings(const DisplaySettings &);
+
+signals:
+    void displaySettingsChanged(const TextEditor::DisplaySettings &);
+
+private:
+    void settingsFromUI(DisplaySettings &displaySettings) const;
+    void settingsToUI();
+    struct DisplaySettingsPagePrivate;
+    DisplaySettingsPagePrivate *m_d;
+};
+
+} // namespace TextEditor
+
+#endif // DISPLAYSETTINGSPAGE_H
diff --git a/src/plugins/texteditor/displaysettingspage.ui b/src/plugins/texteditor/displaysettingspage.ui
new file mode 100644
index 0000000000000000000000000000000000000000..30fdf5cf93b7fbd16b32a236b70b85d19cf4a47c
--- /dev/null
+++ b/src/plugins/texteditor/displaysettingspage.ui
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TextEditor::DisplaySettingsPage</class>
+ <widget class="QWidget" name="TextEditor::DisplaySettingsPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>514</width>
+    <height>194</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_3">
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBoxDisplaySettings">
+     <property name="title">
+      <string>Display Settings</string>
+     </property>
+     <layout class="QGridLayout">
+      <item row="0" column="1">
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QCheckBox" name="showWrapColumn">
+          <property name="text">
+           <string>Display right &amp;margin at column</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="wrapColumn">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="maximum">
+           <number>999</number>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="enableTextWrapping">
+        <property name="text">
+         <string>Enable text &amp;wrapping</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="displayLineNumbers">
+        <property name="text">
+         <string>Display line &amp;numbers</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QCheckBox" name="visualizeWhitespace">
+        <property name="text">
+         <string>&amp;Visualize whitespace</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="displayFoldingMarkers">
+        <property name="text">
+         <string>Display &amp;folding markers</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QCheckBox" name="highlightCurrentLine">
+        <property name="text">
+         <string>Highlight current &amp;line</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>8</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>showWrapColumn</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>wrapColumn</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>308</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>474</x>
+     <y>308</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/texteditor/generalsettingspage.cpp b/src/plugins/texteditor/generalsettingspage.cpp
deleted file mode 100644
index 28400d10ebf3baded98b4c70ccf54d8e785901b6..0000000000000000000000000000000000000000
--- a/src/plugins/texteditor/generalsettingspage.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/***************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact:  Qt Software Information (qt-info@nokia.com)
-**
-**
-** Non-Open Source Usage
-**
-** Licensees may use this file in accordance with the Qt Beta Version
-** License Agreement, Agreement version 2.2 provided with the Software or,
-** alternatively, in accordance with the terms contained in a written
-** agreement between you and Nokia.
-**
-** GNU General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the packaging
-** of this file.  Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-**
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt GPL Exception
-** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
-**
-***************************************************************************/
-
-#include "displaysettings.h"
-#include "generalsettingspage.h"
-#include "interactionsettings.h"
-#include "storagesettings.h"
-#include "tabsettings.h"
-#include "ui_generalsettingspage.h"
-
-#include <coreplugin/icore.h>
-
-#include <QtCore/QSettings>
-#include <QtCore/QDebug>
-
-using namespace TextEditor;
-
-struct GeneralSettingsPage::GeneralSettingsPagePrivate
-{
-    explicit GeneralSettingsPagePrivate(const GeneralSettingsPageParameters &p);
-
-    const GeneralSettingsPageParameters m_parameters;
-    Ui::generalSettingsPage m_page;
-    TabSettings m_tabSettings;
-    StorageSettings m_storageSettings;
-    DisplaySettings m_displaySettings;
-    InteractionSettings m_interactionSettings;
-};
-
-GeneralSettingsPage::GeneralSettingsPagePrivate::GeneralSettingsPagePrivate
-    (const GeneralSettingsPageParameters &p)
-  : m_parameters(p)
-{
-    if (const QSettings *s = Core::ICore::instance()->settings()) {
-        m_tabSettings.fromSettings(m_parameters.settingsPrefix, s);
-        m_storageSettings.fromSettings(m_parameters.settingsPrefix, s);
-        m_displaySettings.fromSettings(m_parameters.settingsPrefix, s);
-        m_interactionSettings.fromSettings(m_parameters.settingsPrefix, s);
-    }
-}
-
-GeneralSettingsPage::GeneralSettingsPage(const GeneralSettingsPageParameters &p,
-                                 QObject *parent)
-  : Core::IOptionsPage(parent),
-    m_d(new GeneralSettingsPagePrivate(p))
-{
-}
-
-GeneralSettingsPage::~GeneralSettingsPage()
-{
-    delete m_d;
-}
-
-QString GeneralSettingsPage::name() const
-{
-    return m_d->m_parameters.name;
-}
-
-QString GeneralSettingsPage::category() const
-{
-    return  m_d->m_parameters.category;
-}
-
-QString GeneralSettingsPage::trCategory() const
-{
-    return m_d->m_parameters.trCategory;
-}
-
-QWidget *GeneralSettingsPage::createPage(QWidget *parent)
-{
-    QWidget *w = new QWidget(parent);
-    m_d->m_page.setupUi(w);
-    settingsToUI();
-    return w;
-}
-
-void GeneralSettingsPage::apply()
-{
-    TabSettings newTabSettings;
-    StorageSettings newStorageSettings;
-    DisplaySettings newDisplaySettings;
-    InteractionSettings newInteractionSettings;
-
-    settingsFromUI(newTabSettings, newStorageSettings, newDisplaySettings,
-        newInteractionSettings);
-
-    Core::ICore *core = Core::ICore::instance();
-    QSettings *s = core->settings();
-
-    if (newTabSettings != m_d->m_tabSettings) {
-        m_d->m_tabSettings = newTabSettings;
-        if (s)
-            m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
-
-        emit tabSettingsChanged(newTabSettings);
-    }
-
-    if (newStorageSettings != m_d->m_storageSettings) {
-        m_d->m_storageSettings = newStorageSettings;
-        if (s)
-            m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
-
-        emit storageSettingsChanged(newStorageSettings);
-    }
-
-    if (newDisplaySettings != m_d->m_displaySettings) {
-        m_d->m_displaySettings = newDisplaySettings;
-        if (s)
-            m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
-
-        emit displaySettingsChanged(newDisplaySettings);
-    }
-
-    if (newInteractionSettings != m_d->m_interactionSettings) {
-        m_d->m_interactionSettings = newInteractionSettings;
-        if (s)
-            m_d->m_interactionSettings.toSettings(m_d->m_parameters.settingsPrefix, s);
-
-    }
-}
-
-void GeneralSettingsPage::settingsFromUI(TabSettings &rc,
-                                         StorageSettings &storageSettings,
-                                         DisplaySettings &displaySettings,
-                                         InteractionSettings &interactionSettings) const
-{
-    rc.m_spacesForTabs = m_d->m_page.insertSpaces->isChecked();
-    rc.m_autoIndent = m_d->m_page.autoIndent->isChecked();
-    rc.m_smartBackspace = m_d->m_page.smartBackspace->isChecked();
-    rc.m_tabSize = m_d->m_page.tabSize->value();
-    rc.m_indentSize = m_d->m_page.indentSize->value();
-
-    storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked();
-    storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked();
-    storageSettings.m_cleanIndentation = m_d->m_page.cleanIndentation->isChecked();
-    storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked();
-
-    displaySettings.m_displayLineNumbers = m_d->m_page.displayLineNumbers->isChecked();
-    displaySettings.m_textWrapping = m_d->m_page.enableTextWrapping->isChecked();
-    displaySettings.m_showWrapColumn = m_d->m_page.showWrapColumn->isChecked();
-    displaySettings.m_wrapColumn = m_d->m_page.wrapColumn->value();
-    displaySettings.m_visualizeWhitespace = m_d->m_page.visualizeWhitespace->isChecked();
-    displaySettings.m_displayFoldingMarkers = m_d->m_page.displayFoldingMarkers->isChecked();
-    displaySettings.m_highlightCurrentLine = m_d->m_page.highlightCurrentLine->isChecked();
-
-    interactionSettings.m_useVim = m_d->m_page.useVim->isChecked();
-}
-
-void GeneralSettingsPage::settingsToUI()
-{
-    TabSettings rc = m_d->m_tabSettings;
-    m_d->m_page.insertSpaces->setChecked(rc.m_spacesForTabs);
-    m_d->m_page.autoIndent->setChecked(rc.m_autoIndent);
-    m_d->m_page.smartBackspace->setChecked(rc.m_smartBackspace);
-    m_d->m_page.tabSize->setValue(rc.m_tabSize);
-    m_d->m_page.indentSize->setValue(rc.m_indentSize);
-
-    StorageSettings storageSettings = m_d->m_storageSettings;
-    m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace);
-    m_d->m_page.inEntireDocument->setChecked(storageSettings.m_inEntireDocument);
-    m_d->m_page.cleanIndentation->setChecked(storageSettings.m_cleanIndentation);
-    m_d->m_page.addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine);
-
-    DisplaySettings displaySettings = m_d->m_displaySettings;
-    m_d->m_page.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers);
-    m_d->m_page.enableTextWrapping->setChecked(displaySettings.m_textWrapping);
-    m_d->m_page.showWrapColumn->setChecked(displaySettings.m_showWrapColumn);
-    m_d->m_page.wrapColumn->setValue(displaySettings.m_wrapColumn);
-    m_d->m_page.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace);
-    m_d->m_page.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers);
-    m_d->m_page.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine);
-
-    InteractionSettings interactionSettings = m_d->m_interactionSettings;
-    m_d->m_page.useVim->setChecked(interactionSettings.m_useVim);
-}
-
-TabSettings GeneralSettingsPage::tabSettings() const
-{
-    return m_d->m_tabSettings;
-}
-
-StorageSettings GeneralSettingsPage::storageSettings() const
-{
-    return m_d->m_storageSettings;
-}
-
-DisplaySettings GeneralSettingsPage::displaySettings() const
-{
-    return m_d->m_displaySettings;
-}
-
-InteractionSettings GeneralSettingsPage::interactionSettings() const
-{
-    return m_d->m_interactionSettings;
-}
-
-void GeneralSettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySettings)
-{
-    if (newDisplaySettings != m_d->m_displaySettings) {
-        m_d->m_displaySettings = newDisplaySettings;
-        Core::ICore *core = Core::ICore::instance();
-        if (QSettings *s = core->settings())
-            m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s);
-
-        emit displaySettingsChanged(newDisplaySettings);
-    }
-}
diff --git a/src/plugins/texteditor/texteditor.pro b/src/plugins/texteditor/texteditor.pro
index 56c39604fb4a944c190683a1b9fae7f8f3c824f2..0ec180bc06a7f778800065e2f8d4e471fc67f76f 100644
--- a/src/plugins/texteditor/texteditor.pro
+++ b/src/plugins/texteditor/texteditor.pro
@@ -9,6 +9,7 @@ SOURCES += texteditorplugin.cpp \
     plaintexteditorfactory.cpp \
     basetextdocument.cpp \
     basetexteditor.cpp \
+    behaviorsettingspage.cpp \
     texteditoractionhandler.cpp \
     completionsupport.cpp \
     completionwidget.cpp \
@@ -17,10 +18,10 @@ SOURCES += texteditorplugin.cpp \
     tabsettings.cpp \
     storagesettings.cpp \
     displaysettings.cpp \
+    displaysettingspage.cpp \
     fontsettings.cpp \
     textblockiterator.cpp \
     linenumberfilter.cpp \
-    generalsettingspage.cpp \
     basetextmark.cpp \
     findinfiles.cpp \
     basefilefind.cpp \
@@ -32,6 +33,7 @@ HEADERS += texteditorplugin.h \
     plaintexteditorfactory.h \
     basetexteditor_p.h \
     basetextdocument.h \
+    behaviorsettingspage.h \
     completionsupport.h \
     completionwidget.h \
     basetexteditor.h \
@@ -43,18 +45,19 @@ HEADERS += texteditorplugin.h \
     tabsettings.h \
     storagesettings.h \
     displaysettings.h \
+    displaysettingspage.h \
     fontsettings.h \
     textblockiterator.h \
     itexteditable.h \
     itexteditor.h \
     linenumberfilter.h \
     texteditor_global.h \
-    generalsettingspage.h \
     basetextmark.h \
     findinfiles.h \
     basefilefind.h \
     texteditorsettings.h \
     codecselector.h
-FORMS += fontsettingspage.ui \
-    generalsettingspage.ui
+FORMS += behaviorsettingspage.ui \
+    displaysettingspage.ui \
+    fontsettingspage.ui
 RESOURCES += texteditor.qrc
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index 999ad0d8ae70f25808c6fe75b1efbe269b15d3bd..a8f6019597dce27bbe0d74a3c2c1dedcf2594687 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -33,8 +33,9 @@
 
 #include "texteditorsettings.h"
 
+#include "behaviorsettingspage.h"
 #include "displaysettings.h"
-#include "generalsettingspage.h"
+#include "displaysettingspage.h"
 #include "fontsettingspage.h"
 #include "storagesettings.h"
 #include "tabsettings.h"
@@ -93,34 +94,43 @@ TextEditorSettings::TextEditorSettings(QObject *parent)
 
     m_fontSettingsPage = new FontSettingsPage(formatDescriptions,
                                               QLatin1String("TextEditor"),
-                                              tr("Text Editor"));
+                                              tr("Text Editor"),
+                                              this);
     pm->addObject(m_fontSettingsPage);
 
-    // Add the GUI used to configure the tab, storage and display settings
-    TextEditor::GeneralSettingsPageParameters generalSettingsPageParameters;
-    generalSettingsPageParameters.name = tr("General");
-    generalSettingsPageParameters.category = QLatin1String("TextEditor");
-    generalSettingsPageParameters.trCategory = tr("Text Editor");
-    generalSettingsPageParameters.settingsPrefix = QLatin1String("text");
-    m_generalSettingsPage = new GeneralSettingsPage(generalSettingsPageParameters, this);
-    pm->addObject(m_generalSettingsPage);
+    // Add the GUI used to configure the tab, storage and interaction settings
+    TextEditor::BehaviorSettingsPageParameters behaviorSettingsPageParameters;
+    behaviorSettingsPageParameters.name = tr("Behavior");
+    behaviorSettingsPageParameters.category = QLatin1String("TextEditor");
+    behaviorSettingsPageParameters.trCategory = tr("Text Editor");
+    behaviorSettingsPageParameters.settingsPrefix = QLatin1String("text");
+    m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this);
+    pm->addObject(m_behaviorSettingsPage);
+
+    TextEditor::DisplaySettingsPageParameters displaySettingsPageParameters;
+    displaySettingsPageParameters.name = tr("Display");
+    displaySettingsPageParameters.category = QLatin1String("TextEditor");
+    displaySettingsPageParameters.trCategory = tr("Text Editor");
+    displaySettingsPageParameters.settingsPrefix = QLatin1String("text");
+    m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this);
+    pm->addObject(m_displaySettingsPage);
 
     connect(m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)),
             this, SIGNAL(fontSettingsChanged(TextEditor::FontSettings)));
-    connect(m_generalSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)),
+    connect(m_behaviorSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)),
             this, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)));
-    connect(m_generalSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)),
+    connect(m_behaviorSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)),
             this, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)));
-    connect(m_generalSettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
+    connect(m_displaySettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
             this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)));
 }
 
 TextEditorSettings::~TextEditorSettings()
 {
     ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
-    pm->removeObject(m_generalSettingsPage);
     pm->removeObject(m_fontSettingsPage);
-    delete m_fontSettingsPage;
+    pm->removeObject(m_behaviorSettingsPage);
+    pm->removeObject(m_displaySettingsPage);
 
     m_instance = 0;
 }
@@ -137,15 +147,15 @@ FontSettings TextEditorSettings::fontSettings() const
 
 TabSettings TextEditorSettings::tabSettings() const
 {
-    return m_generalSettingsPage->tabSettings();
+    return m_behaviorSettingsPage->tabSettings();
 }
 
 StorageSettings TextEditorSettings::storageSettings() const
 {
-    return m_generalSettingsPage->storageSettings();
+    return m_behaviorSettingsPage->storageSettings();
 }
 
 DisplaySettings TextEditorSettings::displaySettings() const
 {
-    return m_generalSettingsPage->displaySettings();
+    return m_displaySettingsPage->displaySettings();
 }
diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h
index efaec3176b28fa7d7f716b59dc7fb4b52c9095e5..f90fa676ee1d1dc21a0b2927093a887553075992 100644
--- a/src/plugins/texteditor/texteditorsettings.h
+++ b/src/plugins/texteditor/texteditorsettings.h
@@ -40,7 +40,8 @@
 
 namespace TextEditor {
 
-class GeneralSettingsPage;
+class BehaviorSettingsPage;
+class DisplaySettingsPage;
 class FontSettingsPage;
 class FontSettings;
 struct TabSettings;
@@ -74,8 +75,9 @@ signals:
     void displaySettingsChanged(const TextEditor::DisplaySettings &);
 
 private:
-    TextEditor::FontSettingsPage *m_fontSettingsPage;
-    TextEditor::GeneralSettingsPage *m_generalSettingsPage;
+    FontSettingsPage *m_fontSettingsPage;
+    BehaviorSettingsPage *m_behaviorSettingsPage;
+    DisplaySettingsPage *m_displaySettingsPage;
 
     static TextEditorSettings *m_instance;
 };
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index b719915c4793f79212d906155feecc5fb4bc693c..98fa2111dc92f681f17ee2ef3a5df2e73a260fb2 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -145,14 +145,33 @@ void testQByteArray()
 
 void testQHash()
 {
+#if 1
     QHash<int, float> hgg0;
     hgg0[11] = 11.0;
     hgg0[22] = 22.0;
+    hgg0[22] = 22.0;
+    hgg0[22] = 22.0;
+    hgg0[22] = 22.0;
+    hgg0[22] = 22.0;
+    hgg0[22] = 22.0;
 
+#endif
+
+#if 1
 
     QHash<QString, float> hgg1;
     hgg1["22.0"] = 22.0;
+    hgg1["23.0"] = 22.0;
+    hgg1["24.0"] = 22.0;
+    hgg1["25.0"] = 22.0;
+    hgg1["26.0"] = 22.0;
+    hgg1["27.0"] = 27.0;
+    hgg1["28.0"] = 28.0;
+    hgg1["29.0"] = 29.0;
+
+#endif
 
+#if 1
     QHash<int, QString> hgg2;
     hgg2[22] = "22.0";
 
@@ -165,6 +184,7 @@ void testQHash()
     hash.insert("Hallo", QPointer<QObject>(&ob));
     hash.insert("Welt", QPointer<QObject>(&ob));
     hash.insert(".", QPointer<QObject>(&ob));
+#endif
 }
 
 void testQImage()
@@ -224,7 +244,6 @@ void testQLinkedList()
     f.append(Foo(1));
     f.append(Foo(2));
 #endif
-
     QLinkedList<std::string> v;
     v.push_back("aa");
     v.push_back("bb");
@@ -238,7 +257,7 @@ void testQList()
     QList<int> li;
     QList<uint> lu;
 
-    for (int i = 0; i != 3; ++i) {
+    for (int i = 0; i != 30; ++i) {
         li.append(i);
     }
     li.append(101);