diff --git a/ChangeLog b/ChangeLog
index 15f431f6f..7ef76fabb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,58 +1,53 @@
 Version 0.3.0:
-    * Fixed bug where we would download http:// tracks twice.
     * Make artist names in the album view clickable.
     * Don't start playing if a tomahawk:// link was clicked while Tomahawk
       is paused.
     * Make artist name clickable in header of Album pages.
-    * Fixed adding social actions such as loved tracks from other sources.
-    * Added a drop shadow to cover images, and put CD placeholder in jewel
-      case.
+    * Added a drop shadow to cover images, and put placeholder in jewel case.
     * Added shuffle and repeat support to tree view.
     * Draw a speaker next to the currently playing playlist.
     * Refresh station previews whenever a filter is changed.
     * Support and show official releases on album and track pages.
     * Filter out duplicates from station previews and upcoming tracks.
-    * Resolve lists top-down.
     * Added YouTube resolver.
     * Fixed bug where going offline then online would not re-connect to many
       peers.
-    * Added support for auto-updating live xspf playlists. 
-    * Don't show an age of 41 for tracks that have no age information.
-    * Show config UI for resolvers that have them as so on as you add the resolver.
+    * Added support for auto-updating live XSPF playlists. 
+    * Don't show an age of 41 years for tracks that have no age information.
+    * Show config UI for resolvers that have them as soon as you add them.
     * Add support for Echo Nest Personal Catalogs and User Radio. Synchronize
       your catalog with The Echo Nest and enable personal recommendations
       from you and your friends.
     * Added support for Grooveshark resolver (requires Grooveshark Anywhere).
-    * Fixed re-resolving when resolvers or sources go offline.
+    * Fixed re-resolving when resolvers or sources go off- / online.
     * Correctly sort recently played tracks on the Dashboard.
     * Show a Lion full-screen toggle button if running on Lion.
-    * Display list of who is currently listening along to you.
+    * Show a list of users who are currently listening along to you.
     * Show headphone icon in source item to allow users to listen along; paint
-      headphones red on a source if the user is listening along to it.
+      headphones red on a source if you are currently listening along to it.
     * Added new job status view in the bottom of the source list that displays
       current jobs such as resolving, parsing playlists, and loading from
       database.
     * Parse and convert a Spotify playlist url when dropped anywhere on the
-      sidebar
+      sidebar.
     * Convert resolvers to use asynchronous calls to avoid blocking Tomahawk's
       UI, greatly increasing responsiveness of Tomahawk while resolving.
     * Fixed no playlists overlay not disappearing when playlists were added.
     * Add support for parsing itunes track, artist and album links.
     * Fixed crash when syncing playlists with peers.
-    * Add support for browsing, downloading and rating resolvers
-      from inside Tomahawk directly.
+    * Add support for browsing, downloading and rating resolvers from within
+      Tomahawk directly.
     * Support multi-folder selection and scanning.
-    * Actually remove deleted files from the collection.
     * Fixed handling of special characters in tomahawk:// links
     * Improve sidebar performance by caching pixmaps and shrinking them.
     * Send updated playlists to peers when tracks are moved/copied.
-    * Remove splitter handles in sidebar
-    * Fixed Tomahawk preventing system shutdown / logut.
+    * Remove splitter handles in sidebar.
+    * Fixed Tomahawk preventing system shutdown / logout.
     * Ignore leading 'The' when sorting artists.
     * Added Charts page, which shows various sources' top hits & artists.
     * The Collection tree-views can now be filtered.
     * Fixed crash when pressing enter in an empty playlist.
-    * Moved the song queue below to the left, below the sidebar.
+    * Moved the song queue to the bottom of the sidebar.
     * Added Footnotes, a contextual view that you can slide it.
     * Show recently added playlists in dashboard rather than recently opened
       playlists.
diff --git a/src/breakpad/CrashReporter/CMakeLists.txt b/src/breakpad/CrashReporter/CMakeLists.txt
index 02dfedf1e..8b019947b 100644
--- a/src/breakpad/CrashReporter/CMakeLists.txt
+++ b/src/breakpad/CrashReporter/CMakeLists.txt
@@ -13,8 +13,8 @@ QT4_WRAP_UI( crashreporter_UI_HEADERS ${crashreporter_UI} )
 QT4_ADD_RESOURCES( crashreporter_RC_RCC ${crashreporter_RC} )
 
 INCLUDE( ${QT_USE_FILE} )
-INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/src ../../libtomahawk )
 ADD_DEFINITIONS( ${QT_DEFINITIONS} )
 
 ADD_EXECUTABLE( CrashReporter ${crashreporter_SOURCES} ${crashreporter_HEADERS_MOC} ${crashreporter_UI_HEADERS} ${crashreporter_RC_RCC} )
-TARGET_LINK_LIBRARIES( CrashReporter ${QT_LIBRARIES} )
+TARGET_LINK_LIBRARIES( CrashReporter ${QT_LIBRARIES} tomahawklib )
diff --git a/src/breakpad/CrashReporter/CrashReporter.cpp b/src/breakpad/CrashReporter/CrashReporter.cpp
index 468e6a4ed..15e563529 100644
--- a/src/breakpad/CrashReporter/CrashReporter.cpp
+++ b/src/breakpad/CrashReporter/CrashReporter.cpp
@@ -25,6 +25,9 @@
 #include <QDateTime>
 #include <QHttp>
 
+#include "utils/tomahawkutils.h"
+
+#define LOGFILE TomahawkUtils::appLogDir().filePath( "Tomahawk.log" ).toLocal8Bit()
 #define RESPATH ":/data/"
 
 
@@ -40,7 +43,6 @@ CrashReporter::CrashReporter( const QStringList& args )
     ui.progressLabel->setPalette( Qt::gray );
 
   #ifdef Q_WS_MAC
-    // macify++
     QFont f = ui.bottomLabel->font();
     f.setPointSize( 10 );
     ui.bottomLabel->setFont( f );
@@ -55,12 +57,14 @@ CrashReporter::CrashReporter( const QStringList& args )
     ui.bottomLabel->setIndent( 1 );
 
     // adjust the spacer since we adjusted the spacing above
-    for (int x = 0; x < ui.vboxLayout->count(); ++x)
-        if (QSpacerItem* spacer = ui.vboxLayout->itemAt( x )->spacerItem())
+    for ( int x = 0; x < ui.vboxLayout->count(); ++x )
+    {
+        if ( QSpacerItem* spacer = ui.vboxLayout->itemAt( x )->spacerItem() )
         {
             spacer->changeSize( 6, 2, QSizePolicy::Minimum, QSizePolicy::Fixed );
             break;
         }
+    }
   #endif //Q_WS_MAC
 
     m_http = new QHttp( "oops.tomahawk-player.org", 80, this );
@@ -72,9 +76,9 @@ CrashReporter::CrashReporter( const QStringList& args )
     m_minidump = m_dir + '/' + args.value( 2 ) + ".dmp";
     m_product_name = args.value( 3 );
 
-    QTimer::singleShot( 0, this, SLOT(send()) );
-
     setFixedSize( sizeHint() );
+
+    QTimer::singleShot( 0, this, SLOT( send() ) );
 }
 
 
@@ -94,7 +98,7 @@ CrashReporter::send()
 
     // socorro expects a 10 digit build id
     QRegExp rx( "(\\d+\\.\\d+\\.\\d+).(\\d+)" );
-    rx.exactMatch( "0.2.99" );
+    rx.exactMatch( TomahawkUtils::appFriendlyVersion() );
     QString const version = rx.cap( 1 );
     QString const buildId = rx.cap( 2 ).leftJustified( 10, '0' );
 
@@ -103,7 +107,7 @@ CrashReporter::send()
     QList<Pair> pairs;
     pairs << Pair( "BuildID", buildId.toUtf8() )
           << Pair( "ProductName", m_product_name.toUtf8() )
-          << Pair( "Version", version.toUtf8() )
+          << Pair( "Version", TomahawkUtils::appFriendlyVersion().toLocal8Bit() )
           << Pair( "Vendor", "Tomahawk" )
           << Pair( "timestamp", QByteArray::number( QDateTime::currentDateTime().toTime_t() ) );
 
@@ -126,14 +130,13 @@ CrashReporter::send()
 
     // add logfile
     body += "--thkboundary\r\n";
-    body += "Content-Disposition: form-data; name=\"upload_file_containerlog\"; filename=\"container.log\"\r\n";
+    body += "Content-Disposition: form-data; name=\"upload_file_tomahawklog\"; filename=\"Tomahawk.log\"\r\n";
     body += "Content-Type: application/x-gzip\r\n";
     body += "\r\n";
-//    body += qCompress( contents( "Tomahawk.log" ) );
+    body += qCompress( contents( LOGFILE ) );
     body += "\r\n";
     body += "--thkboundary--\r\n";
 
-//////
     QHttpRequestHeader header( "POST", "/addreport.php" );
     header.setContentType( "multipart/form-data; boundary=thkboundary" );
     header.setValue( "HOST", "oops.tomahawk-player.org" );
@@ -179,5 +182,5 @@ CrashReporter::onFail( int error, const QString& errorString )
 {
     ui.button->setText( tr( "Close" ) );
     ui.progressLabel->setText( tr( "Failed to send crash info." ) );
-    qDebug() << "Error: " << error << errorString;
+    qDebug() << "Error:" << error << errorString;
 }
diff --git a/src/libtomahawk/collection.cpp b/src/libtomahawk/collection.cpp
index a229562d5..740315673 100644
--- a/src/libtomahawk/collection.cpp
+++ b/src/libtomahawk/collection.cpp
@@ -68,7 +68,6 @@ Collection::addPlaylist( const Tomahawk::playlist_ptr& p )
 
     QList<playlist_ptr> toadd;
     toadd << p;
-//    qDebug() << "Inserted playlist with guid:" << p->guid();
     m_playlists.insert( p->guid(), p );
 
 /*    qDebug() << Q_FUNC_INFO << "Collection name" << name()
@@ -83,7 +82,6 @@ Collection::addAutoPlaylist( const Tomahawk::dynplaylist_ptr& p )
 {
     QList<dynplaylist_ptr> toadd;
     toadd << p;
-//    qDebug() << "Inserted dynamic playlist with guid:" << p->guid();
     m_autoplaylists.insert( p->guid(), p );
 
 /*    qDebug() << Q_FUNC_INFO << "Collection name" << name()
@@ -98,7 +96,6 @@ Collection::addStation( const dynplaylist_ptr& s )
 {
     QList<dynplaylist_ptr> toadd;
     toadd << s;
-//    qDebug() << "Inserted station with guid:" << s->guid();
     m_stations.insert( s->guid(), s );
 
 /*    qDebug() << Q_FUNC_INFO << "Collection name" << name()
@@ -167,7 +164,6 @@ Collection::autoPlaylist( const QString& guid )
 dynplaylist_ptr
 Collection::station( const QString& guid )
 {
-
     return m_stations.value( guid, dynplaylist_ptr() );
 }
 
@@ -175,7 +171,6 @@ Collection::station( const QString& guid )
 void
 Collection::setPlaylists( const QList<Tomahawk::playlist_ptr>& plists )
 {
-//    qDebug() << Q_FUNC_INFO << plists.count();
     foreach ( const playlist_ptr& p, plists )
     {
 //        qDebug() << "Batch inserting playlist:" << p->guid();
@@ -190,8 +185,6 @@ Collection::setPlaylists( const QList<Tomahawk::playlist_ptr>& plists )
 void
 Collection::setAutoPlaylists( const QList< Tomahawk::dynplaylist_ptr >& plists )
 {
-//    qDebug() << Q_FUNC_INFO << plists.count();
-
     foreach ( const dynplaylist_ptr& p, plists )
     {
 //        qDebug() << "Batch inserting dynamic playlist:" << p->guid();
@@ -204,8 +197,6 @@ Collection::setAutoPlaylists( const QList< Tomahawk::dynplaylist_ptr >& plists )
 void
 Collection::setStations( const QList< dynplaylist_ptr >& stations )
 {
-//    qDebug() << Q_FUNC_INFO << stations.count();
-
     foreach ( const dynplaylist_ptr& s, stations )
     {
 //        qDebug() << "Batch inserting station:" << s->guid();
@@ -216,56 +207,29 @@ Collection::setStations( const QList< dynplaylist_ptr >& stations )
 
 
 void
-Collection::setTracks( const QList<Tomahawk::query_ptr>& tracks )
+Collection::setTracks( const QList<unsigned int>& ids )
 {
-//    qDebug() << Q_FUNC_INFO << tracks.count() << name();
+    qDebug() << Q_FUNC_INFO << ids.count() << name();
 
-    emit tracksAdded( tracks );
+    emit tracksAdded( ids );
     emit changed();
 }
 
 
 void
-Collection::delTracks( const QStringList& files )
+Collection::delTracks( const QList<unsigned int>& ids )
 {
-    qDebug() << Q_FUNC_INFO << files.count() << name();
+    qDebug() << Q_FUNC_INFO << ids.count() << name();
+
+    emit tracksRemoved( ids );
     emit changed();
-
-/*    QList<Tomahawk::query_ptr> tracks;
-    int i = 0;
-    foreach ( const query_ptr& query, m_tracks )
-    {
-        foreach ( const QString& file, files )
-        {
-            bool found = false;
-            foreach ( const result_ptr& result, query->results() )
-            {
-                if ( file == result->url() )
-                {
-//                    qDebug() << Q_FUNC_INFO << "Found deleted result:" << file;
-                    tracks << query;
-                    m_tracks.removeAt( i );
-                    i--;
-                    found = true;
-                    break;
-                }
-            }
-            if ( found )
-                break;
-        }
-
-        i++;
-    }
-
-    tDebug() << "Emitting tracks removed:" << tracks.size();
-    emit tracksRemoved( tracks );*/
 }
 
 
 void
 Collection::moveAutoToStation( const QString& guid )
 {
-    if( m_autoplaylists.contains( guid ) )
+    if ( m_autoplaylists.contains( guid ) )
         m_stations.insert( guid, m_autoplaylists.take( guid ) );
 }
 
@@ -273,6 +237,6 @@ Collection::moveAutoToStation( const QString& guid )
 void
 Collection::moveStationToAuto( const QString& guid )
 {
-    if( m_stations.contains( guid ) )
+    if ( m_stations.contains( guid ) )
         m_autoplaylists.insert( guid, m_stations.take( guid ) );
 }
diff --git a/src/libtomahawk/collection.h b/src/libtomahawk/collection.h
index 7bc713313..7a8b2df37 100644
--- a/src/libtomahawk/collection.h
+++ b/src/libtomahawk/collection.h
@@ -35,7 +35,6 @@
 #include "functimeout.h"
 #include "playlist.h"
 #include "playlist/dynamic/DynamicPlaylist.h"
-#include "query.h"
 
 #include "dllmacro.h"
 
@@ -79,8 +78,8 @@ public:
     unsigned int lastmodified() const { return m_lastmodified; }
 
 signals:
-    void tracksAdded( const QList<Tomahawk::query_ptr>& tracks );
-    void tracksRemoved( const QList<Tomahawk::query_ptr>& tracks );
+    void tracksAdded( const QList<unsigned int>& ids );
+    void tracksRemoved( const QList<unsigned int>& ids );
 
     void playlistsAdded( const QList<Tomahawk::playlist_ptr>& );
     void playlistsDeleted( const QList<Tomahawk::playlist_ptr>& );
@@ -101,8 +100,8 @@ public slots:
     void setAutoPlaylists( const QList< Tomahawk::dynplaylist_ptr >& autoplists );
     void setStations( const QList< Tomahawk::dynplaylist_ptr >& stations );
 
-    void setTracks( const QList<Tomahawk::query_ptr>& tracks );
-    void delTracks( const QStringList& files );
+    void setTracks( const QList<unsigned int>& ids );
+    void delTracks( const QList<unsigned int>& ids );
 
 protected:
     QString m_name;
diff --git a/src/libtomahawk/database/databasecommand_addfiles.cpp b/src/libtomahawk/database/databasecommand_addfiles.cpp
index d0680bb18..6d840a766 100644
--- a/src/libtomahawk/database/databasecommand_addfiles.cpp
+++ b/src/libtomahawk/database/databasecommand_addfiles.cpp
@@ -56,7 +56,6 @@ DatabaseCommand_AddFiles::files() const
 void
 DatabaseCommand_AddFiles::postCommitHook()
 {
-    qDebug() << Q_FUNC_INFO;
     if ( source().isNull() || source()->collection().isNull() )
     {
         qDebug() << "Source has gone offline, not emitting to GUI.";
@@ -67,13 +66,13 @@ DatabaseCommand_AddFiles::postCommitHook()
     // collection browser will update/fade in etc.
     Collection* coll = source()->collection().data();
 
-    connect( this, SIGNAL( notify( QList<Tomahawk::query_ptr> ) ),
-             coll, SLOT( setTracks( QList<Tomahawk::query_ptr> ) ),
+    connect( this, SIGNAL( notify( QList<unsigned int> ) ),
+             coll, SLOT( setTracks( QList<unsigned int> ) ),
              Qt::QueuedConnection );
 
-    emit notify( m_queries );
+    emit notify( m_ids );
 
-    if( source()->isLocal() )
+    if ( source()->isLocal() )
     {
         Servent::instance()->triggerDBSync();
 
@@ -185,7 +184,7 @@ DatabaseCommand_AddFiles::exec( DatabaseImpl* dbi )
         query_trackattr.bindValue( 2, year );
         query_trackattr.exec();
 
-        QVariantMap attr;
+/*        QVariantMap attr;
         Tomahawk::query_ptr query = Tomahawk::Query::get( artist, track, album );
         attr["releaseyear"] = m.value( "year" );
 
@@ -210,12 +209,13 @@ DatabaseCommand_AddFiles::exec( DatabaseImpl* dbi )
         results << result;
         query->addResults( results );
 
-        m_queries << query;
+        m_queries << query;*/
+
+        m_ids << trackid;
         added++;
     }
     qDebug() << "Inserted" << added << "tracks to database";
 
-    // TODO building the index could be a separate job, outside this transaction
     if ( added )
         source()->updateIndexWhenSynced();
 
diff --git a/src/libtomahawk/database/databasecommand_addfiles.h b/src/libtomahawk/database/databasecommand_addfiles.h
index 5d82ec9ac..9666a02ab 100644
--- a/src/libtomahawk/database/databasecommand_addfiles.h
+++ b/src/libtomahawk/database/databasecommand_addfiles.h
@@ -1,5 +1,5 @@
 /* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
- * 
+ *
  *   Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
  *
  *   Tomahawk is free software: you can redistribute it and/or modify
@@ -55,11 +55,11 @@ public:
 
 signals:
     void done( const QList<QVariant>&, const Tomahawk::collection_ptr& );
-    void notify( const QList<Tomahawk::query_ptr>& );
+    void notify( const QList<unsigned int>& ids );
 
 private:
     QVariantList m_files;
-    QList<Tomahawk::query_ptr> m_queries;
+    QList<unsigned int> m_ids;
 };
 
 #endif // DATABASECOMMAND_ADDFILES_H
diff --git a/src/libtomahawk/database/databasecommand_deletefiles.cpp b/src/libtomahawk/database/databasecommand_deletefiles.cpp
index a9e3b4406..65e54755a 100644
--- a/src/libtomahawk/database/databasecommand_deletefiles.cpp
+++ b/src/libtomahawk/database/databasecommand_deletefiles.cpp
@@ -45,11 +45,14 @@ DatabaseCommand_DeleteFiles::postCommitHook()
     // collection browser will update/fade in etc.
     Collection* coll = source()->collection().data();
 
-    connect( this, SIGNAL( notify( QStringList ) ),
-             coll,   SLOT( delTracks( QStringList ) ), Qt::QueuedConnection );
+    connect( this, SIGNAL( notify( QList<unsigned int> ) ),
+             coll,   SLOT( delTracks( QList<unsigned int> ) ), Qt::QueuedConnection );
 
-    tDebug() << "Notifying of deleted tracks: " << m_files.size() << " from source " << source()->id();
-    emit notify( m_files );
+    tDebug() << "Notifying of deleted tracks:" << m_ids.size() << "from source" << source()->id();
+    QList<unsigned int> ids;
+    foreach ( QVariant id, m_ids )
+        ids << id.toUInt();
+    emit notify( ids );
 
     if( source()->isLocal() )
         Servent::instance()->triggerDBSync();
@@ -59,7 +62,6 @@ DatabaseCommand_DeleteFiles::postCommitHook()
 void
 DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi )
 {
-//    qDebug() << Q_FUNC_INFO;
     Q_ASSERT( !source().isNull() );
 
     QVariant srcid = source()->isLocal() ? QVariant( QVariant::Int ) : source()->id();
@@ -68,7 +70,6 @@ DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi )
 
     if ( source()->isLocal() )
     {
-        tDebug() << Q_FUNC_INFO << " source is local";
         if ( m_dir.path() != QString( "." ) )
         {
             tDebug() << "Deleting" << m_dir.path() << "from db for localsource" << srcid;
@@ -95,7 +96,7 @@ DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi )
         }
         else if ( !m_ids.isEmpty() )
         {
-            tDebug() << Q_FUNC_INFO << " deleting given ids";
+            tDebug() << Q_FUNC_INFO << "deleting given ids";
             TomahawkSqlQuery dirquery = dbi->newquery();
 
             QString idstring;
@@ -104,23 +105,19 @@ DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi )
             idstring.chop( 2 ); //remove the trailing ", "
 
             dirquery.prepare( QString( "SELECT id, url FROM file WHERE source IS NULL AND id IN ( %1 )" ).arg( idstring ) );
-            
+
             dirquery.exec();
             while ( dirquery.next() )
             {
-                //tDebug() << Q_FUNC_INFO << " found dirquery value 0: " << dirquery.value( 0 ).toString() << " and value 1: " << dirquery.value( 1 ).toString();
                 m_files << dirquery.value( 1 ).toString();
             }
-
-            //tDebug() << Q_FUNC_INFO << " executed query was: " << dirquery.executedQuery();
-            //tDebug() << Q_FUNC_INFO << " files selected for delete: " << m_files;
         }
         else if ( m_deleteAll )
         {
             TomahawkSqlQuery dirquery = dbi->newquery();
-            
+
             dirquery.prepare( QString( "SELECT id, url FROM file WHERE source IS NULL" ) );
-            
+
             dirquery.exec();
             while ( dirquery.next() )
             {
@@ -134,10 +131,10 @@ DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi )
         if ( m_deleteAll )
         {
             TomahawkSqlQuery dirquery = dbi->newquery();
-            
+
             dirquery.prepare( QString( "SELECT url FROM file WHERE source = %1" ).arg( source()->id() ) );
-            
             dirquery.exec();
+
             while ( dirquery.next() )
                 m_ids << dirquery.value( 0 ).toString();
         }
@@ -151,43 +148,28 @@ DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi )
         if ( !m_ids.isEmpty() )
         {
             delquery.prepare( QString( "DELETE FROM file WHERE source %1" )
-            .arg( source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( source()->id() ) ) );
+                        .arg( source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( source()->id() ) ) );
 
-            if( !delquery.exec() )
-            {
-                qDebug() << "Failed to delete file:"
-                << delquery.lastError().databaseText()
-                << delquery.lastError().driverText()
-                << delquery.boundValues();
-            }
+            delquery.exec();
         }
     }
     else if ( !m_ids.isEmpty() )
     {
-        tDebug() << Q_FUNC_INFO << " executing delete";
         delquery.prepare( QString( "DELETE FROM file WHERE source %1 AND %2 IN ( ? )" )
                              .arg( source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( source()->id() ) )
                              .arg( source()->isLocal() ? "id" : "url"  ) );
 
         QString idstring;
         foreach( const QVariant& id, m_ids )
-                idstring.append( id.toString() + ", " );
+            idstring.append( id.toString() + ", " );
         idstring.chop( 2 ); //remove the trailing ", "
 
         delquery.prepare( QString( "DELETE FROM file WHERE source %1 AND %2 IN ( %3 )" )
                              .arg( source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( source()->id() ) )
                              .arg( source()->isLocal() ? "id" : "url"  )
                              .arg( idstring ) );
-        
-        if( !delquery.exec() )
-        {
-            qDebug() << "Failed to delete file:"
-                << delquery.lastError().databaseText()
-                << delquery.lastError().driverText()
-                << delquery.boundValues();
-        }
 
-        //tDebug() << Q_FUNC_INFO << " executed query was: " << delquery.executedQuery();
+        delquery.exec();
     }
 
     emit done( m_files, source()->collection() );
diff --git a/src/libtomahawk/database/databasecommand_deletefiles.h b/src/libtomahawk/database/databasecommand_deletefiles.h
index 11f6d5fad..fd007b145 100644
--- a/src/libtomahawk/database/databasecommand_deletefiles.h
+++ b/src/libtomahawk/database/databasecommand_deletefiles.h
@@ -74,7 +74,7 @@ public:
 
 signals:
     void done( const QStringList&, const Tomahawk::collection_ptr& );
-    void notify( const QStringList& );
+    void notify( const QList<unsigned int>& ids );
 
 private:
     QStringList m_files;
diff --git a/src/libtomahawk/playlist/treemodel.cpp b/src/libtomahawk/playlist/treemodel.cpp
index 41920f2fb..68b7937a2 100644
--- a/src/libtomahawk/playlist/treemodel.cpp
+++ b/src/libtomahawk/playlist/treemodel.cpp
@@ -559,7 +559,7 @@ TreeModel::addAllCollections()
     QList<Tomahawk::source_ptr> sources = SourceList::instance()->sources();
     foreach ( const source_ptr& source, sources )
     {
-        connect( source->collection().data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ) );
+        connect( source->collection().data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ), Qt::UniqueConnection );
     }
 
     m_title = tr( "All Artists" );
@@ -668,7 +668,7 @@ TreeModel::addCollection( const collection_ptr& collection )
 
     Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
 
-    connect( collection.data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ) );
+    connect( collection.data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ), Qt::UniqueConnection );
 
     if ( !collection->source()->avatar().isNull() )
         setIcon( collection->source()->avatar() );
@@ -708,7 +708,7 @@ TreeModel::addFilteredCollection( const collection_ptr& collection, unsigned int
 void
 TreeModel::onSourceAdded( const Tomahawk::source_ptr& source )
 {
-    connect( source->collection().data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ) );
+    connect( source->collection().data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ), Qt::UniqueConnection );
 }
 
 
diff --git a/src/libtomahawk/utils/logger.cpp b/src/libtomahawk/utils/logger.cpp
index 846e2586b..ea7c3bada 100644
--- a/src/libtomahawk/utils/logger.cpp
+++ b/src/libtomahawk/utils/logger.cpp
@@ -31,7 +31,7 @@
 #include "utils/tomahawkutils.h"
 
 #define LOGFILE TomahawkUtils::appLogDir().filePath( "Tomahawk.log" ).toLocal8Bit()
-#define LOGFILE_SIZE 1024 * 512
+#define LOGFILE_SIZE 1024 * 256
 
 #define RELEASE_LEVEL_THRESHOLD 0
 #define DEBUG_LEVEL_THRESHOLD LOGEXTRA
diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp
index 922d1e2ed..1c65f6064 100644
--- a/src/tomahawkapp.cpp
+++ b/src/tomahawkapp.cpp
@@ -507,6 +507,7 @@ TomahawkApp::initServent()
     }
 }
 
+
 void
 TomahawkApp::initSIP()
 {
@@ -532,6 +533,7 @@ TomahawkApp::initSIP()
     }
 }
 
+
 void
 TomahawkApp::spotifyApiCheckFinished()
 {
@@ -557,7 +559,6 @@ TomahawkApp::activate()
 bool
 TomahawkApp::loadUrl( const QString& url )
 {
-    activate();
     if ( url.startsWith( "tomahawk://" ) )
         return GlobalActionManager::instance()->parseTomahawkLink( url );
     else if ( url.contains( "open.spotify.com" ) || url.contains( "spotify:track" ) )
@@ -575,7 +576,8 @@ TomahawkApp::loadUrl( const QString& url )
             l->load( QUrl::fromUserInput( url ) );
 
             return true;
-        } else if ( info.suffix() == "jspf" )
+        }
+        else if ( info.suffix() == "jspf" )
         {
             JSPFLoader* l = new JSPFLoader( true, this );
             tDebug( LOGINFO ) << "Loading j-spiff:" << url;
@@ -594,10 +596,9 @@ TomahawkApp::instanceStarted( KDSingleApplicationGuard::Instance instance )
 {
     tDebug( LOGINFO ) << "Instance started!" << instance.pid << instance.arguments;
 
+    activate();
     if ( instance.arguments.size() < 2 )
-    {
         return;
-    }
 
     QString arg1 = instance.arguments[ 1 ];
     loadUrl( arg1 );
diff --git a/src/tomahawkapp.h b/src/tomahawkapp.h
index 47127f685..495d09ef6 100644
--- a/src/tomahawkapp.h
+++ b/src/tomahawkapp.h
@@ -143,7 +143,7 @@ private:
 };
 
 Q_DECLARE_METATYPE( QPersistentModelIndex )
-Q_DECLARE_METATYPE(PairList)
+Q_DECLARE_METATYPE( PairList )
 
 #endif // TOMAHAWKAPP_H