diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index 930a20c2dfd4291cd85b6b969a9c1b129dc3091d..48edfc1a009c2bfbde20070664988b8e6bfe137d 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -835,6 +835,24 @@ QSize SplitterOrView::minimumSizeHint() const
     return QSize(64, 64);
 }
 
+QSplitter *SplitterOrView::takeSplitter()
+{
+    QSplitter *oldSplitter = m_splitter;
+    if (m_splitter)
+        m_layout->removeWidget(m_splitter);
+    m_splitter = 0;
+    return oldSplitter;
+}
+
+EditorView *SplitterOrView::takeView()
+{
+    EditorView *oldView = m_view;
+    if (m_view)
+        m_layout->removeWidget(m_view);
+    m_view = 0;
+    return oldView;
+}
+
 void SplitterOrView::split(Qt::Orientation orientation)
 {
     Q_ASSERT(m_view && m_splitter == 0);
@@ -903,13 +921,12 @@ void SplitterOrView::unsplit()
     Q_ASSERT(m_splitter->count() == 1);
     EditorManager *em = CoreImpl::instance()->editorManager();
     SplitterOrView *childSplitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
-
     QSplitter *oldSplitter = m_splitter;
     m_splitter = 0;
 
     if (childSplitterOrView->isSplitter()) {
         Q_ASSERT(childSplitterOrView->view() == 0);
-        m_splitter = childSplitterOrView->splitter();
+        m_splitter = childSplitterOrView->takeSplitter();
         m_layout->addWidget(m_splitter);
         m_layout->setCurrentWidget(m_splitter);
     } else {
@@ -923,8 +940,7 @@ void SplitterOrView::unsplit()
             }
             em->emptyView(childView);
         } else {
-            m_view = childView;
-            childSplitterOrView->m_layout->removeWidget(m_view);
+            m_view = childSplitterOrView->takeView();
             m_layout->addWidget(m_view);
         }
         m_layout->setCurrentWidget(m_view);
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index d198155ca3d95921fe3dfb67c3168df904a3321f..13eb957b299a1655e6eb14bfa1e8e720b6a91c0b 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -197,6 +197,8 @@ public:
     inline bool hasEditors() const { return m_view && m_view->editorCount() != 0; }
     inline EditorView *view() const { return m_view; }
     inline QSplitter *splitter() const { return m_splitter; }
+    QSplitter *takeSplitter();
+    EditorView *takeView();
 
 
     SplitterOrView *findView(Core::IEditor *editor);