diff --git a/share/qtcreator/gdbmacros/pdumper.py b/share/qtcreator/gdbmacros/pdumper.py
index 7d9a465e1d15f326b2215b58fd6075e821f7e451..8ca75eb3353aeb587c2df0d89d80a9ab0d4295b0 100644
--- a/share/qtcreator/gdbmacros/pdumper.py
+++ b/share/qtcreator/gdbmacros/pdumper.py
@@ -12,7 +12,7 @@ class qdebug:
             individualformats = None,
             watchers = None):
         self.options = options
-        self.expanded = expanded
+        self.expandedINames = expanded
         self.typeformats = typeformats
         self.individualformats = individualformats
         self.watchers = watchers
@@ -34,6 +34,8 @@ class qdebug:
         t = str(type)
         if t.startswith("<type '") and t.endswith("'>"):
             t = t[7:-2]
+        if t.startswith("<class '") and t.endswith("'>"):
+            t = t[8:-2]
         return t
 
     def putType(self, type, priority = 0):
@@ -51,14 +53,12 @@ class qdebug:
     def putName(self, name):
         self.put('name="%s",' % name)
 
-    def isExpanded(self, item):
-        #warn("IS EXPANDED: %s in %s" % (item.iname, self.expandedINames))
-        if item.iname is None:
-            raise "Illegal iname 'None'"
-        if item.iname.startswith("None"):
-            raise "Illegal iname '%s'" % item.iname
-        #warn("   --> %s" % (item.iname in self.expandedINames))
-        return item.iname in self.expandedINames
+    def isExpanded(self, iname):
+        #self.warn("IS EXPANDED: %s in %s" % (iname, self.expandedINames))
+        if iname.startswith("None"):
+            raise "Illegal iname '%s'" % iname
+        #self.warn("   --> %s" % (iname in self.expandedINames))
+        return iname in self.expandedINames
 
     def isExpandedIName(self, iname):
         return iname in self.expandedINames
@@ -88,11 +88,16 @@ class qdebug:
         tt = self.cleanType(t)
         if tt == "module" or tt == "function":
             return
+        if str(value).startswith("<class '"):
+            return
         self.put("{")
         self.putField("iname", iname)
         self.putName(name)
         self.putType(tt)
-        if tt == "list" or tt == "tuple":
+        if tt == "NoneType":
+            self.putValue("None")
+            self.putNumChild(0)
+        elif tt == "list" or tt == "tuple":
             self.putItemCount(len(value))
             #self.putValue(value)
             self.put("children=[")
@@ -128,16 +133,44 @@ class qdebug:
                 self.put("{")
                 self.putType(" ")
                 self.putValue("%s: %s" % (k, v))
-                self.put("children=[")
-                self.dumpValue(k, "key", "%s.%d.k" % (iname, i))
-                self.dumpValue(v, "value", "%s.%d.v" % (iname, i))
-                self.put("]},")
+                if self.isExpanded(iname):
+                    self.put("children=[")
+                    self.dumpValue(k, "key", "%s.%d.k" % (iname, i))
+                    self.dumpValue(v, "value", "%s.%d.v" % (iname, i))
+                    self.put("]},")
                 i += 1
             self.put("]")
-        elif tt == "module" or tt == "function":
+        elif tt == "class":
+            pass
+        elif tt == "module":
+            pass
+        elif tt == "function":
             pass
         else:
-            self.putValue(value)
+            v = str(value)
+            p = v.find(" object at ")
+            if p > 1:
+                v = "@" + v[p + 11:-1]
+            elif v.startswith("<enum-item "):
+                v = v[11:-1]
+            self.putValue(v)
+            if self.isExpanded(iname):
+                self.put("children=[")
+                for child in dir(value):
+                    if child == "__dict__":
+                        continue
+                    if child == "__doc__":
+                        continue
+                    if child == "__module__":
+                        continue
+                    attr = getattr(value, child)
+                    if callable(attr):
+                        continue
+                    try:
+                        self.dumpValue(attr, child, "%s.%s" % (iname, child))
+                    except:
+                        pass
+                self.put("],")
         self.put("},")