diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index c70e3b75a4383943092ccea033c0350d57a656ce..d39fd8ddb49ab68284c360393b67efc2b3e23db8 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -216,7 +216,7 @@ QT_END_NAMESPACE
 // comma-separated integer list
 static char qDumpInBuffer[10000];
 static char qDumpOutBuffer[100000];
-static char qDumpSize[20];
+//static char qDumpSize[20];
 
 namespace {
 
@@ -311,7 +311,16 @@ static bool isSimpleType(const char *type)
 
 static bool isShortKey(const char *type)
 {
-    return isSimpleType(type) || isEqual(type, "QString");
+    return isSimpleType(type) || isEqual(type, NS"QString");
+}
+
+static bool isStringType(const char *type)
+{
+    return isEqual(type, NS"QString")
+        || isEqual(type, NS"QByteArray")
+        || isEqual(type, "std::string")
+        || isEqual(type, "std::wstring")
+        || isEqual(type, "wstring");
 }
 
 static bool isMovableType(const char *type)
@@ -704,44 +713,45 @@ static void qDumpUnknown(QDumper &d)
 }
 
 static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr,
-    const char *key = "value")
+    const char *field = "value")
 {
     type = stripNamespace(type);
     switch (type[1]) {
         case 'l':
             if (isEqual(type, "float"))
-                P(d, key, *(float*)addr);
+                P(d, field, *(float*)addr);
             return;
         case 'n':
             if (isEqual(type, "int"))
-                P(d, key, *(int*)addr);
+                P(d, field, *(int*)addr);
             else if (isEqual(type, "unsigned"))
-                P(d, key, *(unsigned int*)addr);
+                P(d, field, *(unsigned int*)addr);
             else if (isEqual(type, "unsigned int"))
-                P(d, key, *(unsigned int*)addr);
+                P(d, field, *(unsigned int*)addr);
             else if (isEqual(type, "unsigned long"))
-                P(d, key, *(unsigned long*)addr);
+                P(d, field, *(unsigned long*)addr);
             else if (isEqual(type, "unsigned long long"))
-                P(d, key, *(qulonglong*)addr);
+                P(d, field, *(qulonglong*)addr);
             return;
         case 'o':
             if (isEqual(type, "bool"))
                 switch (*(bool*)addr) {
-                    case 0: P(d, key, "false"); break;
-                    case 1: P(d, key, "true"); break;
-                    default: P(d, key, *(bool*)addr); break;
+                    case 0: P(d, field, "false"); break;
+                    case 1: P(d, field, "true"); break;
+                    default: P(d, field, *(bool*)addr); break;
                 }
             else if (isEqual(type, "double"))
-                P(d, key, *(double*)addr);
+                P(d, field, *(double*)addr);
             else if (isEqual(type, "long"))
-                P(d, key, *(long*)addr);
+                P(d, field, *(long*)addr);
             else if (isEqual(type, "long long"))
-                P(d, key, *(qulonglong*)addr);
+                P(d, field, *(qulonglong*)addr);
             return;
         case 'B':
             if (isEqual(type, "QByteArray")) {
-                d << key << "encoded=\"1\",";
-                P(d, key, *(QByteArray*)addr);
+                d.addCommaIfNeeded();
+                d << field << "encoded=\"1\",";
+                P(d, field, *(QByteArray*)addr);
             }
             return;
         case 'L':
@@ -769,8 +779,9 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr
             return;
         case 'S':
             if (isEqual(type, "QString")) {
-                d << key << "encoded=\"1\",";
-                P(d, key, *(QString*)addr);
+                d.addCommaIfNeeded();
+                d << field << "encoded=\"1\",";
+                P(d, field, *(QString*)addr);
             }
             return;
         default:
@@ -1086,13 +1097,17 @@ static void qDumpQHash(QDumper &d)
     if (d.dumpChildren) {
         if (n > 1000)
             n = 1000;
-        bool simpleKey = isShortKey(keyType);
-        bool simpleValue = isShortKey(valueType);
+        bool isSimpleKey = isSimpleType(keyType);
+        bool isStringKey = isStringType(keyType);
+        bool isSimpleValue = isSimpleType(valueType);
         bool opt = isOptimizedIntKey(keyType);
         int keyOffset = hashOffset(opt, true, keySize, valueSize);
         int valueOffset = hashOffset(opt, false, keySize, valueSize);
 
-        P(d, "extra", "simplekey: " << simpleKey << " simpleValue: " << simpleValue
+        P(d, "extra", "isSimpleKey: " << isSimpleKey
+            << " isStringKey: " << isStringKey
+            << " isSimpleValue: " << isSimpleValue
+            << " valueType: '" << valueType << "'"
             << " keySize: " << keyOffset << " valueOffset: " << valueOffset
             << " opt: " << opt);
 
@@ -1103,18 +1118,17 @@ static void qDumpQHash(QDumper &d)
         d << ",children=[";
         while (node != end) {
             d.beginHash();
-                if (simpleKey) {
-                    P(d, "name", i);
-                    qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key");
-                    if (simpleValue)
-                        qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
+                P(d, "name", i);
+                qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key");
+                qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
+                if (isSimpleKey && isSimpleValue) {
                     P(d, "type", valueType);
                     P(d, "addr", addOffset(node, valueOffset));
                 } else {
-                    P(d, "name", i);
-                    //P(d, "exp", "*(char*)" << node);
-                    P(d, "exp", "*('"NS"QHashNode<" << keyType << "," << valueType << " >'*)" << node);
-                    P(d, "type", "'"NS"QHashNode<" << keyType << "," << valueType << " >'");
+                    P(d, "exp", "*('"NS"QHashNode<" << keyType << ","
+                        << valueType << " >'*)" << node);
+                    P(d, "type", "'"NS"QHashNode<" << keyType << ","
+                        << valueType << " >'");
                 }
             d.endHash();
             ++i;
@@ -1262,8 +1276,8 @@ static void qDumpQLinkedList(QDumper &d)
     P(d, "numchild", n);
     P(d, "childtype", d.innertype);
     if (d.dumpChildren) {
-        unsigned innerSize = d.extraInt[0];
-        bool innerTypeIsPointer = isPointerType(d.innertype);
+        //unsigned innerSize = d.extraInt[0];
+        //bool innerTypeIsPointer = isPointerType(d.innertype);
         QByteArray strippedInnerType = stripPointerType(d.innertype);
         const char *stripped =
             isPointerType(d.innertype) ? strippedInnerType.data() : 0;
@@ -1397,13 +1411,13 @@ static void qDumpQMap(QDumper &d)
         unsigned mapnodesize = d.extraInt[2];
         unsigned valueOff = d.extraInt[3];
 
-        bool simpleKey = isShortKey(keyType);
-        bool simpleValue = isShortKey(valueType);
+        bool isSimpleKey = isShortKey(keyType);
+        bool isSimpleValue = isShortKey(valueType);
         // both negative:
         int keyOffset = 2 * sizeof(void*) - int(mapnodesize);
         int valueOffset = 2 * sizeof(void*) - int(mapnodesize) + valueOff;
 
-        P(d, "extra", "simplekey: " << simpleKey << " simpleValue: " << simpleValue
+        P(d, "extra", "simplekey: " << isSimpleKey << " isSimpleValue: " << isSimpleValue
             << " keyOffset: " << keyOffset << " valueOffset: " << valueOffset
             << " mapnodesize: " << mapnodesize);
         d << ",children=[";
@@ -1415,10 +1429,10 @@ static void qDumpQMap(QDumper &d)
         while (node != end) {
             d.beginHash();
                 P(d, "name", i);
-                if (simpleKey) {
+                if (isSimpleKey) {
                     P(d, "type", valueType);
                     qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key");
-                    if (simpleValue)
+                    if (isSimpleValue)
                         qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
 
                     P(d, "type", valueType);
@@ -2199,26 +2213,30 @@ static void qDumpStdMap(QDumper &d)
     P(d, "pairtype", pairType);
     
     if (d.dumpChildren) {
-        bool simpleKey = isSimpleType(keyType);
-        bool simpleValue = isShortKey(valueType);
+        bool isSimpleKey = isSimpleType(keyType);
+        bool isStringKey = isStringType(keyType);
+        bool isSimpleValue = isShortKey(valueType);
         int valueOffset = d.extraInt[2];
 
         d << ",children=[";
         it = map.begin();
         for (int i = 0; i < 1000 && it != map.end(); ++i, ++it) {
             const void *node = it.operator->();
-            if (simpleKey) {
+            if (isSimpleKey) {
                 d.beginHash();
                 P(d, "type", valueType);
-                qDumpInnerValueHelper(d, keyType, node, "name");
+                P(d, "name", i);
+                qDumpInnerValueHelper(d, keyType, node, "key");
                 P(d, "nameisindex", "1");
-                if (simpleValue)
+                if (isSimpleValue)
                     qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
                 P(d, "addr", addOffset(node, valueOffset));
                 d.endHash();
             } else {
                 d.beginHash();
                 P(d, "name", i);
+                if (isStringKey)
+                    qDumpInnerValueHelper(d, keyType, node, "key");
                 P(d, "addr", it.operator->());
                 P(d, "type", pairType);
                 d.endHash();
diff --git a/share/share.pri b/share/share.pri
index ece603de4163ac078b18ed4feb19bf54f86ee35b..35c84568b9e839ec2997ec2700ffd8897b63f089 100644
--- a/share/share.pri
+++ b/share/share.pri
@@ -17,7 +17,7 @@ macx {
     QMAKE_INFO_PLIST = $$PWD/qtcreator/Info.plist
 }
 
-win32 {
+win32|linux-* {
     # make sure the resources are in place
     !exists($$OUT_PWD/app.pro) {
         unix:SEPARATOR = ;
@@ -28,10 +28,11 @@ win32 {
                    designer \
                    schemes \
                    gdbmacros
-        COPYDEST = $${OUT_PWD}/../../bin
+        COPYDEST = $${OUT_PWD}/../../share/qtcreator
         win32:COPYDEST ~= s|/+|\|
+        QMAKE_POST_LINK += $${QMAKE_MKDIR} $$COPYDEST $$SEPARATOR
         for(tmp,COPYSRC) {
-          REALSRC = $$PWD/$$tmp
+          REALSRC = $$PWD/qtcreator/$$tmp
           REALDEST = $$COPYDEST/$$tmp
           win32:tmp ~= s|/+|\|
           win32:REALSRC ~= s|/+|\|
diff --git a/src/plugins/coreplugin/progressmanager/progressview.cpp b/src/plugins/coreplugin/progressmanager/progressview.cpp
index cee81c697b0735042f4e2713272d0d3f69e9782d..6d9f6e952c08f36947e3eb74f3d59adef2b0885f 100644
--- a/src/plugins/coreplugin/progressmanager/progressview.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressview.cpp
@@ -99,6 +99,7 @@ void ProgressView::deleteTask(FutureProgress *progress)
     m_type.remove(progress);
     m_keep.remove(progress);
     layout()->removeWidget(progress);
+    progress->hide();
     progress->deleteLater();
 }
 
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index c559bcb2c1ca351716f03c6e369ab560e030bdae..aab7dc1025e0ca1edb503fcee20ea845ea0365d5 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -2761,14 +2761,17 @@ static void setWatchDataValue(WatchData &data, const GdbMi &mi,
                 break;
             case 1: //  base64 encoded 8 bit data
                 ba = QByteArray::fromBase64(mi.data());
+                ba = '"' + ba + '"';
                 break;
             case 2: //  base64 encoded 16 bit data
                 ba = QByteArray::fromBase64(mi.data());
                 ba = QString::fromUtf16((ushort *)ba.data(), ba.size() / 2).toUtf8();
+                ba = '"' + ba + '"';
                 break;
             case 3: //  base64 encoded 32 bit data
                 ba = QByteArray::fromBase64(mi.data());
                 ba = QString::fromUcs4((uint *)ba.data(), ba.size() / 4).toUtf8();
+                ba = '"' + ba + '"';
                 break;
         }
        data.setValue(ba);
@@ -2830,9 +2833,12 @@ static bool extractTemplate(const QString &type, QString *tmplate, QString *inne
     // 'tmplate' and "Inner1@Inner2@..." etc in 'inner'. Result indicates
     // whether parsing was successful
     int level = 0;
+    bool skipSpace = false;
     for (int i = 0; i != type.size(); ++i) {
         QChar c = type[i];
-        if (c == '<') {
+        if (c == ' ' && skipSpace) {
+            skipSpace = false;
+        } else if (c == '<') {
             *(level == 0 ? tmplate : inner) += c;
             ++level;
         } else if (c == '>') {
@@ -2840,6 +2846,7 @@ static bool extractTemplate(const QString &type, QString *tmplate, QString *inne
             *(level == 0 ? tmplate : inner) += c;
         } else if (c == ',') {
             *inner += (level == 1) ? '@' : ',';
+            skipSpace = true;
         } else {
             *(level == 0 ? tmplate : inner) += c;
         }
@@ -3550,13 +3557,18 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record,
         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 + ")";
+        if (!key.isEmpty()) {
+            if (item.findChild("keyencoded").data()[0] == '1') {
+                key = '"' + QByteArray::fromBase64(key.toUtf8()) + '"';
+                if (key.size() > 13) {
+                    key = key.left(12);
+                    key += "...";
+                }
+            }
+            //data1.name += " (" + key + ")";
+            data1.name = key;
+        }
         setWatchDataType(data1, item.findChild("type"));
         setWatchDataExpression(data1, item.findChild("exp"));
         setWatchDataChildCount(data1, item.findChild("numchild"));
diff --git a/src/plugins/help/centralwidget.cpp b/src/plugins/help/centralwidget.cpp
index f18795c3d39a762dd96bdac5fd334af88c8b2e6f..a944efa29b3af5a28c0f1f8306d7360f22e8f68f 100644
--- a/src/plugins/help/centralwidget.cpp
+++ b/src/plugins/help/centralwidget.cpp
@@ -61,6 +61,8 @@
 
 #include <QtHelp/QHelpEngine>
 
+#include <coreplugin/coreconstants.h>
+
 using namespace Help::Internal;
 
 namespace {
@@ -228,20 +230,23 @@ void CentralWidget::setSource(const QUrl &url)
 
 void CentralWidget::setLastShownPages()
 {
-    const QStringList lastShownPageList = helpEngine->customValue(QLatin1String("LastShownPages")).
-        toString().split(QLatin1Char('|'), QString::SkipEmptyParts);
+    const QStringList lastShownPageList =
+        helpEngine->customValue(QLatin1String("LastShownPages")). toString().
+        split(QLatin1Char('|'), QString::SkipEmptyParts);
 
     if (!lastShownPageList.isEmpty()) {
-        foreach (const QString page, lastShownPageList)
+        foreach (const QString& page, lastShownPageList)
             setSourceInNewTab(page);
 
-        tabWidget->setCurrentIndex(helpEngine->customValue(QLatin1String("LastTabPage"), 0).toInt());
+        tabWidget->setCurrentIndex(helpEngine->
+            customValue(QLatin1String("LastTabPage"), 0).toInt());
     } else {
-        QUrl url = helpEngine->findFile(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html"));
-        if (url.isValid())
-            setSource(url);
-        else
-            setSource(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html"));
+        QUrl url(helpEngine->findFile(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html")));
+        if (!url.isValid()) {
+            url.setUrl(QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").
+                arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
+        }
+        setSource(url);
     }
 
     updateBrowserFont();
@@ -392,19 +397,33 @@ void CentralWidget::setGlobalActions(const QList<QAction*> &actions)
 {
     globalActionList = actions;
 }
+
 void CentralWidget::setSourceInNewTab(const QUrl &url)
 {
     HelpViewer* viewer = new HelpViewer(helpEngine, this);
     viewer->installEventFilter(this);
     viewer->setSource(url);
     viewer->setFocus(Qt::OtherFocusReason);
-    tabWidget->setCurrentIndex(tabWidget->addTab(viewer, viewer->documentTitle()));
+    tabWidget->setCurrentIndex(tabWidget->addTab(viewer,
+        quoteTabTitle(viewer->documentTitle())));
 
+#if defined(QT_NO_WEBIT)
     QFont font = qApp->font();
     if (helpEngine->customValue(QLatin1String("useBrowserFont")).toBool())
         font = qVariantValue<QFont>(helpEngine->customValue(QLatin1String("browserFont")));
-
     viewer->setFont(font);
+#else
+    QWebView* view = qobject_cast<QWebView*> (viewer);
+    if (view) {
+        QWebSettings* settings = QWebSettings::globalSettings();
+        int fontSize = settings->fontSize(QWebSettings::DefaultFontSize);
+        QString fontFamily = settings->fontFamily(QWebSettings::StandardFont);
+
+        settings = view->settings();
+        settings->setFontSize(QWebSettings::DefaultFontSize, fontSize);
+        settings->setFontFamily(QWebSettings::StandardFont, fontFamily);
+    }
+#endif
 
     connectSignals();
 }
@@ -492,7 +511,7 @@ void CentralWidget::currentPageChanged(int index)
     bool enabled = false;
     if (viewer)
         enabled = tabWidget->count() > 1;
-    
+
     tabWidget->setTabsClosable(enabled);
     tabWidget->cornerWidget(Qt::TopLeftCorner)->setEnabled(true);
 
@@ -595,6 +614,7 @@ bool CentralWidget::eventFilter(QObject *object, QEvent *e)
 
 void CentralWidget::updateBrowserFont()
 {
+#if defined(QT_NO_WEBKIT)
     QFont font = qApp->font();
     if (helpEngine->customValue(QLatin1String("useBrowserFont")).toBool())
         font = qVariantValue<QFont>(helpEngine->customValue(QLatin1String("browserFont")));
@@ -605,9 +625,25 @@ void CentralWidget::updateBrowserFont()
         if (widget->font() != font)
             widget->setFont(font);
     }
+#else
+    QWebSettings* settings = QWebSettings::globalSettings();
+    int fontSize = settings->fontSize(QWebSettings::DefaultFontSize);
+    QString fontFamily = settings->fontFamily(QWebSettings::StandardFont);
+
+    QWebView* widget = 0;
+    for (int i = 0; i < tabWidget->count(); ++i) {
+        widget = qobject_cast<QWebView*> (tabWidget->widget(i));
+        if (widget) {
+            settings = widget->settings();
+            settings->setFontSize(QWebSettings::DefaultFontSize, fontSize);
+            settings->setFontFamily(QWebSettings::StandardFont, fontFamily);
+        }
+    }
+#endif
 }
 
-bool CentralWidget::find(const QString &txt, QTextDocument::FindFlags findFlags, bool incremental)
+bool CentralWidget::find(const QString &txt, QTextDocument::FindFlags findFlags,
+    bool incremental)
 {
     HelpViewer* viewer = currentHelpViewer();
 
@@ -666,7 +702,7 @@ bool CentralWidget::find(const QString &txt, QTextDocument::FindFlags findFlags,
 }
 
 void CentralWidget::showTopicChooser(const QMap<QString, QUrl> &links,
-                                     const QString &keyword)
+    const QString &keyword)
 {
     TopicChooser tc(this, keyword, links);
     if (tc.exec() == QDialog::Accepted)
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index a9d4e2fc20819f5a271e0a7742ebb29d7c018c71..2afd5e5f3b69c91746f18e35e34e6da95ded16a2 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -518,10 +518,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+R")));
     mbuild->addAction(cmd, Constants::G_BUILD_RUN);
 
-    m_runActionContextMenu = new QAction(runIcon, tr("Run"), this);
-    cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext);
-    mproject->addAction(cmd, Constants::G_PROJECT_RUN);
-
     Core::ActionContainer *mrc = am->createMenu(Constants::RUNCONFIGURATIONMENU);
     m_runConfigurationMenu = mrc->menu();
     m_runConfigurationMenu->setTitle(tr("Set Run Configuration"));
@@ -535,6 +531,10 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
 
     modeManager->addAction(cmd, Constants::P_ACTION_RUN, m_runConfigurationMenu);
 
+    m_runActionContextMenu = new QAction(runIcon, tr("Run"), this);
+    cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext);
+    mproject->addAction(cmd, Constants::G_PROJECT_RUN);
+
     // jump to next task
     m_taskAction = new QAction(tr("Go to Task Window"), this);
     m_taskAction->setIcon(QIcon(Core::Constants::ICON_NEXT));
diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index d8c4204ccdf7a008ab76e21bde8363c04c843c3e..a477b921b8ed6ed1c16ef046b420d6a9802a89d4 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -104,6 +104,7 @@ bool QMakeStep::init(const QString &name)
     m_buildConfiguration = name;
     const QtVersion *qtVersion = m_pro->qtVersion(name);
 
+
     if (!qtVersion->isValid()) {
 #if defined(Q_OS_MAC)
         emit addToOutputWindow(tr("\n<font color=\"#ff0000\"><b>No valid Qt version set. Set one in Preferences </b></font>\n"));
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index 3ff03bcc28a305115a3828fed94b71f780f7b475..6503e9b3a9883a8272954fb634fbb2d7861884c8 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -46,6 +46,7 @@
 
 #include <QtGui/QFormLayout>
 #include <QtGui/QInputDialog>
+#include <QtGui/QLabel>
 
 using namespace Qt4ProjectManager::Internal;
 using namespace Qt4ProjectManager;
@@ -54,17 +55,27 @@ using ProjectExplorer::PersistentSettingsReader;
 using ProjectExplorer::PersistentSettingsWriter;
 
 Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, QString proFilePath)
-    : ApplicationRunConfiguration(pro), m_proFilePath(proFilePath), m_userSetName(false)
+    : ApplicationRunConfiguration(pro),
+      m_proFilePath(proFilePath),
+      m_userSetName(false),
+      m_configWidget(0),
+      m_executableLabel(0),
+      m_workingDirectoryLabel(0)
 {
     setName(tr("Qt4RunConfiguration"));
     if (!m_proFilePath.isEmpty()) {
         updateCachedValues();
         setName(QFileInfo(m_proFilePath).baseName());
     }
+    connect(pro, SIGNAL(activeBuildConfigurationChanged()),
+            this, SIGNAL(effectiveExecutableChanged()));
+    connect(pro, SIGNAL(activeBuildConfigurationChanged()),
+            this, SIGNAL(effectiveWorkingDirectoryChanged()));
 }
 
 Qt4RunConfiguration::~Qt4RunConfiguration()
 {
+
 }
 
 QString Qt4RunConfiguration::type() const
@@ -72,37 +83,92 @@ QString Qt4RunConfiguration::type() const
     return "Qt4ProjectManager.Qt4RunConfiguration";
 }
 
-QWidget *Qt4RunConfiguration::configurationWidget()
+
+//////
+/// Qt4RunConfigurationWidget
+/////
+
+Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4RunConfiguration, QWidget *parent)
+    : QWidget(parent), m_qt4RunConfiguration(qt4RunConfiguration), m_ignoreChange(false)
 {
-    QWidget *configWidget = new QWidget;
-    QFormLayout *toplayout = new QFormLayout(configWidget);
+    QFormLayout *toplayout = new QFormLayout(this);
     toplayout->setMargin(0);
 
     QLabel *nameLabel = new QLabel(tr("Name:"));
-    QLineEdit *nameLineEdit = new QLineEdit(name());
-    nameLabel->setBuddy(nameLineEdit);
-    toplayout->addRow(nameLabel, nameLineEdit);
+    m_nameLineEdit = new QLineEdit(m_qt4RunConfiguration->name());
+    nameLabel->setBuddy(m_nameLineEdit);
+    toplayout->addRow(nameLabel, m_nameLineEdit);
 
-    QLabel *executableLabel = new QLabel(tr("Executable:"));
-    QLabel *executableLabel2 = new QLabel(executable());
-    toplayout->addRow(executableLabel, executableLabel2);
+    m_executableLabel = new QLabel(m_qt4RunConfiguration->executable());
+    toplayout->addRow(tr("Executable:"), m_executableLabel);
 
-    QLabel *workingDirectoryLabel = new QLabel(tr("Working Directory:"));
-    QLabel *workingDirectoryLabel2 = new QLabel(workingDirectory());
-    toplayout->addRow(workingDirectoryLabel, workingDirectoryLabel2);
+    m_workingDirectoryLabel = new QLabel(m_qt4RunConfiguration->workingDirectory());
+    toplayout->addRow(tr("Working Directory:"), m_workingDirectoryLabel);
 
     QLabel *argumentsLabel = new QLabel(tr("&Arguments:"));
-    QLineEdit *argumentsLineEdit = new QLineEdit(ProjectExplorer::Environment::joinArgumentList(commandLineArguments()));
-    argumentsLabel->setBuddy(argumentsLineEdit);
-    toplayout->addRow(argumentsLabel, argumentsLineEdit);
+    m_argumentsLineEdit = new QLineEdit(ProjectExplorer::Environment::joinArgumentList(qt4RunConfiguration->commandLineArguments()));
+    argumentsLabel->setBuddy(m_argumentsLineEdit);
+    toplayout->addRow(argumentsLabel, m_argumentsLineEdit);
 
-    connect(argumentsLineEdit, SIGNAL(textEdited(const QString&)),
+    connect(m_argumentsLineEdit, SIGNAL(textEdited(const QString&)),
             this, SLOT(setCommandLineArguments(const QString&)));
 
-    connect(nameLineEdit, SIGNAL(textEdited(const QString&)),
+    connect(m_nameLineEdit, SIGNAL(textEdited(const QString&)),
             this, SLOT(nameEdited(const QString&)));
 
-    return configWidget;
+    connect(qt4RunConfiguration, SIGNAL(commandLineArgumentsChanged(QString)),
+            this, SLOT(commandLineArgumentsChanged(QString)));
+    connect(qt4RunConfiguration, SIGNAL(nameChanged(QString)),
+            this, SLOT(nameChanged(QString)));
+
+    connect(qt4RunConfiguration, SIGNAL(effectiveExecutableChanged()),
+            this, SLOT(effectiveExecutableChanged()));
+    connect(qt4RunConfiguration, SIGNAL(effectiveWorkingDirectoryChanged()),
+            this, SLOT(effectiveWorkingDirectoryChanged()));
+
+}
+
+void Qt4RunConfigurationWidget::setCommandLineArguments(const QString &args)
+{
+    m_ignoreChange = true;
+    m_qt4RunConfiguration->setCommandLineArguments(args);
+    m_ignoreChange = false;
+}
+
+void Qt4RunConfigurationWidget::nameEdited(const QString &name)
+{
+    m_ignoreChange = true;
+    m_qt4RunConfiguration->nameEdited(name);
+    m_ignoreChange = false;
+}
+
+void Qt4RunConfigurationWidget::commandLineArgumentsChanged(const QString &args)
+{
+    if (!m_ignoreChange)
+        m_argumentsLineEdit->setText(args);
+}
+
+void Qt4RunConfigurationWidget::nameChanged(const QString &name)
+{
+    if (!m_ignoreChange)
+        m_nameLineEdit->setText(name);
+}
+
+void Qt4RunConfigurationWidget::effectiveExecutableChanged()
+{
+    m_executableLabel->setText(m_qt4RunConfiguration->executable());
+}
+
+void Qt4RunConfigurationWidget::effectiveWorkingDirectoryChanged()
+{
+    m_workingDirectoryLabel->setText(m_qt4RunConfiguration->workingDirectory());
+}
+
+////// TODO c&p above
+
+QWidget *Qt4RunConfiguration::configurationWidget()
+{
+    return new Qt4RunConfigurationWidget(this, 0);
 }
 
 void Qt4RunConfiguration::save(PersistentSettingsWriter &writer) const
@@ -156,6 +222,7 @@ ProjectExplorer::Environment Qt4RunConfiguration::environment() const
 void Qt4RunConfiguration::setCommandLineArguments(const QString &argumentsString)
 {
     m_commandLineArguments = ProjectExplorer::Environment::parseCombinedArgString(argumentsString);
+    emit commandLineArgumentsChanged(argumentsString);
 }
 
 void Qt4RunConfiguration::nameEdited(const QString &name)
@@ -167,6 +234,7 @@ void Qt4RunConfiguration::nameEdited(const QString &name)
         setName(name);
         m_userSetName = true;
     }
+    emit nameChanged(name);
 }
 
 QString Qt4RunConfiguration::proFilePath() const
@@ -222,6 +290,9 @@ void Qt4RunConfiguration::updateCachedValues()
     m_runMode = ProjectExplorer::ApplicationRunConfiguration::Gui;
 
     delete reader;
+
+    emit effectiveExecutableChanged();
+    emit effectiveWorkingDirectoryChanged();
 }
 
 QString Qt4RunConfiguration::resolveVariables(const QString &buildConfiguration, const QString& in) const
@@ -310,7 +381,7 @@ QString Qt4RunConfiguration::qmakeBuildConfigFromBuildConfiguration(const QStrin
         else
             return "release";
     } else {
-        // Old sytle always CONFIG+=debug_and_release
+        // Old style always CONFIG+=debug_and_release
         if (qobject_cast<Qt4Project *>(project())->qtVersion(buildConfigurationName)->defaultBuildConfig() & QtVersion::DebugBuild)
             return "debug";
         else
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index c51ac521fe53fbe9d3b3b957d78b61598860bef0..ce1d44769e0a13f081ae49c5b8a3af1382f9e8ab 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -36,6 +36,11 @@
 
 #include <projectexplorer/applicationrunconfiguration.h>
 #include <QtCore/QStringList>
+#include <QtGui/QWidget>
+
+class QWidget;
+class QLabel;
+class QLineEdit;
 
 namespace Qt4ProjectManager {
 
@@ -45,9 +50,13 @@ namespace Internal {
 
 class Qt4ProFileNode;
 
+
+
 class Qt4RunConfiguration : public ProjectExplorer::ApplicationRunConfiguration
 {
     Q_OBJECT
+    // to change the name and arguments
+    friend class Qt4RunConfigurationWidget;
 public:
     Qt4RunConfiguration(Qt4Project *pro, QString proFilePath);
     virtual ~Qt4RunConfiguration();
@@ -68,6 +77,14 @@ public:
     // Should just be called from qt4project, since that knows that the file changed on disc
     void updateCachedValues();
 
+signals:
+    void nameChanged(const QString&);
+    void commandLineArgumentsChanged(const QString&);
+
+    // note those signals might not emited for every change
+    void effectiveExecutableChanged();
+    void effectiveWorkingDirectoryChanged();
+
 private slots:
     void setCommandLineArguments(const QString &argumentsString);
     void nameEdited(const QString&);
@@ -88,6 +105,31 @@ private:
     QString m_workingDir;
     ProjectExplorer::ApplicationRunConfiguration::RunMode m_runMode;
     bool m_userSetName;
+    QWidget *m_configWidget;
+    QLabel *m_executableLabel;
+    QLabel *m_workingDirectoryLabel;
+};
+
+class Qt4RunConfigurationWidget : public QWidget
+{
+    Q_OBJECT
+public:
+    Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4runconfigration, QWidget *parent);
+private slots:
+    void setCommandLineArguments(const QString &arguments);
+    void nameEdited(const QString &name);
+    // TODO connect to signals from qt4runconfiguration for changed arguments and names
+    void commandLineArgumentsChanged(const QString &args);
+    void nameChanged(const QString &name);
+    void effectiveExecutableChanged();
+    void effectiveWorkingDirectoryChanged();
+private:
+    Qt4RunConfiguration *m_qt4RunConfiguration;
+    bool m_ignoreChange;
+    QLabel *m_executableLabel;
+    QLabel *m_workingDirectoryLabel;
+    QLineEdit *m_nameLineEdit;
+    QLineEdit *m_argumentsLineEdit;
 };
 
 class Qt4RunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory
diff --git a/src/shared/qrceditor/qrceditor.cpp b/src/shared/qrceditor/qrceditor.cpp
index e4f04c9762e71de5d38d6b90906d8a637d8464d1..a353d73839496d20f4368e746b68a1b345a9656c 100644
--- a/src/shared/qrceditor/qrceditor.cpp
+++ b/src/shared/qrceditor/qrceditor.cpp
@@ -151,21 +151,28 @@ void QrcEditor::updateCurrent()
     const bool isValid = m_treeview->currentIndex().isValid();
     const bool isPrefix = m_treeview->isPrefix(m_treeview->currentIndex()) && isValid;
     const bool isFile = !isPrefix && isValid;
+    int cursorPosition;
 
     m_ui.aliasLabel->setEnabled(isFile);
     m_ui.aliasText->setEnabled(isFile);
     m_currentAlias = m_treeview->currentAlias();
+    cursorPosition = m_ui.aliasText->cursorPosition();
     m_ui.aliasText->setText(m_currentAlias);
+    m_ui.aliasText->setCursorPosition(cursorPosition);
 
     m_ui.prefixLabel->setEnabled(isPrefix);
     m_ui.prefixText->setEnabled(isPrefix);
     m_currentPrefix = m_treeview->currentPrefix();
+    cursorPosition = m_ui.prefixText->cursorPosition();
     m_ui.prefixText->setText(m_currentPrefix);
+    m_ui.prefixText->setCursorPosition(cursorPosition);
 
     m_ui.languageLabel->setEnabled(isPrefix);
     m_ui.languageText->setEnabled(isPrefix);
     m_currentLanguage = m_treeview->currentLanguage();
+    cursorPosition = m_ui.languageText->cursorPosition();
     m_ui.languageText->setText(m_currentLanguage);
+    m_ui.languageText->setCursorPosition(cursorPosition);
 
     m_ui.addButton->setEnabled(true);
     m_addFileAction->setEnabled(isValid);
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index 98fa2111dc92f681f17ee2ef3a5df2e73a260fb2..76eadf2d9fdc8df681a926d7bdc9dfc467c5e071 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -159,16 +159,27 @@ void testQHash()
 
 #if 1
 
-    QHash<QString, float> hgg1;
+    QHash<QString, int> 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;
-
+    hgg1["123.0"] = 22.0;
+    hgg1["111111ss111128.0"] = 28.0;
+    hgg1["11124.0"] = 22.0;
+    hgg1["1111125.0"] = 22.0;
+    hgg1["11111126.0"] = 22.0;
+    hgg1["111111127.0"] = 27.0;
+    hgg1["111111111128.0"] = 28.0;
+    hgg1["111111111111111111129.0"] = 29.0;
+
+    QHash<QByteArray, float> hgx1;
+    hgx1["22.0"] = 22.0;
+    hgx1["123.0"] = 22.0;
+    hgx1["111111ss111128.0"] = 28.0;
+    hgx1["11124.0"] = 22.0;
+    hgx1["1111125.0"] = 22.0;
+    hgx1["11111126.0"] = 22.0;
+    hgx1["111111127.0"] = 27.0;
+    hgx1["111111111128.0"] = 28.0;
+    hgx1["111111111111111111129.0"] = 29.0;
 #endif
 
 #if 1