diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index 7b5ac63a1603f8c04643a5f56292886907d095ce..6237e8413ed343a4116d2c925b0f985b7b41422b 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -70,6 +70,11 @@ $application->registerRoutes(
 				'url' => '/',
 				'verb' => 'GET',
 			],
+			[
+				'name' => 'settings#setMaxUploadSize',
+				'url' => '/settings/maxUpload',
+				'verb' => 'POST',
+			]
 		)
 	)
 );
diff --git a/apps/files/js/admin.js b/apps/files/js/admin.js
index dcfec824cfe08473761f93d900dfc675222826d7..6afd77eb03ea568ce5838431dfd1e273f4b1b55e 100644
--- a/apps/files/js/admin.js
+++ b/apps/files/js/admin.js
@@ -8,6 +8,46 @@
  *
  */
 
+(function() {
+	if (!OCA.Files) {
+		/**
+		 * Namespace for the files app
+		 * @namespace OCA.Files
+		 */
+		OCA.Files = {};
+	}
+
+	/**
+	 * @namespace OCA.Files.Admin
+	 */
+	OCA.Files.Admin = {
+		initialize: function() {
+			$('#submitMaxUpload').on('click', _.bind(this._onClickSubmitMaxUpload, this));
+		},
+
+		_onClickSubmitMaxUpload: function () {
+			OC.msg.startSaving('#maxUploadSizeSettingsMsg');
+
+			var request = $.ajax({
+				url: OC.generateUrl('/apps/files/settings/maxUpload'),
+				type: 'POST',
+				data: {
+					maxUploadSize: $('#maxUploadSize').val()
+				}
+			});
+
+			request.done(function (data) {
+				$('#maxUploadSize').val(data.maxUploadSize);
+				OC.msg.finishedSuccess('#maxUploadSizeSettingsMsg', 'Saved');
+			});
+
+			request.fail(function () {
+				OC.msg.finishedError('#maxUploadSizeSettingsMsg', 'Error');
+			});
+		}
+	}
+})();
+
 function switchPublicFolder() {
 	var publicEnable = $('#publicEnable').is(':checked');
 	// find all radiobuttons of that group
@@ -19,6 +59,8 @@ function switchPublicFolder() {
 }
 
 $(document).ready(function() {
+	OCA.Files.Admin.initialize();
+
 	// Execute the function after loading DOM tree
 	switchPublicFolder();
 	$('#publicEnable').click(function() {
diff --git a/apps/files/lib/Controller/SettingsController.php b/apps/files/lib/Controller/SettingsController.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b2dc9c2dd1a06dab99a90617de07b4830f204f5
--- /dev/null
+++ b/apps/files/lib/Controller/SettingsController.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ *
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Files\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\IRequest;
+use OCP\Util;
+
+class SettingsController extends Controller {
+	public function __construct($appName, IRequest $request) {
+		parent::__construct($appName, $request);
+	}
+
+	/**
+	 * @param string $maxUploadSize
+	 * @return JSONResponse
+	 */
+	public function setMaxUploadSize($maxUploadSize) {
+		$setMaxSize = \OC_Files::setUploadLimit(Util::computerFileSize($maxUploadSize));
+
+		if ($setMaxSize === false) {
+			return new JSONResponse([], Http::STATUS_BAD_REQUEST);
+		} else {
+			return new JSONResponse([
+				'maxUploadSize' => Util::humanFileSize($setMaxSize)
+			]);
+		}
+	}
+}
diff --git a/apps/files/lib/Settings/Admin.php b/apps/files/lib/Settings/Admin.php
index 9ec23d47517b99d0d90a7f5a4883492fc7db46ab..da1d5deaf35b6f9edc7ae9e86ed8dba2e6356cdc 100644
--- a/apps/files/lib/Settings/Admin.php
+++ b/apps/files/lib/Settings/Admin.php
@@ -53,13 +53,6 @@ class Admin implements ISettings {
 		$upload_max_filesize = $this->iniWrapper->getBytes('upload_max_filesize');
 		$post_max_size = $this->iniWrapper->getBytes('post_max_size');
 		$maxUploadFilesize = Util::humanFileSize(min($upload_max_filesize, $post_max_size));
-		if($_POST && $this->request->passesCSRFCheck()) {
-			if(isset($_POST['maxUploadSize'])) {
-				if(($setMaxSize = \OC_Files::setUploadLimit(Util::computerFileSize($_POST['maxUploadSize']))) !== false) {
-					$maxUploadFilesize = Util::humanFileSize($setMaxSize);
-				}
-			}
-		}
 
 		$parameters = [
 			'uploadChangable'              => (($htaccessWorking and $htaccessWritable) or $userIniWritable ),
diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php
index e5a6ecfc96e3a85aabce602c7835f813b8b73896..fbadd21ef2a100c333f27e3f2b2329a8376bbc1d 100644
--- a/apps/files/templates/admin.php
+++ b/apps/files/templates/admin.php
@@ -1,18 +1,18 @@
 	<?php OCP\Util::addscript('files', 'admin'); ?>
 
-	<form name="filesForm" class="section" action="#" method="post">
-		<h2><?php p($l->t('File handling')); ?></h2>
-		<label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label>
-		<input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>' <?php if(!$_['uploadChangable']) { p('disabled'); } ?> />
-		<?php if($_['displayMaxPossibleUploadSize']):?>
-			(<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>)
-		<?php endif;?>
-		<input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" />
-		<?php if($_['uploadChangable']): ?>
-			<input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings"
-				   value="<?php p($l->t( 'Save' )); ?>"/>
-			<p><em><?php p($l->t('With PHP-FPM it might take 5 minutes for changes to be applied.')); ?></em></p>
-		<?php else: ?>
-			<p><em><?php p($l->t('Missing permissions to edit from here.')); ?></em></p>
-		<?php endif; ?>
-	</form>
+	<h2><?php p($l->t('File handling')); ?></h2>
+	<label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label>
+	<span id="maxUploadSizeSettingsMsg" class="msg"></span>
+	<br />
+	<input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>' <?php if(!$_['uploadChangable']) { p('disabled'); } ?> />
+	<?php if($_['displayMaxPossibleUploadSize']):?>
+		(<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>)
+	<?php endif;?>
+	<input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" />
+	<?php if($_['uploadChangable']): ?>
+		<input type="submit" id="submitMaxUpload"
+			   value="<?php p($l->t( 'Save' )); ?>"/>
+		<p><em><?php p($l->t('With PHP-FPM it might take 5 minutes for changes to be applied.')); ?></em></p>
+	<?php else: ?>
+		<p><em><?php p($l->t('Missing permissions to edit from here.')); ?></em></p>
+	<?php endif; ?>