diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt
index 55bbb25b6..e72a306e2 100644
--- a/src/libtomahawk/CMakeLists.txt
+++ b/src/libtomahawk/CMakeLists.txt
@@ -95,6 +95,7 @@ set( libSources
     playlist/dynamic/DynamicControl.cpp
     playlist/dynamic/GeneratorFactory.cpp
     playlist/dynamic/GeneratorInterface.cpp
+    playlist/dynamic/DynamicView.cpp
     playlist/dynamic/echonest/EchonestGenerator.cpp
     playlist/dynamic/echonest/EchonestControl.cpp
     playlist/dynamic/widgets/DynamicWidget.cpp
@@ -227,6 +228,7 @@ set( libHeaders
     playlist/dynamic/DynamicControl.h
     playlist/dynamic/GeneratorFactory.h
     playlist/dynamic/GeneratorInterface.h
+    playlist/dynamic/DynamicView.h
     playlist/dynamic/echonest/EchonestGenerator.h
     playlist/dynamic/echonest/EchonestControl.h
     playlist/dynamic/widgets/DynamicWidget.h
diff --git a/src/libtomahawk/playlist/dynamic/DynamicView.cpp b/src/libtomahawk/playlist/dynamic/DynamicView.cpp
new file mode 100644
index 000000000..03f9b66ad
--- /dev/null
+++ b/src/libtomahawk/playlist/dynamic/DynamicView.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************************
+ * Copyright (c) 2011 Leo Franchi <lfranchi@kde.org>                                    *
+ *                                                                                      *
+ * This program is free software; you can redistribute it and/or modify it under        *
+ * the terms of the GNU General Public License as published by the Free Software        *
+ * Foundation; either version 2 of the License, or (at your option) any later           *
+ * version.                                                                             *
+ *                                                                                      *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
+ *                                                                                      *
+ * You should have received a copy of the GNU General Public License along with         *
+ * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
+ ****************************************************************************************/
+
+#include "DynamicView.h"
+#include <QPainter>
+#include <widgets/overlaywidget.h>
+
+using namespace Tomahawk;
+
+
+DynamicView::DynamicView( QWidget* parent )
+    : PlaylistView( parent )
+{
+    m_showTimer.setInterval( 5000 );
+    m_showTimer.setSingleShot( true );
+    
+    m_fadeOut = new QPropertyAnimation( overlay(), "opacity" );
+    m_fadeOut->setDuration( 500 );
+    m_fadeOut->setEndValue( 0 );
+    
+    connect( &m_showTimer, SIGNAL( timeout() ), m_fadeOut, SLOT( start() ) ); 
+    
+}
+
+DynamicView::~DynamicView()
+{
+
+}
+
+void 
+DynamicView::showMessageTimeout( const QString& title, const QString& body )
+{
+    m_title = title;
+    m_body = body;
+    m_showTimer.start();
+}
+
+void 
+DynamicView::paintEvent( QPaintEvent* event )
+{
+    if ( m_showTimer.isActive() || m_fadeOut->state() == QPropertyAnimation::Running )
+    {
+        QPainter painter( viewport() );
+        overlay()->setText( QString( "%1\n%2" ).arg( m_title, m_body ) );
+        overlay()->paint( &painter );
+    } else {
+        PlaylistView::paintEvent( event );
+    }
+}
diff --git a/src/libtomahawk/playlist/dynamic/DynamicView.h b/src/libtomahawk/playlist/dynamic/DynamicView.h
new file mode 100644
index 000000000..4711fc45a
--- /dev/null
+++ b/src/libtomahawk/playlist/dynamic/DynamicView.h
@@ -0,0 +1,51 @@
+/****************************************************************************************
+ * Copyright (c) 2011 Leo Franchi <lfranchi@kde.org>                                    *
+ *                                                                                      *
+ * This program is free software; you can redistribute it and/or modify it under        *
+ * the terms of the GNU General Public License as published by the Free Software        *
+ * Foundation; either version 2 of the License, or (at your option) any later           *
+ * version.                                                                             *
+ *                                                                                      *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
+ * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
+ *                                                                                      *
+ * You should have received a copy of the GNU General Public License along with         *
+ * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
+ ****************************************************************************************/
+
+#ifndef DYNAMIC_VIEW_H
+#define DYNAMIC_VIEW_H
+
+#include "playlist/playlistview.h"
+#include <QTimer>
+#include <QPropertyAnimation>
+
+namespace Tomahawk
+{
+    
+class DynamicView : public PlaylistView
+{
+    Q_OBJECT
+public:
+    explicit DynamicView( QWidget* parent = 0 );
+    virtual ~DynamicView();
+    
+public slots:
+    void showMessageTimeout( const QString& title, const QString& body );
+    
+protected:
+    virtual void paintEvent( QPaintEvent* event );
+    
+private:
+    QTimer m_showTimer;
+    QPropertyAnimation* m_fadeOut;
+    
+    QString m_title;
+    QString m_body;
+};
+    
+};
+
+
+#endif
diff --git a/src/libtomahawk/playlist/dynamic/GeneratorInterface.h b/src/libtomahawk/playlist/dynamic/GeneratorInterface.h
index 9f42e2003..435525aa1 100644
--- a/src/libtomahawk/playlist/dynamic/GeneratorInterface.h
+++ b/src/libtomahawk/playlist/dynamic/GeneratorInterface.h
@@ -94,8 +94,7 @@ public:
     void removeControl( const dyncontrol_ptr& control );
     
 signals:
-    void controlsInvalid( const QString& shortTitle, const QString& message );
-    void onDemandFailed();
+    void error( const QString& title, const QString& body);
     void generated( const QList< Tomahawk::query_ptr>& queries );
     void nextTrackGenerated( const Tomahawk::query_ptr& track );
     
diff --git a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp
index 3520fc44d..4f0cb374b 100644
--- a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp
+++ b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp
@@ -85,7 +85,7 @@ EchonestGenerator::generate ( int number )
         connect( reply, SIGNAL( finished() ), this, SLOT( staticFinished() ) );
     } catch( std::runtime_error& e ) {
         qWarning() << "Got invalid controls!" << e.what();
-        emit controlsInvalid( "Controls were not valid", QString::fromLatin1( e.what() ) );
+        emit error( "Filters are not valid", e.what() );
     }
 }
 
@@ -100,7 +100,7 @@ EchonestGenerator::startOnDemand()
         connect( reply, SIGNAL( finished() ), this, SLOT( dynamicStarted() ) );
     } catch( std::runtime_error& e ) {
         qWarning() << "Got invalid controls!" << e.what();
-        emit controlsInvalid( "Controls were not valid", QString::fromLatin1( e.what() ) );
+        emit error( "Filters are not valid", e.what() );
     }
 }
 
@@ -131,8 +131,9 @@ EchonestGenerator::staticFinished()
     try {
         songs = Echonest::DynamicPlaylist::parseStaticPlaylist( reply );
     } catch( const Echonest::ParseError& e ) {
-        qWarning() << "libechonest threw an error trying to parse the static playlist!" << e.errorType() << e.what();
+        qWarning() << "libechonest threw an error trying to parse the static playlist! code" << e.errorType() << "error desc:" << e.what();
         
+        emit error( "The Echo Nest returned an error creating the playlist", e.what() );
         return;
     }
     
@@ -170,7 +171,7 @@ EchonestGenerator::dynamicStarted()
         emit nextTrackGenerated( songQuery );
     } catch( const Echonest::ParseError& e ) {
         qWarning() << "libechonest threw an error parsing the start of the dynamic playlist:" << e.errorType() << e.what();
-        emit onDemandFailed();
+        emit error( "The Echo Nest returned an error starting the station", e.what() );
     }
 }
 
@@ -188,6 +189,7 @@ EchonestGenerator::dynamicFetched()
         emit nextTrackGenerated( songQuery );
     } catch( const Echonest::ParseError& e ) {
         qWarning() << "libechonest threw an error parsing the next song of the dynamic playlist:" << e.errorType() << e.what();
+        emit error( "The Echo Nest returned an error getting the next song", e.what() );
     }
 }
 
diff --git a/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.cpp b/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.cpp
index cd5398a76..553d688da 100644
--- a/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.cpp
+++ b/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.cpp
@@ -33,6 +33,7 @@
 #include "ReadOrWriteWidget.h"
 #include "CollapsibleControls.h"
 #include "DynamicControlWrapper.h"
+#include "dynamic/DynamicView.h"
 
 using namespace Tomahawk;
 
@@ -86,7 +87,7 @@ DynamicWidget::DynamicWidget( const Tomahawk::dynplaylist_ptr& playlist, QWidget
     m_layout->addWidget( m_controls );
     
     m_model = new PlaylistModel( this );
-    m_view = new PlaylistView( this );
+    m_view = new DynamicView( this );
     m_view->setModel( m_model );
     m_view->setContentsMargins( 0, 0, 0, 0 );
     m_layout->addWidget( m_view );
@@ -125,6 +126,7 @@ DynamicWidget::loadDynamicPlaylist( const Tomahawk::dynplaylist_ptr& playlist )
         disconnect( m_playlist->generator().data(), SIGNAL( generated( QList<Tomahawk::query_ptr> ) ), this, SLOT( tracksGenerated( QList<Tomahawk::query_ptr> ) ) );
         disconnect( m_playlist.data(), SIGNAL( dynamicRevisionLoaded( Tomahawk::DynamicPlaylistRevision) ), this, SLOT(onRevisionLoaded( Tomahawk::DynamicPlaylistRevision) ) );
         disconnect( m_playlist->generator().data(), SIGNAL( nextTrackGenerated( Tomahawk::query_ptr ) ), this, SLOT( onDemandFetched( Tomahawk::query_ptr ) ) );
+        disconnect( m_playlist->generator().data(), SIGNAL( error( QString, QString ) ), m_view, SLOT( showMessageTimeout( QString, QString ) ) );
     }
     
     m_playlist = playlist;
@@ -140,6 +142,7 @@ DynamicWidget::loadDynamicPlaylist( const Tomahawk::dynplaylist_ptr& playlist )
     connect( m_playlist->generator().data(), SIGNAL( generated( QList<Tomahawk::query_ptr> ) ), this, SLOT( tracksGenerated( QList<Tomahawk::query_ptr> ) ) );
     connect( m_playlist.data(), SIGNAL( dynamicRevisionLoaded( Tomahawk::DynamicPlaylistRevision ) ), this, SLOT( onRevisionLoaded( Tomahawk::DynamicPlaylistRevision ) ) );
     connect( m_playlist->generator().data(), SIGNAL( nextTrackGenerated( Tomahawk::query_ptr ) ), this, SLOT( onDemandFetched( Tomahawk::query_ptr ) ) );
+    connect( m_playlist->generator().data(), SIGNAL( error( QString, QString ) ), m_view, SLOT( showMessageTimeout( QString, QString ) ) );
     
 }
 
diff --git a/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.h b/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.h
index 31d23dbe0..c8058c10d 100644
--- a/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.h
+++ b/src/libtomahawk/playlist/dynamic/widgets/DynamicWidget.h
@@ -38,6 +38,9 @@ class ReadOrWriteWidget;
 namespace Tomahawk
 {
 
+class DynamicView;
+
+
 class CollapsibleControls;
 
 
@@ -93,7 +96,7 @@ private:
     
     CollapsibleControls* m_controls;
     
-    PlaylistView* m_view;
+    DynamicView* m_view;
     PlaylistModel* m_model;
 };