diff --git a/core/js/maintenance-check.js b/core/js/maintenance-check.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ca00456fef9af1ecf652a99437fbe39d511e44c
--- /dev/null
+++ b/core/js/maintenance-check.js
@@ -0,0 +1,20 @@
+// Check every 20 seconds via status.php if maintenance is over
+window.setInterval(checkStatus, 20000);
+
+function checkStatus() {
+	var request = new XMLHttpRequest();
+	var ocroot = location.pathname.substr(
+		0, location.pathname.indexOf('index.php')
+	);
+	request.open("GET", ocroot+'status.php', true);
+	request.send();
+	request.onreadystatechange = function() {
+		if (request.readyState === 4) {
+			var response = request.responseText;
+			var responseobj = JSON.parse(response);
+			if (responseobj.maintenance === 'false') {
+				window.location.reload();
+			}
+		}
+	};
+}
diff --git a/core/templates/update.user.php b/core/templates/update.user.php
index bb93f0fad0080b662d112e6bfe49dea76dd1ac40..77a5892e174ea8e9424276880cb012a126fe7b9c 100644
--- a/core/templates/update.user.php
+++ b/core/templates/update.user.php
@@ -1,7 +1,7 @@
 <ul>
 	<li class='update'>
 		<?php p($l->t('This ownCloud instance is currently being updated, which may take a while.')) ?><br/><br/>
-		<?php p($l->t('Please reload this page after a short time to continue using ownCloud.')) ?><br/><br/>
+		<?php p($l->t('This page will refresh itself when the ownCloud instance is available again.')) ?><br/><br/>
 		<?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?><br/><br/>
 		<?php p($l->t('Thank you for your patience.')); ?><br/><br/>
 	</li>
diff --git a/lib/base.php b/lib/base.php
index 5d52db68cb7730b28395ccee70f34a977d181e4c..c113ed3b50643c2a1d938848adeb3570f491e03c 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -255,6 +255,7 @@ class OC {
 
 			// render error page
 			$tmpl = new OC_Template('', 'update.user', 'guest');
+			OC_Util::addscript('maintenance-check');
 			$tmpl->printPage();
 			die();
 		}
diff --git a/status.php b/status.php
index a42c1581b837cce7e270acb41ea7301f4bcf3231..db5813814d0442b254bdfb79221b766bfe1deb9a 100644
--- a/status.php
+++ b/status.php
@@ -25,9 +25,11 @@ try {
 
 	require_once 'lib/base.php';
 
-	if(OC_Config::getValue('installed')==1) $installed='true'; else $installed='false';
+	$installed = OC_Config::getValue('installed') == 1;
+	$maintenance = OC_Config::getValue('maintenance', false);
 	$values=array(
 		'installed'=>$installed,
+		'maintenance' => $maintenance,
 		'version'=>implode('.', OC_Util::getVersion()),
 		'versionstring'=>OC_Util::getVersionString(),
 		'edition'=>OC_Util::getEditionString());