diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js
index 20d60562afe26d7802cb0e3ae3bfdee063c20128..4bff3b06594c529ee94db3444121ad16224feaad 100644
--- a/web-service/server/src/index.js
+++ b/web-service/server/src/index.js
@@ -11,14 +11,14 @@ const config = require('./utils/config')
 const User = require('./models/users')
 const Configs = require('./models/generic')
 const bodyParser = require('body-parser')
-// const cors = require('cors')
+const cors = require('cors')
 
 // ---- INDEXES ----------------------------------------------------------------
 app.use(passport.initialize());
 app.use(express.static(__dirname + '/public'));
 
 app.use(bodyParser.json())
-// app.use(cors())
+app.use(cors())
 
 
 passport.serializeUser((user, done) => {
diff --git a/web-service/server/src/peer.js b/web-service/server/src/peer.js
index 630e94e7c9ea47cce1ee3c9cd1e48b39ef467656..2a4906823ca534f66c86c8ee75a1ba415eae4cb8 100644
--- a/web-service/server/src/peer.js
+++ b/web-service/server/src/peer.js
@@ -35,13 +35,13 @@ function Peer(ws) {
 	this.master = false;
 
 	let message = (raw) => {
-		console.log(raw)
+		// console.log(raw)
 		//Gets right data for client
 		if(this.sock.on === undefined){
 			raw = raw.data;
 		}
 		let msg = decode(raw);
-		console.log('MSG', msg)
+		// console.log('MSG', msg)
 		if (this.status == kConnecting) {
 			if (msg[1] != "__handshake__") {
 				console.log("Bad handshake");
diff --git a/web-service/server/src/public/css/index.css b/web-service/server/src/public/css/index.css
index 7eb21e91ae3f3c7929ca71ca867c5ac7938fbe6d..c134bb2304be9bc7f9f1a884ec6dd9c8ce964664 100644
--- a/web-service/server/src/public/css/index.css
+++ b/web-service/server/src/public/css/index.css
@@ -43,7 +43,7 @@ body {
     border: 1px solid black;
   }
 
-  #container {
+  #ftlab-stream-thumbnails {
     padding: 0;
     margin: 0;
     display: -webkit-box;
diff --git a/web-service/server/src/public/js/bundle.js b/web-service/server/src/public/js/bundle.js
index 6fc067c31a29898b06d8187fe3782bc2ca90f23e..28fbaf05962ad8a2c851fbbf953bcaa5bef9d9a9 100644
--- a/web-service/server/src/public/js/bundle.js
+++ b/web-service/server/src/public/js/bundle.js
@@ -383,7 +383,7 @@ BufferList.prototype._match = function(offset, search) {
 
 module.exports = BufferList
 
-},{"readable-stream":18,"safe-buffer":19,"util":39}],2:[function(require,module,exports){
+},{"readable-stream":19,"safe-buffer":20,"util":39}],2:[function(require,module,exports){
 (function (Buffer){
 // Copyright Joyent, Inc. and other Node contributors.
 //
@@ -493,8 +493,8 @@ function objectToString(o) {
   return Object.prototype.toString.call(o);
 }
 
-}).call(this,{"isBuffer":require("../../../../../../../../../../../usr/lib/node_modules/watchify/node_modules/is-buffer/index.js")})
-},{"../../../../../../../../../../../usr/lib/node_modules/watchify/node_modules/is-buffer/index.js":33}],3:[function(require,module,exports){
+}).call(this,{"isBuffer":require("../../../../../../../../../usr/local/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
+},{"../../../../../../../../../usr/local/lib/node_modules/browserify/node_modules/is-buffer/index.js":33}],3:[function(require,module,exports){
 if (typeof Object.create === 'function') {
   // implementation from standard node.js 'util' module
   module.exports = function inherits(ctor, superCtor) {
@@ -613,7 +613,7 @@ function msgpack (options) {
 
 module.exports = msgpack
 
-},{"./lib/decoder":6,"./lib/encoder":7,"./lib/streams":8,"assert":24,"bl":1,"safe-buffer":19}],6:[function(require,module,exports){
+},{"./lib/decoder":6,"./lib/encoder":7,"./lib/streams":8,"assert":24,"bl":1,"safe-buffer":20}],6:[function(require,module,exports){
 'use strict'
 
 var bl = require('bl')
@@ -1396,7 +1396,7 @@ function encodeFloat (obj, forceFloat64) {
   return buf
 }
 
-},{"bl":1,"safe-buffer":19}],8:[function(require,module,exports){
+},{"bl":1,"safe-buffer":20}],8:[function(require,module,exports){
 'use strict'
 
 var Transform = require('readable-stream').Transform
@@ -1488,7 +1488,7 @@ Decoder.prototype._transform = function (buf, enc, done) {
 module.exports.decoder = Decoder
 module.exports.encoder = Encoder
 
-},{"bl":1,"inherits":3,"readable-stream":18}],9:[function(require,module,exports){
+},{"bl":1,"inherits":3,"readable-stream":19}],9:[function(require,module,exports){
 (function (process){
 'use strict';
 
@@ -2739,7 +2739,7 @@ function indexOf(xs, x) {
   return -1;
 }
 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./_stream_duplex":10,"./internal/streams/BufferList":15,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"events":31,"inherits":3,"isarray":4,"process-nextick-args":9,"safe-buffer":19,"string_decoder/":20,"util":29}],13:[function(require,module,exports){
+},{"./_stream_duplex":10,"./internal/streams/BufferList":15,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"events":31,"inherits":3,"isarray":4,"process-nextick-args":9,"safe-buffer":20,"string_decoder/":18,"util":29}],13:[function(require,module,exports){
 // Copyright Joyent, Inc. and other Node contributors.
 //
 // Permission is hereby granted, free of charge, to any person obtaining a
@@ -3644,7 +3644,7 @@ Writable.prototype._destroy = function (err, cb) {
   cb(err);
 };
 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
-},{"./_stream_duplex":10,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"inherits":3,"process-nextick-args":9,"safe-buffer":19,"timers":36,"util-deprecate":21}],15:[function(require,module,exports){
+},{"./_stream_duplex":10,"./internal/streams/destroy":16,"./internal/streams/stream":17,"_process":35,"core-util-is":2,"inherits":3,"process-nextick-args":9,"safe-buffer":20,"timers":36,"util-deprecate":21}],15:[function(require,module,exports){
 'use strict';
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -3724,7 +3724,7 @@ if (util && util.inspect && util.inspect.custom) {
     return this.constructor.name + ' ' + obj;
   };
 }
-},{"safe-buffer":19,"util":29}],16:[function(require,module,exports){
+},{"safe-buffer":20,"util":29}],16:[function(require,module,exports){
 'use strict';
 
 /*<replacement>*/
@@ -3803,79 +3803,6 @@ module.exports = {
 module.exports = require('events').EventEmitter;
 
 },{"events":31}],18:[function(require,module,exports){
-exports = module.exports = require('./lib/_stream_readable.js');
-exports.Stream = exports;
-exports.Readable = exports;
-exports.Writable = require('./lib/_stream_writable.js');
-exports.Duplex = require('./lib/_stream_duplex.js');
-exports.Transform = require('./lib/_stream_transform.js');
-exports.PassThrough = require('./lib/_stream_passthrough.js');
-
-},{"./lib/_stream_duplex.js":10,"./lib/_stream_passthrough.js":11,"./lib/_stream_readable.js":12,"./lib/_stream_transform.js":13,"./lib/_stream_writable.js":14}],19:[function(require,module,exports){
-/* eslint-disable node/no-deprecated-api */
-var buffer = require('buffer')
-var Buffer = buffer.Buffer
-
-// alternative to using Object.keys for old browsers
-function copyProps (src, dst) {
-  for (var key in src) {
-    dst[key] = src[key]
-  }
-}
-if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
-  module.exports = buffer
-} else {
-  // Copy properties from require('buffer')
-  copyProps(buffer, exports)
-  exports.Buffer = SafeBuffer
-}
-
-function SafeBuffer (arg, encodingOrOffset, length) {
-  return Buffer(arg, encodingOrOffset, length)
-}
-
-// Copy static methods from Buffer
-copyProps(Buffer, SafeBuffer)
-
-SafeBuffer.from = function (arg, encodingOrOffset, length) {
-  if (typeof arg === 'number') {
-    throw new TypeError('Argument must not be a number')
-  }
-  return Buffer(arg, encodingOrOffset, length)
-}
-
-SafeBuffer.alloc = function (size, fill, encoding) {
-  if (typeof size !== 'number') {
-    throw new TypeError('Argument must be a number')
-  }
-  var buf = Buffer(size)
-  if (fill !== undefined) {
-    if (typeof encoding === 'string') {
-      buf.fill(fill, encoding)
-    } else {
-      buf.fill(fill)
-    }
-  } else {
-    buf.fill(0)
-  }
-  return buf
-}
-
-SafeBuffer.allocUnsafe = function (size) {
-  if (typeof size !== 'number') {
-    throw new TypeError('Argument must be a number')
-  }
-  return Buffer(size)
-}
-
-SafeBuffer.allocUnsafeSlow = function (size) {
-  if (typeof size !== 'number') {
-    throw new TypeError('Argument must be a number')
-  }
-  return buffer.SlowBuffer(size)
-}
-
-},{"buffer":30}],20:[function(require,module,exports){
 // Copyright Joyent, Inc. and other Node contributors.
 //
 // Permission is hereby granted, free of charge, to any person obtaining a
@@ -4172,7 +4099,80 @@ function simpleWrite(buf) {
 function simpleEnd(buf) {
   return buf && buf.length ? this.write(buf) : '';
 }
-},{"safe-buffer":19}],21:[function(require,module,exports){
+},{"safe-buffer":20}],19:[function(require,module,exports){
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = exports;
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
+
+},{"./lib/_stream_duplex.js":10,"./lib/_stream_passthrough.js":11,"./lib/_stream_readable.js":12,"./lib/_stream_transform.js":13,"./lib/_stream_writable.js":14}],20:[function(require,module,exports){
+/* eslint-disable node/no-deprecated-api */
+var buffer = require('buffer')
+var Buffer = buffer.Buffer
+
+// alternative to using Object.keys for old browsers
+function copyProps (src, dst) {
+  for (var key in src) {
+    dst[key] = src[key]
+  }
+}
+if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+  module.exports = buffer
+} else {
+  // Copy properties from require('buffer')
+  copyProps(buffer, exports)
+  exports.Buffer = SafeBuffer
+}
+
+function SafeBuffer (arg, encodingOrOffset, length) {
+  return Buffer(arg, encodingOrOffset, length)
+}
+
+// Copy static methods from Buffer
+copyProps(Buffer, SafeBuffer)
+
+SafeBuffer.from = function (arg, encodingOrOffset, length) {
+  if (typeof arg === 'number') {
+    throw new TypeError('Argument must not be a number')
+  }
+  return Buffer(arg, encodingOrOffset, length)
+}
+
+SafeBuffer.alloc = function (size, fill, encoding) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  var buf = Buffer(size)
+  if (fill !== undefined) {
+    if (typeof encoding === 'string') {
+      buf.fill(fill, encoding)
+    } else {
+      buf.fill(fill)
+    }
+  } else {
+    buf.fill(0)
+  }
+  return buf
+}
+
+SafeBuffer.allocUnsafe = function (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  return Buffer(size)
+}
+
+SafeBuffer.allocUnsafeSlow = function (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('Argument must be a number')
+  }
+  return buffer.SlowBuffer(size)
+}
+
+},{"buffer":30}],21:[function(require,module,exports){
 (function (global){
 
 /**
@@ -4282,13 +4282,13 @@ function Peer(ws) {
 	this.master = false;
 
 	let message = (raw) => {
-		console.log(raw)
+		// console.log(raw)
 		//Gets right data for client
 		if(this.sock.on === undefined){
 			raw = raw.data;
 		}
 		let msg = decode(raw);
-		console.log('MSG', msg)
+		// console.log('MSG', msg)
 		if (this.status == kConnecting) {
 			if (msg[1] != "__handshake__") {
 				console.log("Bad handshake");
@@ -4555,20 +4555,24 @@ handleLogin = () => {
  * Returns a list of available streams
  */
 getAvailableStreams = async () => {
-    const streamsInJson = await fetch('https://130.232.253.14:8080/streams');
-    const streams = await streamsInJson.json();
-    console.log('AVAILABLE', streams)
-    return streams;
+    try{
+        const streamsInJson = await fetch('http://localhost:8080/streams');
+        const streams = await streamsInJson.json();
+        console.log('AVAILABLE', streams)
+        return streams;
+    }catch(err){
+        console.log(err)
+    }
 }
 
 videoPlayer = () => {
     const containerDiv = document.getElementById('container')
     containerDiv.innerHTML = `<h1>Stream ${current_data.uri} is live right here!</h1><br><button onclick="renderThumbnails()">Go back</button><br>
-    <canvas id="ftlab-stream-video" width="0" height="0"></canvas>`;
+    <canvas id="ftlab-stream-video" width="640" height="360"></canvas>`;
     containerDiv.innerHTML += '<br>'
     containerDiv.innerHTML += ''
-    let decoder = new libde265.Decoder();
-    console.log(decoder)
+    createPeer();
+    setTimeout(connectToStream, 500)
 }
 
 
@@ -4580,13 +4584,14 @@ renderThumbnails = async () => {
     // console.log('THUMBNAILS', thumbnails)
     const containerDiv = document.getElementById('container')
     containerDiv.innerHTML = '';
+    containerDiv.innerHTML = `<div class="ftlab-stream-thumbnails"></div>`
     // console.log(containerDiv)
     for(var i=0; i<thumbnails.length; i++){
         const encodedURI = encodeURIComponent(thumbnails[i])
         current_data.uri = encodedURI
         console.log("THUMBNAIL[i]", thumbnails[i])
         try{
-            const someData = await fetch(`https://130.232.253.14:8080/stream/rgb?uri=${encodedURI}`)
+            const someData = await fetch(`http://localhost:8080/stream/rgb?uri=${encodedURI}`)
             console.log('SOME DATA', someData)
             if(!someData.ok){
                 throw new Error('Image not found')
@@ -4661,7 +4666,7 @@ createCard = (url, viewers) => {
 
 
 createPeer = () => {
-    const ws = new WebSocket('ws://130.232.253.14:8080/');
+    const ws = new WebSocket('ws://localhost:8080/');
     ws.binaryType = "arraybuffer";
     peer = new Peer(ws)
     console.log("peer", peer)
@@ -4674,13 +4679,27 @@ createPeer = () => {
  * 
  * */
 connectToStream = () => {
-    // const data = peer.send("__ping__")
-    const data = peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri))
-    // closeStream();
+    console.log(current_data.uri)
+    const deocdedURI = decodeURIComponent(current_data.uri);
+    peer.bind(deocdedURI, (latency, streampckg, pckg) => {
+        console.log(pckg[0])
+        if(pckg[0] === 0){
+            const newBlob = new Blob( [pckg[5]], {type: "image/jpeg"});
+            const canvas = document.getElementById("ftlab-stream-video");
+            let modified = canvas.getContext("2d");
+            let image = new Image();
+            image.onload = () => {
+                modified.drawImage(image, 0, 0)
+            }
+            image.src = URL.createObjectURL(newBlob)
+        }
+    })
+    peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri))
+    // setTimeout(closeStream, 2000)
 }
 
 closeStream = () => {
-    peer.close()
+    peer.sock.close()
 }
 
 const cardLogic = () => {
diff --git a/web-service/server/src/public/js/index.js b/web-service/server/src/public/js/index.js
index 1bcdc9afd4da2d3bd3dfec5ccfab480188ef39a3..681614e985248c0850cb2a012f6deb1c8752942b 100644
--- a/web-service/server/src/public/js/index.js
+++ b/web-service/server/src/public/js/index.js
@@ -35,20 +35,25 @@ handleLogin = () => {
  * Returns a list of available streams
  */
 getAvailableStreams = async () => {
-    const streamsInJson = await fetch('https://130.232.253.14:8080/streams');
-    const streams = await streamsInJson.json();
-    console.log('AVAILABLE', streams)
-    return streams;
+    try{
+        const streamsInJson = await fetch('http://localhost:8080/streams');
+        const streams = await streamsInJson.json();
+        console.log('AVAILABLE', streams)
+        return streams;
+    }catch(err){
+        console.log(err)
+    }
 }
 
 videoPlayer = () => {
     const containerDiv = document.getElementById('container')
     containerDiv.innerHTML = `<h1>Stream ${current_data.uri} is live right here!</h1><br><button onclick="renderThumbnails()">Go back</button><br>
-    <canvas id="ftlab-stream-video" width="0" height="0"></canvas>`;
+    <canvas id="ftlab-stream-video" width="640" height="360"></canvas>`;
     containerDiv.innerHTML += '<br>'
     containerDiv.innerHTML += ''
-    let decoder = new libde265.Decoder();
-    console.log(decoder)
+    createPeer();
+    setTimeout(connectToStream, 500)
+    
 }
 
 
@@ -60,13 +65,14 @@ renderThumbnails = async () => {
     // console.log('THUMBNAILS', thumbnails)
     const containerDiv = document.getElementById('container')
     containerDiv.innerHTML = '';
+    containerDiv.innerHTML = `<div class="ftlab-stream-thumbnails"></div>`
     // console.log(containerDiv)
     for(var i=0; i<thumbnails.length; i++){
         const encodedURI = encodeURIComponent(thumbnails[i])
         current_data.uri = encodedURI
         console.log("THUMBNAIL[i]", thumbnails[i])
         try{
-            const someData = await fetch(`https://130.232.253.14:8080/stream/rgb?uri=${encodedURI}`)
+            const someData = await fetch(`http://localhost:8080/stream/rgb?uri=${encodedURI}`)
             console.log('SOME DATA', someData)
             if(!someData.ok){
                 throw new Error('Image not found')
@@ -141,7 +147,7 @@ createCard = (url, viewers) => {
 
 
 createPeer = () => {
-    const ws = new WebSocket('ws://130.232.253.14:8080/');
+    const ws = new WebSocket('ws://localhost:8080/');
     ws.binaryType = "arraybuffer";
     peer = new Peer(ws)
     console.log("peer", peer)
@@ -154,13 +160,27 @@ createPeer = () => {
  * 
  * */
 connectToStream = () => {
-    // const data = peer.send("__ping__")
-    const data = peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri))
-    // closeStream();
+    console.log(current_data.uri)
+    const deocdedURI = decodeURIComponent(current_data.uri);
+    peer.bind(deocdedURI, (latency, streampckg, pckg) => {
+        console.log(pckg[0])
+        if(pckg[0] === 0){
+            const newBlob = new Blob( [pckg[5]], {type: "image/jpeg"});
+            const canvas = document.getElementById("ftlab-stream-video");
+            let modified = canvas.getContext("2d");
+            let image = new Image();
+            image.onload = () => {
+                modified.drawImage(image, 0, 0)
+            }
+            image.src = URL.createObjectURL(newBlob)
+        }
+    })
+    peer.send("get_stream", (current_data.uri, 10, 0, current_data.uri))
+    // setTimeout(closeStream, 2000)
 }
 
 closeStream = () => {
-    peer.close()
+    peer.sock.close()
 }
 
 const cardLogic = () => {