diff --git a/src/hub.js b/src/hub.js
index 145a30e6bc8cad44a1fd03e4ec1a85ba4ce3ae92..82f4bce700d252d931aa9a52a4e28d1b887fa1e7 100644
--- a/src/hub.js
+++ b/src/hub.js
@@ -153,7 +153,6 @@ AFRAME.registerInputActivator("reverseY", ReverseY);
 AFRAME.registerInputMappings(inputConfig, true);
 
 const concurrentLoadDetector = new ConcurrentLoadDetector();
-
 concurrentLoadDetector.start();
 
 store.init();
@@ -307,6 +306,13 @@ async function runBotMode(scene, entryManager) {
 }
 
 document.addEventListener("DOMContentLoaded", async () => {
+  const subscriptions = new Subscriptions();
+  navigator.serviceWorker.register("/hub.service.js");
+  navigator.serviceWorker.ready.then(registration => {
+    subscriptions.setRegistration(registration);
+    remountUI({ subscriptions });
+  });
+
   const scene = document.querySelector("a-scene");
   const hubChannel = new HubChannel(store);
   const entryManager = new SceneEntryManager(hubChannel);
@@ -385,6 +391,8 @@ document.addEventListener("DOMContentLoaded", async () => {
     .join()
     .receive("ok", async data => {
       hubChannel.setPhoenixChannel(hubPhxChannel);
+      subscriptions.setHubInfo(hubId, hubChannel);
+      remountUI({ subscriptions });
       await handleHubChannelJoined(entryManager, hubChannel, data);
     })
     .receive("error", res => {
@@ -494,15 +502,8 @@ document.addEventListener("DOMContentLoaded", async () => {
   retPhxChannel
     .join()
     .receive("ok", async data => {
-      const vapidPublicKey = data.vapid_public_key;
-      console.log("Load service");
-      navigator.serviceWorker.register("/hub.service.js");
-      console.log("222");
-      navigator.serviceWorker.ready.then(serviceWorkerRegistration => {
-        console.log("333");
-        const subscriptions = new Subscriptions(hubId, hubChannel, vapidPublicKey, store, serviceWorkerRegistration);
-        remountUI({ subscriptions });
-      });
+      subscriptions.setVapidPublicKey(data.vapid_public_key);
+      remountUI({ subscriptions });
     })
     .receive("error", res => console.error(res));
 
diff --git a/src/storage/store.js b/src/storage/store.js
index 0db7decb6ec37c4256ae4941115a938820544b24..1b6d575ddd3f030a9b8e43897bfa907ba2842ffa 100644
--- a/src/storage/store.js
+++ b/src/storage/store.js
@@ -38,13 +38,6 @@ export const SCHEMA = {
       properties: {
         lastUsedMicDeviceId: { type: "string" }
       }
-    },
-
-    // Map of sid -> { endpoint: "<endpoint>" }
-    // If entry exists, it means there is a subscription to that room, wired to that endpoint.
-    subscriptions: {
-      type: "object",
-      additionalProperties: true
     }
   },
 
diff --git a/src/subscriptions.js b/src/subscriptions.js
index 09b9dfbdde7e94f96b2f3f65159e470492e8d0b1..18f42702ce920ed343213062841e3ce6a9246d0c 100644
--- a/src/subscriptions.js
+++ b/src/subscriptions.js
@@ -13,29 +13,43 @@ function urlBase64ToUint8Array(base64String) {
   return outputArray;
 }
 
+// In local storage: Map of sid -> { endpoint: "<endpoint>" }
+// If entry exists, it means there is a subscription to that room, wired to that endpoint.
+const LOCAL_STORE_KEY = "___hubs_subscriptions";
+
 export default class Subscriptions {
-  constructor(hubId, hubChannel, vapidPublicKey, store, registration) {
-    this.store = store;
+  setHubInfo = (hubId, hubChannel) => {
     this.hubId = hubId;
     this.hubChannel = hubChannel;
+  };
+
+  setRegistration = registration => {
     this.registration = registration;
-    this.vapidPublicKey = vapidPublicKey;
-  }
+  };
 
   setVapidPublicKey = vapidPublicKey => {
     this.vapidPublicKey = vapidPublicKey;
   };
 
+  getSubscriptionsFromStorage = () => {
+    return JSON.parse(localStorage.getItem(LOCAL_STORE_KEY) || "{}");
+  };
+
+  setSubscriptionsToStorage = subscriptions => {
+    return localStorage.setItem(LOCAL_STORE_KEY, JSON.stringify(subscriptions));
+  };
+
   isSubscribed = () => {
-    return !!this.store.subscriptions[this.hubId];
+    console.log("WAT");
+    return this.getSubscriptionsFromStorage()[this.hubId];
   };
 
   toggle = async () => {
-    console.log("toggle");
-    const subscriptions = this.store.subscriptions;
+    const subscriptions = this.getSubscriptionsFromStorage();
 
     if (this.isSubscribed()) {
-      console.log("Send channel unsubscribe");
+      const endpoint = subscriptions[this.hubId].endpoint;
+      console.log("De-register push subscription with reticulum for endpoint " + endpoint);
 
       delete subscriptions[this.hubId];
 
@@ -43,9 +57,7 @@ export default class Subscriptions {
         console.log("Remove push subscription from browser");
       }
     } else {
-      console.log("Get current");
       let subscription = await this.registration.pushManager.getSubscription();
-      console.log(subscription);
 
       if (!subscription) {
         const convertedVapidKey = urlBase64ToUint8Array(this.vapidPublicKey);
@@ -56,11 +68,10 @@ export default class Subscriptions {
         });
       }
 
-      console.log(JSON.stringify(subscription));
-      const endpoint = subscription.endpoint;
-      subscriptions[this.hubId] = { endpoint };
+      subscriptions[this.hubId] = JSON.parse(JSON.stringify(subscription));
+      console.log("Register push subscription with reticulum");
     }
 
-    this.store.update({ subscriptions });
+    this.setSubscriptionsToStorage(subscriptions);
   };
 }