diff --git a/src/libtomahawk/database/databasecommand_logplayback.cpp b/src/libtomahawk/database/databasecommand_logplayback.cpp
index b14ab6e3c..e34ea7809 100644
--- a/src/libtomahawk/database/databasecommand_logplayback.cpp
+++ b/src/libtomahawk/database/databasecommand_logplayback.cpp
@@ -40,7 +40,7 @@ DatabaseCommand_LogPlayback::postCommitHook()
 
     // do not auto resolve this track
     Tomahawk::query_ptr q = Tomahawk::Query::get( m_artist, m_track, QString() );
-    q->setPlayedBy( source() );
+    q->setPlayedBy( source(), m_playtime );
 
     if ( m_action == Finished )
     {
diff --git a/src/libtomahawk/database/databasecommand_playbackhistory.cpp b/src/libtomahawk/database/databasecommand_playbackhistory.cpp
index a6c77e534..6e5c3af8d 100644
--- a/src/libtomahawk/database/databasecommand_playbackhistory.cpp
+++ b/src/libtomahawk/database/databasecommand_playbackhistory.cpp
@@ -67,11 +67,11 @@ DatabaseCommand_PlaybackHistory::exec( DatabaseImpl* dbi )
 
             if ( query.value( 3 ).toUInt() == 0 )
             {
-                q->setPlayedBy( SourceList::instance()->getLocal() );
+                q->setPlayedBy( SourceList::instance()->getLocal(), query.value( 1 ).toUInt() );
             }
             else
             {
-                q->setPlayedBy( SourceList::instance()->get( query.value( 3 ).toUInt() ) );
+                q->setPlayedBy( SourceList::instance()->get( query.value( 3 ).toUInt() ), query.value( 1 ).toUInt() );
             }
 
             ql << q;
diff --git a/src/libtomahawk/playlist/playlistitemdelegate.cpp b/src/libtomahawk/playlist/playlistitemdelegate.cpp
index dd9a4ef16..9bfc69445 100644
--- a/src/libtomahawk/playlist/playlistitemdelegate.cpp
+++ b/src/libtomahawk/playlist/playlistitemdelegate.cpp
@@ -37,6 +37,8 @@
 
 #define PLAYING_ICON QString( RESPATH "images/now-playing-speaker.png" )
 
+using namespace Tomahawk;
+
 
 PlaylistItemDelegate::PlaylistItemDelegate( TrackView* parent, TrackProxyModel* proxy )
     : QStyledItemDelegate( (QObject*)parent )
@@ -147,6 +149,8 @@ PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem&
 
     QPixmap pixmap;
     QString artist, track, upperText, lowerText;
+    source_ptr source = item->query()->playedBy().first;
+
     if ( item->query()->results().count() )
     {
         artist = item->query()->results().first()->artist()->name();
@@ -158,7 +162,7 @@ PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem&
         track = item->query()->track();
     }
 
-    if ( item->query()->playedBy().isNull() )
+    if ( source.isNull() )
     {
         upperText = artist;
         lowerText = track;
@@ -166,13 +170,14 @@ PlaylistItemDelegate::paintShort( QPainter* painter, const QStyleOptionViewItem&
     else
     {
         upperText = QString( "%1 - %2" ).arg( artist ).arg( track );
+        QString playtime = TomahawkUtils::ageToString( QDateTime::fromTime_t( item->query()->playedBy().second ) );
 
-        if ( item->query()->playedBy() == SourceList::instance()->getLocal() )
-            lowerText = QString( "played by you" );
+        if ( source == SourceList::instance()->getLocal() )
+            lowerText = QString( "played %1 ago by you" ).arg( playtime );
         else
-            lowerText = QString( "played by %1" ).arg( item->query()->playedBy()->friendlyName() );
+            lowerText = QString( "played %1 ago by %2" ).arg( playtime ).arg( source->friendlyName() );
 
-        pixmap = item->query()->playedBy()->avatar();
+        pixmap = source->avatar();
     }
 
     if ( pixmap.isNull() )
diff --git a/src/libtomahawk/query.cpp b/src/libtomahawk/query.cpp
index 7357bf42a..9281d86e0 100644
--- a/src/libtomahawk/query.cpp
+++ b/src/libtomahawk/query.cpp
@@ -202,6 +202,14 @@ Query::id() const
 }
 
 
+void
+Query::setPlayedBy( const Tomahawk::source_ptr& source, unsigned int playtime )
+{
+    m_playedBy.first = source;
+    m_playedBy.second = playtime;
+}
+
+
 bool
 Query::resultSorter( const result_ptr& left, const result_ptr& right )
 {
diff --git a/src/libtomahawk/query.h b/src/libtomahawk/query.h
index c28d5bcfb..b0c1b7422 100644
--- a/src/libtomahawk/query.h
+++ b/src/libtomahawk/query.h
@@ -74,7 +74,7 @@ public:
     bool isFullTextQuery() const { return !m_fullTextQuery.isEmpty(); }
     bool resolvingFinished() const { return m_resolveFinished; }
 
-    Tomahawk::source_ptr playedBy() const { return m_playedBy; }
+    QPair< Tomahawk::source_ptr, unsigned int > playedBy() const { return m_playedBy; }
     Tomahawk::Resolver* currentResolver() const;
     QList< QWeakPointer< Tomahawk::Resolver > > resolvedBy() const { return m_resolvers; }
 
@@ -94,7 +94,7 @@ public:
     int duration() const { return m_duration; }
 
     void setResolveFinished( bool resolved ) { m_resolveFinished = resolved; }
-    void setPlayedBy( const Tomahawk::source_ptr& source ) { m_playedBy = source; }
+    void setPlayedBy( const Tomahawk::source_ptr& source, unsigned int playtime );
 
 signals:
     void resultsAdded( const QList<Tomahawk::result_ptr>& );
@@ -139,7 +139,7 @@ private:
     int m_duration;
     QString m_resultHint;
 
-    Tomahawk::source_ptr m_playedBy;
+    QPair< Tomahawk::source_ptr, unsigned int > m_playedBy;
     QList< QWeakPointer< Tomahawk::Resolver > > m_resolvers;
 
     mutable QMutex m_mutex;
diff --git a/src/libtomahawk/result.cpp b/src/libtomahawk/result.cpp
index 1336834c5..c9ceffeb1 100644
--- a/src/libtomahawk/result.cpp
+++ b/src/libtomahawk/result.cpp
@@ -91,7 +91,9 @@ Result::score() const
 RID
 Result::id() const
 {
-    Q_ASSERT( !m_rid.isEmpty() );
+    if ( m_rid.isEmpty() )
+        m_rid = uuid();
+
     return m_rid;
 }
 
diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp
index 97ce2e572..939cd08a9 100644
--- a/src/libtomahawk/utils/tomahawkutils.cpp
+++ b/src/libtomahawk/utils/tomahawkutils.cpp
@@ -162,6 +162,7 @@ timeToString( int seconds )
                                .arg( secs < 10 ? "0" + QString::number( secs ) : QString::number( secs ) );
 }
 
+
 QString
 ageToString( const QDateTime& time )
 {
@@ -177,49 +178,49 @@ ageToString( const QDateTime& time )
     if ( years )
     {
         if ( years > 1 )
-            return QString( "%1 years" ).arg( years );
+            return QObject::tr( "%1 years" ).arg( years );
         else
-            return QString( "%1 year" ).arg( years );
+            return QObject::tr( "%1 year" ).arg( years );
     }
 
     if ( months )
     {
         if ( months > 1 )
-           return QString( "%1 months" ).arg( months );
+            return QObject::tr( "%1 months" ).arg( months );
         else
-            return QString( "%1 month" ).arg( months );
+            return QObject::tr( "%1 month" ).arg( months );
     }
 
     if ( weeks )
     {
         if ( weeks > 1 )
-            return QString( "%1 weeks" ).arg( weeks );
+            return QObject::tr( "%1 weeks" ).arg( weeks );
         else
-            return QString( "%1 week" ).arg( weeks );
+            return QObject::tr( "%1 week" ).arg( weeks );
     }
 
     if ( days )
     {
         if ( days > 1 )
-            return QString( "%1 days" ).arg( days );
+            return QObject::tr( "%1 days" ).arg( days );
         else
-            return QString( "%1 day" ).arg( days );
+            return QObject::tr( "%1 day" ).arg( days );
     }
 
     if ( hours )
     {
         if ( hours > 1 )
-            return QString( "%1 hours" ).arg( hours );
+            return QObject::tr( "%1 hours" ).arg( hours );
         else
-            return QString( "%1 hour" ).arg( hours );
+            return QObject::tr( "%1 hour" ).arg( hours );
     }
 
     if ( mins )
     {
         if ( mins > 1 )
-            return QString( "%1 minutes" ).arg( mins );
+            return QObject::tr( "%1 minutes" ).arg( mins );
         else
-            return QString( "%1 minute" ).arg( mins );
+            return QObject::tr( "%1 minute" ).arg( mins );
     }
 
     return QString();
@@ -397,10 +398,10 @@ NetworkProxyFactory*
 proxyFactory()
 {
     // Don't use this anywhere! It's provided here for access reasons, but QNAM deletes this at will!
-    
+
     if ( !s_proxyFactory )
         s_proxyFactory = new NetworkProxyFactory();
-    
+
     return s_proxyFactory;
 }