diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index cc80423b7dc714d1d32e132271284971eaf4a63d..643590ae22e6af45306159bcf50fb036da7b7917 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -493,11 +493,6 @@ class Installer {
 	 */
 	public static function removeApp($appId) {
 
-		$appData = OC_App::getAppInfo($appId);
-		if (!is_null($appData)) {
-			OC_App::executeRepairSteps($appId, $appData['repair-steps']['uninstall']);
-		}
-
 		if(Installer::isDownloaded( $appId )) {
 			$appDir=OC_App::getInstallPath() . '/' . $appId;
 			OC_Helper::rmdirr($appDir);
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 42bb441228f9cf1412776490f0bf5bbcd84d3e95..41b1b79e4f6bd556668ef7c5e7ffff4b5c1338f5 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -370,9 +370,19 @@ class OC_App {
 			$app = self::getInternalAppIdByOcs($app);
 		}
 
-		self::$enabledAppsCache = array(); // flush
-		// check if app is a shipped app or not. if not delete
+		// flush
+		self::$enabledAppsCache = array();
+
+		// run uninstall steps
+		$appData = OC_App::getAppInfo($app);
+		if (!is_null($appData)) {
+			OC_App::executeRepairSteps($app, $appData['repair-steps']['uninstall']);
+		}
+
+		// emit disable hook - needed anymore ?
 		\OC_Hook::emit('OC_App', 'pre_disable', array('app' => $app));
+
+		// finally disable it
 		$appManager = \OC::$server->getAppManager();
 		$appManager->disableApp($app);
 	}