diff --git a/capsule-prototype/index.html b/capsule-prototype/index.html
index bc1796f105bf35cd6de401e39802073da033c89f..eb41085d8407578af0a8dd9c7f4c025a7da5bc58 100644
--- a/capsule-prototype/index.html
+++ b/capsule-prototype/index.html
@@ -26,6 +26,8 @@
 	<script language="javascript" type='text/javascript' src='../shared/js/libs/fastdom.js'></script>
 	<script language="javascript" type='text/javascript' src='../shared/js/libs/moment-with-langs.min.js'></script>
 
+	<script language="javascript" type='text/javascript' src="../shared/php/rekallApp.js.php"></script>
+
 	<script language="javascript" type='text/javascript' src='../shared/js/rekall/Utils.js'></script>
 	<script language="javascript" type='text/javascript' src='../shared/js/online-rekall/Rekall.js'></script>
 	<script language="javascript" type='text/javascript' src='../shared/js/rekall/Source.js'></script>
@@ -35,6 +37,7 @@
 	<script language="javascript" type='text/javascript' src='../shared/js/online-rekall/Tag.js'></script>
 	<script language="javascript" type='text/javascript' src='../shared/js/online-rekall/Tags.js'></script>
 	<script language="javascript" type='text/javascript' src='../shared/js/online-rekall/Timeline.js'></script>
+	<script language="javascript" type='text/javascript' src="../shared/js/online-rekall/RekallApplication.js"></script>
 
 	<script language="javascript" type='text/javascript' src='../shared/js/iannix.js'></script>
 	<script language="javascript" type='text/javascript' src='../shared/js/online-script.js'></script>
@@ -66,11 +69,6 @@
 	<script>
 		videojs.options.flash.swf = "video-js/video-js.swf";
 	</script>
-	<script type="javascript" >
-		function init(PubSub){
-			window.PubSub = PubSub;
-		}
-	</script>
 
 	<link rel="stylesheet" type="text/css" href="../shared/css/online-theme.css" />
 </head>
diff --git a/capsule-prototype/js/online-rekall/RekallApplication.js b/capsule-prototype/js/online-rekall/RekallApplication.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8097663b7d4946f56da8b48cfed0241fcf37062
--- /dev/null
+++ b/capsule-prototype/js/online-rekall/RekallApplication.js
@@ -0,0 +1,64 @@
+((app) => {
+    function RekallApplication(opts = {}) {
+        const METHODS = [
+            'openUrl',
+            'pubSub',
+            'init',
+            'setPlaybackRate',
+            'videoPlayer',
+            'rekall'
+        ];
+
+        let localOptions = {};
+
+        const OPTIONS = {
+            openUrl: function () {
+                if (!arguments)
+                    return;
+                if (localOptions.links && localOptions.links[arguments[0]]) {
+                    window.top.location.assign(localOptions.links[arguments[0]])
+                } else {
+                    window.top.location.assign(arguments[0]);
+                }
+            },
+            pubSub: function () {
+                return localOptions.PubSub;
+            },
+            init: function (opts) {
+                if (opts) {
+                    $.extend(localOptions, opts);
+                }
+            },
+            setPlaybackRate: function () {
+                if (arguments.length > 0 && 'number' === typeof arguments[0] && 0 < arguments[0] && arguments[0] < 10) {
+                    localOptions.videoPlayer.playbackRate(arguments[0]);
+                }
+            },
+            videoPlayer: function () {
+                if (arguments.length > 0) {
+                    localOptions._videoPlayer = arguments[0];
+                }
+
+                return localOptions._videoPlayer;
+            },
+            rekall: function () {
+                return localOptions.Rekall;
+            }
+        };
+
+        $.extend(localOptions, OPTIONS, opts);
+
+        return {
+            Rekall: function () {
+                if (!arguments || !arguments.length)
+                    return localOptions['rekall'].apply(this, arguments);
+
+                let [action, ...params] = arguments;
+                if (METHODS.includes(action)) {
+                    return localOptions[action].apply(this, params);
+                }
+            }
+        }
+    }
+    app.rekall = new RekallApplication()
+})(window.app = window.app || {})
\ No newline at end of file
diff --git a/capsule-prototype/js/online-script.js b/capsule-prototype/js/online-script.js
index 53d7f7fc1a0055c192f83af14c7d10db1a28ebe3..5a1a1ac2dbdaf3627c543e3169454a607ed7a3cb 100644
--- a/capsule-prototype/js/online-script.js
+++ b/capsule-prototype/js/online-script.js
@@ -4,6 +4,9 @@ var pubSub = null;
 
 window.onload = function() {
 	pubSub = window.top.PubSub;
+	window.app.rekall.Rekall('init', {
+		PubSub: pubSub
+	});
 	pubSub.subscribe('mosaic', openMosaic);
 	pubSub.subscribe('video', openVideo);
 	pubSub.subscribe('open_paste_modal', openPasteModal);
@@ -11,6 +14,10 @@ window.onload = function() {
 };
 
 $(document).ready(function() {
+	window.app.rekall.Rekall('init', {
+		Rekall: rekall
+	});
+	window.app.rekall.Rekall().allowProjectDeletion(window.app.Settings.Project.ProjectDeletionEnabled);
 
 	rekall.allowProjectDeletion(window.app.Settings.Project.ProjectDeletionEnabled)
 	Utils.actionPrefix = "php/";
diff --git a/capsule-prototype/php/rekallApp.js.php b/capsule-prototype/php/rekallApp.js.php
index bce36d1c97fde5bd849797b7b4242de78a03ebbf..a55c34cab55a0088be048f7cb8ceaca1e206f655 100644
--- a/capsule-prototype/php/rekallApp.js.php
+++ b/capsule-prototype/php/rekallApp.js.php
@@ -5,51 +5,9 @@ $front_url = $_ENV["FRONT_URL_EXTERNAL"];
 $member_url = $_ENV["MEMBER_URL_EXTERNAL"];
 $project_allow_deletion = isset($_ENV["LEGACY_PROJECT_DELETION_ENABLED"]) && $_ENV["LEGACY_PROJECT_DELETION_ENABLED"] == 'true' ? 'true' : 'false';
 ?>
-function RekallApp (opts = {}){
-    const METHODS = [
-        'openUrl',
-        'pubSub',
-        'init'
-    ];
-
-    const OPTIONS = {
-        openUrl: function (){
-            if(!arguments)
-                return;
-            window.top.location.assign(arguments[0]);
-        },
-        pubSub: function(PubSub){
-            return window.PubSub;
-        },
-        init: function(PubSub){
-            window.PubSub = PubSub;
-        }
-    };
-
-    var localOptions = $.extend({}, OPTIONS, opts);
-
-    return {
-        Rekall: function(){
-            if (!arguments)
-                return;
-
-            var [action, ...params] = arguments;
-            if(METHODS.includes(action)){
-                 return localOptions[action](params);
-            }
-        }
-    }
-}
-
 
 
 ((app) => {
-
-    if(app.urls){
-        return;
-    }
-
-    app.rekall = RekallApp();
     app.urls = {
         frontHome : '<?= $front_url ?>',
         memberHome : '<?= $member_url ?>',