diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp
index 8343101b96..8130d99b83 100644
--- a/xbmc/addons/Addon.cpp
+++ b/xbmc/addons/Addon.cpp
@@ -397,6 +397,37 @@ AddonVersion CAddon::GetDependencyVersion(const std::string &dependencyID) const
   return AddonVersion("0.0.0");
 }
 
+void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context) {
+
+  if (addon->Type() == ADDON_SERVICE) {
+    std::string contextStr;
+    char cmd[255];
+
+    switch (context) {
+    case LE_ADDON_ENABLED:
+      contextStr = "enable";
+      break;
+    case LE_ADDON_DISABLED:
+      contextStr = "disable";
+      break;
+    case LE_ADDON_POST_UPDATE:
+      contextStr = "post-update";
+      break;
+    case LE_ADDON_PRE_UNINSTALL:
+      contextStr = "pre-uninstall";
+      break;
+    default:
+      contextStr = StringUtils::Format("unknown(%d)", context);
+      break;
+    }
+
+    snprintf(cmd, sizeof(cmd), "/usr/sbin/service-addon-wrapper %s %s %s",
+      contextStr.c_str(), addon->ID().c_str(), addon->Path().c_str());
+
+    system(cmd);
+  }
+}
+
 void OnPreInstall(const AddonPtr& addon)
 {
   //Fallback to the pre-install callback in the addon.
@@ -426,6 +457,9 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
     }
     closedir(addonsDir);
   }
+
+  if (update)
+    LEAddonHook(addon, LE_ADDON_POST_UPDATE);
   // OE
 
   addon->OnPostInstall(update, modal);
@@ -433,6 +466,8 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
 
 void OnPreUnInstall(const AddonPtr& addon)
 {
+  LEAddonHook(addon, LE_ADDON_PRE_UNINSTALL);
+
   addon->OnPreUnInstall();
 }
 
diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h
index b877839848..f7c0b717f6 100644
--- a/xbmc/addons/Addon.h
+++ b/xbmc/addons/Addon.h
@@ -41,6 +41,15 @@ namespace ADDON
   void OnPreUnInstall(const AddonPtr& addon);
   void OnPostUnInstall(const AddonPtr& addon);
 
+typedef enum {
+  LE_ADDON_ENABLED,
+  LE_ADDON_DISABLED,
+  LE_ADDON_POST_UPDATE,
+  LE_ADDON_PRE_UNINSTALL,
+} LE_ADDON_CONTEXT;
+
+void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context);
+
 class CAddon : public IAddon
 {
 public:
diff --git a/xbmc/addons/AddonManager.cpp b/xbmc/addons/AddonManager.cpp
index e015f0755e..92879f19c1 100644
--- a/xbmc/addons/AddonManager.cpp
+++ b/xbmc/addons/AddonManager.cpp
@@ -836,6 +836,7 @@ bool CAddonMgr::DisableAddon(const std::string& id)
   AddonPtr addon;
   if (GetAddon(id, addon, ADDON_UNKNOWN, false) && addon != NULL)
   {
+    ADDON::LEAddonHook(addon, ADDON::LE_ADDON_DISABLED);
     CServiceBroker::GetEventLog().Add(EventPtr(new CAddonManagementEvent(addon, 24141)));
   }
 
@@ -864,6 +865,7 @@ bool CAddonMgr::EnableSingle(const std::string& id)
   if (!m_database.DisableAddon(id, false))
     return false;
   m_disabled.erase(id);
+  ADDON::LEAddonHook(addon, ADDON::LE_ADDON_ENABLED);
 
   CServiceBroker::GetEventLog().Add(EventPtr(new CAddonManagementEvent(addon, 24064)));
 
