diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp
index 577fa6c4ba233590b31b5bc40b2a9e2405f4ed7f..25c05e0f48ec68c085911d328a7fbc391d62b1ba 100644
--- a/src/libs/cplusplus/CppBindings.cpp
+++ b/src/libs/cplusplus/CppBindings.cpp
@@ -75,8 +75,12 @@ NamespaceBinding::NamespaceBinding(NamespaceBinding *parent)
 
 NamespaceBinding::~NamespaceBinding()
 {
-    qDeleteAll(children);
-    qDeleteAll(classBindings);
+    qDeleteAll(QList<NamespaceBinding *>(children));
+    qDeleteAll(QList<ClassBinding *>(classBindings));
+
+    if (parent)
+        parent->asNamespaceBinding()->children.removeAll(this);
+    parent = 0;
 }
 
 const NameId *NamespaceBinding::name() const
@@ -547,7 +551,14 @@ ClassBinding::ClassBinding(ClassBinding *parentClass)
 }
 
 ClassBinding::~ClassBinding()
-{ qDeleteAll(children); }
+{
+    qDeleteAll(QList<ClassBinding *>(children));
+    if (NamespaceBinding *nsBinding = parent->asNamespaceBinding())
+        nsBinding->classBindings.removeAll(this);
+    if (ClassBinding *classBinding = parent->asClassBinding())
+        classBinding->children.removeAll(this);
+    parent = 0;
+}
 
 const Name *ClassBinding::name() const
 {