diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index a13265415228aca0fd25afd357758d81c6f70776..404c91c2acb8d4684d283342d30238853d9132c2 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -168,6 +168,19 @@ CppTypeHierarchyWidget::~CppTypeHierarchyWidget()
     delete m_delegate;
 }
 
+bool CppTypeHierarchyWidget::handleReplacement(Core::IEditor *editor)
+{
+    if (CPPEditorEditable *cppEditable = qobject_cast<CPPEditorEditable *>(editor)) {
+        if (m_cppEditor) {
+            m_cppEditor = static_cast<CPPEditor *>(cppEditable->widget());
+            return true;
+        }
+    } else if (!m_cppEditor) {
+        return true;
+    }
+    return false;
+}
+
 void CppTypeHierarchyWidget::perform()
 {
     if (!m_cppEditor)
@@ -228,11 +241,13 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
 
 void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor)
 {
-    CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
-    removeWidget(m_typeHiearchyWidgetInstance);
-    m_typeHiearchyWidgetInstance->deleteLater();
-    m_typeHiearchyWidgetInstance = replacement;
-    addWidget(m_typeHiearchyWidgetInstance);
+    if (!m_typeHiearchyWidgetInstance->handleReplacement(editor)) {
+        CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
+        removeWidget(m_typeHiearchyWidgetInstance);
+        m_typeHiearchyWidgetInstance->deleteLater();
+        m_typeHiearchyWidgetInstance = replacement;
+        addWidget(m_typeHiearchyWidgetInstance);
+    }
 }
 
 // CppTypeHierarchyFactory
diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h
index 8bc2c192a519d87e04feff7071969cd2fa273aa9..d3c07b9bee9a88e5d2190851a9eca2a832cfe0a4 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.h
+++ b/src/plugins/cppeditor/cpptypehierarchy.h
@@ -92,6 +92,8 @@ public:
     CppTypeHierarchyWidget(Core::IEditor *editor);
     virtual ~CppTypeHierarchyWidget();
 
+    bool handleReplacement(Core::IEditor *editor);
+
 public slots:
     void perform();