diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 5576b36c6f2991e1f41ee6e1fdb7aea05e415086..eca4db27ec3c96d120a026fa4aba1cfd0b8863f4 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 {
 
@@ -309,10 +309,16 @@ static bool isSimpleType(const char *type)
     return false;
 }
 
-static bool isShortKey(const char *type)
+#if 0
+static bool isStringType(const char *type)
 {
-    return isSimpleType(type) || isEqual(type, NS"QString");
+    return isEqual(type, NS"QString")
+        || isEqual(type, NS"QByteArray")
+        || isEqual(type, "std::string")
+        || isEqual(type, "std::wstring")
+        || isEqual(type, "wstring");
 }
+#endif
 
 static bool isMovableType(const char *type)
 {
@@ -555,7 +561,7 @@ void QDumper::addCommaIfNeeded()
         put(',');
 }
 
-void QDumper::putBase64Encoded(const char *buf, int n, char delim)
+void QDumper::putBase64Encoded(const char *buf, int n)
 {
     const char alphabet[] = "ABCDEFGH" "IJKLMNOP" "QRSTUVWX" "YZabcdef"
                             "ghijklmn" "opqrstuv" "wxyz0123" "456789+/";
@@ -740,6 +746,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr
             return;
         case 'B':
             if (isEqual(type, "QByteArray")) {
+                d.addCommaIfNeeded();
                 d << field << "encoded=\"1\",";
                 P(d, field, *(QByteArray*)addr);
             }
@@ -769,6 +776,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr
             return;
         case 'S':
             if (isEqual(type, "QString")) {
+                d.addCommaIfNeeded();
                 d << field << "encoded=\"1\",";
                 P(d, field, *(QString*)addr);
             }
@@ -1086,13 +1094,15 @@ 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 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
+            << " isSimpleValue: " << isSimpleValue
+            << " valueType: '" << isSimpleValue
             << " keySize: " << keyOffset << " valueOffset: " << valueOffset
             << " opt: " << opt);
 
@@ -1103,18 +1113,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;
@@ -1131,15 +1140,18 @@ static void qDumpQHashNode(QDumper &d)
     const char *keyType   = d.templateParameters[0];
     const char *valueType = d.templateParameters[1];
 
-    P(d, "value", "");
+    unsigned keySize = d.extraInt[0];
+    unsigned valueSize = d.extraInt[1];
+    bool opt = isOptimizedIntKey(keyType);
+    int keyOffset = hashOffset(opt, true, keySize, valueSize);
+    int valueOffset = hashOffset(opt, false, keySize, valueSize);
+    if (isSimpleType(valueType)) 
+        qDumpInnerValueHelper(d, valueType, addOffset(h, valueOffset));
+    else
+        P(d, "value", "");
+
     P(d, "numchild", 2);
     if (d.dumpChildren) {
-        unsigned keySize = d.extraInt[0];
-        unsigned valueSize = d.extraInt[1];
-        bool opt = isOptimizedIntKey(keyType);
-        int keyOffset = hashOffset(opt, true, keySize, valueSize);
-        int valueOffset = hashOffset(opt, false, keySize, valueSize);
-
         // there is a hash specialization in cast the key are integers or shorts
         d << ",children=[";
         d.beginHash();
@@ -1262,8 +1274,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 +1409,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 = isSimpleType(keyType);
+        bool isSimpleValue = isSimpleType(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,12 +1427,9 @@ static void qDumpQMap(QDumper &d)
         while (node != end) {
             d.beginHash();
                 P(d, "name", i);
-                if (simpleKey) {
-                    P(d, "type", valueType);
-                    qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key");
-                    if (simpleValue)
-                        qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
-
+                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 {
@@ -2194,35 +2203,36 @@ static void qDumpStdMap(QDumper &d)
     // (#4, "std::allocator<std::pair<key, value> >")
     // as it is there, and, equally importantly, in an order that
     // gdb accepts when fed with it.
-    char *pairType = (char *)(d.templateParameters[3]) + 16;
+    char *pairType = (char *)(d.templateParameters[3]) + 15;
     pairType[strlen(pairType) - 2] = 0;
     P(d, "pairtype", pairType);
     
     if (d.dumpChildren) {
-        bool simpleKey = isSimpleType(keyType);
-        bool simpleValue = isShortKey(valueType);
+        bool isSimpleKey = isSimpleType(keyType);
+        bool isSimpleValue = isSimpleType(valueType);
         int valueOffset = d.extraInt[2];
 
+        P(d, "extra", "isSimpleKey: " << isSimpleKey
+            << " isSimpleValue: " << isSimpleValue
+            << " valueType: '" << valueType
+            << " valueOffset: " << valueOffset);
+
         d << ",children=[";
         it = map.begin();
         for (int i = 0; i < 1000 && it != map.end(); ++i, ++it) {
-            const void *node = it.operator->();
-            if (simpleKey) {
-                d.beginHash();
-                P(d, "type", valueType);
-                qDumpInnerValueHelper(d, keyType, node, "name");
-                P(d, "nameisindex", "1");
-                if (simpleValue)
-                    qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
-                P(d, "addr", addOffset(node, valueOffset));
-                d.endHash();
-            } else {
-                d.beginHash();
+            d.beginHash();
+                const void *node = it.operator->();
                 P(d, "name", i);
-                P(d, "addr", it.operator->());
-                P(d, "type", pairType);
-                d.endHash();
-            }
+                qDumpInnerValueHelper(d, keyType, node, "key");
+                qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset));
+                if (isSimpleKey && isSimpleValue) {
+                    P(d, "type", valueType);
+                    P(d, "addr", addOffset(node, valueOffset));
+                } else {
+                    P(d, "addr", node);
+                    P(d, "type", pairType);
+                }
+            d.endHash();
         }
         if (it != map.end())
             d.putEllipsis();
diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp
index 0f83cf1c4cbdfbcfbf025f90e70276ef67c5a5ed..2555399a422b78009760a5f659405e7f2e0e9f4a 100644
--- a/src/libs/utils/pathchooser.cpp
+++ b/src/libs/utils/pathchooser.cpp
@@ -110,7 +110,7 @@ PathChooser::PathChooser(QWidget *parent) :
     connect(m_d->m_lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
     connect(m_d->m_lineEdit, SIGNAL(validChanged()), this, SIGNAL(validChanged()));
 
-    m_d->m_lineEdit->setMinimumWidth(260);
+    m_d->m_lineEdit->setMinimumWidth(200);
     hLayout->addWidget(m_d->m_lineEdit);
     hLayout->setSizeConstraint(QLayout::SetMinimumSize);
 
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 1924de930384f3295f1290e113cc7911634508b8..fa2d2bacbe4320aaa3e6b16d57fbf163ea123d65 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -2833,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 == '>') {
@@ -2843,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;
         }
@@ -2850,7 +2854,7 @@ static bool extractTemplate(const QString &type, QString *tmplate, QString *inne
     *tmplate = tmplate->trimmed();
     *tmplate = tmplate->remove("<>");
     *inner = inner->trimmed();
-    //qDebug() << "EXTRACT TEMPLATE: " << *tmplate << *inner;
+    //qDebug() << "EXTRACT TEMPLATE: " << *tmplate << *inner << " FROM " << type;
     return !inner->isEmpty();
 }
 
@@ -3555,9 +3559,15 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record,
             data1.name = '[' + data1.name + ']';
         QString key = item.findChild("key").data();
         if (!key.isEmpty()) {
-            if (item.findChild("keyencoded").data()[0] == '1')
+            if (item.findChild("keyencoded").data()[0] == '1') {
                 key = '"' + QByteArray::fromBase64(key.toUtf8()) + '"';
-            data1.name += " (" + key + ")";
+                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"));
diff --git a/src/plugins/resourceeditor/resourceeditorconstants.h b/src/plugins/resourceeditor/resourceeditorconstants.h
index 007d537c36e1cea34da0dfdf1629e7e30a39a753..645461a4ddd2f36199da56cfdea4c324ae00ed4f 100644
--- a/src/plugins/resourceeditor/resourceeditorconstants.h
+++ b/src/plugins/resourceeditor/resourceeditorconstants.h
@@ -38,7 +38,6 @@ namespace ResourceEditor {
 namespace Constants {
 
 const char * const C_RESOURCEEDITOR = "Resource Editor";
-const char * const C_RESOURCEWINDOW = "Resourcewindow";
 const char * const C_RESOURCE_MIMETYPE = "application/vnd.nokia.xml.qt.resource";
 
 } // namespace Constants
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index c8e0bbf51072ddad9ddc86028840b47aeb128c4e..833c6547c9239a20da00c99ebe3ff23c6f26f7e9 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -161,7 +161,7 @@ bool ResourceEditorFile::save(const QString &name /*= QString()*/)
 }
 
 const char *ResourceEditorW::kind() const {
-    return ResourceEditor::Constants::C_RESOURCEWINDOW;
+    return ResourceEditor::Constants::C_RESOURCEEDITOR;
 }
 
 QString ResourceEditorFile::fileName() const
diff --git a/src/shared/qrceditor/qrceditor.cpp b/src/shared/qrceditor/qrceditor.cpp
index a353d73839496d20f4368e746b68a1b345a9656c..bd25a42d7427ab3f576158bd942781fbcb5990e1 100644
--- a/src/shared/qrceditor/qrceditor.cpp
+++ b/src/shared/qrceditor/qrceditor.cpp
@@ -39,7 +39,7 @@
 #include <QtGui/QFileDialog>
 #include <QtGui/QMessageBox>
 
-namespace SharedTools {
+using namespace SharedTools;
 
 QrcEditor::QrcEditor(QWidget *parent)
   : QWidget(parent),
@@ -405,5 +405,3 @@ void QrcEditor::onRedo()
     updateCurrent();
     updateHistoryControls();
 }
-
-} // namespace SharedTools
diff --git a/src/shared/qrceditor/resourcefile.cpp b/src/shared/qrceditor/resourcefile.cpp
index b88444c6e16e356cf693b1131387ab40ebd85f51..bfab4b0315f8441ad3cd5b7c547e641865bb5c47 100644
--- a/src/shared/qrceditor/resourcefile.cpp
+++ b/src/shared/qrceditor/resourcefile.cpp
@@ -54,6 +54,19 @@ TRANSLATOR qdesigner_internal::ResourceModel
 
 namespace qdesigner_internal {
 
+
+/******************************************************************************
+** FileList
+*/
+
+bool FileList::containsFile(File *file)
+{
+    foreach(File *tmpFile, *this)
+        if (tmpFile->name == file->name && tmpFile->prefix() == file->prefix())
+            return true;
+    return false;
+}
+
 /******************************************************************************
 ** ResourceFile
 */
@@ -375,7 +388,7 @@ bool ResourceFile::contains(const QString &prefix, const QString &file) const
     Prefix * const p = m_prefix_list.at(pref_idx);
     Q_ASSERT(p);
     File equalFile(p, absolutePath(file));
-    return p->file_list.contains(&equalFile);
+    return p->file_list.containsFile(&equalFile);
 }
 
 bool ResourceFile::contains(int pref_idx, const QString &file) const
@@ -383,7 +396,7 @@ bool ResourceFile::contains(int pref_idx, const QString &file) const
     Q_ASSERT(pref_idx >= 0 && pref_idx < m_prefix_list.count());
     Prefix * const p = m_prefix_list.at(pref_idx);
     File equalFile(p, absolutePath(file));
-    return p->file_list.contains(&equalFile);
+    return p->file_list.containsFile(&equalFile);
 }
 
 /*static*/ QString ResourceFile::fixPrefix(const QString &prefix)
diff --git a/src/shared/qrceditor/resourcefile_p.h b/src/shared/qrceditor/resourcefile_p.h
index 61b6c594b64ddd1558598108a07e63c9c4221620..3ee346cb0e69465ef9642c231e4b8aeb0bbc848e 100644
--- a/src/shared/qrceditor/resourcefile_p.h
+++ b/src/shared/qrceditor/resourcefile_p.h
@@ -90,7 +90,12 @@ struct File : public Node {
     QString name;
     QString alias;
 };
-typedef QList<File *> FileList;
+
+class FileList : public QList<File *>
+{
+public:
+    bool containsFile(File *file);
+};
 
 /*!
     \class Prefix
diff --git a/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro b/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro
index 6923e09837dd649062416ec29198c599a8564670..ce209c86d7709b69b28f4ee9a029cbbfa32a49ff 100644
--- a/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro
+++ b/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro
@@ -9,7 +9,7 @@ SOURCES     = customwidgets.cpp
 
 # Link against the qtcreator utils lib
 
-unix {
+linux-* {
   # form abs path to qtcreator lib dir
   GH_LIB=$$dirname(PWD)
   GH_LIB=$$dirname(GH_LIB)
@@ -19,7 +19,13 @@ unix {
 }
 
 INCLUDEPATH += ../../../src/libs
-LIBS += -L../../../lib -lUtils
+macx {
+    LIBS += -L../../../bin/QtCreator.app/Contents/PlugIns
+    CONFIG(debug, debug|release):LIBS += -lUtils_debug
+    else:LIBS += -lUtils
+} else {
+    LIBS += -L../../../lib -lUtils
+}
 
 DESTDIR= $$[QT_INSTALL_PLUGINS]/designer
 
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