diff --git a/resources/lib/ClientInformation.py b/resources/lib/ClientInformation.py
index c17576aa..2625c12e 100644
--- a/resources/lib/ClientInformation.py
+++ b/resources/lib/ClientInformation.py
@@ -1,70 +1,54 @@
-#######################################################################
-#       CLIENTINFORMATION: centralized client data
-#       -------------------------------
-#       addonId, addonName, addon version, clientId, platform       
-#######################################################################
-#       USER: centralized Userdata
-#       -------------------------------
-#       username, userId, token, server, http prefix, LogLevel
-#######################################################################
-
 import xbmc
 import xbmcaddon
 import xbmcgui
+
 import os
 from uuid import uuid4 as uuid4
 from Lock import Lock
 
+import Utils as utils
+
+
 class ClientInformation():
+    
 
     def __init__(self):
         addonId = self.getAddonId()
         self.addon = xbmcaddon.Addon(id=addonId)
-        self.WINDOW = xbmcgui.Window( 10000 )
 
-        level = User().getLogLevel()     
-        self.logLevel = 0
-        
-        if (level != None and level != ""):
-            self.logLevel = int(level)
-        
-        if (self.logLevel == 2):
-            self.LogCalls = True
+        self.className = self.__class__.__name__
+        self.addonName = self.getAddonName()
 
-    def logMsg(self, msg, level = 1):
+    def logMsg(self, msg, lvl=1):
 
-        addonName = self.getAddonName()
-        className = self.__class__.__name__
-        
-        if (self.logLevel >= level):
-            try:
-                xbmc.log("%s %s -> %s" % (addonName, className, str(msg)))
-            except UnicodeEncodeError:
-                try:
-                    xbmc.log("%s %s -> %s" % (addonName, className, str(msg)))
-                except: pass
+        utils.logMsg("%s %s" % (self.addonName, self.className), str(msg), int(lvl))
     
     def getAddonId(self):
         # To use when declaring xbmcaddon.Addon(id=addonId)
-        addonId = "plugin.video.emby"
-        return addonId
+        return "plugin.video.emby"
 
     def getAddonName(self):
         # Useful for logging
-        addonName = self.addon.getAddonInfo('name').upper()
-        return addonName
+        return self.addon.getAddonInfo('name').upper()
     
     def getVersion(self):
-        
-        version = self.addon.getAddonInfo('version')
-        return version
+
+        return self.addon.getAddonInfo('version')
+
+    def getDeviceName(self):
+
+        deviceName = self.addon.getSetting('deviceName')
+        deviceName = deviceName.replace("\"", "_")
+        deviceName = deviceName.replace("/", "_")
+
+        return deviceName
     
     def getMachineId(self):
     
-        WINDOW = self.WINDOW
+        WINDOW = xbmcgui.Window(10000)
         
         clientId = WINDOW.getProperty("client_id")
-        if(clientId != None and clientId != ""):
+        if (clientId != None and clientId != ""):
             return clientId
             
         # we need to load and or generate a client machine id    
@@ -78,21 +62,21 @@ class ClientInformation():
             lock = Lock(machine_guid_lock_path)
             locked = lock.acquire()
             
-            if(locked == True):
+            if (locked == True):
             
                 fd = os.open(machine_guid_path, os.O_CREAT|os.O_RDWR)
                 clientId = os.read(fd, 256)
                 
-                if(len(clientId) == 0):
+                if (len(clientId) == 0):
                     uuid = uuid4()
                     clientId = str("%012X" % uuid)
-                    self.logMsg("ClientId saved to FILE : %s" % clientId,1)                    
+                    self.logMsg("ClientId saved to FILE: %s" % clientId, 2)                    
                     os.write(fd, clientId)
                     os.fsync(fd)
                     
                 os.close(fd)
                 
-                self.logMsg("ClientId saved to WINDOW : %s" % clientId,1)
+                self.logMsg("ClientId saved to WINDOW: %s" % clientId, 1)
                 WINDOW.setProperty("client_id", clientId)
                  
         finally: 
@@ -116,94 +100,3 @@ class ClientInformation():
             return "Linux/Android"
 
         return "Unknown"
-
-
-class User(ClientInformation):
-    
-    def __init__(self):
-        addonId = self.getAddonId()
-        self.addon = xbmcaddon.Addon(id=addonId)
-        self.WINDOW = xbmcgui.Window( 10000 )
-
-        level = self.getLogLevel()     
-        self.logLevel = 0
-        
-        if (level != None and level != ""):
-            self.logLevel = int(level)
-        
-        if (self.logLevel == 2):
-            self.LogCalls = True
-
-    def logMsg(self, msg, level = 1):
-
-        addonName = self.getAddonName()
-        className = self.__class__.__name__
-        
-        if (self.logLevel >= level):
-            try:
-                xbmc.log("%s %s -> %s" % (addonName, className, str(msg)))
-            except UnicodeEncodeError:
-                try:
-                    xbmc.log("%s %s -> %s" % (addonName, className, str(msg)))
-                except: pass
-    
-    def getUsername(self):
-        
-        username = self.addon.getSetting('username')
-        return username
-    
-    def getUserId(self):
-        
-        username = self.getUsername()
-        w_userId = self.WINDOW.getProperty('userId%s' % username)
-        s_userId = self.addon.getSetting('userId%s' % username)
-
-        # Verify if userId is saved to Window
-        if (w_userId != ""):
-            self.logMsg("Returning saved (WINDOW) UserId for user: %s UserId: %s" % (username, w_userId),2)
-            return w_userId
-        # Verify if userId is saved in settings
-        elif (s_userId != ""):
-            self.logMsg("Returning saved (SETTINGS) UserId for user: %s UserId: %s" % (username, s_userId),2)
-            self.WINDOW.setProperty('userId%s' % username, s_userId)
-            return s_userId
-        else:
-            return ""
-    
-    def getToken(self):
-        
-        username = self.getUsername()
-        w_token = self.WINDOW.getProperty('AccessToken%s' % username)
-        s_token = self.addon.getSetting('AccessToken%s' % username)
-        
-        # Verify if token is saved to Window
-        if (w_token != ""):
-            self.logMsg("Returning saved (WINDOW) AccessToken for user: %s Token: %s" % (username, w_token),2)
-            return w_token
-        # Verify if token is saved in settings
-        elif (s_token != ""):
-            self.logMsg("Returning saved (SETTINGS) AccessToken for user: %s Token: %s" % (username, s_token),2)
-            self.WINDOW.setProperty('AccessToken%s' % username, s_token)
-            return s_token
-        else:
-            self.logMsg("User is not authenticated.")
-            return ""
-    
-    def getServer(self):
-        
-        host = self.addon.getSetting('ipaddress')
-        port = self.addon.getSetting('port')
-        return host + ":" + port
-
-    def getHTTPprefix(self):
-        # For https support
-        prefix = self.addon.getSetting('prefix')
-        if prefix:
-            return "https://" 
-        else:
-            return "http://"
-    
-    def getLogLevel(self):
-        
-        level = self.addon.getSetting('logLevel')
-        return level
diff --git a/resources/lib/ConnectionManager.py b/resources/lib/ConnectionManager.py
index e06aa315..f91722d2 100644
--- a/resources/lib/ConnectionManager.py
+++ b/resources/lib/ConnectionManager.py
@@ -13,6 +13,7 @@ import socket
 import threading
 from datetime import datetime
 
+import Utils as utils
 from DownloadUtils import DownloadUtils
 from UserClient import UserClient
 from ClientInformation import ClientInformation
@@ -21,48 +22,32 @@ from ClientInformation import ClientInformation
 class ConnectionManager():
 
     clientInfo = ClientInformation()
-    userClient = UserClient()
+    uc = UserClient()
     doUtils = DownloadUtils()
 
-    logLevel = 0
-    addon = None
+    addonName = clientInfo.getAddonName()
+    addonId = clientInfo.getAddonId()
+    addon = xbmcaddon.Addon(id=addonId)
     WINDOW = xbmcgui.Window(10000)
 
+    logLevel = 0
+
     def __init__(self):
 
-        clientInfo = self.clientInfo
-
-        self.addonId = clientInfo.getAddonId()
-        self.addonName = clientInfo.getAddonName()
-        self.addon = xbmcaddon.Addon(id=self.addonId)
-        self.__language__     = self.addon.getLocalizedString
+        self.className = self.__class__.__name__
+        self.__language__ = self.addon.getLocalizedString
     
-    def logMsg(self, msg, level=1):
-        
-        addonName = self.addonName
-        className = self.__class__.__name__
-        s_logLevel = self.userClient.getLogLevel()
+    def logMsg(self, msg, lvl=1):
 
-        # Attempt to change logLevel live
-        if (self.logLevel != s_logLevel):
-            self.logLevel = s_logLevel
-
-        if (self.logLevel >= level):
-            try:
-                xbmc.log("%s %s -> %s" % (addonName, className, str(msg)))
-            except UnicodeEncodeError:
-                try:
-                    xbmc.log("%s %s -> %s" % (addonName, className, str(msg.encode('utf-8'))))
-                except:
-                    pass
+        utils.logMsg("%s %s" % (self.addonName, self.className), msg, int(lvl))
 
     def checkServer(self):
         
         self.WINDOW.setProperty("Server_Checked", "True")
-        self.logMsg("Connection Manager Called")
+        self.logMsg("Connection Manager Called", 2)
         
         addon = self.addon
-        server = self.userClient.getServer()
+        server = self.uc.getServer()
 
         if (server != ""):
             self.logMsg("Server already set", 2)
@@ -78,7 +63,7 @@ class ConnectionManager():
         prefix,ip,port = serverInfo.split(":")
         setServer = xbmcgui.Dialog().yesno(self.__language__(30167), "Proceed with the following server?", self.__language__(30169) + serverInfo)
         
-        if setServer == 1:
+        if (setServer == 1):
             self.logMsg("Server selected. Saving information.", 1)
             addon.setSetting("ipaddress", ip.replace("/", ""))
             addon.setSetting("port", port)
@@ -93,39 +78,40 @@ class ConnectionManager():
         # Get List of public users
         self.logMsg("Getting user list", 1)
         server = ip.replace("/", "") + ":" + port
+        url = "%s/mediabrowser/Users/Public?format=json" % serverInfo
 
         try:
-            jsonData = self.doUtils.downloadUrl(serverInfo + "/mediabrowser/Users/Public?format=json", authenticate=False)
+            result = self.doUtils.downloadUrl(url, authenticate=False)
         except Exception, msg:
-            error = "Get User unable to connect to " + server + " : " + str(msg)
-            xbmc.log (error)
+            error = "Unable to connect to %s: %s" % (server, msg)
+            self.logMsg(error, 1)
             return ""
         
-        if (jsonData == False):
+        if (result == ""):
             return
     
-        self.logMsg("jsonData : " + str(jsonData), level=2)
-        result = json.loads(jsonData)
-        
+        self.logMsg("jsonData: %s" % result, 2)
+
         names = []
         userList = []
         for user in result:
-            name = user.get("Name")
+            name = user[u'Name']
             userList.append(name)
-            if(user.get("HasPassword") == True):
+
+            if(user[u'HasPassword'] == True):
                 name = name + " (Secure)"
             names.append(name)
     
-        self.logMsg("User List: " + str(names))
-        self.logMsg("User List: " + str(userList))
+        self.logMsg("User List: %s" % names, 1)
+        self.logMsg("User List: %s" % userList, 2)
         return_value = xbmcgui.Dialog().select(self.__language__(30200), names)
         
-        if(return_value > -1):
+        if (return_value > -1):
             selected_user = userList[return_value]
-            self.logMsg("elected User: %s" % selected_user)      
+            self.logMsg("Selected User: %s" % selected_user, 1)      
             self.addon.setSetting("username", selected_user)
         else:
-            xbmc.log("No user selected.")
+            self.logMsg("No user selected.", 1)
             xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addonId)
             return
             
@@ -153,8 +139,8 @@ class ConnectionManager():
         sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1)
         sock.setsockopt(socket.IPPROTO_IP, socket.SO_REUSEADDR, 1)
         
-        self.logMsg("MutliGroup      : %s" % str(MULTI_GROUP));
-        self.logMsg("Sending UDP Data: %s" % MESSAGE);
+        self.logMsg("MutliGroup      : %s" % str(MULTI_GROUP), 2);
+        self.logMsg("Sending UDP Data: %s" % MESSAGE, 2);
         sock.sendto(MESSAGE, MULTI_GROUP)
     
         try:
diff --git a/resources/lib/ReadEmbyDB.py b/resources/lib/ReadEmbyDB.py
index 584a0bd5..4d80455c 100644
--- a/resources/lib/ReadEmbyDB.py
+++ b/resources/lib/ReadEmbyDB.py
@@ -182,11 +182,11 @@ class ReadEmbyDB():
     
     def getCollections(self, type):
         #Build a list of the user views
-        downloadUtils = DownloadUtils()
+        doUtils = DownloadUtils()
         
         try:
             url = "{server}/mediabrowser/Users/{UserId}/Items/Root?format=json"
-            result = downloadUtils.downloadUrl(url)
+            result = doUtils.downloadUrl(url)
         except Exception, msg:
             error = "Can't connect: %s" % msg
             xbmc.log(error)
@@ -198,7 +198,7 @@ class ReadEmbyDB():
         parentid = result[u'Id']
         
         url = "{server}/mediabrowser/Users/{UserId}/items?ParentId=%s&Sortby=SortName&format=json" % parentid
-        result = downloadUtils.downloadUrl(url)
+        result = doUtils.downloadUrl(url)
         collections=[]
         
         if (result == ""):
@@ -209,9 +209,11 @@ class ReadEmbyDB():
         for item in result:
             if (item[u'RecursiveItemCount'] != 0):
                 Name = item[u'Name']
-                itemtype = item[u'CollectionType']
-                if itemtype == None or itemtype == "":
+                if u'CollectionType' not in item:
                     itemtype = "movies" # User may not have declared the type
+                else:
+                    itemtype = item[u'CollectionType']
+                    
                 if itemtype == type and Name != "Collections":
                     collections.append({'title': Name,
                                         'type' : itemtype,
@@ -247,9 +249,9 @@ class ReadEmbyDB():
                 if type == None:
                     type = "None" # User may not have declared the type
                 if type == type:
-                    collections.append({'title': Name,
-                                        'type' : type,
-                                        'id'   : view[u'Id']})
+                    collections.append( {'title'      : Name,
+                            'type'           : type,
+                            'id'             : view[u'Id']})
         return collections
     
     def getBoxSets(self):
diff --git a/resources/lib/UserClient.py b/resources/lib/UserClient.py
index b3df3a58..575f5929 100644
--- a/resources/lib/UserClient.py
+++ b/resources/lib/UserClient.py
@@ -19,18 +19,22 @@ from DownloadUtils import DownloadUtils
 
 class UserClient(threading.Thread):
 
+    # Borg - multiple instances, shared state
+    _shared_state = {}
 
     clientInfo = ClientInformation()
     doUtils = DownloadUtils()
+    KodiMonitor = KodiMonitor.Kodi_Monitor()
+    
     addonName = clientInfo.getAddonName()
-    className = None
+    addonId = clientInfo.getAddonId()
+    addon = xbmcaddon.Addon(id=addonId)
+    WINDOW = xbmcgui.Window(10000)
 
     stopClient = False
     logLevel = 0
-    addon = None
     auth = True
     retry = 0
-    WINDOW = xbmcgui.Window(10000)
 
     currUser = None
     currUserId = None
@@ -40,10 +44,7 @@ class UserClient(threading.Thread):
 
     def __init__(self, *args):
 
-        self.KodiMonitor = KodiMonitor.Kodi_Monitor()
-
-        self.addonId = self.clientInfo.getAddonId()
-        self.addon = xbmcaddon.Addon(id=self.addonId)
+        self.__dict__ = self._shared_state
         self.className = self.__class__.__name__
 
         threading.Thread.__init__(self, *args)
@@ -55,7 +56,7 @@ class UserClient(threading.Thread):
     def getUsername(self):
 
         username = self.addon.getSetting('username')
-        
+
         if (username == ""):
             self.logMsg("No username saved.", 2)
             return ""
@@ -136,18 +137,19 @@ class UserClient(threading.Thread):
 
         # Get public Users
         url = "%s/mediabrowser/Users/Public?format=json" % server
-        jsonData = self.doUtils.downloadUrl(url, authenticate=False)
+        result = self.doUtils.downloadUrl(url, authenticate=False)
         
         users = []
         
-        if (jsonData != ""):
-            users = json.loads(jsonData)
+        if (result != ""):
+            users = result
 
         return users
 
     def loadCurrUser(self):
 
         WINDOW = self.WINDOW
+        doUtils = self.doUtils
         username = self.getUsername()
 
         # Only to be used if token exists
@@ -162,6 +164,14 @@ class UserClient(threading.Thread):
         WINDOW.setProperty("server_%s" % username, self.getServer(prefix=False))
         WINDOW.setProperty("userId%s" % username, self.currUserId)
 
+        # Set DownloadUtils values
+        doUtils.setUsername(username)
+        doUtils.setUserId(self.currUserId)
+        doUtils.setServer(self.currServer)
+        doUtils.setToken(self.currToken)
+        # Start DownloadUtils session
+        doUtils.startSession()
+
         self.currUser = username
 
     def authenticate(self):
@@ -195,11 +205,15 @@ class UserClient(threading.Thread):
         users = self.getPublicUsers()
         password = ""
         
+        '''if users == "":
+            self.WINDOW.setProperty("Server_status", "Stop")
+            return'''
         # Find user in list
         for user in users:
-            name = user.get("Name")
+            name = user[u'Name']
             userHasPassword = False
-            if (username == name):
+
+            if (unicode(username, 'utf-8') in name):
                 # Verify if user has a password
                 if (user.get("HasPassword") == True):
                     userHasPassword = True
@@ -207,7 +221,7 @@ class UserClient(threading.Thread):
                 if (userHasPassword):
                     password = xbmcgui.Dialog().input("Enter password for user: %s" % username, option=xbmcgui.ALPHANUM_HIDE_INPUT)
                     # If password dialog is cancelled
-                    if password == "":
+                    if (password == ""):
                         self.logMsg("No password entered.", 0)
                         self.WINDOW.setProperty("Server_status", "Stop")
                         self.auth = False
@@ -222,22 +236,21 @@ class UserClient(threading.Thread):
 
         # Authenticate username and password
         url = "%s/mediabrowser/Users/AuthenticateByName?format=json" % server
-        messageData = "username=%s&password=%s" % (username, sha1)
+        data = {'username': username, 'password': sha1}
+        self.logMsg(data, 2)
 
-        resp = self.doUtils.downloadUrl(url, postBody=messageData, type="POST", authenticate=False)
+        result = self.doUtils.downloadUrl(url, postBody=data, type="POST", authenticate=False)
 
-        result = None
         accessToken = None
         try:
-            self.logMsg("Auth_Reponse: %s" % resp, 1)
-            result = json.loads(resp)
-            accessToken = result.get("AccessToken")
+            self.logMsg("Auth_Reponse: %s" % result, 1)
+            accessToken = result[u'AccessToken']
         except:
             pass
 
         if (result != None and accessToken != None):
             self.currUser = username
-            userId = result.get("User").get("Id")
+            userId = result[u'User'][u'Id']
             addon.setSetting("accessToken%s" % username, accessToken)
             addon.setSetting("userId%s" % username, userId)
             self.logMsg("User Authenticated: %s" % accessToken)
@@ -249,7 +262,7 @@ class UserClient(threading.Thread):
             self.logMsg("User authentication failed.")
             addon.setSetting("accessToken%s" % username, "")
             addon.setSetting("userId%s" % username, "")
-            xbmcgui.Dialog().ok("Error Connecting", "Wrong password.")
+            xbmcgui.Dialog().ok("Error connecting", "Invalid username or password.")
             
             # Give two attempts at entering password
             self.retry += 1
@@ -262,7 +275,7 @@ class UserClient(threading.Thread):
 
     def resetClient(self):
 
-        if self.currToken != None:
+        if (self.currToken != None):
             # In case of 401, removed saved token
             self.addon.setSetting("accessToken%s" % self.currUser, "")
             self.WINDOW.setProperty("accessToken%s" % self.currUser, "")
diff --git a/resources/lib/WebSocketClient.py b/resources/lib/WebSocketClient.py
index 574b1cb0..ec61c45a 100644
--- a/resources/lib/WebSocketClient.py
+++ b/resources/lib/WebSocketClient.py
@@ -236,7 +236,7 @@ class WebSocketThread(threading.Thread):
             LibrarySync().TvShowsSync(connection, cursor, fullsync = False, installFirstRun = False, itemList = itemsToUpdate)
             cursor.close()
 
-    def user_data_update(self, userDataList):
+    def user_data_update(self, userData):
     
         for userData in userDataList:
             self.logMsg("Message : Doing UserDataChanged : UserData : " + str(userData), 0)
@@ -268,11 +268,11 @@ class WebSocketThread(threading.Thread):
         messageString = json.dumps(messageData)
         self.logMsg("Opened : " + str(messageString))
         ws.send(messageString)
-        
+        '''
         # Set Capabilities
         xbmc.log("postcapabilities_called")
         downloadUtils = DownloadUtils()
-        downloadUtils.postcapabilities()
+        downloadUtils.startSession()'''
            
         
     def getWebSocketPort(self, host, port):
diff --git a/resources/lib/WriteKodiDB.py b/resources/lib/WriteKodiDB.py
index dbcd306d..b46ccb44 100644
--- a/resources/lib/WriteKodiDB.py
+++ b/resources/lib/WriteKodiDB.py
@@ -32,15 +32,11 @@ class WriteKodiDB():
         mb3Id = ReadKodiDB().getEmbyIdByKodiId(id, type)
 
         if(mb3Id != None):
-            addon = xbmcaddon.Addon(id='plugin.video.emby')
-            WINDOW = xbmcgui.Window(10000)
-            username = WINDOW.getProperty('currUser')
-            userid = WINDOW.getProperty('userId%s' % username)
-            server = WINDOW.getProperty('server%s' % username)     
+            addon = xbmcaddon.Addon(id='plugin.video.emby')   
             
             downloadUtils = DownloadUtils()       
         
-            watchedurl = "%s/mediabrowser/Users/%s/PlayedItems/%s" % (server, userid, mb3Id)
+            watchedurl = "{server}/mediabrowser/Users/{UserId}/PlayedItems/%s" % mb3Id
             utils.logMsg("Emby","watchedurl -->" + watchedurl)
             if playcount != 0:
                 downloadUtils.downloadUrl(watchedurl, postBody="", type="POST")
@@ -51,8 +47,7 @@ class WriteKodiDB():
         addon = xbmcaddon.Addon(id='plugin.video.emby')
         WINDOW = xbmcgui.Window(10000)
         username = WINDOW.getProperty('currUser')
-        userid = WINDOW.getProperty('userId%s' % username)
-        server = WINDOW.getProperty('server%s' % username) 
+        server = WINDOW.getProperty('server%s' % username)
         
         downloadUtils = DownloadUtils()
         
@@ -113,12 +108,12 @@ class WriteKodiDB():
         #trailer link
         trailerUrl = None
         if MBitem.get("LocalTrailerCount") != None and MBitem.get("LocalTrailerCount") > 0:
-            itemTrailerUrl = "%s/mediabrowser/Users/%s/Items/%s/LocalTrailers?format=json" % (server, userid, MBitem.get("Id"))
-            jsonData = downloadUtils.downloadUrl(itemTrailerUrl, suppress=False, popup=0 )
-            if(jsonData != ""):
-                trailerItem = json.loads(jsonData)
-                if trailerItem[0].get("LocationType") == "FileSystem":
-                    trailerUrl = PlayUtils().getPlayUrl(server, trailerItem[0].get("Id"), trailerItem[0])
+            itemTrailerUrl = "{server}/mediabrowser/Users/{UserId}/Items/%s/LocalTrailers?format=json" % MBitem.get("Id")
+            jsonData = downloadUtils.downloadUrl(itemTrailerUrl)
+            if (jsonData != ""):
+                trailerItem = jsonData
+                if trailerItem[0][u'LocationType'] == "FileSystem":
+                    trailerUrl = PlayUtils().getPlayUrl(server, trailerItem[0][u'Id'], trailerItem[0])
                     trailerUrl = utils.convertEncoding(trailerUrl)
                     self.getPropertyParam_Batched(KodiItem, "trailer", trailerUrl, params)
                 
@@ -417,6 +412,7 @@ class WriteKodiDB():
 
         #update artwork
         changes = False
+        
         artwork = {}
         artwork["thumb"] = API().getArtwork(MBitem, "Primary")
         
@@ -676,11 +672,11 @@ class WriteKodiDB():
         trailerUrl = None
         if MBitem.get("LocalTrailerCount") != None and MBitem.get("LocalTrailerCount") > 0:
             itemTrailerUrl = "%s/mediabrowser/Users/%s/Items/%s/LocalTrailers?format=json" % (server, userid, MBitem.get("Id"))
-            jsonData = downloadUtils.downloadUrl(itemTrailerUrl, suppress=False, popup=0 )
+            jsonData = downloadUtils.downloadUrl(itemTrailerUrl)
             if(jsonData != ""):
-                trailerItem = json.loads(jsonData)
-                if trailerItem[0].get("LocationType") == "FileSystem":
-                    trailerUrl = PlayUtils().getPlayUrl(server, trailerItem[0].get("Id"), trailerItem[0])
+                trailerItem = jsonData
+                if trailerItem[0][u'LocationType'] == "FileSystem":
+                    trailerUrl = PlayUtils().getPlayUrl(server, trailerItem[0][u'Id'], trailerItem[0])
                     trailerUrl = utils.convertEncoding(trailerUrl)
         
         #create the movie
@@ -691,18 +687,13 @@ class WriteKodiDB():
         
         cursor.execute(pathsql, (movieid, fileid, title, plot, shortplot, rating, year, MBitem["Id"], sorttitle, runtime, title, trailerUrl))
         
-        actionPerformed = False
-        
         try:
             connection.commit()
             utils.logMsg("Emby","Added movie to Kodi Library",MBitem["Id"] + " - " + MBitem["Name"])
-            actionPerformed = True
         except:
             utils.logMsg("Emby","Error adding movie to Kodi Library",MBitem["Id"] + " - " + MBitem["Name"])
             actionPerformed = False
     
-        return actionPerformed
-        
     def addMusicVideoToKodiLibrary( self, MBitem, connection, cursor  ):
 
         #adds a musicvideo to Kodi by directly inserting it to connectionthe DB while there is no addMusicVideo available on the json API
@@ -772,55 +763,25 @@ class WriteKodiDB():
         pathsql="insert into musicvideo(idMVideo, idFile, c00, c04, c08, c23) values(?, ?, ?, ?, ?, ?)"
         cursor.execute(pathsql, (musicvideoid, fileid, title, runtime, plot, MBitem["Id"]))
         
-        actionPerformed = False
-        
         try:
             connection.commit()
             utils.logMsg("Emby","Added musicvideo to Kodi Library",MBitem["Id"] + " - " + MBitem["Name"])
-            actionPerformed = True
         except:
             utils.logMsg("Emby","Error adding musicvideo to Kodi Library",MBitem["Id"] + " - " + MBitem["Name"])
+            actionPerformed = False
     
-        return actionPerformed
-        
     def addEpisodeToKodiLibrary(self, MBitem, connection, cursor):
         
         #adds a Episode to Kodi by directly inserting it to the DB while there is no addEpisode available on the json API
         #TODO: PR at Kodi team for a addEpisode endpoint on their API
         
-        # check season
-        season = 0
-        if MBitem.get("ParentIndexNumber") != None:
-            season = int(MBitem.get("ParentIndexNumber"))
-        else:
-            utils.logMsg("Emby","Error adding episode to Kodi Library, no ParentIndexNumber - ID: " + MBitem["Id"] + " - " + MBitem["Name"])
-            return False        
-        
         # first check the episode is not already in the DB using the Emby ID which is stored in c20
         cursor.execute("SELECT idEpisode FROM episode WHERE c20 = ?",(MBitem["Id"],))
         result = cursor.fetchone()
         if result != None:
             utils.logMsg("Emby", "Episode already exists in DB : " + MBitem["Id"] + " - " + MBitem["Name"], 2)
-            return False
+            return
         
-        # get the showid
-        cursor.execute("SELECT idShow as showid FROM tvshow WHERE c12 = ?",(MBitem["SeriesId"],))
-        result = cursor.fetchone()
-        showid = -1
-        if(result == None):
-            utils.logMsg("Emby","Error adding episode to Kodi Library, couldn't find show - ID: " + MBitem["Id"] + " - " + MBitem["Name"])
-            return False
-        else:
-            showid = result[0]
-
-        # check season
-        cursor.execute("SELECT idSeason FROM seasons WHERE idShow = ? and season = ?",(showid, season))
-        result = cursor.fetchone()        
-        if(result == None):
-            utils.logMsg("Emby","Error adding episode to Kodi Library, season does not exist - ShowId: " + str(showid) + " SeasonNo: " + str(season) + " EmbyId: " + MBitem["Id"] + " Name: " + MBitem["Name"])
-            return False        
-        
-        # do add
         addon = xbmcaddon.Addon(id='plugin.video.emby')
         port = addon.getSetting('port')
         host = addon.getSetting('ipaddress')
@@ -878,7 +839,33 @@ class WriteKodiDB():
             fileid = fileid + 1
             sql="INSERT OR REPLACE into files(idFile, idPath, strFilename, playCount, lastPlayed, dateAdded) values(?, ?, ?, ?, ?, ?)"
             cursor.execute(sql, (fileid,pathid,filename,playcount,lastplayed,dateadded))
-                
+        
+        #get the showid
+        cursor.execute("SELECT idShow as showid FROM tvshow WHERE c12 = ?",(MBitem["SeriesId"],))
+        result = cursor.fetchone()
+        showid = -1
+        if(result == None):
+            utils.logMsg("Emby","Error adding episode to Kodi Library, couldn't find show - ID: " + MBitem["Id"] + " - " + MBitem["Name"])
+            actionPerformed = False
+            return False
+        else:
+            showid = result[0]
+
+        # check season
+        season = 0
+        if MBitem.get("ParentIndexNumber") != None:
+            season = int(MBitem.get("ParentIndexNumber"))
+        else:
+            utils.logMsg("Emby","Error adding episode to Kodi Library, no ParentIndexNumber - ID: " + MBitem["Id"] + " - " + MBitem["Name"])
+            return False
+            
+        cursor.execute("SELECT idSeason FROM seasons WHERE idShow = ? and season = ?",(showid, season))
+        result = cursor.fetchone()        
+        if(result == None):
+            utils.logMsg("Emby","Error adding episode to Kodi Library, season does not exist - ShowId: " + str(showid) + " SeasonNo: " + str(season) + " EmbyId: " + MBitem["Id"] + " Name: " + MBitem["Name"])
+            actionPerformed = False
+            return False
+        
         # build info
         episode = 0
         if MBitem.get("IndexNumber") != None:
@@ -901,17 +888,13 @@ class WriteKodiDB():
         pathsql = "INSERT into episode(idEpisode, idFile, c00, c01, c03, c05, c09, c20, c12, c13, c14, idShow, c15, c16) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
         cursor.execute(pathsql, (episodeid, fileid, title, plot, rating, premieredate, runtime, MBitem["Id"], season, episode, title, showid, "-1", "-1"))
         
-        actionPerformed = False
-        
         try:
             connection.commit()
             utils.logMsg("Emby","Added episode to Kodi Library - ID: " + MBitem["Id"] + " - " + MBitem["Name"])
-            actionPerformed = True
         except:
             utils.logMsg("Emby","Error adding episode to Kodi Library - ID: " + MBitem["Id"] + " - " + MBitem["Name"])
-            
-        return actionPerformed
-        
+            actionPerformed = False
+    
     def deleteMovieFromKodiLibrary(self, id ):
         kodiItem = ReadKodiDB().getKodiMovie(id)
         utils.logMsg("deleting movie from Kodi library",id)
@@ -982,7 +965,6 @@ class WriteKodiDB():
         elif "/" in path:
             toplevelpathstr = path.rsplit("/",2)[1]
             toplevelpath = path.replace(toplevelpathstr + "/","")
-            
         cursor.execute("SELECT idPath as tlpathid FROM path WHERE strPath = ?",(toplevelpath,))
         result = cursor.fetchone()
         if result == None:
@@ -1010,16 +992,12 @@ class WriteKodiDB():
         pathsql="insert into tvshowlinkpath(idShow,idPath) values(?, ?)"
         cursor.execute(pathsql, (showid,pathid))
 
-        actionPerformed = False
-        
         try:
             connection.commit()
             utils.logMsg("Emby","Added TV Show to Kodi Library: " + MBitem["Id"] + " - " + MBitem["Name"])
-            actionPerformed = True
         except:
             utils.logMsg("Emby","Error adding tvshow to Kodi Library: " + MBitem["Id"] + " - " + MBitem["Name"])
-
-        return actionPerformed
+            actionPerformed = False
         
     def deleteTVShowFromKodiLibrary(self, id):
         xbmc.sleep(sleepVal)