--- a/src/mediaserver/cdplugins/gmusic/session.py
+++ b/src/mediaserver/cdplugins/gmusic/session.py
@@ -32,6 +32,7 @@
         self.lib_albums = {}
         self.lib_artists = {}
         self.lib_tracks = {}
+        self.lib_playlists = {}
         self.lib_updatetime = 0
         self.sitdata = []
         self.sitbyid = {}
@@ -74,11 +75,15 @@
         now = time.time()
         if now - self.lib_updatetime < 300:
             return
-        data = self.api.get_all_songs()
-        #self.dmpdata("all_songs", data)
+        if self.lib_updatetime == 0:
+            data = self.api.get_all_songs()
+            #self.dmpdata("all_songs", data)
+        else:
+            data = self.api.get_all_songs(updated_after=datetime.fromtimestamp(self.lib_updatetime))
+            #self.dmpdata("all_songs_since_update", data)
         self.lib_updatetime = now
         tracks = [_parse_track(t) for t in data]
-        self.lib_tracks = dict([(t.id, t) for t in tracks])
+        self.lib_tracks.update(dict([(t.id, t) for t in tracks]))
         for track in tracks:
             # We would like to use the album id here, but gmusic
             # associates the tracks with any compilations after
@@ -92,6 +97,8 @@
             # should have a special library-local get_album_tracks
             self.lib_albums[track.album.name] = track.album
             self.lib_artists[track.artist.id] = track.artist
+        data = self.api.get_all_user_playlist_contents()
+        self.lib_playlists = dict([(pl['id'], pl) for pl in data])
             
     def get_user_albums(self):
         self._get_user_library()
@@ -108,23 +115,15 @@
 
     def get_user_playlist_tracks(self, playlist_id):
         self._get_user_library()
-        data = self.api.get_all_user_playlist_contents()
-        entries = []
-        for item in data:
-            if item['id'] == playlist_id:
-                entries = item['tracks']
-                break
-        if not entries:
-            return []
-        #self.dmpdata("user_playlist_content", entries)
         tracks = []
-        for entry in entries:
-            if entry['deleted']:
-                continue
-            if entry['source'] == u'1':
-                tracks.append(self.lib_tracks[entry['trackId']])
-            elif 'track' in entry:
-                tracks.append(_parse_track(entry['track']) )
+        if playlist_id in self.lib_playlists:
+            for entry in self.lib_playlists[playlist_id]['tracks']:
+                if entry['deleted']:
+                    continue
+                if entry['source'] == u'1':
+                    tracks.append(self.lib_tracks[entry['trackId']])
+                elif 'track' in entry:
+                    tracks.append(_parse_track(entry['track']) )
         return tracks
 
     def create_station_for_genre(self, genre_id):