diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/CMakeLists.txt amarok-2.5.96/CMakeLists.txt
--- amarok-2.5.96.orig/CMakeLists.txt	2012-07-31 12:17:20.000000000 +0200
+++ amarok-2.5.96/CMakeLists.txt	2012-08-02 16:34:08.465503197 +0200
@@ -129,7 +129,7 @@
     # macro_log_feature( STRIGI_FOUND "strigi" "Index metadata of files" "http://strigi.sourceforge.net" FALSE "" "" )
 
     macro_optional_find_package(LibLastFm)
-    macro_log_feature( LIBLASTFM_FOUND "liblastfm" "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" "http://cdn.last.fm/src/liblastfm-0.3.0.tar.bz2" FALSE "" "version 0.3.x (versions 1.0 or higher are incompatible)" )
+    macro_log_feature( LIBLASTFM_FOUND "liblastfm" "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" "http://cdn.last.fm/src/liblastfm-1.0.0.tar.gz" FALSE "1.0.0" "" )
     macro_bool_to_01( LIBLASTFM_FOUND HAVE_LIBLASTFM )
 
     macro_optional_find_package( FFmpeg )
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/cmake/modules/FindLibLastFm.cmake amarok-2.5.96/cmake/modules/FindLibLastFm.cmake
--- amarok-2.5.96.orig/cmake/modules/FindLibLastFm.cmake	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/cmake/modules/FindLibLastFm.cmake	2012-08-02 16:32:36.418653940 +0200
@@ -6,7 +6,7 @@
 # LIBLASTFM_FOUND, whether liblastfm was found
 
 
-find_path(LIBLASTFM_INCLUDE_DIR NAMES Audioscrobbler
+find_path(LIBLASTFM_INCLUDE_DIR NAMES lastfm
    HINTS
    ~/usr/include
    /opt/local/include
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/LastfmReadLabelCapability.cpp amarok-2.5.96/src/LastfmReadLabelCapability.cpp
--- amarok-2.5.96.orig/src/LastfmReadLabelCapability.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/LastfmReadLabelCapability.cpp	2012-08-02 16:32:36.419653927 +0200
@@ -22,8 +22,7 @@
 #include <QMap>
 #include <QNetworkReply>
 
-#include <lastfm/XmlQuery>
-#include <ws.h>
+#include <lastfm/XmlQuery.h>
 #include "core/support/Amarok.h"
 
 namespace Capabilities
@@ -72,7 +71,8 @@
     {
         case QNetworkReply::NoError:
         {
-            lastfm::XmlQuery lfm = m_job->readAll();
+            lastfm::XmlQuery lfm;
+            lfm.parse(m_job->readAll());
             QList<lastfm::XmlQuery> tags = lfm.children( "tag" );
             QStringList ret;
             foreach( const lastfm::XmlQuery &child, tags )
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp amarok-2.5.96/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp
--- amarok-2.5.96.orig/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/context/engines/upcomingevents/UpcomingEventsEngine.cpp	2012-08-02 16:32:35.962659642 +0200
@@ -27,10 +27,6 @@
 #include "EngineController.h"
 #include "LastFmEventXmlParser.h"
 
-// LastFm
-#include <lastfm/XmlQuery>
-#include <lastfm/ws.h>
-
 // KDE
 #include <KDateTime>
 
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/core/support/Amarok.h amarok-2.5.96/src/core/support/Amarok.h
--- amarok-2.5.96.orig/src/core/support/Amarok.h	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/core/support/Amarok.h	2012-08-02 16:32:35.962659642 +0200
@@ -203,6 +203,7 @@
 
     inline const char* discogsApiKey() { return "91734dd989"; }
     inline const char* lastfmApiKey() { return "402d3ca8e9bc9d3cf9b85e1202944ca5"; }
+    inline const char* lastfmApiSharedSecret() { return "fe0dcde9fcd14c2d1d50665b646335e9"; }
     inline const char* yahooBossApiKey() { return "oQepTNrV34G9Satb1dgRZ8hdl1uhJvguDSU5Knl2Xd4ALK85knYt6ylr.FTA57XMRBA-"; }
     inline const char* flickrApiKey() { return "9c5a288116c34c17ecee37877397fe31"; }
 }
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/ampache/LastfmInfoParser.cpp amarok-2.5.96/src/services/ampache/LastfmInfoParser.cpp
--- amarok-2.5.96.orig/src/services/ampache/LastfmInfoParser.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/ampache/LastfmInfoParser.cpp	2012-08-02 16:32:35.954659742 +0200
@@ -20,8 +20,7 @@
 #include "core/support/Amarok.h"
 #include "core/support/Debug.h"
 
-#include <lastfm/XmlQuery>
-#include <lastfm/ws.h>
+#include <lastfm/XmlQuery.h>
 
 #include <KLocale>
 
@@ -55,7 +54,8 @@
     {
         case QNetworkReply::NoError:
         {
-            lastfm::XmlQuery lfm = m_jobs[ "getTrackInfo" ]->readAll();
+            lastfm::XmlQuery lfm;
+            lfm.parse( m_jobs[ "getTrackInfo" ]->readAll() );
             lastfm::XmlQuery wiki = lfm["track"]["wiki"];
             const QString contentText = wiki["content"].text();
             const QString publishedDate = wiki["published"].text();
@@ -103,7 +103,8 @@
     {
         case QNetworkReply::NoError:
         {
-            lastfm::XmlQuery lfm = m_jobs[ "getAlbumInfo" ]->readAll();
+            lastfm::XmlQuery lfm;
+            lfm.parse( m_jobs[ "getAlbumInfo" ]->readAll() );
             lastfm::XmlQuery wiki = lfm["album"]["wiki"];
             const QString summaryText = wiki["summary"].text();
             const QString contentText = wiki["content"].text();
@@ -155,7 +156,8 @@
     {
         case QNetworkReply::NoError:
         {
-            lastfm::XmlQuery lfm = m_jobs[ "getArtistInfo" ]->readAll();
+            lastfm::XmlQuery lfm;
+            lfm.parse( m_jobs[ "getArtistInfo" ]->readAll() );
             debug() << lfm.text();
             lastfm::XmlQuery bio = lfm["artist"]["bio"];
             const QString summaryText = bio["summary"].text();
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmService.cpp amarok-2.5.96/src/services/lastfm/LastFmService.cpp
--- amarok-2.5.96.orig/src/services/lastfm/LastFmService.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/LastFmService.cpp	2012-08-02 16:32:35.955659729 +0200
@@ -46,8 +46,8 @@
 #include "widgets/SearchWidget.h"
 #include "NetworkAccessManagerProxy.h"
 
-#include <lastfm/Audioscrobbler> // from liblastfm
-#include <lastfm/XmlQuery>
+#include <lastfm/Audioscrobbler.h> // from liblastfm
+#include <lastfm/XmlQuery.h>
 
 #include <KLocale>
 #include <KPasswordDialog>
@@ -224,10 +224,7 @@
 {
     // set the global static Lastfm::Ws stuff
     lastfm::ws::ApiKey = Amarok::lastfmApiKey();
-    lastfm::ws::SharedSecret = "fe0dcde9fcd14c2d1d50665b646335e9";
-    // testing w/ official keys
-    //Ws::SharedSecret = "73582dfc9e556d307aead069af110ab8";
-    //Ws::ApiKey = "c8c7b163b11f92ef2d33ba6cd3c2c3c3";
+    lastfm::ws::SharedSecret = Amarok::lastfmApiSharedSecret();
     m_userNameArray = qstrdup( m_userName.toLatin1().data() );
     lastfm::ws::Username = m_userNameArray;
     if( lastfm::nam() != The::networkAccessManager() )
@@ -309,7 +306,8 @@
         case QNetworkReply::NoError:
         {
 
-            lastfm::XmlQuery lfm = lastfm::XmlQuery( m_jobs[ "auth" ]->readAll() );
+            lastfm::XmlQuery lfm;
+            lfm.parse( m_jobs[ "auth" ]->readAll() );
             LastFmServiceConfig config;
 
             if( lfm.children( "error" ).size() > 0 )
@@ -359,10 +357,8 @@
     {
         case QNetworkReply::NoError:
         {
-            try
-            {
-                lastfm::XmlQuery lfm( m_jobs[ "getUserInfo" ]->readAll() );
-
+            lastfm::XmlQuery lfm;
+            if( lfm.parse( m_jobs[ "getUserInfo" ]->readAll() ) ) {
                 m_country = lfm["user"]["country"].text();
                 m_age = lfm["user"]["age"].text();
                 m_gender = lfm["user"]["gender"].text();
@@ -381,9 +377,10 @@
                 }
                 updateProfileInfo();
 
-            } catch( lastfm::ws::ParseError& e )
+            }
+            else
             {
-                debug() << "Got exception in parsing from last.fm:" << e.what();
+                debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
             }
             break;
         } case QNetworkReply::AuthenticationRequiredError:
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceCollection.cpp amarok-2.5.96/src/services/lastfm/LastFmServiceCollection.cpp
--- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceCollection.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/LastFmServiceCollection.cpp	2012-08-02 16:32:35.956659716 +0200
@@ -26,7 +26,7 @@
 #include "core-impl/collections/support/MemoryQueryMaker.h"
 
 #include <lastfm/ws.h>
-#include <lastfm/XmlQuery>
+#include <lastfm/XmlQuery.h>
 
 #include <QNetworkReply>
 
@@ -154,10 +154,9 @@
         case QNetworkReply::NoError:
         {
             // iterate through each neighbour
-            try
+            lastfm::XmlQuery lfm;
+            if( lfm.parse( m_jobs[ "user.getNeighbours" ]->readAll() ) )
             {
-                lastfm::XmlQuery lfm( m_jobs[ "user.getNeighbours" ]->readAll() );
-
                 foreach( const lastfm::XmlQuery &e, lfm[ "neighbours" ].children( "user" ) )
                 {
                     const QString name = e[ "name" ].text();
@@ -168,9 +167,10 @@
                     addTrack( trackPtr );
                 }
 
-            } catch( lastfm::ws::ParseError& e )
+            }
+            else
             {
-                debug() << "Got exception in parsing from last.fm:" << e.what();
+                debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
             }
             break;
         }
@@ -195,15 +195,14 @@
         case QNetworkReply::NoError:
         {
             // iterate through each neighbour
-            try
+            if( !m_jobs[ "user.getNeighbours" ] )
+            {
+                debug() << "BAD! got no result object";
+                return;
+            }
+            lastfm::XmlQuery lfm;
+            if( lfm.parse( m_jobs[ "user.getNeighbours" ]->readAll() ) )
             {
-                if( !m_jobs[ "user.getNeighbours" ] )
-                {
-                    debug() << "BAD! got no result object";
-                    return;
-                }
-                lastfm::XmlQuery lfm( m_jobs[ "user.getNeighbours" ]->readAll() );
-
                 // iterate through each neighbour
                 foreach( const lastfm::XmlQuery &e, lfm[ "neighbours" ].children( "user" ) )
                 {
@@ -218,9 +217,10 @@
 
                 // should be safe, as both slots SHOULD get called before we return to the event loop...
                 m_jobs[ "user.getNeighbours" ]->deleteLater();
-            } catch( lastfm::ws::ParseError& e )
+            }
+            else
             {
-                debug() << "Got exception in parsing from last.fm:" << e.what();
+                debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
             }
             break;
         }
@@ -248,10 +248,9 @@
     {
         case QNetworkReply::NoError:
         {
-            try
+            lastfm::XmlQuery lfm;
+            if( lfm.parse( m_jobs[ "user.getFriends" ]->readAll() ) )
             {
-                lastfm::XmlQuery lfm( m_jobs[ "user.getFriends" ]->readAll() );
-
                 foreach( const lastfm::XmlQuery &e, lfm[ "friends" ].children( "user" ) )
                 {
                     const QString name = e[ "name" ].text();
@@ -261,9 +260,10 @@
                     addTrack( trackPtr );
                 }
 
-            } catch( lastfm::ws::ParseError& e )
+            }
+            else
             {
-                debug() << "Got exception in parsing from last.fm:" << e.what();
+                debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
             }
             break;
         }
@@ -293,10 +293,9 @@
     {
         case QNetworkReply::NoError:
         {
-            try
+            lastfm::XmlQuery lfm;
+            if( lfm.parse( m_jobs[ "user.getFriends" ]->readAll() ) )
             {
-                lastfm::XmlQuery lfm( m_jobs[ "user.getFriends" ]->readAll() );
-
                 foreach( const lastfm::XmlQuery &e, lfm[ "friends" ].children( "user" ) )
                 {
                     const QString name = e[ "name" ].text();
@@ -306,9 +305,10 @@
                     addTrack( trackPtr );
                 }
 
-            } catch( lastfm::ws::ParseError& e )
+            }
+            else
             {
-                debug() << "Got exception in parsing from last.fm:" << e.what();
+                debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
             }
             break;
         }
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceSettings.cpp amarok-2.5.96/src/services/lastfm/LastFmServiceSettings.cpp
--- amarok-2.5.96.orig/src/services/lastfm/LastFmServiceSettings.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/LastFmServiceSettings.cpp	2012-08-02 16:32:35.957659703 +0200
@@ -23,9 +23,9 @@
 #include "NetworkAccessManagerProxy.h"
 #include "ui_LastFmConfigWidget.h"
 
-#include <lastfm/Audioscrobbler> // from liblastfm
+#include <lastfm/Audioscrobbler.h> // from liblastfm
 #include <lastfm/ws.h>
-#include <lastfm/XmlQuery>
+#include <lastfm/XmlQuery.h>
 
 #include <QCryptographicHash>
 #include <QNetworkAccessManager>
@@ -100,7 +100,7 @@
     m_configDialog->testLogin->setText( i18n( "Testing..." ) );
     // set the global static Lastfm::Ws stuff
     lastfm::ws::ApiKey = Amarok::lastfmApiKey();
-    lastfm::ws::SharedSecret = "fe0dcde9fcd14c2d1d50665b646335e9";
+    lastfm::ws::SharedSecret = Amarok::lastfmApiSharedSecret();
     lastfm::ws::Username = qstrdup( m_configDialog->kcfg_ScrobblerUsername->text().toLatin1().data() );
     if( lastfm::nam() != The::networkAccessManager() )
         lastfm::setNetworkAccessManager( The::networkAccessManager() );
@@ -126,7 +126,8 @@
 {
     DEBUG_BLOCK
 
-    lastfm::XmlQuery lfm = lastfm::XmlQuery( m_authQuery->readAll() );
+    lastfm::XmlQuery lfm;
+    lfm.parse( m_authQuery->readAll() );
 
     switch( m_authQuery->error() )
     {
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.cpp amarok-2.5.96/src/services/lastfm/LastFmTreeModel.cpp
--- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/LastFmTreeModel.cpp	2012-08-02 16:32:35.958659691 +0200
@@ -26,8 +26,8 @@
 #include "AmarokMimeData.h"
 
 #include <lastfm/ws.h>
-#include <lastfm/Tag>
-#include <lastfm/XmlQuery>
+#include <lastfm/Tag.h>
+#include <lastfm/XmlQuery.h>
 
 #include <KIcon>
 #include <KLocale>
@@ -68,11 +68,12 @@
 {
     DEBUG_BLOCK
 
-    try
-    {
         // Iterate over each neighbor, in two passes: 1) Get data 2) Sort data, store in model
 
-        lastfm::XmlQuery lfm( m_jobs[ "getNeighbours" ]->readAll() );
+    lastfm::XmlQuery lfm;
+    lfm.parse( m_jobs[ "getNeighbours" ]->readAll() );
+    if( lfm.parseError().enumValue() == lastfm::ws::NoError )
+    {
         foreach( const lastfm::XmlQuery &e, lfm[ "neighbours" ].children ( "user" ) )
         {
             const QString name = e[ "name" ].text();
@@ -88,11 +89,11 @@
             appendUserStations( neighbor, name );
         }
         m_neighbors.sort();
+    } else {
+        debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+        return;
     }
-    catch( lastfm::ws::ParseError e )
-    {
-        debug() << "Got exception in parsing from last.fm:" << e.what();
-    }
+
     emitRowChanged(LastFm::Neighbors);
     m_jobs[ "getNeighbours" ]->deleteLater();
 }
@@ -102,11 +103,11 @@
 {
     DEBUG_BLOCK
 
-    try
-    {
-        // Iterate over each friend, in two passes: 1) Get data 2) Sort data, store in model
+    // Iterate over each friend, in two passes: 1) Get data 2) Sort data, store in model
 
-        lastfm::XmlQuery lfm( m_jobs[ "getFriends" ]->readAll() );
+    lastfm::XmlQuery lfm;
+    if( lfm.parse( m_jobs[ "getFriends" ]->readAll() ) )
+    {
         foreach( const lastfm::XmlQuery &e, lfm[ "friends" ].children ( "user" ) )
         {
             const QString name = e[ "name" ].text();
@@ -123,11 +124,11 @@
             appendUserStations( afriend, name );
         }
         m_friends.sort();
+    } else {
+        debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+        return;
     }
-    catch( lastfm::ws::ParseError e )
-    {
-        debug() << "Got exception in parsing from last.fm:" << e.what();
-    }
+
     emitRowChanged(LastFm::Friends);
     m_jobs[ "getFriends" ]->deleteLater();
 }
@@ -137,10 +138,9 @@
 {
     DEBUG_BLOCK
     WeightedStringList list;
-    try
+    lastfm::XmlQuery lfm;
+    if( lfm.parse( m_jobs[ "getTopArtists" ]->readAll() ) )
     {
-        lastfm::XmlQuery lfm( m_jobs[ "getTopArtists" ]->readAll() );
-
         foreach( const lastfm::XmlQuery &e, lfm[ "topartists" ].children ( "artist" ) )
         {
             const QString name = e[ "name" ].text();
@@ -158,9 +158,10 @@
             m_myTopArtists->appendChild ( artist );
         }
 
-    } catch( lastfm::ws::ParseError e )
+    }
+    else
     {
-        debug() << "Got exception in parsing from last.fm:" << e.what();
+        debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
     }
     emitRowChanged(LastFm::TopArtists);
     m_jobs[ "getTopArtists" ]->deleteLater();
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.h amarok-2.5.96/src/services/lastfm/LastFmTreeModel.h
--- amarok-2.5.96.orig/src/services/lastfm/LastFmTreeModel.h	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/LastFmTreeModel.h	2012-08-02 16:32:35.957659703 +0200
@@ -22,7 +22,7 @@
 #include "core/meta/Meta.h"
 #include "WeightedStringList.h"
 
-#include <lastfm/User>
+#include <lastfm/User.h>
 
 #include <QAbstractItemModel>
 #include <QHash>
@@ -136,7 +136,7 @@
     LastFmTreeItem *m_myTopArtists;
 
     QString m_userName;
-    lastfm::AuthenticatedUser m_user;
+    lastfm::User m_user;
 
     QStringList m_friends;
     QStringList m_neighbors;
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/ScrobblerAdapter.h amarok-2.5.96/src/services/lastfm/ScrobblerAdapter.h
--- amarok-2.5.96.orig/src/services/lastfm/ScrobblerAdapter.h	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/ScrobblerAdapter.h	2012-08-02 16:32:35.958659691 +0200
@@ -20,8 +20,8 @@
 
 #include "core/meta/Meta.h"
 
-#include <lastfm/Audioscrobbler>
-#include <lastfm/Track>
+#include <lastfm/Audioscrobbler.h>
+#include <lastfm/Track.h>
 
 #include <QVariant>
 
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/biases/LastFmBias.cpp amarok-2.5.96/src/services/lastfm/biases/LastFmBias.cpp
--- amarok-2.5.96.orig/src/services/lastfm/biases/LastFmBias.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/biases/LastFmBias.cpp	2012-08-02 16:32:35.958659691 +0200
@@ -34,9 +34,8 @@
 #include "core/collections/QueryMaker.h"
 #include "core-impl/collections/support/CollectionManager.h"
 
-#include "lastfm/Artist"
-#include "lastfm/ws.h"
-#include "lastfm/XmlQuery"
+#include <lastfm/Artist.h>
+#include <lastfm/ws.h>
 
 #include <QLabel>
 #include <QComboBox>
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/biases/WeeklyTopBias.cpp amarok-2.5.96/src/services/lastfm/biases/WeeklyTopBias.cpp
--- amarok-2.5.96.orig/src/services/lastfm/biases/WeeklyTopBias.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/biases/WeeklyTopBias.cpp	2012-08-02 16:32:35.960659667 +0200
@@ -34,9 +34,9 @@
 #include "core/collections/QueryMaker.h"
 #include "core-impl/collections/support/CollectionManager.h"
 
-#include "lastfm/Artist"
-#include "lastfm/ws.h"
-#include "lastfm/XmlQuery"
+#include <lastfm/Artist.h>
+#include <lastfm/ws.h>
+#include <lastfm/XmlQuery.h>
 
 #include <QNetworkReply>
 
@@ -371,10 +371,9 @@
     }
 
 
-    try
+    lastfm::XmlQuery lfm;
+    if( lfm.parse( reply->readAll() ) )
     {
-        lastfm::XmlQuery lfm( reply->readAll() );
-
         // debug() << "got response:" << lfm;
         QStringList artists;
         for( int i = 0; i < lfm[ "weeklyartistchart" ].children( "artist" ).size(); i++ )
@@ -398,10 +397,10 @@
             warning() << "Got a reply for a week"<<week<<"that was not requested.";
             return;
         }
-
-    } catch( lastfm::ws::ParseError& e )
+    }
+    else
     {
-        debug() << "caught exception parsing weekly artist chart.";
+        debug() << "failed to parse weekly artist chart.";
     }
 
     reply->deleteLater();
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.cpp amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.cpp
--- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.cpp	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.cpp	2012-08-02 16:32:35.961659655 +0200
@@ -41,7 +41,7 @@
 #include <QWeakPointer>
 #include <QUrl>
 
-#include <lastfm/Track>
+#include <lastfm/Track.h>
 
 namespace LastFm {
 
@@ -451,8 +451,7 @@
     DEBUG_BLOCK
 
     debug() << "info:" << d->lastFmTrack.artist() << d->lastFmTrack.title();
-    d->wsReply = lastfm::MutableTrack( d->lastFmTrack ).love();
-    connect( d->wsReply, SIGNAL( finished() ), this, SLOT( slotWsReply() ) );
+    lastfm::MutableTrack( d->lastFmTrack ).love();
 }
 
 void
@@ -477,9 +476,9 @@
 {
     if( d->trackFetch->error() == QNetworkReply::NoError )
     {
-        try
+        lastfm::XmlQuery lfm;
+        if( lfm.parse( d->trackFetch->readAll() ) )
         {
-            lastfm::XmlQuery lfm( d->trackFetch->readAll() );
             QString id = lfm[ "track" ][ "id" ].text();
             QString streamable = lfm[ "track" ][ "streamable" ].text();
             if( streamable.toInt() == 1 )
@@ -487,9 +486,10 @@
             else
                 init();
 
-        } catch( lastfm::ws::ParseError& e )
+        }
+        else
         {
-            debug() << "Got exception in parsing from last.fm:" << e.what();
+            debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
         }
     } else
     {
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.h amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.h
--- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta.h	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/meta/LastFmMeta.h	2012-08-02 16:32:35.960659667 +0200
@@ -24,7 +24,7 @@
 #include "ServiceMetaBase.h" // for the SourceInfoProvider
 
 
-#include <lastfm/Track>
+#include <lastfm/Track.h>
 
 
 #include <QObject>
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta_p.h amarok-2.5.96/src/services/lastfm/meta/LastFmMeta_p.h
--- amarok-2.5.96.orig/src/services/lastfm/meta/LastFmMeta_p.h	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/meta/LastFmMeta_p.h	2012-08-02 16:32:35.961659655 +0200
@@ -26,10 +26,10 @@
 #include "core/statistics/StatisticsProvider.h"
 #include "core-impl/statistics/providers/tag/TagStatisticsProvider.h"
 
-#include <lastfm/Track>
+#include <lastfm/Track.h>
 #include <lastfm/ws.h>
-#include <lastfm/RadioTuner>
-#include <lastfm/XmlQuery>
+#include <lastfm/RadioTuner.h>
+#include <lastfm/XmlQuery.h>
 
 #include <kio/job.h>
 #include <kio/jobclasses.h>
@@ -144,26 +144,24 @@
                 return;
             if( m_userFetch->error() == QNetworkReply::NoError )
             {
-                try
+                lastfm::XmlQuery lfm;
+                if( !lfm.parse( m_userFetch->readAll() ) )
                 {
-                    lastfm::XmlQuery lfm( m_userFetch->readAll() );
-                    albumUrl = lfm[ "track" ][ "album" ][ "url" ].text();
-                    trackUrl = lfm[ "track" ][ "url" ].text();
-                    artistUrl = lfm[ "track" ][ "artist" ][ "url" ].text();
-
-                    notifyObservers();
+                    debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message();
+                    return;
+                }
+                albumUrl = lfm[ "track" ][ "album" ][ "url" ].text();
+                trackUrl = lfm[ "track" ][ "url" ].text();
+                artistUrl = lfm[ "track" ][ "artist" ][ "url" ].text();
 
-                    imageUrl = lfm[ "track" ][ "album" ][ "image size=large" ].text();
+                notifyObservers();
 
-                    if( !imageUrl.isEmpty() )
-                    {
-                        KIO::Job* job = KIO::storedGet( KUrl( imageUrl ), KIO::Reload, KIO::HideProgressInfo );
-                        connect( job, SIGNAL( result( KJob* ) ), this, SLOT( fetchImageFinished( KJob* ) ) );
-                    }
+                imageUrl = lfm[ "track" ][ "album" ][ "image size=large" ].text();
 
-                } catch( lastfm::ws::ParseError& e )
+                if( !imageUrl.isEmpty() )
                 {
-                    debug() << "Got exception in parsing from last.fm:" << e.what();
+                    KIO::Job* job = KIO::storedGet( KUrl( imageUrl ), KIO::Reload, KIO::HideProgressInfo );
+                    connect( job, SIGNAL( result( KJob* ) ), this, SLOT( fetchImageFinished( KJob* ) ) );
                 }
             }
 
diff -U 3 -H -d -r -N -- amarok-2.5.96.orig/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h amarok-2.5.96/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h
--- amarok-2.5.96.orig/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h	2012-07-31 12:10:56.000000000 +0200
+++ amarok-2.5.96/src/services/lastfm/meta/MultiPlayableCapabilityImpl_p.h	2012-08-02 16:32:35.962659642 +0200
@@ -25,8 +25,9 @@
 #include "core/meta/Meta.h"
 #include "core/capabilities/MultiPlayableCapability.h"
 
-#include <lastfm/Track>
-#include <lastfm/RadioTuner>
+#include <lastfm/Track.h>
+#include <lastfm/RadioStation.h>
+#include <lastfm/RadioTuner.h>
 #include <lastfm/ws.h>
 
 #include <KLocale>
@@ -55,24 +56,23 @@
         {
             DEBUG_BLOCK
             m_tuner = new lastfm::RadioTuner( lastfm::RadioStation( m_track->uidUrl() ) );
-            
+
             connect( m_tuner, SIGNAL( trackAvailable() ), this, SLOT( slotNewTrackAvailable() ) );
-            connect( m_tuner, SIGNAL( error( lastfm::ws::Error ) ), this, SLOT( error( lastfm::ws::Error ) ) );
+            connect( m_tuner, SIGNAL( error(lastfm::ws::Error,QString) ), this, SLOT( error( lastfm::ws::Error ) ) );
         }
-        
+
         virtual void fetchNext()
         {
             DEBUG_BLOCK
             m_currentTrack = m_tuner->takeNextTrack();
             m_track->setTrackInfo( m_currentTrack );
-
         }
-        
+
         using Observer::metadataChanged;
         virtual void metadataChanged( Meta::TrackPtr track )
         {
             const LastFm::TrackPtr ltrack = LastFm::TrackPtr::dynamicCast( track );
-            
+
             if( ltrack.isNull() )
                 return;
 
@@ -94,7 +94,7 @@
                 m_track->setTrackInfo( m_currentTrack );
             }
         }
-        
+
         virtual void skip()
         {
             fetchNext();
