diff --git a/web-service/public/js/bundle.js b/web-service/public/js/bundle.js
index 170f36ce31de67b0184631582db7490295573005..1d13b2af775d500f70dd42d705edfa12d2e94b13 100644
--- a/web-service/public/js/bundle.js
+++ b/web-service/public/js/bundle.js
@@ -59979,6 +59979,11 @@ webSocketTest = () => {
     peer.send("update_cfg", "ftl://utu.fi#reconstruction_default/0/renderer/cool_effect", "true")    
 }
 
+function FTLFrameset(id) {
+	this.id = id;
+	this.sources = {};
+}
+
 function FTLStream(peer, uri, element) {
 	this.uri = uri;
 	this.peer = peer;
@@ -59988,6 +59993,10 @@ function FTLStream(peer, uri, element) {
 	this.current_source = 0;
 	this.current_channel = 0;
 
+	this.framesets = {};
+
+	this.handlers = {};
+
 	//this.elements_ = {};
 	//this.converters_ = {};
 
@@ -60226,6 +60235,22 @@ function FTLStream(peer, uri, element) {
 	}
 }
 
+FTLStream.prototype.on = function(name, cb) {
+	if (!this.handlers.hasOwnProperty(name)) {
+		this.handlers[name] = [];
+	}
+	this.handlers[name].push(cb);
+}
+
+FTLStream.prototype.notify = function (name, ...args) {
+	if (this.handlers.hasOwnProperty(name)) {
+		let a = this.handlers[name];
+		for (let i=0; i<a.length; ++i) {
+			a[i].apply(this, args);
+		}
+	}
+}
+
 FTLStream.prototype.pause = function() {
 	this.paused = !this.paused;
 	if (!this.paused) {
@@ -61669,6 +61694,7 @@ var VideoConverter = (function () {
                 this.queue.push(data);
             }
             else {
+				if (this.queue.length > 0) console.error("DATA IN QUEUE");
                 this.doAppend(data);
             }
         }
diff --git a/web-service/public/js/index.js b/web-service/public/js/index.js
index 856efa79b1d66f14a5f7eb72137feb9ef8c89540..b2047a55260c3d44994d6575155bf03e8bcfa7b5 100644
--- a/web-service/public/js/index.js
+++ b/web-service/public/js/index.js
@@ -125,6 +125,11 @@ webSocketTest = () => {
     peer.send("update_cfg", "ftl://utu.fi#reconstruction_default/0/renderer/cool_effect", "true")    
 }
 
+function FTLFrameset(id) {
+	this.id = id;
+	this.sources = {};
+}
+
 function FTLStream(peer, uri, element) {
 	this.uri = uri;
 	this.peer = peer;
@@ -134,6 +139,10 @@ function FTLStream(peer, uri, element) {
 	this.current_source = 0;
 	this.current_channel = 0;
 
+	this.framesets = {};
+
+	this.handlers = {};
+
 	//this.elements_ = {};
 	//this.converters_ = {};
 
@@ -372,6 +381,22 @@ function FTLStream(peer, uri, element) {
 	}
 }
 
+FTLStream.prototype.on = function(name, cb) {
+	if (!this.handlers.hasOwnProperty(name)) {
+		this.handlers[name] = [];
+	}
+	this.handlers[name].push(cb);
+}
+
+FTLStream.prototype.notify = function (name, ...args) {
+	if (this.handlers.hasOwnProperty(name)) {
+		let a = this.handlers[name];
+		for (let i=0; i<a.length; ++i) {
+			a[i].apply(this, args);
+		}
+	}
+}
+
 FTLStream.prototype.pause = function() {
 	this.paused = !this.paused;
 	if (!this.paused) {
diff --git a/web-service/public/js/lib/dist/video-converter.js b/web-service/public/js/lib/dist/video-converter.js
index 9b99eaa2da0eaa4c64f4a76f01ce2f4a958b9ce6..2e91f4b25ee260c83bc7482fd3d5091970326724 100644
--- a/web-service/public/js/lib/dist/video-converter.js
+++ b/web-service/public/js/lib/dist/video-converter.js
@@ -143,6 +143,7 @@ var VideoConverter = (function () {
                 this.queue.push(data);
             }
             else {
+				if (this.queue.length > 0) console.error("DATA IN QUEUE");
                 this.doAppend(data);
             }
         }