diff --git a/src/libtomahawk/infosystem/infosystem.cpp b/src/libtomahawk/infosystem/infosystem.cpp
index 1618aec80..973be3844 100644
--- a/src/libtomahawk/infosystem/infosystem.cpp
+++ b/src/libtomahawk/infosystem/infosystem.cpp
@@ -59,13 +59,15 @@ InfoSystem::InfoSystem( QObject *parent )
     qDebug() << Q_FUNC_INFO;
 
     m_infoSystemCacheThreadController = new InfoSystemCacheThread( this );
-    m_cache = m_infoSystemCacheThreadController->cache();
-    //m_cache.data()->moveToThread( m_infoSystemCacheThreadController );
+    m_cache = QWeakPointer< InfoSystemCache >( new InfoSystemCache() );
+    m_cache.data()->moveToThread( m_infoSystemCacheThreadController );
+    m_infoSystemCacheThreadController->setCache( m_cache );
     m_infoSystemCacheThreadController->start( QThread::IdlePriority );
 
     m_infoSystemWorkerThreadController = new InfoSystemWorkerThread( this );
-    m_worker = m_infoSystemWorkerThreadController->worker();
-    //m_worker.data()->moveToThread( m_infoSystemWorkerThreadController );
+    m_worker = QWeakPointer< InfoSystemWorker >( new InfoSystemWorker() );
+    m_worker.data()->moveToThread( m_infoSystemWorkerThreadController );
+    m_infoSystemWorkerThreadController->setWorker( m_worker );
     m_infoSystemWorkerThreadController->start();
 
     QMetaObject::invokeMethod( m_worker.data(), "init", Qt::QueuedConnection, Q_ARG( QWeakPointer< Tomahawk::InfoSystem::InfoSystemCache >, m_cache ) );
@@ -159,7 +161,6 @@ InfoSystem::pushInfo( const QString &caller, const InfoTypeMap &input )
 InfoSystemCacheThread::InfoSystemCacheThread( QObject *parent )
     : QThread( parent )
 {
-    m_cache = QWeakPointer< InfoSystemCache >( new InfoSystemCache() );
 }
 
 InfoSystemCacheThread::~InfoSystemCacheThread()
@@ -179,21 +180,27 @@ InfoSystemCacheThread::cache() const
     return m_cache;
 }
 
+void
+InfoSystemCacheThread::setCache( QWeakPointer< InfoSystemCache >  cache )
+{
+    m_cache = cache;
+}
+
 InfoSystemWorkerThread::InfoSystemWorkerThread( QObject *parent )
     : QThread( parent )
 {
-    m_worker = QWeakPointer< InfoSystemWorker >( new InfoSystemWorker() );
 }
 
 InfoSystemWorkerThread::~InfoSystemWorkerThread()
 {
-    delete m_worker.data();
 }
 
 void
 InfoSystemWorkerThread::InfoSystemWorkerThread::run()
 {
     exec();
+    if( m_worker )
+        delete m_worker.data();
 }
 
 QWeakPointer< InfoSystemWorker >
@@ -202,6 +209,12 @@ InfoSystemWorkerThread::worker() const
     return m_worker;
 }
 
+void
+InfoSystemWorkerThread::setWorker( QWeakPointer< InfoSystemWorker >  worker )
+{
+    m_worker = worker;
+}
+
 
 } //namespace InfoSystem
 
diff --git a/src/libtomahawk/infosystem/infosystem.h b/src/libtomahawk/infosystem/infosystem.h
index bc000bae8..c918970cb 100644
--- a/src/libtomahawk/infosystem/infosystem.h
+++ b/src/libtomahawk/infosystem/infosystem.h
@@ -169,6 +169,7 @@ public:
 
     void run();
     QWeakPointer< InfoSystemCache > cache() const;
+    void setCache( QWeakPointer< InfoSystemCache >  cache );
 
 private:
     QWeakPointer< InfoSystemCache > m_cache;
@@ -184,6 +185,7 @@ public:
 
     void run();
     QWeakPointer< InfoSystemWorker > worker() const;
+    void setWorker( QWeakPointer< InfoSystemWorker >  worker );
 
 private:
     QWeakPointer< InfoSystemWorker > m_worker;