diff --git a/src/libtomahawk/playlist/XspfUpdater.cpp b/src/libtomahawk/playlist/XspfUpdater.cpp
index a9d794334..2eb1d7a1e 100644
--- a/src/libtomahawk/playlist/XspfUpdater.cpp
+++ b/src/libtomahawk/playlist/XspfUpdater.cpp
@@ -58,28 +58,24 @@ XspfUpdater::updateNow()
     XSPFLoader* l = new XSPFLoader( false, false );
     l->setAutoResolveTracks( false );
     l->load( m_url );
-    connect( l, SIGNAL( ok ( Tomahawk::playlist_ptr ) ), this, SLOT( playlistLoaded() ) );
+    connect( l, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( playlistLoaded( QList<Tomahawk::query_ptr> ) ) );
 }
 
 void
-XspfUpdater::playlistLoaded()
+XspfUpdater::playlistLoaded( const QList<Tomahawk::query_ptr>& newEntries )
 {
-    XSPFLoader* loader = qobject_cast<XSPFLoader*>( sender() );
-    Q_ASSERT( loader );
-
     QList< query_ptr > tracks;
     foreach ( const plentry_ptr ple, playlist()->entries() )
         tracks << ple->query();
 
     bool changed = false;
-    QList< query_ptr > mergedTracks = TomahawkUtils::mergePlaylistChanges( tracks, loader->entries(), changed );
+    QList< query_ptr > mergedTracks = TomahawkUtils::mergePlaylistChanges( tracks, newEntries, changed );
 
     if ( !changed )
         return;
 
     QList<Tomahawk::plentry_ptr> el = playlist()->entriesFromQueries( mergedTracks, true );
     playlist()->createNewRevision( uuid(), playlist()->currentrevision(), el );
-
 }
 
 void
diff --git a/src/libtomahawk/playlist/XspfUpdater.h b/src/libtomahawk/playlist/XspfUpdater.h
index c5254d79a..227c9ab4a 100644
--- a/src/libtomahawk/playlist/XspfUpdater.h
+++ b/src/libtomahawk/playlist/XspfUpdater.h
@@ -37,6 +37,7 @@ public:
     virtual ~XspfUpdater();
 
     virtual QString type() const { return "xspf"; }
+
 public slots:
     void updateNow();
 
@@ -46,7 +47,7 @@ protected:
     virtual void removeFromSettings(const QString& group) const;
 
 private slots:
-    void playlistLoaded();
+    void playlistLoaded( const QList<Tomahawk::query_ptr> & );
 
 private:
     QString m_url;
diff --git a/src/libtomahawk/utils/xspfloader.cpp b/src/libtomahawk/utils/xspfloader.cpp
index c5118875d..9fd0c7369 100644
--- a/src/libtomahawk/utils/xspfloader.cpp
+++ b/src/libtomahawk/utils/xspfloader.cpp
@@ -60,6 +60,7 @@ XSPFLoader::XSPFLoader( bool autoCreate, bool autoUpdate, QObject *parent )
     , m_autoCreate( autoCreate )
     , m_autoUpdate( autoUpdate )
     , m_autoResolve( true )
+    , m_autoDelete( true )
     , m_NS("http://xspf.org/ns/0/")
 {
     qRegisterMetaType< XSPFErrorCode >("XSPFErrorCode");
@@ -265,12 +266,14 @@ XSPFLoader::gotBody()
         new Tomahawk::XspfUpdater( m_playlist, 600000, m_autoUpdate, m_url.toString() );
         emit ok( m_playlist );
     }
-    else{
+    else
+    {
 
         if( !m_entries.isEmpty() )
             emit tracks( m_entries );
     }
 
-    deleteLater();
+    if ( m_autoDelete )
+        deleteLater();
 
 }
diff --git a/src/libtomahawk/utils/xspfloader.h b/src/libtomahawk/utils/xspfloader.h
index eee77de96..e4e912618 100644
--- a/src/libtomahawk/utils/xspfloader.h
+++ b/src/libtomahawk/utils/xspfloader.h
@@ -48,6 +48,7 @@ public:
 
     void setOverrideTitle( const QString& newTitle );
     void setAutoResolveTracks( bool autoResolve ) { m_autoResolve = autoResolve; }
+    void setAutoDelete( bool autoDelete ) { m_autoDelete = autoDelete; }
 
     static QString errorToString( XSPFErrorCode error );
 
@@ -69,7 +70,7 @@ private:
     void reportError();
     void gotBody();
 
-    bool m_autoCreate, m_autoUpdate, m_autoResolve;
+    bool m_autoCreate, m_autoUpdate, m_autoResolve, m_autoDelete;
     QString m_NS,m_overrideTitle;
     QList< Tomahawk::query_ptr > m_entries;
     QString m_title, m_info, m_creator;