diff --git a/core/PluginsManager.php b/core/PluginsManager.php
index 11b6e0de7b7162c1504b25b2430a422802a3d529..6e099f0d78751a9072ddf26e61983a1d51ccc615 100644
--- a/core/PluginsManager.php
+++ b/core/PluginsManager.php
@@ -13,6 +13,7 @@ namespace Piwik;
 
 use Piwik\Plugin\MetadataLoader;
 use Piwik\Translate;
+use Piwik\Option;
 
 require_once PIWIK_INCLUDE_PATH . '/core/EventDispatcher.php';
 
@@ -201,6 +202,16 @@ class PluginsManager
             throw new \Exception("You are trying to uninstall the plugin $pluginName but it was not found in the directory piwik/plugins/");
         }
         self::deletePluginFromFilesystem($pluginName);
+
+        $this->removePluginFromPluginsConfig($pluginName);
+        $this->removePluginFromPluginsInstalledConfig($pluginName);
+        $this->removePluginFromTrackerConfig($pluginName);
+
+        Option::getInstance()->delete('version_' . $pluginName);
+
+        Config::getInstance()->forceSave();
+        Filesystem::deleteAllCacheOnUpdate();
+
         if($this->isPluginInFilesystem($pluginName)) {
             return false;
         }
@@ -221,29 +232,17 @@ class PluginsManager
      */
     public function deactivatePlugin($pluginName, $plugins = false)
     {
-        if(empty($plugins)) {
+        if (empty($plugins)) {
             $plugins = $this->pluginsToLoad;
         }
-        $key = array_search($pluginName, $plugins);
 
         $plugin = $this->loadPlugin($pluginName);
         if ($plugin !== null) {
             $plugin->deactivate();
         }
 
-        if ($key !== false) {
-            unset($plugins[$key]);
-        }
-        $this->updatePluginsConfig($plugins);
-
-        $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
-        if (!is_null($pluginsTracker)) {
-            $key = array_search($pluginName, $pluginsTracker);
-            if ($key !== false) {
-                unset($pluginsTracker[$key]);
-                $this->updatePluginsTrackerConfig($pluginsTracker);
-            }
-        }
+        $this->removePluginFromPluginsConfig($pluginName, $plugins);
+        $this->removePluginFromTrackerConfig($pluginName);
 
         Config::getInstance()->forceSave();
         Filesystem::deleteAllCacheOnUpdate();
@@ -811,6 +810,55 @@ class PluginsManager
         return file_exists($path . "/" . $name . ".php")
              || self::isManifestFileFound($path);
     }
+
+    /**
+     * @param $pluginName
+     */
+    private function removePluginFromPluginsInstalledConfig($pluginName)
+    {
+        $pluginsInstalled = Config::getInstance()->PluginsInstalled['PluginsInstalled'];
+        $key = array_search($pluginName, $pluginsInstalled);
+        if ($key !== false) {
+            unset($pluginsInstalled[$key]);
+        }
+
+        $this->updatePluginsInstalledConfig($pluginsInstalled);
+    }
+
+    /**
+     * @param $pluginName
+     * @param $plugins
+     * @return mixed
+     */
+    private function removePluginFromPluginsConfig($pluginName, $plugins = false)
+    {
+        if (empty($plugins)) {
+            $plugins = $this->pluginsToLoad;
+        }
+
+        $key = array_search($pluginName, $plugins);
+
+        if ($key !== false) {
+            unset($plugins[$key]);
+        }
+
+        $this->updatePluginsConfig($plugins);
+    }
+
+    /**
+     * @param $pluginName
+     */
+    private function removePluginFromTrackerConfig($pluginName)
+    {
+        $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
+        if (!is_null($pluginsTracker)) {
+            $key = array_search($pluginName, $pluginsTracker);
+            if ($key !== false) {
+                unset($pluginsTracker[$key]);
+                $this->updatePluginsTrackerConfig($pluginsTracker);
+            }
+        }
+    }
 }
 
 /**