diff --git a/core/js/router.js b/core/js/router.js
index 8b66f5a05c5c5f79d8a84e79117dd36464635f3d..3562785b3420ef01963ff39b74eccb20f5caa57c 100644
--- a/core/js/router.js
+++ b/core/js/router.js
@@ -1,9 +1,14 @@
 OC.router_base_url = OC.webroot + '/index.php/',
 OC.Router = {
+	// register your ajax requests to load after the loading of the routes
+	// has finished. otherwise you face problems with race conditions
+	registerLoadedCallback: function(callback){
+		this.routes_request.done(callback);
+	},
 	routes_request: $.ajax(OC.router_base_url + 'core/routes.json', {
 		dataType: 'json',
 		success: function(jsondata) {
-			if (jsondata.status == 'success') {
+			if (jsondata.status === 'success') {
 				OC.Router.routes = jsondata.data;
 			}
 		}
@@ -11,7 +16,7 @@ OC.Router = {
 	generate:function(name, opt_params) {
 		if (!('routes' in this)) {
 			if(this.routes_request.state() != 'resolved') {
-				alert('wait');// wait
+				console.warn('To avoid race conditions, please register a callback');// wait
 			}
 		}
 		if (!(name in this.routes)) {
diff --git a/lib/base.php b/lib/base.php
index c97700b3dbfc311d197e8d1a31f8ab733c94bd8d..66d2d400285aadaeea6149f67af0758056b66c78 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -488,6 +488,7 @@ class OC{
 			return;
 		}
 		try {
+			OC_App::loadApps();
 			OC::getRouter()->match(OC_Request::getPathInfo());
 			return;
 		} catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {