diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php
index b1e97f7f8b17db886defd5c9daeb227e6fb5b4d7..72b9b9052aa95497a426b166c2028a229e4e0e13 100644
--- a/core/Plugin/Manager.php
+++ b/core/Plugin/Manager.php
@@ -502,7 +502,7 @@ class Manager
         Piwik::postEvent('PluginManager.pluginActivated', array($pluginName));
     }
 
-    protected function isPluginInFilesystem($pluginName)
+    public function isPluginInFilesystem($pluginName)
     {
         $existingPlugins = $this->readPluginsDirectory();
         $isPluginInFilesystem = array_search($pluginName, $existingPlugins) !== false;
diff --git a/plugins/Marketplace/Controller.php b/plugins/Marketplace/Controller.php
index d04e374f74e7e4af346cdf2b19783187d303be3b..418c39dc42c2be39cca3dec26a38ca8f003d0710 100644
--- a/plugins/Marketplace/Controller.php
+++ b/plugins/Marketplace/Controller.php
@@ -318,17 +318,27 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
 
         for ($i = 0; $i <= 10; $i++) {
             foreach ($paidPlugins as $index => $paidPlugin) {
+                if (empty($paidPlugin)) {
+                    continue;
+                }
+
                 $pluginName = $paidPlugin['name'];
 
                 if ($this->pluginManager->isPluginActivated($pluginName)) {
-                    unset($paidPlugins[$index]);
+                    // we do not use unset since it might skip a plugin afterwards when removing index
+                    $paidPlugins[$index] = null;
+                    continue;
+                }
+
+                if (!$this->pluginManager->isPluginInFilesystem($pluginName)) {
+                    $paidPlugins[$index] = null;
                     continue;
                 }
 
                 if (empty($paidPlugin['require'])
                     || !$dependency->hasDependencyToDisabledPlugin($paidPlugin['require'])) {
 
-                    unset($paidPlugins[$index]);
+                    $paidPlugins[$index] = null;
 
                     try {
                         $this->pluginManager->activatePlugin($pluginName);
@@ -341,6 +351,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
                     }
                 }
             }
+
+            $paidPlugins = array_filter($paidPlugins);
         }
 
         if ($hasErrors) {