diff --git a/resources/lib/objects/_common.py b/resources/lib/objects/_common.py
index fa618c59..f0415f2d 100644
--- a/resources/lib/objects/_common.py
+++ b/resources/lib/objects/_common.py
@@ -149,7 +149,7 @@ class Items(object):
 
         # Process additions and updates
         if emby_items:
-            self.added(emby_items, total, view)
+            self.process_all(item_type, "update", emby_items, total, view)
         # Process deletes
         if compare_to:
             self.remove_all(item_type, compare_to.items())
@@ -168,7 +168,7 @@ class Items(object):
             item_id = item['Id']
 
             if compare_to.get(item_id) != api.API(item).get_checksum():
-                # Only update if movie is not in Kodi or checksum is different
+                # Only update if item is not in Kodi or checksum is different
                 update_list.append(item_id)
 
             compare_to.pop(item_id, None)
diff --git a/resources/lib/objects/movies.py b/resources/lib/objects/movies.py
index 87df1990..b97b3b2c 100644
--- a/resources/lib/objects/movies.py
+++ b/resources/lib/objects/movies.py
@@ -83,7 +83,7 @@ class Movies(Items):
         if self.pdialog:
             self.pdialog.update(heading=lang(29999), message="%s %s..." % (lang(33026), view_name))
         
-        movies = dict(self.emby_db.get_checksum_by_view("Movie", view_id))        
+        movies = dict(self.emby_db.get_checksum_by_view("Movie", view_id))
         emby_movies = self.emby.getMovies(view_id, basic=True, dialog=self.pdialog)
 
         return self.compare("Movie", emby_movies['Items'], movies, view)
diff --git a/resources/lib/objects/music.py b/resources/lib/objects/music.py
index ab81d3d8..fecb58bc 100644
--- a/resources/lib/objects/music.py
+++ b/resources/lib/objects/music.py
@@ -70,107 +70,84 @@ class Music(Items):
 
     def compare_all(self):
         # Pull the list of artists, albums, songs
-        pdialog = self.pdialog
-
         views = self.emby_db.getView_byType('music')
-        try:
-            all_kodiartists = dict(self.emby_db.get_checksum('MusicArtist'))
-            all_kodialbumartists = dict(self.emby_db.get_checksum('AlbumArtist'))
-        except ValueError:
-            all_kodiartists = {}
-            all_kodialbumartists = {}
 
-        try:
-            all_kodialbums = dict(self.emby_db.get_checksum('MusicAlbum'))
-        except ValueError:
-            all_kodialbums = {}
-
-        try:
-            all_kodisongs = dict(self.emby_db.get_checksum('Audio'))
-        except ValueError:
-            all_kodisongs = {}
-
-        all_embyartistsIds = set()
-        all_embyalbumsIds = set()
-        all_embysongsIds = set()
-        updatelist = []
-
-        process = {
-
-            'artists': [self.emby.getArtists, self.add_updateArtist],
-            'albums': [self.emby.getAlbums, self.add_updateAlbum],
-            'songs': [self.emby.getSongs, self.add_updateSong]
-        }
         for view in views:
-            for data_type in ['artists', 'albums', 'songs']:
-                if pdialog:
-                    pdialog.update(
-                            heading=lang(29999),
-                            message="%s %s..." % (lang(33031), data_type))
-                if data_type != "artists":
-                    all_embyitems = process[data_type][0](basic=True, dialog=pdialog)
-                else:
-                    all_embyitems = process[data_type][0](view['id'], dialog=pdialog)
+            # Process artists
+            self.compare_artists(view)
+            # Process albums
+            self.compare_albums()
+            # Process songs
+            self.compare_songs()
 
-                for embyitem in all_embyitems['Items']:
-                    if self.should_stop():
-                        return False
-                    API = api.API(embyitem)
-                    itemid = embyitem['Id']
-                    if data_type == "artists":
-                        all_embyartistsIds.add(itemid)
-                        if itemid in all_kodiartists:
-                            if all_kodiartists[itemid] != API.get_checksum():
-                                # Only update if artist is not in Kodi or checksum is different
-                                updatelist.append(itemid)
-                        elif all_kodialbumartists.get(itemid) != API.get_checksum():
-                            # Only update if artist is not in Kodi or checksum is different
-                            updatelist.append(itemid)
-                    elif data_type == "albums":
-                        all_embyalbumsIds.add(itemid)
-                        if all_kodialbums.get(itemid) != API.get_checksum():
-                            # Only update if album is not in Kodi or checksum is different
-                            updatelist.append(itemid)
-                    else:
-                        all_embysongsIds.add(itemid)
-                        if all_kodisongs.get(itemid) != API.get_checksum():
-                            # Only update if songs is not in Kodi or checksum is different
-                            updatelist.append(itemid)
-                log.info("%s to update: %s", data_type, updatelist)
-                embyitems = self.emby.getFullItems(updatelist)
-                self.total = len(updatelist)
-                del updatelist[:]
-                if pdialog:
-                    pdialog.update(heading="Processing %s / %s items" % (data_type, self.total))
-                self.count = 0
-                for embyitem in embyitems:
-                    # Process individual item
-                    if self.should_stop():
-                        return False
-                    self.title = embyitem['Name']
-                    self.update_pdialog()
-                    process[data_type][1](embyitem)
-                    self.count += 1
-        ##### PROCESS DELETES #####
-        for kodiartist in all_kodiartists:
-            if kodiartist not in all_embyartistsIds and all_kodiartists[kodiartist] is not None:
-                self.remove(kodiartist)
-
-        log.info("Artist compare finished.")
-
-        for kodialbum in all_kodialbums:
-            if kodialbum not in all_embyalbumsIds:
-                self.remove(kodialbum)
-
-        log.info("Albums compare finished.")
-
-        for kodisong in all_kodisongs:
-            if kodisong not in all_embysongsIds:
-                self.remove(kodisong)
-
-        log.info("Songs compare finished.")
         return True
 
+    def compare_artists(self, view):
+
+        all_embyartistsIds = set()
+        update_list = list()
+
+        if self.pdialog:
+            self.pdialog.update(heading=lang(29999), message="%s Artists..." % lang(33031))
+
+        artists = dict(self.emby_db.get_checksum('MusicArtist'))
+        album_artists = dict(self.emby_db.get_checksum('AlbumArtist'))
+        emby_artists = self.emby.getArtists(view['id'], dialog=self.pdialog)
+
+        for item in emby_artists['Items']:
+
+            if self.should_stop():
+                    return False
+
+            item_id = item['Id']
+            API = api.API(item)
+
+            all_embyartistsIds.add(item_id)
+            if item_id in artists:
+                if artists[item_id] != API.get_checksum():
+                    # Only update if artist is not in Kodi or checksum is different
+                    update_list.append(item_id)
+            elif album_artists.get(item_id) != API.get_checksum():
+                # Only update if artist is not in Kodi or checksum is different
+                update_list.append(item_id)
+
+            #compare_to.pop(item_id, None)
+
+        log.info("Update for Artist: %s", update_list)
+
+        emby_items = self.emby.getFullItems(update_list)
+        total = len(update_list)
+
+        if self.pdialog:
+            self.pdialog.update(heading="Processing Artists / %s items" % total)
+
+        # Process additions and updates
+        if emby_items:
+            self.process_all("MusicArtist", "update", emby_items, total)
+        # Process removals
+        for artist in artists:
+            if artist not in all_embyartistsIds and artists[artist] is not None:
+                self.remove(artist)
+
+    def compare_albums(self):
+
+        if self.pdialog:
+            self.pdialog.update(heading=lang(29999), message="%s Albums..." % lang(33031))
+
+        albums = dict(self.emby_db.get_checksum('MusicAlbum'))
+        emby_albums = self.emby.getAlbums(basic=True, dialog=self.pdialog)
+
+        return self.compare("MusicAlbum", emby_albums['Items'], albums)
+
+    def compare_songs(self):
+
+        if self.pdialog:
+            self.pdialog.update(heading=lang(29999), message="%s Songs..." % lang(33031))
+
+        songs = dict(self.emby_db.get_checksum('Audio'))
+        emby_songs = self.emby.getSongs(basic=True, dialog=self.pdialog)
+
+        return self.compare("Audio", emby_songs['Items'], songs)
 
     def added(self, items, total=None):
 
@@ -192,7 +169,7 @@ class Music(Items):
                 all_songs = self.emby.getSongsbyAlbum(item['Id'])
                 self.added_song(all_songs['Items'])
 
-    def added_song(self, items, total=None):
+    def added_song(self, items, total=None, *args):
 
         update = True if not self.total else False
 
diff --git a/resources/lib/objects/musicvideos.py b/resources/lib/objects/musicvideos.py
index 78595d96..1de466d7 100644
--- a/resources/lib/objects/musicvideos.py
+++ b/resources/lib/objects/musicvideos.py
@@ -69,7 +69,7 @@ class MusicVideos(Items):
         if self.pdialog:
             self.pdialog.update(heading=lang(29999), message="%s %s..." % (lang(33028), view_name))
 
-        mvideos = dict(self.emby_db.get_checksum_by_view('MusicVideo', view_id))        
+        mvideos = dict(self.emby_db.get_checksum_by_view('MusicVideo', view_id))
         emby_mvideos = self.emby.getMusicVideos(view_id, basic=True, dialog=self.pdialog)
 
         return self.compare("MusicVideo", emby_mvideos['Items'], mvideos, view)
diff --git a/resources/lib/objects/tvshows.py b/resources/lib/objects/tvshows.py
index e5aeb7dd..7ea9a1ce 100644
--- a/resources/lib/objects/tvshows.py
+++ b/resources/lib/objects/tvshows.py
@@ -86,7 +86,7 @@ class TVShows(Items):
         all_embyepisodesIds = set()
         updatelist = []
 
-
+        # TODO: Review once series pooling is explicitely returned in api
         for view in views:
 
             if self.should_stop():
diff --git a/resources/lib/websocket_client.py b/resources/lib/websocket_client.py
index 1026e088..9ceed938 100644
--- a/resources/lib/websocket_client.py
+++ b/resources/lib/websocket_client.py
@@ -73,11 +73,11 @@ class WebSocketClient(threading.Thread):
 
         if message_type == 'Play':
             # A remote control play command has been sent from the server.
-            self._play_(data)
+            self._play(data)
 
         elif message_type == 'Playstate':
             # A remote control update playstate command has been sent from the server.
-            self._playstate_(data)
+            self._playstate(data)
 
         elif message_type == "UserDataChanged":
             # A user changed their personal rating for an item, or their playstate was updated
@@ -103,7 +103,7 @@ class WebSocketClient(threading.Thread):
             window('emby_online', value="false")
 
     @classmethod
-    def _play_(cls, data):
+    def _play(cls, data):
 
         item_ids = data['ItemIds']
         command = data['PlayCommand']
@@ -132,7 +132,7 @@ class WebSocketClient(threading.Thread):
                 player.play(new_playlist)
 
     @classmethod
-    def _playstate_(cls, data):
+    def _playstate(cls, data):
 
         command = data['Command']
         player = xbmc.Player()