diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php
index 4d0859b1988ae2caa2e3c3eafae9c10e50653e0d..94addb2b78569a8d8ae5e03a43ae26279627d99e 100644
--- a/lib/private/App/AppManager.php
+++ b/lib/private/App/AppManager.php
@@ -323,6 +323,7 @@ class AppManager implements IAppManager {
 	public function clearAppsCache() {
 		$settingsMemCache = $this->memCacheFactory->createDistributed('settings');
 		$settingsMemCache->clear('listApps');
+		$this->appInfos = [];
 	}
 
 	/**
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 70f1b16e3c68472dacfab2595df2a01553df009b..d3c9859c68d59390ad380e591772cc4e36f2852b 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -887,6 +887,7 @@ class OC_App {
 		}
 		self::registerAutoloading($appId, $appPath);
 
+		\OC::$server->getAppManager()->clearAppsCache();
 		$appData = self::getAppInfo($appId);
 		self::executeRepairSteps($appId, $appData['repair-steps']['pre-migration']);
 
diff --git a/settings/src/store/apps.js b/settings/src/store/apps.js
index f19f894309bfab9c87581584da28afb3514db8cc..9fedabf022302c20a511f37a920c8869488ddfc6 100644
--- a/settings/src/store/apps.js
+++ b/settings/src/store/apps.js
@@ -99,6 +99,15 @@ const mutations = {
 		state.apps.find(app => app.id === appId).canInstall = true;
 	},
 
+	updateApp(state, appId) {
+		let app = state.apps.find(app => app.id === appId);
+		let version = app.update;
+		app.update = null;
+		app.version = version;
+		state.updateCount--;
+
+	},
+
 	resetApps(state) {
 		state.apps = [];
 	},
@@ -246,6 +255,22 @@ const actions = {
 		}).catch((error) => context.commit('API_FAILURE', { appId, error }));
 	},
 
+	updateApp(context, { appId }) {
+		return api.requireAdmin().then((response) => {
+			context.commit('startLoading', appId);
+			return api.get(OC.generateUrl(`settings/apps/update/${appId}`))
+				.then((response) => {
+					context.commit('stopLoading', appId);
+					context.commit('updateApp', appId);
+					return true;
+				})
+				.catch((error) => {
+					context.commit('stopLoading', appId);
+					context.commit('APPS_API_FAILURE', { appId, error })
+				})
+		}).catch((error) => context.commit('API_FAILURE', { appId, error }));
+	},
+
 	getApps(context, { category }) {
 		context.commit('startLoading', 'list');
 		return api.get(OC.generateUrl(`settings/apps/list?category=${category}`))