diff --git a/src/headlesscheck.h b/src/headlesscheck.h
index 05f55f4ce..4088eac66 100644
--- a/src/headlesscheck.h
+++ b/src/headlesscheck.h
@@ -22,7 +22,7 @@
 #ifdef ENABLE_HEADLESS
 
 #define TOMAHAWK_APPLICATION QCoreApplication
-#include <QApplication>
+#include <QCoreApplication>
 
 #else
 
diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt
index 2bde15e72..4bcaff785 100644
--- a/src/libtomahawk/CMakeLists.txt
+++ b/src/libtomahawk/CMakeLists.txt
@@ -12,9 +12,166 @@ add_definitions( ${QT_DEFINITIONS} )
 add_definitions( -DQT_SHARED )
 add_definitions( -DDLLEXPORT_PRO )
 
+set( libGuiSources
+    contextmenu.cpp
+    dropjob.cpp
+    globalactionmanager.cpp
+    viewpage.cpp
+    viewmanager.cpp
+
+    context/ContextPage.cpp
+    context/ContextWidget.cpp
+    context/pages/TopTracksContext.cpp
+    context/pages/RelatedArtistsContext.cpp
+    context/pages/WikipediaContext.cpp
+    context/pages/WebContext.cpp
+
+    jobview/JobStatusView.cpp
+    jobview/JobStatusModel.cpp
+    jobview/JobStatusDelegate.cpp
+    jobview/PipelineStatusItem.cpp
+    jobview/TransferStatusItem.cpp
+    jobview/LatchedStatusItem.cpp
+
+    infobar/infobar.cpp
+
+    infosystem/infosystemcache.cpp
+    infosystem/infosystem.cpp
+    infosystem/infosystemworker.cpp
+    infosystem/infoplugins/generic/echonestplugin.cpp
+    infosystem/infoplugins/generic/lastfmplugin.cpp
+    infosystem/infoplugins/generic/chartsplugin.cpp
+    infosystem/infoplugins/generic/spotifyPlugin.cpp
+    infosystem/infoplugins/generic/hypemPlugin.cpp
+    infosystem/infoplugins/generic/musixmatchplugin.cpp
+    infosystem/infoplugins/generic/musicbrainzPlugin.cpp
+    infosystem/infoplugins/generic/RoviPlugin.cpp
+
+    playlist/treemodel.cpp
+    playlist/treeproxymodel.cpp
+    playlist/treeheader.cpp
+    playlist/treeitemdelegate.cpp
+    playlist/collectionproxymodel.cpp
+    playlist/collectionflatmodel.cpp
+    playlist/collectionview.cpp
+    playlist/playlistmodel.cpp
+    playlist/playlistproxymodel.cpp
+    playlist/playlistview.cpp
+    playlist/playlistitemdelegate.cpp
+    playlist/queueproxymodel.cpp
+    playlist/queueview.cpp
+    playlist/trackmodel.cpp
+    playlist/trackmodelitem.cpp
+    playlist/trackproxymodel.cpp
+    playlist/trackview.cpp
+    playlist/trackheader.cpp
+    playlist/treemodelitem.cpp
+    playlist/albumitem.cpp
+    playlist/albummodel.cpp
+    playlist/albumproxymodel.cpp
+    playlist/albumitemdelegate.cpp
+    playlist/albumview.cpp
+    playlist/artistview.cpp
+    playlist/customplaylistview.cpp
+    playlist/ViewHeader.cpp
+    playlist/PlaylistUpdaterInterface.cpp
+    playlist/XspfUpdater.cpp
+
+    playlist/dynamic/DynamicPlaylist.cpp
+    playlist/dynamic/DynamicControl.cpp
+    playlist/dynamic/GeneratorFactory.cpp
+    playlist/dynamic/GeneratorInterface.cpp
+    playlist/dynamic/DynamicView.cpp
+    playlist/dynamic/DynamicModel.cpp
+    playlist/dynamic/DynamicPlaylistRevision.cpp
+    playlist/dynamic/echonest/EchonestGenerator.cpp
+    playlist/dynamic/echonest/EchonestControl.cpp
+    playlist/dynamic/echonest/EchonestSteerer.cpp
+    playlist/dynamic/widgets/DynamicWidget.cpp
+    playlist/dynamic/widgets/DynamicControlWrapper.cpp
+    playlist/dynamic/widgets/DynamicControlList.cpp
+    playlist/dynamic/widgets/ReadOrWriteWidget.cpp
+    playlist/dynamic/widgets/MiscControlWidgets.cpp
+    playlist/dynamic/widgets/CollapsibleControls.cpp
+    playlist/dynamic/widgets/DynamicSetupWidget.cpp
+    playlist/dynamic/widgets/LoadingSpinner.cpp
+    playlist/dynamic/database/DatabaseControl.cpp
+    playlist/dynamic/database/DatabaseGenerator.cpp
+
+    playlist/topbar/topbar.cpp
+    playlist/topbar/clearbutton.cpp
+    playlist/topbar/searchlineedit.cpp
+    playlist/topbar/lineedit.cpp
+    playlist/topbar/searchbutton.cpp
+
+    sip/SipModel.cpp
+
+    utils/widgetdragfilter.cpp
+    utils/xspfloader.cpp
+    utils/xspfgenerator.cpp
+    utils/jspfloader.cpp
+    utils/spotifyparser.cpp
+    utils/itunesparser.cpp
+    utils/rdioparser.cpp
+    utils/shortenedlinkparser.cpp
+    utils/stylehelper.cpp
+    utils/dropjobnotifier.cpp
+    utils/proxystyle.cpp
+
+    widgets/checkdirtree.cpp
+    widgets/querylabel.cpp
+    widgets/imagebutton.cpp
+    widgets/animatedsplitter.cpp
+    widgets/elidedlabel.cpp
+    widgets/newplaylistwidget.cpp
+    widgets/searchwidget.cpp
+    widgets/SeekSlider.cpp
+    widgets/playlisttypeselectordlg.cpp
+    widgets/welcomewidget.cpp
+    widgets/whatshotwidget.cpp
+    widgets/RecentlyPlayedPlaylistsModel.cpp
+    widgets/RecentPlaylistsModel.cpp
+    widgets/OverlayButton.cpp
+    widgets/overlaywidget.cpp
+    widgets/HeaderLabel.cpp
+    widgets/HeaderWidget.cpp
+    widgets/combobox.cpp
+    widgets/ToggleButton.cpp
+    widgets/SocialPlaylistWidget.cpp
+    widgets/infowidgets/sourceinfowidget.cpp
+    widgets/infowidgets/ArtistInfoWidget.cpp
+    widgets/infowidgets/AlbumInfoWidget.cpp
+    widgets/Breadcrumb.cpp
+    widgets/BreadcrumbButton.cpp
+)
+
 set( libGuiHeaders
+    contextmenu.h
+    dropjob.h
     viewpage.h
     viewmanager.h
+    globalactionmanager.h
+
+    context/ContextPage.h
+    context/ContextWidget.h
+    context/pages/TopTracksContext.h
+    context/pages/RelatedArtistsContext.h
+    context/pages/WikipediaContext.h
+    context/pages/WebContext.h
+
+    infobar/infobar.h
+
+    infosystem/infosystem.h
+    infosystem/infosystemworker.h
+    infosystem/infosystemcache.h
+    infosystem/infoplugins/generic/echonestplugin.h
+    infosystem/infoplugins/generic/lastfmplugin.h
+    infosystem/infoplugins/generic/chartsplugin.h
+    infosystem/infoplugins/generic/spotifyPlugin.h
+    infosystem/infoplugins/generic/hypemPlugin.h
+    infosystem/infoplugins/generic/musixmatchplugin.h
+    infosystem/infoplugins/generic/musicbrainzPlugin.h
+    infosystem/infoplugins/generic/RoviPlugin.h
 
     playlist/topbar/topbar.h
     playlist/topbar/clearbutton.h
@@ -22,17 +179,106 @@ set( libGuiHeaders
     playlist/topbar/lineedit.h
     playlist/topbar/lineedit_p.h
     playlist/topbar/searchbutton.h
-)
 
-set( libGuiSources
-    viewpage.cpp
-    viewmanager.cpp
+ playlist/treemodel.h
+    playlist/treeproxymodel.h
+    playlist/treeheader.h
+    playlist/treeitemdelegate.h
+    playlist/collectionproxymodel.h
+    playlist/collectionflatmodel.h
+    playlist/collectionview.h
+    playlist/playlistmodel.h
+    playlist/playlistproxymodel.h
+    playlist/playlistview.h
+    playlist/playlistitemdelegate.h
+    playlist/queueproxymodel.h
+    playlist/queueview.h
+    playlist/trackmodel.h
+    playlist/trackmodelitem.h
+    playlist/trackproxymodel.h
+    playlist/trackview.h
+    playlist/trackheader.h
+    playlist/treemodelitem.h
+    playlist/albumitem.h
+    playlist/albummodel.h
+    playlist/albumproxymodel.h
+    playlist/albumitemdelegate.h
+    playlist/albumview.h
+    playlist/artistview.h
+    playlist/customplaylistview.h
+    playlist/ViewHeader.h
+    playlist/PlaylistUpdaterInterface.h
+    playlist/XspfUpdater.h
+
+    playlist/dynamic/DynamicPlaylist.h
+    playlist/dynamic/DynamicControl.h
+    playlist/dynamic/GeneratorInterface.h
+    playlist/dynamic/DynamicView.h
+    playlist/dynamic/DynamicModel.h
+    playlist/dynamic/echonest/EchonestGenerator.h
+    playlist/dynamic/echonest/EchonestControl.h
+    playlist/dynamic/echonest/EchonestSteerer.h
+    playlist/dynamic/widgets/DynamicWidget.h
+    playlist/dynamic/widgets/DynamicControlWrapper.h
+    playlist/dynamic/widgets/DynamicControlList.h
+    playlist/dynamic/widgets/ReadOrWriteWidget.h
+    playlist/dynamic/widgets/MiscControlWidgets.h
+    playlist/dynamic/widgets/CollapsibleControls.h
+    playlist/dynamic/widgets/DynamicSetupWidget.h
+    playlist/dynamic/widgets/LoadingSpinner.h
+    playlist/dynamic/database/DatabaseControl.h
+    playlist/dynamic/database/DatabaseGenerator.h
+    sip/SipModel.h
+
+    utils/widgetdragfilter.h
+    utils/xspfloader.h
+    utils/xspfgenerator.h
+    utils/jspfloader.h
+    utils/spotifyparser.h
+    utils/itunesparser.h
+    utils/rdioparser.h
+    utils/shortenedlinkparser.h
+    utils/qnr_iodevicestream.h
+    utils/dropjobnotifier.h
+
+    widgets/checkdirtree.h
+    widgets/querylabel.h
+    widgets/animatedcounterlabel.h
+    widgets/imagebutton.h
+    widgets/animatedsplitter.h
+    widgets/elidedlabel.h
+    widgets/newplaylistwidget.h
+    widgets/searchwidget.h
+    widgets/SeekSlider.h
+    widgets/playlisttypeselectordlg.h
+    widgets/welcomewidget.h
+    widgets/whatshotwidget.h
+    widgets/RecentlyPlayedPlaylistsModel.h
+    widgets/RecentPlaylistsModel.h
+    widgets/OverlayButton.h
+    widgets/overlaywidget.h
+    widgets/HeaderLabel.h
+    widgets/HeaderWidget.h
+    widgets/combobox.h
+    widgets/ToggleButton.h
+    widgets/SocialPlaylistWidget.h
+    widgets/infowidgets/sourceinfowidget.h
+    widgets/infowidgets/ArtistInfoWidget.h
+    widgets/infowidgets/ArtistInfoWidget_p.h
+    widgets/infowidgets/AlbumInfoWidget.h
+    widgets/Breadcrumb.h
+    widgets/BreadcrumbButton.h
+
+    jobview/JobStatusView.h
+    jobview/JobStatusModel.h
+    jobview/JobStatusDelegate.h
+    jobview/JobStatusItem.h
+    jobview/PipelineStatusItem.h
+    jobview/TransferStatusItem.h
+    jobview/LatchedStatusItem.h
+
+    thirdparty/Qocoa/qsearchfield.h
 
-    playlist/topbar/topbar.cpp
-    playlist/topbar/clearbutton.cpp
-    playlist/topbar/searchlineedit.cpp
-    playlist/topbar/lineedit.cpp
-    playlist/topbar/searchbutton.cpp
 )
 
 set( libSources
@@ -51,9 +297,6 @@ set( libSources
     result.cpp
     source.cpp
     sourceplaylistinterface.cpp
-    globalactionmanager.cpp
-    contextmenu.cpp
-    dropjob.cpp
     playlistinterface.cpp
     LatchManager.cpp
 
@@ -61,17 +304,10 @@ set( libSources
 
     sip/SipPlugin.cpp
     sip/SipHandler.cpp
-    sip/SipModel.cpp
     sip/sipinfo.cpp
 
     audio/audioengine.cpp
 
-    context/ContextPage.cpp
-    context/ContextWidget.cpp
-    context/pages/TopTracksContext.cpp
-    context/pages/RelatedArtistsContext.cpp
-    context/pages/WikipediaContext.cpp
-    context/pages/WebContext.cpp
 
     database/database.cpp
     database/fuzzyindex.cpp
@@ -125,72 +361,6 @@ set( libSources
     database/databasecommand_settrackattributes.cpp
     database/database.cpp
 
-    infobar/infobar.cpp
-
-    infosystem/infosystemcache.cpp
-    infosystem/infosystem.cpp
-    infosystem/infosystemworker.cpp
-    infosystem/infoplugins/generic/echonestplugin.cpp
-    infosystem/infoplugins/generic/lastfmplugin.cpp
-    infosystem/infoplugins/generic/chartsplugin.cpp
-    infosystem/infoplugins/generic/spotifyPlugin.cpp
-    infosystem/infoplugins/generic/hypemPlugin.cpp
-    infosystem/infoplugins/generic/musixmatchplugin.cpp
-    infosystem/infoplugins/generic/musicbrainzPlugin.cpp
-    infosystem/infoplugins/generic/RoviPlugin.cpp
-
-    playlist/treemodel.cpp
-    playlist/treeproxymodel.cpp
-    playlist/treeheader.cpp
-    playlist/treeitemdelegate.cpp
-    playlist/collectionproxymodel.cpp
-    playlist/collectionflatmodel.cpp
-    playlist/collectionview.cpp
-    playlist/playlistmodel.cpp
-    playlist/playlistproxymodel.cpp
-    playlist/playlistview.cpp
-    playlist/playlistitemdelegate.cpp
-    playlist/queueproxymodel.cpp
-    playlist/queueview.cpp
-    playlist/trackmodel.cpp
-    playlist/trackmodelitem.cpp
-    playlist/trackproxymodel.cpp
-    playlist/trackview.cpp
-    playlist/trackheader.cpp
-    playlist/treemodelitem.cpp
-    playlist/albumitem.cpp
-    playlist/albummodel.cpp
-    playlist/albumproxymodel.cpp
-    playlist/albumitemdelegate.cpp
-    playlist/albumview.cpp
-    playlist/artistview.cpp
-    playlist/customplaylistview.cpp
-    playlist/ViewHeader.cpp
-    playlist/PlaylistUpdaterInterface.cpp
-    playlist/XspfUpdater.cpp
-
-
-    playlist/dynamic/DynamicPlaylist.cpp
-    playlist/dynamic/DynamicControl.cpp
-    playlist/dynamic/GeneratorFactory.cpp
-    playlist/dynamic/GeneratorInterface.cpp
-    playlist/dynamic/DynamicView.cpp
-    playlist/dynamic/DynamicModel.cpp
-    playlist/dynamic/DynamicPlaylistRevision.cpp
-    playlist/dynamic/echonest/EchonestGenerator.cpp
-    playlist/dynamic/echonest/EchonestControl.cpp
-    playlist/dynamic/echonest/EchonestSteerer.cpp
-    playlist/dynamic/widgets/DynamicWidget.cpp
-    playlist/dynamic/widgets/DynamicControlWrapper.cpp
-    playlist/dynamic/widgets/DynamicControlList.cpp
-    playlist/dynamic/widgets/ReadOrWriteWidget.cpp
-    playlist/dynamic/widgets/MiscControlWidgets.cpp
-    playlist/dynamic/widgets/CollapsibleControls.cpp
-    playlist/dynamic/widgets/DynamicSetupWidget.cpp
-    playlist/dynamic/widgets/LoadingSpinner.cpp
-    playlist/dynamic/database/DatabaseControl.cpp
-    playlist/dynamic/database/DatabaseGenerator.cpp
-
     resolvers/scriptresolver.cpp
     resolvers/qtscriptresolver.cpp
 
@@ -206,51 +376,7 @@ set( libSources
 
     utils/tomahawkutils.cpp
     utils/logger.cpp
-    utils/proxystyle.cpp
-    utils/widgetdragfilter.cpp
-    utils/xspfloader.cpp
-    utils/xspfgenerator.cpp
-    utils/jspfloader.cpp
-    utils/spotifyparser.cpp
-    utils/itunesparser.cpp
-    utils/rdioparser.cpp
-    utils/shortenedlinkparser.cpp
-    utils/stylehelper.cpp
     utils/qnr_iodevicestream.cpp
-    utils/dropjobnotifier.cpp
-
-    widgets/checkdirtree.cpp
-    widgets/querylabel.cpp
-    widgets/imagebutton.cpp
-    widgets/animatedsplitter.cpp
-    widgets/elidedlabel.cpp
-    widgets/newplaylistwidget.cpp
-    widgets/searchwidget.cpp
-    widgets/SeekSlider.cpp
-    widgets/playlisttypeselectordlg.cpp
-    widgets/welcomewidget.cpp
-    widgets/whatshotwidget.cpp
-    widgets/RecentlyPlayedPlaylistsModel.cpp
-    widgets/RecentPlaylistsModel.cpp
-    widgets/OverlayButton.cpp
-    widgets/overlaywidget.cpp
-    widgets/HeaderLabel.cpp
-    widgets/HeaderWidget.cpp
-    widgets/combobox.cpp
-    widgets/ToggleButton.cpp
-    widgets/SocialPlaylistWidget.cpp
-    widgets/infowidgets/sourceinfowidget.cpp
-    widgets/infowidgets/ArtistInfoWidget.cpp
-    widgets/infowidgets/AlbumInfoWidget.cpp
-    widgets/Breadcrumb.cpp
-    widgets/BreadcrumbButton.cpp
-
-    jobview/JobStatusView.cpp
-    jobview/JobStatusModel.cpp
-    jobview/JobStatusDelegate.cpp
-    jobview/PipelineStatusItem.cpp
-    jobview/TransferStatusItem.cpp
-    jobview/LatchedStatusItem.cpp
 
     thirdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp
     thirdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp
@@ -273,8 +399,6 @@ set( libHeaders
     source.h
     sourceplaylistinterface.h
     globalactionmanager.h
-    contextmenu.h
-    dropjob.h
     LatchManager.h
 
     artist.h
@@ -285,18 +409,10 @@ set( libHeaders
 
     sip/SipPlugin.h
     sip/SipHandler.h
-    sip/SipModel.h
     sip/sipinfo.h
 
     audio/audioengine.h
 
-    context/ContextPage.h
-    context/ContextWidget.h
-    context/pages/TopTracksContext.h
-    context/pages/RelatedArtistsContext.h
-    context/pages/WikipediaContext.h
-    context/pages/WebContext.h
-
     database/database.h
     database/fuzzyindex.h
     database/databaseworker.h
@@ -348,20 +464,6 @@ set( libHeaders
     database/databasecommand_trackattributes.h
     database/databasecommand_settrackattributes.h
 
-    infobar/infobar.h
-
-    infosystem/infosystem.h
-    infosystem/infosystemworker.h
-    infosystem/infosystemcache.h
-    infosystem/infoplugins/generic/echonestplugin.h
-    infosystem/infoplugins/generic/lastfmplugin.h
-    infosystem/infoplugins/generic/chartsplugin.h
-    infosystem/infoplugins/generic/spotifyPlugin.h
-    infosystem/infoplugins/generic/hypemPlugin.h
-    infosystem/infoplugins/generic/musixmatchplugin.h
-    infosystem/infoplugins/generic/musicbrainzPlugin.h
-    infosystem/infoplugins/generic/RoviPlugin.h
-
     network/bufferiodevice.h
     network/msgprocessor.h
     network/remotecollection.h
@@ -372,107 +474,10 @@ set( libHeaders
     network/controlconnection.h
     network/portfwdthread.h
 
-    playlist/treemodel.h
-    playlist/treeproxymodel.h
-    playlist/treeheader.h
-    playlist/treeitemdelegate.h
-    playlist/collectionproxymodel.h
-    playlist/collectionflatmodel.h
-    playlist/collectionview.h
-    playlist/playlistmodel.h
-    playlist/playlistproxymodel.h
-    playlist/playlistview.h
-    playlist/playlistitemdelegate.h
-    playlist/queueproxymodel.h
-    playlist/queueview.h
-    playlist/trackmodel.h
-    playlist/trackmodelitem.h
-    playlist/trackproxymodel.h
-    playlist/trackview.h
-    playlist/trackheader.h
-    playlist/treemodelitem.h
-    playlist/albumitem.h
-    playlist/albummodel.h
-    playlist/albumproxymodel.h
-    playlist/albumitemdelegate.h
-    playlist/albumview.h
-    playlist/artistview.h
-    playlist/customplaylistview.h
-    playlist/ViewHeader.h
-    playlist/PlaylistUpdaterInterface.h
-    playlist/XspfUpdater.h
-
-    playlist/dynamic/DynamicPlaylist.h
-    playlist/dynamic/DynamicControl.h
-    playlist/dynamic/GeneratorInterface.h
-    playlist/dynamic/DynamicView.h
-    playlist/dynamic/DynamicModel.h
-    playlist/dynamic/echonest/EchonestGenerator.h
-    playlist/dynamic/echonest/EchonestControl.h
-    playlist/dynamic/echonest/EchonestSteerer.h
-    playlist/dynamic/widgets/DynamicWidget.h
-    playlist/dynamic/widgets/DynamicControlWrapper.h
-    playlist/dynamic/widgets/DynamicControlList.h
-    playlist/dynamic/widgets/ReadOrWriteWidget.h
-    playlist/dynamic/widgets/MiscControlWidgets.h
-    playlist/dynamic/widgets/CollapsibleControls.h
-    playlist/dynamic/widgets/DynamicSetupWidget.h
-    playlist/dynamic/widgets/LoadingSpinner.h
-    playlist/dynamic/database/DatabaseControl.h
-    playlist/dynamic/database/DatabaseGenerator.h
-
     resolvers/scriptresolver.h
     resolvers/qtscriptresolver.h
 
-    utils/widgetdragfilter.h
-    utils/xspfloader.h
-    utils/xspfgenerator.h
-    utils/jspfloader.h
-    utils/spotifyparser.h
-    utils/itunesparser.h
-    utils/rdioparser.h
-    utils/shortenedlinkparser.h
-    utils/qnr_iodevicestream.h
-    utils/dropjobnotifier.h
-
-    widgets/checkdirtree.h
-    widgets/querylabel.h
-    widgets/animatedcounterlabel.h
-    widgets/imagebutton.h
-    widgets/animatedsplitter.h
-    widgets/elidedlabel.h
-    widgets/newplaylistwidget.h
-    widgets/searchwidget.h
-    widgets/SeekSlider.h
-    widgets/playlisttypeselectordlg.h
-    widgets/welcomewidget.h
-    widgets/whatshotwidget.h
-    widgets/RecentlyPlayedPlaylistsModel.h
-    widgets/RecentPlaylistsModel.h
-    widgets/OverlayButton.h
-    widgets/overlaywidget.h
-    widgets/HeaderLabel.h
-    widgets/HeaderWidget.h
-    widgets/combobox.h
-    widgets/ToggleButton.h
-    widgets/SocialPlaylistWidget.h
-    widgets/infowidgets/sourceinfowidget.h
-    widgets/infowidgets/ArtistInfoWidget.h
-    widgets/infowidgets/ArtistInfoWidget_p.h
-    widgets/infowidgets/AlbumInfoWidget.h
-    widgets/Breadcrumb.h
-    widgets/BreadcrumbButton.h
-
-    jobview/JobStatusView.h
-    jobview/JobStatusModel.h
-    jobview/JobStatusDelegate.h
-    jobview/JobStatusItem.h
-    jobview/PipelineStatusItem.h
-    jobview/TransferStatusItem.h
-    jobview/LatchedStatusItem.h
-
     thirdparty/kdsingleapplicationguard/kdsingleapplicationguard.h
-    thirdparty/Qocoa/qsearchfield.h
 )
 
 set( libHeaders_NoMOC
@@ -528,14 +533,14 @@ IF(LIBATTICA_FOUND)
 ENDIF(LIBATTICA_FOUND)
 
 IF( UNIX AND NOT APPLE )
-    SET( libSources ${libSources}
+    SET( libGuiSources ${libGuiSources}
       infosystem/infoplugins/unix/mprispluginrootadaptor.cpp
       infosystem/infoplugins/unix/mprispluginplayeradaptor.cpp
       infosystem/infoplugins/unix/mprisplugin.cpp
       infosystem/infoplugins/unix/fdonotifyplugin.cpp
       infosystem/infoplugins/unix/imageconverter.cpp )
 
-    SET( libHeaders ${libHeaders}
+    SET( libGuiHeaders ${libGuiHeaders}
       infosystem/infoplugins/unix/mprispluginrootadaptor.h
       infosystem/infoplugins/unix/mprispluginplayeradaptor.h
       infosystem/infoplugins/unix/mprisplugin.h
@@ -589,7 +594,7 @@ IF( APPLE )
         /System/Library/Frameworks/AppKit.framework
     )
 ELSE( APPLE )
-    SET( libSources ${libSources} thirdparty/Qocoa/qsearchfield.cpp )
+    SET( libGuiSources ${libGuiSources} thirdparty/Qocoa/qsearchfield.cpp )
 ENDIF( APPLE )
 
 IF(LIBLASTFM_FOUND)
@@ -606,7 +611,7 @@ qt4_wrap_cpp( libMoc ${libHeaders} ${libGuiHeaders} )
 
 SET( libSources ${libSources} ${libUI_H} ${libHeaders_NoMOC} )
 
-ADD_LIBRARY( tomahawklib SHARED ${libGuiSources} ${libSources} ${libMoc} )
+ADD_LIBRARY( tomahawklib SHARED ${libSources} ${libMoc} )
 
 IF(QCA2_FOUND)
     SET(LINK_LIBRARIES ${LINK_LIBRARIES} ${QCA2_LIBRARIES} )
diff --git a/src/libtomahawk/database/databasecommand_createdynamicplaylist.cpp b/src/libtomahawk/database/databasecommand_createdynamicplaylist.cpp
index 988fdbb9b..2810c7610 100644
--- a/src/libtomahawk/database/databasecommand_createdynamicplaylist.cpp
+++ b/src/libtomahawk/database/databasecommand_createdynamicplaylist.cpp
@@ -28,10 +28,13 @@
 #include "dynamic/GeneratorInterface.h"
 
 #include "source.h"
-#include "viewmanager.h"
 #include "network/servent.h"
 #include "utils/logger.h"
 
+#ifndef ENABLE_HEADLESS
+    #include "viewmanager.h"
+#endif
+
 using namespace Tomahawk;
 
 
@@ -111,11 +114,13 @@ DatabaseCommand_CreateDynamicPlaylist::postCommitHook()
     qDebug() << Q_FUNC_INFO << "..reporting..";
     if( m_playlist.isNull() ) {
         source_ptr src = source();
+#ifndef ENABLE_HEADLESS
         QMetaObject::invokeMethod( ViewManager::instance(),
                                    "createDynamicPlaylist",
                                    Qt::BlockingQueuedConnection,
                                    QGenericArgument( "Tomahawk::source_ptr", (const void*)&src ),
                                    Q_ARG( QVariant, m_v ) );
+#endif
     } else {
         m_playlist->reportCreated( m_playlist );
     }
diff --git a/src/libtomahawk/database/databasecommand_createplaylist.cpp b/src/libtomahawk/database/databasecommand_createplaylist.cpp
index 00f211758..b0f31c9e7 100644
--- a/src/libtomahawk/database/databasecommand_createplaylist.cpp
+++ b/src/libtomahawk/database/databasecommand_createplaylist.cpp
@@ -21,12 +21,15 @@
 #include <QSqlQuery>
 
 #include "source.h"
-#include "viewmanager.h"
 #include "databaseimpl.h"
 #include "tomahawksqlquery.h"
 #include "network/servent.h"
 #include "utils/logger.h"
 
+#ifndef ENABLE_HEADLESS
+    #include "viewmanager.h"
+#endif
+
 using namespace Tomahawk;
 
 
@@ -79,11 +82,13 @@ DatabaseCommand_CreatePlaylist::postCommitHook()
     if ( m_playlist.isNull() )
     {
         source_ptr src = source();
+#ifndef ENABLE_HEADLESS
         QMetaObject::invokeMethod( ViewManager::instance(),
                                    "createPlaylist",
                                    Qt::BlockingQueuedConnection,
                                    QGenericArgument( "Tomahawk::source_ptr", (const void*)&src ),
                                    Q_ARG( QVariant, m_v ) );
+#endif
     }
     else
     {
diff --git a/src/libtomahawk/database/localcollection.cpp b/src/libtomahawk/database/localcollection.cpp
index eb03377d8..3c5d73bc8 100644
--- a/src/libtomahawk/database/localcollection.cpp
+++ b/src/libtomahawk/database/localcollection.cpp
@@ -21,10 +21,13 @@
 #include "localcollection.h"
 
 #include "sourcelist.h"
-#include "viewmanager.h"
 #include <tomahawksettings.h>
 #include "utils/logger.h"
 
+#ifndef ENABLE_HEADLESS
+    #include "viewmanager.h"
+#endif
+
 
 LocalCollection::LocalCollection( const Tomahawk::source_ptr& source, QObject* parent )
     : DatabaseCollection( source, parent )
@@ -49,10 +52,12 @@ LocalCollection::createBookmarksPlaylist()
     if( bookmarksPlaylist().isNull() ) {
         QString guid = uuid();
         Tomahawk::playlist_ptr p = Tomahawk::Playlist::create( SourceList::instance()->getLocal(), guid, tr( "Bookmarks" ), tr( "Saved tracks" ), QString(), false );
+
+#ifndef ENABLE_HEADLESS
         ViewManager::instance()->createPageForPlaylist( p );
 //         connect( p.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), this, SLOT( loaded( Tomahawk::PlaylistRevision ) ), Qt::QueuedConnection );
         connect( p.data(), SIGNAL( created() ), this, SLOT( created() ) );
-
+#endif
         TomahawkSettings::instance()->setBookmarkPlaylist( guid );
 //         p->createNewRevision( uuid(), p->currentrevision(), QList< Tomahawk::plentry_ptr >() );
     }
diff --git a/src/libtomahawk/network/controlconnection.cpp b/src/libtomahawk/network/controlconnection.cpp
index e07bfe40b..25a35ae6a 100644
--- a/src/libtomahawk/network/controlconnection.cpp
+++ b/src/libtomahawk/network/controlconnection.cpp
@@ -130,11 +130,13 @@ ControlConnection::registerSource()
     Q_UNUSED( source )
     Q_ASSERT( source == m_source.data() );
 
+#ifndef ENABLE_HEADLESS
 //    qDebug() << Q_FUNC_INFO << "Setting avatar ... " << name() << !SipHandler::instance()->avatar( name() ).isNull();
     if( !SipHandler::instance()->avatar( name() ).isNull() )
     {
         source->setAvatar( SipHandler::instance()->avatar( name() ) );
     }
+#endif
 
     m_registered = true;
     m_servent->registerControlConnection( this );
diff --git a/src/libtomahawk/network/portfwdthread.cpp b/src/libtomahawk/network/portfwdthread.cpp
index b0cb98e12..6006699bf 100644
--- a/src/libtomahawk/network/portfwdthread.cpp
+++ b/src/libtomahawk/network/portfwdthread.cpp
@@ -18,7 +18,8 @@
 
 #include "portfwdthread.h"
 
-#include <QApplication>
+#include "headlesscheck.h"
+
 #include <QNetworkInterface>
 #include <QStringList>
 #include <QTime>
diff --git a/src/libtomahawk/network/servent.cpp b/src/libtomahawk/network/servent.cpp
index 3d26e6b04..8ef2fcd3e 100644
--- a/src/libtomahawk/network/servent.cpp
+++ b/src/libtomahawk/network/servent.cpp
@@ -26,8 +26,11 @@
 #include <QNetworkProxy>
 #include <QNetworkRequest>
 #include <QNetworkReply>
-#include <QPushButton>
-#include <QMessageBox>
+
+#ifndef ENABLE_HEADLESS
+    #include <QPushButton>
+    #include <QMessageBox>
+#endif
 
 #include "result.h"
 #include "source.h"
@@ -684,7 +687,7 @@ Servent::checkACL( const Connection* conn, const QString &nodeid, bool showDialo
     if( peerStatus == ACLSystem::Deny )
         return false;
 
-#ifndef TOMAHAWK_HEADLESS
+#ifndef ENABLE_HEADLESS
     //FIXME: Actually enable it when it makes sense
     return true;
     if( peerStatus == ACLSystem::NotFound )
diff --git a/src/libtomahawk/resolvers/qtscriptresolver.cpp b/src/libtomahawk/resolvers/qtscriptresolver.cpp
index c72c55a18..f9939964c 100644
--- a/src/libtomahawk/resolvers/qtscriptresolver.cpp
+++ b/src/libtomahawk/resolvers/qtscriptresolver.cpp
@@ -31,7 +31,10 @@
 #include <network/servent.h>
 #include <QNetworkRequest>
 #include <QNetworkReply>
-#include <QMessageBox>
+
+#ifndef ENABLE_HEADLESS
+    #include <QMessageBox>
+#endif
 
 // FIXME: bloody hack, remove this for 0.3
 // this one adds new functionality to old resolvers
@@ -191,9 +194,11 @@ ScriptEngine::javaScriptConsoleMessage( const QString& message, int lineNumber,
     tLog() << "JAVASCRIPT:" << m_scriptPath << message << lineNumber << sourceID;
     /// I guess there is somereason for a assert in here, maybe fatal js errors, but
     /// undefined is not so fatal
+#ifndef ENABLE_HEADLESS
 #ifdef QT_DEBUG
     QMessageBox::critical( 0, "Script Resolver Error", QString( "%1 %2 %3 %4" ).arg( m_scriptPath ).arg( message ).arg( lineNumber ).arg( sourceID ) );
 #endif
+#endif
 }
 
 
diff --git a/src/libtomahawk/sip/SipHandler.cpp b/src/libtomahawk/sip/SipHandler.cpp
index 8b418b9f0..325ec5ac6 100644
--- a/src/libtomahawk/sip/SipHandler.cpp
+++ b/src/libtomahawk/sip/SipHandler.cpp
@@ -22,7 +22,10 @@
 #include <QCoreApplication>
 #include <QDir>
 #include <QPluginLoader>
-#include <QMessageBox>
+
+#ifndef ENABLE_HEADLESS
+    #include <QMessageBox>
+#endif
 
 #include "functimeout.h"
 
@@ -68,6 +71,7 @@ SipHandler::~SipHandler()
 }
 
 
+#ifndef ENABLE_HEADLESS
 const QPixmap
 SipHandler::avatar( const QString& name ) const
 {
@@ -84,7 +88,7 @@ SipHandler::avatar( const QString& name ) const
         return QPixmap();
     }
 }
-
+#endif
 
 const SipInfo
 SipHandler::sipInfo(const QString& peerId) const
@@ -373,7 +377,7 @@ SipHandler::enablePlugin( SipPlugin* p )
 void
 SipHandler::connectPlugin( bool startup, const QString &pluginId )
 {
-#ifndef TOMAHAWK_HEADLESS
+#ifndef ENABLE_HEADLESS
     if ( !TomahawkSettings::instance()->acceptedLegalWarning() )
     {
         int result = QMessageBox::question(
@@ -599,7 +603,7 @@ SipHandler::onStateChanged( SipPlugin::ConnectionState state )
     emit stateChanged( sip, state );
 }
 
-
+#ifndef ENABLE_HEADLESS
 void
 SipHandler::onAvatarReceived( const QString& from, const QPixmap& avatar )
 {
@@ -644,6 +648,7 @@ SipHandler::onAvatarReceived( const QPixmap& avatar )
 //    qDebug() << Q_FUNC_INFO << "Set own avatar on MyCollection";
     SourceList::instance()->getLocal()->setAvatar( avatar );
 }
+#endif
 
 
 QString
diff --git a/src/libtomahawk/sip/SipHandler.h b/src/libtomahawk/sip/SipHandler.h
index f22d5784a..9a510ba2d 100644
--- a/src/libtomahawk/sip/SipHandler.h
+++ b/src/libtomahawk/sip/SipHandler.h
@@ -53,7 +53,10 @@ public:
     bool hasPluginType( const QString& factoryId ) const;
     SipPluginFactory* factoryFromPlugin( SipPlugin* p ) const;
 
+#ifndef ENABLE_HEADLESS
     const QPixmap avatar( const QString& name ) const;
+#endif
+
     //TODO: implement a proper SipInfo class and maybe attach it to the source
     const SipInfo sipInfo( const QString& peerId ) const;
     const QString versionString( const QString& peerId ) const;
@@ -101,11 +104,13 @@ private slots:
 
     void onSettingsChanged();
 
+#ifndef ENABLE_HEADLESS
     // set data for local source
     void onAvatarReceived( const QPixmap& avatar );
 
     // set data for other sources
     void onAvatarReceived( const QString& from, const QPixmap& avatar );
+#endif
 
 private:
     static SipHandler *s_instance;
@@ -126,8 +131,10 @@ private:
 
     //TODO: move this to source
     QHash<QString, SipInfo> m_peersSipInfos;
-    QHash<QString, QPixmap> m_usernameAvatars;
     QHash<QString, QString> m_peersSoftwareVersions;
+#ifndef ENABLE_HEADLESS
+    QHash<QString, QPixmap> m_usernameAvatars;
+#endif
 };
 
 #endif
diff --git a/src/libtomahawk/sip/SipPlugin.cpp b/src/libtomahawk/sip/SipPlugin.cpp
index a79557661..482ea75dc 100644
--- a/src/libtomahawk/sip/SipPlugin.cpp
+++ b/src/libtomahawk/sip/SipPlugin.cpp
@@ -52,6 +52,7 @@ SipPlugin::pluginId() const
 }
 
 
+#ifndef ENABLE_HEADLESS
 QMenu*
 SipPlugin::menu()
 {
@@ -66,18 +67,19 @@ SipPlugin::configWidget()
 }
 
 
-QString
-SipPlugin::errorMessage() const
-{
-    return m_cachedError;
-}
-
-
 QIcon
 SipPlugin::icon() const
 {
     return QIcon();
 }
+#endif
+
+
+QString
+SipPlugin::errorMessage() const
+{
+    return m_cachedError;
+}
 
 
 const QStringList
diff --git a/src/libtomahawk/sip/SipPlugin.h b/src/libtomahawk/sip/SipPlugin.h
index 1ac38edc3..9e33d3b8b 100644
--- a/src/libtomahawk/sip/SipPlugin.h
+++ b/src/libtomahawk/sip/SipPlugin.h
@@ -83,9 +83,9 @@ public:
 #ifndef ENABLE_HEADLESS
     virtual QMenu* menu();
     virtual QWidget* configWidget();
+    virtual QIcon icon() const;
 #endif
     virtual void saveConfig() {} // called when the widget has been edited
-    virtual QIcon icon() const;
 
     // peer infos
     virtual const QStringList peersOnline() const;
@@ -113,13 +113,13 @@ signals:
     void sipInfoReceived( const QString& peerId, const SipInfo& info );
     void softwareVersionReceived( const QString& peerId, const QString& versionString );
 
+#ifndef ENABLE_HEADLESS
     // new data for own source
     void avatarReceived ( const QPixmap& avatar );
 
     // new data for other sources;
     void avatarReceived ( const QString& from,  const QPixmap& avatar);
 
-#ifndef ENABLE_HEADLESS
     void addMenu( QMenu* menu );
     void removeMenu( QMenu* menu );
 #endif
diff --git a/src/libtomahawk/source.cpp b/src/libtomahawk/source.cpp
index d7b1c5610..02cdbee01 100644
--- a/src/libtomahawk/source.cpp
+++ b/src/libtomahawk/source.cpp
@@ -115,7 +115,7 @@ Source::friendlyName() const
     return m_friendlyname;
 }
 
-
+#ifndef ENABLE_HEADLESS
 void
 Source::setAvatar( const QPixmap& avatar )
 {
@@ -137,7 +137,7 @@ Source::avatar( AvatarStyle style ) const
     else
         return QPixmap();
 }
-
+#endif
 
 void
 Source::setFriendlyName( const QString& fname )
diff --git a/src/libtomahawk/source.h b/src/libtomahawk/source.h
index e4f2f8fae..69681ce54 100644
--- a/src/libtomahawk/source.h
+++ b/src/libtomahawk/source.h
@@ -61,8 +61,10 @@ public:
     QString friendlyName() const;
     void setFriendlyName( const QString& fname );
 
+#ifndef ENABLE_HEADLESS
     void setAvatar( const QPixmap& avatar );
     QPixmap avatar( AvatarStyle style = Original ) const;
+#endif
 
     collection_ptr collection() const;
     void addCollection( const Tomahawk::collection_ptr& c );
diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp
index cd0d4c100..e3ac02f34 100644
--- a/src/libtomahawk/utils/tomahawkutils.cpp
+++ b/src/libtomahawk/utils/tomahawkutils.cpp
@@ -43,7 +43,7 @@
     #include <sys/sysctl.h>
 #endif
 
-#ifndef TOMAHAWK_HEADLESS
+#ifndef ENABLE_HEADLESS
     #include <QtGui/QApplication>
     #include <QtGui/QWidget>
 
@@ -446,6 +446,7 @@ drawBackgroundAndNumbers( QPainter* painter, const QString& text, const QRect& f
     painter->drawText( figRect.adjusted( -5, 0, 6, 0 ), text, to );
 }
 
+#ifndef ENABLE_HEADLESS
 void
 drawQueryBackground( QPainter* p, const QPalette& palette, const QRect& r, qreal lightnessFactor )
 {
@@ -469,6 +470,7 @@ unmarginLayout( QLayout* layout )
             unmarginLayout( childLayout );
     }
 }
+#endif
 
 
 NetworkProxyFactory::NetworkProxyFactory( const NetworkProxyFactory& other )
@@ -637,7 +639,7 @@ nam()
     s_threadNamHash[ QThread::currentThread() ] = newNam;
 
     tDebug( LOGEXTRA ) << "created new nam for thread " << QThread::currentThread();
-    
+
     return newNam;
 }
 
@@ -680,8 +682,7 @@ setNam( QNetworkAccessManager* nam, bool noMutexLocker )
 }
 
 
-#ifndef TOMAHAWK_HEADLESS
-
+#ifndef ENABLE_HEADLESS
 QWidget*
 tomahawkWindow()
 {
diff --git a/src/libtomahawk/utils/tomahawkutils.h b/src/libtomahawk/utils/tomahawkutils.h
index 2f25aad34..b772c34f7 100644
--- a/src/libtomahawk/utils/tomahawkutils.h
+++ b/src/libtomahawk/utils/tomahawkutils.h
@@ -93,8 +93,14 @@ namespace TomahawkUtils
     DLLEXPORT QPixmap createDragPixmap( MediaType type, int itemCount = 1 );
 
     DLLEXPORT void drawBackgroundAndNumbers( QPainter* p, const QString& text, const QRect& rect );
+#ifndef ENABLE_HEADLESS
     DLLEXPORT void drawQueryBackground( QPainter* p, const QPalette& palette, const QRect& r, qreal lightnessFactor = 1 );
+    DLLEXPORT QWidget* tomahawkWindow();
+    /// Platform-specific bringing tomahawk mainwindow to front, b/c qt's activate() and such don't seem to work well enough for us
+    DLLEXPORT void bringToFront();
 
+    DLLEXPORT QPixmap createAvatarFrame( const QPixmap &avatar );
+#endif
     DLLEXPORT void unmarginLayout( QLayout* layout );
 
     DLLEXPORT NetworkProxyFactory* proxyFactory( bool noMutexLocker = false );
@@ -103,12 +109,6 @@ namespace TomahawkUtils
     DLLEXPORT void setProxyFactory( TomahawkUtils::NetworkProxyFactory* factory, bool noMutexLocker = false );
     DLLEXPORT void setNam( QNetworkAccessManager* nam, bool noMutexLocker = false );
 
-    DLLEXPORT QWidget* tomahawkWindow();
-    /// Platform-specific bringing tomahawk mainwindow to front, b/c qt's activate() and such don't seem to work well enough for us
-    DLLEXPORT void bringToFront();
-
-    DLLEXPORT QPixmap createAvatarFrame( const QPixmap &avatar );
-
     DLLEXPORT void crash();
 
     DLLEXPORT int headerHeight();