diff --git a/src/Link.js b/src/Link.js
index cb7653f29d8e64ae24a1c63bfa4d606916cd4ad5..47270778220049239f251352af8c980e514d785b 100644
--- a/src/Link.js
+++ b/src/Link.js
@@ -80,7 +80,7 @@ export function tryFixUrl(fragment) {
 
     const validAttempts = [];
     for (const attempt of [...new Set(attempts)]) {
-        const link = Link.parse(attempt);
+        const link = Link.parseFragment(attempt);
         if (link) {
             validAttempts.push({ url: attempt, link });
         }
@@ -98,11 +98,20 @@ export class Link {
         );
     }
 
-    static parse(fragment) {
+    static parseIdentifier(identifier) {
+        return Link._parse(identifier);
+    }
+
+    static parseFragment(fragment) {
         if (!fragment) {
             return null;
         }
         let [linkStr, queryParamsStr] = fragment.split("?");
+        if (!linkStr.startsWith("#/")) {
+            return null;
+        }
+        linkStr = linkStr.substr(2);
+        const [identifier, eventId] = linkStr.split("/");
 
         let viaServers = [];
         let clientId = null;
@@ -121,14 +130,13 @@ export class Link {
             }
             webInstances = getWebInstanceMap(queryParams);
         }
+        return Link._parse(identifier, eventId, clientId, viaServers, webInstances);
+    }
 
-        if (!linkStr.startsWith("#/")) {
+    static _parse(identifier, eventId = undefined, clientId = null, viaServers = [], webInstances = {}) {
+        if (!identifier) {
             return null;
         }
-        linkStr = linkStr.substr(2);
-
-        const [identifier, eventId] = linkStr.split("/");
-
         let matches;
         matches = USERID_PATTERN.exec(identifier);
         if (matches) {
diff --git a/src/RootViewModel.js b/src/RootViewModel.js
index 39f6733525e0220705712e63422a4cb7234348cf..05a8cd84a76c8d124ae744c9a4c4ba525c47758e 100644
--- a/src/RootViewModel.js
+++ b/src/RootViewModel.js
@@ -76,7 +76,7 @@ export class RootViewModel extends ViewModel {
         }  else if (hash === "" || hash === "#" || hash === "#/") {
             this._updateChildVMs(null, oldLink);
             this.createLinkViewModel = new CreateLinkViewModel(this.childOptions());
-        } else if (newLink = Link.parse(hash)) {
+        } else if (newLink = Link.parseFragment(hash)) {
             this._updateChildVMs(newLink, oldLink);
         } else {
             this._updateChildVMs(null, oldLink);
diff --git a/src/create/CreateLinkViewModel.js b/src/create/CreateLinkViewModel.js
index 50aa8805659a80ed90a1d2425675fda2ca234546..80b5d0c6f6d757ec0c2865034031fec63ccb7cb4 100644
--- a/src/create/CreateLinkViewModel.js
+++ b/src/create/CreateLinkViewModel.js
@@ -30,7 +30,7 @@ export class CreateLinkViewModel extends ViewModel {
     }
 
     async createLink(identifier) {
-        this._link = Link.parse(identifier);
+        this._link = Link.parseIdentifier(identifier);
         if (this._link) {
             this.openLink("#" + this._link.toFragment());
         }