diff --git a/aleksis/core/assets/index.js b/aleksis/core/assets/index.js
index cfa1d88390339e9aeba0729d35555a02d9e6e268..d681aca2f7a7e48e9a446baf5ab248126e991102 100644
--- a/aleksis/core/assets/index.js
+++ b/aleksis/core/assets/index.js
@@ -2,8 +2,6 @@
  * Main entrypoint of AlekSIS0-ore.
  * 
  * This script sets up all necessary Vue plugins and defines the Vue app.
- * For convenience, the Vue app instance will be made globally available
- * as window.app.
  */
 
 import Vue from "vue";
@@ -56,5 +54,3 @@ const app = new Vue({
 // Late setup for some plugins handed off to out ALeksisVue plugin
 app.$loadAppMessages();
 app.$setupNavigationGuards();
-
-window.app = app;
diff --git a/aleksis/core/assets/plugins/aleksis.js b/aleksis/core/assets/plugins/aleksis.js
index 9be4d1bfd30614566643fb0260b7934111e7bd5f..c12bf8b76a9538d63abc1c1b36abe05eb33d8613 100644
--- a/aleksis/core/assets/plugins/aleksis.js
+++ b/aleksis/core/assets/plugins/aleksis.js
@@ -102,21 +102,23 @@ AleksisVue.install = function (Vue, options) {
    * Add navigation guards to account for global loading state and page titles.
    */
   Vue.prototype.$setupNavigationGuards = function () {
+    const vm = this;
+
     // eslint-disable-next-line no-unused-vars
     this.$router.afterEach((to, from, next) => {
       console.debug("Setting new page title due to route change");
-      window.app.$setPageTitle(null, to);
+      vm.$setPageTitle(null, to);
     });
 
     // eslint-disable-next-line no-unused-vars
     this.$router.beforeEach((to, from, next) => {
-      window.app.contentLoading = true;
+      vm.contentLoading = true;
       next();
     });
 
     // eslint-disable-next-line no-unused-vars
     this.$router.afterEach((to, from) => {
-      window.app.contentLoading = false;
+      vm.contentLoading = false;
     });
   };
 };