diff --git a/core/js/apps.js b/core/js/apps.js
deleted file mode 100644
index 473fec313a10c49c23fb64904488412aa83e00f5..0000000000000000000000000000000000000000
--- a/core/js/apps.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * ownCloud - core
- *
- * This file is licensed under the Affero General Public License version 3 or
- * later. See the COPYING file.
- *
- * @author Bernhard Posselt <dev@bernhard-posselt.com>
- * @copyright Bernhard Posselt 2014
- */
-
-(function (document, $, exports) {
-
-	'use strict';
-
-	var dynamicSlideToggleEnabled = false;
-
-	exports.Apps = {
-		enableDynamicSlideToggle: function () {
-			dynamicSlideToggleEnabled = true;
-		}
-	};
-
-	/**
-	 * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings
-	 *
-	 * @param {Object} [$el] sidebar element to show, defaults to $('#app-sidebar')
-	 */
-	exports.Apps.showAppSidebar = function($el) {
-		var $appSidebar = $el || $('#app-sidebar');
-		$appSidebar.removeClass('disappear')
-			.show('slide', { direction: 'right' }, 300);
-		$('#app-content').trigger(new $.Event('appresized'));
-	};
-
-	/**
-	 * Shows the #app-sidebar and removes .with-app-sidebar from subsequent
-	 * siblings
-	 *
-	 * @param {Object} [$el] sidebar element to hide, defaults to $('#app-sidebar')
-	 */
-	exports.Apps.hideAppSidebar = function($el) {
-		var $appSidebar = $el || $('#app-sidebar');
-		$appSidebar.hide('slide', { direction: 'right' }, 300,
-			function() {
-				$appSidebar.addClass('disappear');
-			});
-		$('#app-content').trigger(new $.Event('appresized'));
-	};
-
-	/**
-	 * Provides a way to slide down a target area through a button and slide it
-	 * up if the user clicks somewhere else. Used for the news app settings and
-	 * add new field.
-	 *
-	 * Usage:
-	 * <button data-apps-slide-toggle=".slide-area">slide</button>
-	 * <div class=".slide-area" class="hidden">I'm sliding up</div>
-	 */
-	var registerAppsSlideToggle = function () {
-		var buttons = $('[data-apps-slide-toggle]');
-
-		if (buttons.length === 0) {
-			$('#app-navigation').addClass('without-app-settings');
-		}
-
-		$(document).click(function (event) {
-
-			if (dynamicSlideToggleEnabled) {
-				buttons = $('[data-apps-slide-toggle]');
-			}
-
-			buttons.each(function (index, button) {
-
-				var areaSelector = $(button).data('apps-slide-toggle');
-				var area = $(areaSelector);
-
-				function hideArea() {
-					area.slideUp(OC.menuSpeed*4, function() {
-						area.trigger(new $.Event('hide'));
-					});
-					area.removeClass('opened');
-					$(button).removeClass('opened');
-				}
-				function showArea() {
-					area.slideDown(OC.menuSpeed*4, function() {
-						area.trigger(new $.Event('show'));
-					});
-					area.addClass('opened');
-					$(button).addClass('opened');
-					var input = $(areaSelector + ' [autofocus]');
-					if (input.length === 1) {
-						input.focus();
-					}
-				}
-
-				// do nothing if the area is animated
-				if (!area.is(':animated')) {
-
-					// button toggles the area
-					if ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {
-						if (area.is(':visible')) {
-							hideArea();
-						} else {
-							showArea();
-						}
-
-					// all other areas that have not been clicked but are open
-					// should be slid up
-					} else {
-						var closest = $(event.target).closest(areaSelector);
-						if (area.is(':visible') && closest[0] !== area[0]) {
-							hideArea();
-						}
-					}
-				}
-			});
-
-		});
-	};
-
-
-	$(document).ready(function () {
-		registerAppsSlideToggle();
-	});
-
-}(document, jQuery, OC));
diff --git a/core/js/core.json b/core/js/core.json
index 7967dc2a91bc0d81d6aac4c33011e910bb8a821d..9545e0208fa156b2ffed3f9626f9f6d2a2215f81 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -12,7 +12,6 @@
 		"oc-backbone.js",
 		"oc-backbone-webdav.js",
 		"l10n.js",
-		"apps.js",
 		"share.js",
 		"sharetemplates.js",
 		"sharesocialmanager.js",
diff --git a/core/js/dist/main.js b/core/js/dist/main.js
index 8c2727d1a4bd723c945d61bab9ee495f39de5a69..cdcc2c0af8ff3f0c5a21876b015aa19d59b1f020 100644
Binary files a/core/js/dist/main.js and b/core/js/dist/main.js differ
diff --git a/core/js/dist/main.js.map b/core/js/dist/main.js.map
index a7ba46889c14233c3aff4d0e5a2461a0dbba40a1..28839da9e8da06d1ce48ea0613c6013b40bbc57e 100644
Binary files a/core/js/dist/main.js.map and b/core/js/dist/main.js.map differ
diff --git a/core/js/dist/share_backend.js b/core/js/dist/share_backend.js
index 6336c11180d340d0b75db9047075b022211874d9..7d67d0ba771bd23081ac1dd008d0bba44fae003a 100644
Binary files a/core/js/dist/share_backend.js and b/core/js/dist/share_backend.js differ
diff --git a/core/js/dist/share_backend.js.map b/core/js/dist/share_backend.js.map
index 3257bff20a9f45bcf4cb26fee1beeee7aa97b284..f6038269754657711852ea9bcfe48eee8eea8917 100644
Binary files a/core/js/dist/share_backend.js.map and b/core/js/dist/share_backend.js.map differ
diff --git a/core/js/merged-template-prepend.json b/core/js/merged-template-prepend.json
index c274201d97e616d19cc25b64418e431f3cf64f98..79213cc2ac029cd9d6853927f50bc9bb067126e2 100644
--- a/core/js/merged-template-prepend.json
+++ b/core/js/merged-template-prepend.json
@@ -10,7 +10,6 @@
   "public/whatsnew.js",
   "config.js",
   "oc-requesttoken.js",
-  "apps.js",
   "mimetype.js",
   "mimetypelist.js",
   "oc-backbone.js",
diff --git a/core/src/OC/apps.js b/core/src/OC/apps.js
new file mode 100644
index 0000000000000000000000000000000000000000..8802fc81c2aa81c0d2d3c4578855440bd9b27292
--- /dev/null
+++ b/core/src/OC/apps.js
@@ -0,0 +1,120 @@
+/**
+ * ownCloud - core
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright Bernhard Posselt 2014
+ */
+
+import $ from 'jquery';
+
+var dynamicSlideToggleEnabled = false;
+
+const Apps = {
+	enableDynamicSlideToggle: function () {
+		dynamicSlideToggleEnabled = true;
+	}
+};
+
+/**
+ * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings
+ *
+ * @param {Object} [$el] sidebar element to show, defaults to $('#app-sidebar')
+ */
+Apps.showAppSidebar = function ($el) {
+	var $appSidebar = $el || $('#app-sidebar');
+	$appSidebar.removeClass('disappear')
+		.show('slide', {direction: 'right'}, 300);
+	$('#app-content').trigger(new $.Event('appresized'));
+};
+
+/**
+ * Shows the #app-sidebar and removes .with-app-sidebar from subsequent
+ * siblings
+ *
+ * @param {Object} [$el] sidebar element to hide, defaults to $('#app-sidebar')
+ */
+Apps.hideAppSidebar = function ($el) {
+	var $appSidebar = $el || $('#app-sidebar');
+	$appSidebar.hide('slide', {direction: 'right'}, 300,
+		function () {
+			$appSidebar.addClass('disappear');
+		});
+	$('#app-content').trigger(new $.Event('appresized'));
+};
+
+/**
+ * Provides a way to slide down a target area through a button and slide it
+ * up if the user clicks somewhere else. Used for the news app settings and
+ * add new field.
+ *
+ * Usage:
+ * <button data-apps-slide-toggle=".slide-area">slide</button>
+ * <div class=".slide-area" class="hidden">I'm sliding up</div>
+ */
+export const registerAppsSlideToggle = () => {
+	var buttons = $('[data-apps-slide-toggle]');
+
+	if (buttons.length === 0) {
+		$('#app-navigation').addClass('without-app-settings');
+	}
+
+	$(document).click(function (event) {
+
+		if (dynamicSlideToggleEnabled) {
+			buttons = $('[data-apps-slide-toggle]');
+		}
+
+		buttons.each(function (index, button) {
+
+			var areaSelector = $(button).data('apps-slide-toggle');
+			var area = $(areaSelector);
+
+			function hideArea () {
+				area.slideUp(OC.menuSpeed * 4, function () {
+					area.trigger(new $.Event('hide'));
+				});
+				area.removeClass('opened');
+				$(button).removeClass('opened');
+			}
+
+			function showArea () {
+				area.slideDown(OC.menuSpeed * 4, function () {
+					area.trigger(new $.Event('show'));
+				});
+				area.addClass('opened');
+				$(button).addClass('opened');
+				var input = $(areaSelector + ' [autofocus]');
+				if (input.length === 1) {
+					input.focus();
+				}
+			}
+
+			// do nothing if the area is animated
+			if (!area.is(':animated')) {
+
+				// button toggles the area
+				if ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {
+					if (area.is(':visible')) {
+						hideArea();
+					} else {
+						showArea();
+					}
+
+					// all other areas that have not been clicked but are open
+					// should be slid up
+				} else {
+					var closest = $(event.target).closest(areaSelector);
+					if (area.is(':visible') && closest[0] !== area[0]) {
+						hideArea();
+					}
+				}
+			}
+		});
+
+	});
+};
+
+export default Apps;
diff --git a/core/src/OC/index.js b/core/src/OC/index.js
index b785305c0577838b940b7985b3215abe36dada39..6ae1dc12c909fe4f9bd23498344db5595d7e3845 100644
--- a/core/src/OC/index.js
+++ b/core/src/OC/index.js
@@ -19,5 +19,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+import Apps from './apps'
+
 /** @namespace OC */
-export default {};
+export default {
+	Apps,
+};
diff --git a/core/src/main.js b/core/src/main.js
index e7041e975f5f40a2f349fd8542bd12ef96d46379..85e8200f10c06aa1bcd4ed2ccada140c28006a56 100644
--- a/core/src/main.js
+++ b/core/src/main.js
@@ -22,5 +22,9 @@
 import '@babel/polyfill'
 
 import './globals'
+import $ from 'jquery'
+import {registerAppsSlideToggle} from './OC/apps'
 
-import './OCP/index'
+$(document).ready(function () {
+	registerAppsSlideToggle();
+});