diff --git a/plugins/CorePluginsAdmin/Controller.php b/plugins/CorePluginsAdmin/Controller.php
index 0442991098bb3eb9845cb74b4f05a3f66bb715f7..2735b6c9be5f42260a615e8b589f190b64bb5a66 100644
--- a/plugins/CorePluginsAdmin/Controller.php
+++ b/plugins/CorePluginsAdmin/Controller.php
@@ -24,7 +24,6 @@ use Piwik\View;
 use Piwik\PluginsManager;
 
 /**
- *
  * @package CorePluginsAdmin
  */
 class Controller extends \Piwik\Controller\Admin
@@ -32,11 +31,11 @@ class Controller extends \Piwik\Controller\Admin
     private $validSortMethods  = array('popular', 'newest', 'alpha');
     private $defaultSortMethod = 'popular';
 
-    public function updatePlugin()
+    private function createUpdateOrInstallView($template, $nonceName)
     {
         Piwik::checkUserIsSuperUser();
 
-        $view = $this->configureView('@CorePluginsAdmin/updatePlugin');
+        $view = $this->configureView('@CorePluginsAdmin/' . $template);
         $view->errorMessage = '';
 
         $pluginName = Common::getRequestVar('pluginName', '', 'string');
@@ -49,13 +48,12 @@ class Controller extends \Piwik\Controller\Admin
 
         $view->plugin = array('name' => $pluginName);
 
-        if (!Nonce::verifyNonce('CorePluginsAdmin.updatePlugin', $nonce)) {
+        if (!Nonce::verifyNonce('CorePluginsAdmin.' . $nonceName, $nonce)) {
             $view->errorMessage = Piwik_Translate('ExceptionNonceMismatch');
-            echo $view->render();
-            return;
+            return $view;
         }
 
-        Nonce::discardNonce('CorePluginsAdmin.updatePlugin');
+        Nonce::discardNonce('CorePluginsAdmin.' . $nonceName);
 
         try {
             $pluginInstaller = new PluginInstaller($pluginName);
@@ -63,54 +61,25 @@ class Controller extends \Piwik\Controller\Admin
 
         } catch (PluginInstallerException $e) {
             $view->errorMessage = $e->getMessage();
-            echo $view->render();
-            return;
+            return $view;
         }
 
         $marketplace  = new MarketplaceApiClient();
         $view->plugin = $marketplace->getPluginInfo($pluginName);
 
+        return $view;
+    }
+
+    public function updatePlugin()
+    {
+        $view = $this->createUpdateOrInstallView('updatePlugin', 'updatePlugin');
         echo $view->render();
     }
 
     public function installPlugin()
     {
-        Piwik::checkUserIsSuperUser();
-
-        $view = $this->configureView('@CorePluginsAdmin/installPlugin');
-        $view->errorMessage = '';
-
-        $pluginName = Common::getRequestVar('pluginName', '', 'string');
-        $pluginName = strip_tags($pluginName);
-        $nonce      = Common::getRequestVar('nonce', '', 'string');
-
-        if (empty($pluginName)) {
-            throw new \Exception('Plugin parameter is missing');
-        }
-
-        $view->plugin = array('name' => $pluginName);
-
-        if (!Nonce::verifyNonce('CorePluginsAdmin.installPlugin', $nonce)) {
-            $view->errorMessage = Piwik_Translate('ExceptionNonceMismatch');
-            echo $view->render();
-            return;
-        }
-
-        Nonce::discardNonce('CorePluginsAdmin.installPlugin');
-
-        try {
-            $pluginInstaller = new PluginInstaller($pluginName);
-            $pluginInstaller->installOrUpdatePluginFromMarketplace();
-
-        } catch (PluginInstallerException $e) {
-            $view->errorMessage = $e->getMessage();
-            echo $view->render();
-            return;
-        }
-
-        $marketplace  = new MarketplaceApiClient();
-        $view->plugin = $marketplace->getPluginInfo($pluginName);
-        $view->nonce  = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
+        $view = $this->createUpdateOrInstallView('installPlugin', 'installPlugin');
+        $view->nonce = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
 
         echo $view->render();
     }
@@ -131,7 +100,7 @@ class Controller extends \Piwik\Controller\Admin
         echo $view->render();
     }
 
-    public function browsePlugins()
+    private function createBrowsePluginsOrThemesView($template, $themesOnly)
     {
         $query = Common::getRequestVar('query', '', 'string', $_POST);
         $query = strip_tags($query);
@@ -141,10 +110,10 @@ class Controller extends \Piwik\Controller\Admin
             $sort = $this->defaultSortMethod;
         }
 
-        $view = $this->configureView('@CorePluginsAdmin/browsePlugins');
+        $view = $this->configureView('@CorePluginsAdmin/' . $template);
 
         $marketplace   = new Marketplace();
-        $view->plugins = $marketplace->searchPlugins($query, $sort, $themesOnly = false);
+        $view->plugins = $marketplace->searchPlugins($query, $sort, $themesOnly);
 
         $view->query   = $query;
         $view->sort    = $sort;
@@ -152,30 +121,18 @@ class Controller extends \Piwik\Controller\Admin
         $view->updateNonce  = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
         $view->isSuperUser  = Piwik::isUserIsSuperUser();
 
+        return $view;
+    }
+
+    public function browsePlugins()
+    {
+        $view = $this->createBrowsePluginsOrThemesView('browsePlugins', $themesOnly = false);
         echo $view->render();
     }
 
     public function browseThemes()
     {
-        $query = Common::getRequestVar('query', '', 'string', $_POST);
-        $query = strip_tags($query);
-        $sort  = Common::getRequestVar('sort', $this->defaultSortMethod, 'string');
-
-        if (!in_array($sort, $this->validSortMethods)) {
-            $sort = $this->defaultSortMethod;
-        }
-
-        $view = $this->configureView('@CorePluginsAdmin/browseThemes');
-
-        $marketplace   = new Marketplace();
-        $view->plugins = $marketplace->searchPlugins($query, $sort, $themesOnly = true);
-
-        $view->query   = $query;
-        $view->sort    = $sort;
-        $view->installNonce = Nonce::getNonce('CorePluginsAdmin.installPlugin');
-        $view->updateNonce  = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
-        $view->isSuperUser  = Piwik::isUserIsSuperUser();
-
+        $view = $this->createBrowsePluginsOrThemesView('browseThemes', $themesOnly = true);
         echo $view->render();
     }
 
@@ -185,14 +142,15 @@ class Controller extends \Piwik\Controller\Admin
         echo $view->render();
     }
 
-    function plugins()
+    private function createPluginsOrThemesView($template, $themesOnly)
     {
         Piwik::checkUserIsSuperUser();
 
         $activated  = Common::getRequestVar('activated', false, 'integer', $_GET);
         $pluginName = Common::getRequestVar('pluginName', '', 'string');
+        $pluginName = strip_tags($pluginName);
 
-        $view = $this->configureView('@CorePluginsAdmin/plugins');
+        $view = $this->configureView('@CorePluginsAdmin/' . $template);
 
         $view->activatedPluginName = '';
         if ($activated && $pluginName) {
@@ -201,38 +159,23 @@ class Controller extends \Piwik\Controller\Admin
 
         $view->updateNonce   = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
         $view->activateNonce = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
-        $view->pluginsInfo   = $this->getPluginsInfo();
+        $view->pluginsInfo   = $this->getPluginsInfo($themesOnly);
 
         $marketplace = new Marketplace();
-        $view->pluginsHavingUpdate = $marketplace->getPluginsHavingUpdate($themesOnly = false);
+        $view->pluginsHavingUpdate = $marketplace->getPluginsHavingUpdate($themesOnly);
 
+        return $view;
+    }
+
+    function plugins()
+    {
+        $view = $this->createPluginsOrThemesView('plugins', $themesOnly = false);
         echo $view->render();
     }
 
     function themes()
     {
-        Piwik::checkUserIsSuperUser();
-
-        $activated  = Common::getRequestVar('activated', false, 'integer', $_GET);
-        $pluginName = Common::getRequestVar('pluginName', '', 'string');
-        $pluginName = strip_tags($pluginName);
-
-        $view = $this->configureView('@CorePluginsAdmin/themes');
-
-        $view->activatedPluginName = '';
-        if ($activated && $pluginName) {
-            $view->activatedPluginName = $pluginName;
-        }
-
-        $pluginsInfo = $this->getPluginsInfo($themesOnly = true);
-
-        $view->updateNonce   = Nonce::getNonce('CorePluginsAdmin.updatePlugin');
-        $view->activateNonce = Nonce::getNonce('CorePluginsAdmin.activatePlugin');
-        $view->pluginsInfo   = $pluginsInfo;
-
-        $marketplace = new Marketplace();
-        $view->pluginsHavingUpdate = $marketplace->getPluginsHavingUpdate($pluginsInfo, $themesOnly = true);
-
+        $view = $this->createPluginsOrThemesView('themes', $themesOnly = true);
         echo $view->render();
     }