diff --git a/src/tomahawk/sourcetree/items/SourceTreeItem.cpp b/src/tomahawk/sourcetree/items/SourceTreeItem.cpp
index 768a2f0cd..e2ad9fadd 100644
--- a/src/tomahawk/sourcetree/items/SourceTreeItem.cpp
+++ b/src/tomahawk/sourcetree/items/SourceTreeItem.cpp
@@ -261,3 +261,26 @@ SourceTreeItem::setParentItem(SourceTreeItem* item)
 {
     m_parent = item;
 }
+
+void
+SourceTreeItem::removeFromList()
+{
+    pageDestroyed();
+}
+
+
+void
+SourceTreeItem::pageDestroyed()
+{
+    model()->removeSourceItemLink( this );
+
+    int idx = parent()->children().indexOf( this );
+    parent()->beginRowsRemoved( idx, idx );
+    parent()->removeChild( this );
+    parent()->endRowsRemoved();
+
+    emit removed();
+    deleteLater();
+}
+
+
diff --git a/src/tomahawk/sourcetree/items/SourceTreeItem.h b/src/tomahawk/sourcetree/items/SourceTreeItem.h
index 91a9c9e54..9f744f6ac 100644
--- a/src/tomahawk/sourcetree/items/SourceTreeItem.h
+++ b/src/tomahawk/sourcetree/items/SourceTreeItem.h
@@ -81,9 +81,11 @@ public:
 public slots:
     virtual void activate() {}
     virtual void doubleClicked() {}
+    virtual void removeFromList();
 
 signals:
     void updated();
+    bool removed();
     void selectRequest( SourceTreeItem* );
     void expandRequest( SourceTreeItem* );
     void toggleExpandRequest( SourceTreeItem* );
@@ -100,6 +102,7 @@ protected:
 
 private slots:
     void checkPlayingStatus();
+    void pageDestroyed();
 
 private:
     SourcesModel::RowType m_type;
diff --git a/src/tomahawk/sourcetree/items/TemporaryPageItem.cpp b/src/tomahawk/sourcetree/items/TemporaryPageItem.cpp
index b1c6bdef4..69fbd54a4 100644
--- a/src/tomahawk/sourcetree/items/TemporaryPageItem.cpp
+++ b/src/tomahawk/sourcetree/items/TemporaryPageItem.cpp
@@ -131,29 +131,6 @@ TemporaryPageItem::IDValue() const
 }
 
 
-void
-TemporaryPageItem::removeFromList()
-{
-    pageDestroyed();
-    ViewManager::instance()->destroyPage( m_page );
-}
-
-
-void
-TemporaryPageItem::pageDestroyed()
-{
-    model()->removeSourceItemLink( this );
-
-    int idx = parent()->children().indexOf( this );
-    parent()->beginRowsRemoved( idx, idx );
-    parent()->removeChild( this );
-    parent()->endRowsRemoved();
-
-    emit removed();
-    deleteLater();
-}
-
-
 void
 TemporaryPageItem::linkActionTriggered( QAction* action )
 {
@@ -211,3 +188,12 @@ TemporaryPageItem::isBeingPlayed() const
 {
     return m_page->isBeingPlayed();
 }
+
+
+void
+TemporaryPageItem::removeFromList()
+{
+    SourceTreeItem::removeFromList();
+
+    ViewManager::instance()->destroyPage( m_page );
+}
diff --git a/src/tomahawk/sourcetree/items/TemporaryPageItem.h b/src/tomahawk/sourcetree/items/TemporaryPageItem.h
index 389cd1ac7..546356a4c 100644
--- a/src/tomahawk/sourcetree/items/TemporaryPageItem.h
+++ b/src/tomahawk/sourcetree/items/TemporaryPageItem.h
@@ -46,12 +46,8 @@ public:
 public slots:
     void removeFromList();
 
-signals:
-    bool removed();
-
 private slots:
     void linkActionTriggered( QAction* );
-    void pageDestroyed();
 
 private:
     Tomahawk::ViewPage* m_page;