diff --git a/share/qtcreator/dumper/lbridge.py b/share/qtcreator/dumper/lbridge.py
index 5f2d4cd0048ed413b1bb4464a3bf333840001c5a..82feb44ff9ef56885165e651a9c2e69e1172c59f 100644
--- a/share/qtcreator/dumper/lbridge.py
+++ b/share/qtcreator/dumper/lbridge.py
@@ -253,6 +253,10 @@ def createPointerValue(context, address, pointeeType):
     addr = int(address) & 0xFFFFFFFFFFFFFFFF
     return context.CreateValueFromAddress(None, addr, pointeeType).AddressOf()
 
+def createReferenceValue(context, address, referencedType):
+    addr = int(address) & 0xFFFFFFFFFFFFFFFF
+    return context.CreateValueFromAddress(None, addr, referencedType)
+
 def impl_SBValue__add__(self, offset):
     if self.GetType().IsPointerType():
         if isinstance(offset, int) or isinstance(offset, long):
@@ -503,6 +507,12 @@ class SubItem:
         self.d.currentAddress = self.savedCurrentAddress
         return True
 
+class UnnamedSubItem(SubItem):
+    def __init__(self, d, component):
+        self.d = d
+        self.iname = "%s.%s" % (self.d.currentIName, component)
+        self.name = None
+
 class Dumper:
     def __init__(self):
         self.debugger = lldb.SBDebugger.Create()
@@ -945,6 +955,7 @@ class Dumper:
     def putItem(self, value, tryDynamic=True):
         #value = value.GetDynamicValue(lldb.eDynamicCanRunTarget)
         typeName = value.GetTypeName()
+        value.SetPreferDynamicValue(tryDynamic)
 
         if tryDynamic:
             self.putAddress(value.address)
@@ -984,13 +995,9 @@ class Dumper:
 
         # References
         if value.GetType().IsReferenceType():
-            type = value.GetType().GetDereferencedType().GetPointerType()
-            # FIXME: Find something more direct.
             origType = value.GetTypeName();
-            value = value.CreateValueFromAddress(value.GetName(),
-                value.AddressOf().GetValueAsUnsigned(), type).Dereference()
-            #value = value.cast(value.dynamic_type)
-            self.putItem(value)
+            type = value.GetType().GetDereferencedType()
+            self.putItem(createReferenceValue(value, value.GetAddress(), type))
             self.putBetterType(origType)
             return
 
@@ -1039,9 +1046,16 @@ class Dumper:
 
     def putFields(self, value):
         n = value.GetNumChildren()
+        m = value.GetType().GetNumberOfDirectBaseClasses()
         if n > 10000:
             n = 10000
-        for i in xrange(n):
+        for i in xrange(m):
+            child = value.GetChildAtIndex(i)
+            with UnnamedSubItem(self, "@%d" % (i + 1)):
+                #self.put('iname="%s",' % self.currentIName)
+                self.put('name="[%s]",' % child.name)
+                self.putItem(child)
+        for i in xrange(m, n):
             child = value.GetChildAtIndex(i)
             with SubItem(self, child):
                 self.putItem(child)