diff --git a/default.py b/default.py
index eae867f6..0116b498 100644
--- a/default.py
+++ b/default.py
@@ -24,6 +24,7 @@ import loghandler
 from utils import window, dialog, language as lang
 from ga_client import GoogleAnalytics
 import database
+import internal_exceptions
 
 #################################################################################################
 
@@ -161,10 +162,14 @@ if __name__ == "__main__":
 
     try:
         Main()
+    except internal_exceptions.ExceptionWrapper as error:
+        log.exception(error)
+        raise
     except Exception as error:
         ga = GoogleAnalytics()
         errStrings = ga.formatException()
         ga.sendEventData("Exception", errStrings[0], errStrings[1])
         log.exception(error)
+        raise
 
     log.info("plugin.video.emby stopped")
diff --git a/resources/lib/downloadutils.py b/resources/lib/downloadutils.py
index fdd000e2..b9d55961 100644
--- a/resources/lib/downloadutils.py
+++ b/resources/lib/downloadutils.py
@@ -11,6 +11,7 @@ import xbmcgui
 import clientinfo
 import connect.connectionmanager as connectionmanager
 from utils import window, settings, language as lang
+import internal_exceptions
 
 ##################################################################################################
 
@@ -267,18 +268,18 @@ class DownloadUtils(object):
 
         except requests.exceptions.SSLError as error:
             log.error("invalid SSL certificate for: %s", url)
-            raise
+            raise internal_exceptions.ExceptionWrapper(error)
 
         except requests.exceptions.ConnectTimeout as error:
             log.error("Server timeout at: %s", url)
-            raise
+            raise internal_exceptions.ExceptionWrapper(error)
 
         except requests.exceptions.ConnectionError as error:
             # Make the addon aware of status
             if window('emby_online') != "false":
                 log.error("Server unreachable at: %s", url)
                 window('emby_online', value="false")
-            raise
+            raise internal_exceptions.ExceptionWrapper(error)
 
         except requests.exceptions.HTTPError as error:
 
@@ -300,12 +301,12 @@ class DownloadUtils(object):
                                                           icon=xbmcgui.NOTIFICATION_ERROR,
                                                           time=5000)
                         window('emby_serverStatus', value="restricted")
-                        raise Warning('restricted')
+                        raise internal_exceptions.ExceptionWrapper("restricted: " + str(error))
 
                     elif (response.headers['X-Application-Error-Code'] ==
                           "UnauthorizedAccessException"):
                         # User tried to do something his emby account doesn't allow
-                        raise Warning('UnauthorizedAccessException')
+                        raise internal_exceptions.ExceptionWrapper("UnauthorizedAccessException: " + str(error))
 
                 elif status not in ("401", "Auth"):
                     # Tell userclient token has been revoked.
@@ -314,7 +315,7 @@ class DownloadUtils(object):
                     xbmcgui.Dialog().notification(heading="Error connecting",
                                                   message="Unauthorized.",
                                                   icon=xbmcgui.NOTIFICATION_ERROR)
-                    raise Warning('401:' + str(error))
+                    raise internal_exceptions.ExceptionWrapper("401: " + str(error))
 
         except requests.exceptions.RequestException as error:
             log.error("unknown error connecting to: %s", url)
diff --git a/resources/lib/ga_client.py b/resources/lib/ga_client.py
index 6c5bfb6a..b0a6a8c4 100644
--- a/resources/lib/ga_client.py
+++ b/resources/lib/ga_client.py
@@ -8,6 +8,7 @@ import hashlib
 import xbmc
 import time
 from utils import window, settings, language as lang
+import internal_exceptions
 
 log = logging.getLogger("EMBY."+__name__)
 
@@ -22,6 +23,11 @@ def log_error(errors=(Exception, )):
         def wrapper(*args, **kwargs):
             try:
                 return func(*args, **kwargs)
+            except internal_exceptions.ExceptionWrapper as error:
+                log.exception(error)
+                log.error("log_error: %s \n args: %s \n kwargs: %s",
+                          func.__name__, args, kwargs)
+                raise
             except errors as error:
                 ga = GoogleAnalytics()
                 errStrings = ga.formatException()
diff --git a/resources/lib/internal_exceptions.py b/resources/lib/internal_exceptions.py
new file mode 100644
index 00000000..9401b1dd
--- /dev/null
+++ b/resources/lib/internal_exceptions.py
@@ -0,0 +1,5 @@
+
+# this is an internal exception wrapper that is used to raise exceptions
+# when you dont want them logged ot the metric logging system
+class ExceptionWrapper(Exception):
+    pass
diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py
index 3a6962cc..f1cf56c6 100644
--- a/resources/lib/librarysync.py
+++ b/resources/lib/librarysync.py
@@ -24,6 +24,7 @@ import views
 from objects import Movies, MusicVideos, TVShows, Music
 from utils import window, settings, language as lang, should_stop
 from ga_client import GoogleAnalytics
+import internal_exceptions
 
 ##################################################################################################
 
@@ -618,7 +619,8 @@ class LibrarySync(threading.Thread):
         except Exception as e:
             ga = GoogleAnalytics()
             errStrings = ga.formatException()
-            ga.sendEventData("Exception", errStrings[0], errStrings[1])
+            if type(e) != internal_exceptions.ExceptionWrapper:
+                ga.sendEventData("Exception", errStrings[0], errStrings[1])
             window('emby_dbScan', clear=True)
             log.exception(e)
             xbmcgui.Dialog().ok(
diff --git a/resources/lib/objects/_common.py b/resources/lib/objects/_common.py
index 754f594a..c68b9b8b 100644
--- a/resources/lib/objects/_common.py
+++ b/resources/lib/objects/_common.py
@@ -15,6 +15,7 @@ import downloadutils
 import read_embyserver as embyserver
 from ga_client import GoogleAnalytics
 from utils import window, settings, dialog, language as lang, should_stop
+import internal_exceptions
 
 ##################################################################################################
 
@@ -29,6 +30,9 @@ def catch_except(errors=(Exception, ), default_value=False):
         def wrapper(*args, **kwargs):
             try:
                 return func(*args, **kwargs)
+            except internal_exceptions.ExceptionWrapper as error:
+                log.exception(error)
+                raise
             except sqlite3.Error as error:
                 raise
             except errors as error:
diff --git a/service.py b/service.py
index 41a477dc..868c5147 100644
--- a/service.py
+++ b/service.py
@@ -22,6 +22,7 @@ import loghandler
 from service_entry import Service
 from utils import settings
 from ga_client import GoogleAnalytics
+import internal_exceptions
 
 #################################################################################################
 
@@ -41,6 +42,10 @@ if __name__ == "__main__":
             raise RuntimeError("Abort event while waiting to start Emby for kodi")
         # Start the service
         service.service_entry_point()
+    except internal_exceptions.ExceptionWrapper as error:
+        log.exception(error)
+        log.info("Forcing shutdown")
+        service.shutdown()
     except Exception as error:
         ga = GoogleAnalytics()
         errStrings = ga.formatException()