diff --git a/src/AudioControls.cpp b/src/AudioControls.cpp
index 32c448864..67f9147ba 100644
--- a/src/AudioControls.cpp
+++ b/src/AudioControls.cpp
@@ -138,6 +138,7 @@ AudioControls::AudioControls( QWidget* parent )
     connect( AudioEngine::instance(), SIGNAL( seeked( qint64 ) ), SLOT( onPlaybackSeeked( qint64 ) ) );
     connect( AudioEngine::instance(), SIGNAL( timerMilliSeconds( qint64 ) ), SLOT( onPlaybackTimer( qint64 ) ) );
     connect( AudioEngine::instance(), SIGNAL( volumeChanged( int ) ), SLOT( onVolumeChanged( int ) ) );
+    connect( AudioEngine::instance(), SIGNAL( controlStateChanged() ), SLOT( onControlStateChanged() ) );
 
     ui->buttonAreaLayout->setSpacing( 0 );
     ui->stackedLayout->setSpacing( 0 );
@@ -189,6 +190,22 @@ AudioControls::onVolumeChanged( int volume )
 }
 
 
+void
+AudioControls::onControlStateChanged()
+{
+    tDebug() << Q_FUNC_INFO;
+
+    if ( QThread::currentThread() != thread() )
+    {
+        tDebug() << Q_FUNC_INFO << "Reinvoking in correct thread!";
+        QMetaObject::invokeMethod( this, "onControlStateChanged", Qt::QueuedConnection );
+    }
+
+    ui->prevButton->setEnabled( AudioEngine::instance()->canGoPrevious() );
+    ui->nextButton->setEnabled( AudioEngine::instance()->canGoNext() );
+}
+
+
 void
 AudioControls::onPlaybackStarted( const Tomahawk::result_ptr& result )
 {
@@ -264,8 +281,7 @@ AudioControls::onPlaybackLoading( const Tomahawk::result_ptr& result )
     ui->loveButton->setToolTip( tr( "Love" ) );
     ui->ownerButton->setToolTip( QString( tr( "Playing from %1" ) ).arg( result->friendlySource() ) );
 
-    ui->prevButton->setEnabled( AudioEngine::instance()->canGoPrevious() );
-    ui->nextButton->setEnabled( AudioEngine::instance()->canGoNext() );
+    onControlStateChanged();
 
     QPixmap sourceIcon = result->sourceIcon( Result::Plain, ui->ownerButton->size() );
     if ( !sourceIcon.isNull() )
@@ -397,8 +413,7 @@ AudioControls::onPlaybackStopped()
     ui->loveButton->setToolTip( "" );
     ui->ownerButton->setToolTip( "" );
 
-    ui->prevButton->setEnabled( AudioEngine::instance()->canGoPrevious() );
-    ui->nextButton->setEnabled( AudioEngine::instance()->canGoNext() );
+    onControlStateChanged();
 }
 
 
diff --git a/src/AudioControls.h b/src/AudioControls.h
index ba0207b88..0e1b2d05b 100644
--- a/src/AudioControls.h
+++ b/src/AudioControls.h
@@ -72,6 +72,7 @@ private slots:
 
     void onPlaybackTimer( qint64 msElapsed );
     void onVolumeChanged( int volume );
+    void onControlStateChanged();
 
     void onRepeatClicked();
     void onShuffleClicked();