diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 29b3549ac1e803ae924fe959993a0599da0cba25..24ae7f5735a6f36c436a196cbee0cba40c8bc92c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,9 +55,9 @@ webserver-deploy:
 
 .build-windows: &build-windows
     - 'call vcvars64.bat'
-    - if not exist "../ftl_build" mkdir "../ftl_build"
-    - cd ../ftl_build
-    - cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% -DREALSENSE_DIR="C:/Program Files (x86)/Intel RealSense SDK 2.0" -DOPENVR_DIR="C:/Program Files (x86)/OpenVRSDK" -DOPUS_DIR="C:/Program Files (x86)/Opus" ../ftl
+    - mkdir ./build
+    - cd ./build
+    - cmake %CMAKE_ARGS% %CMAKE_ARGS_WINDOWS% -DREALSENSE_DIR="C:/Program Files (x86)/Intel RealSense SDK 2.0" -DOPENVR_DIR="C:/Program Files (x86)/OpenVRSDK" -DOPUS_DIR="C:/Program Files (x86)/Opus" ..
     - devenv ftl.utu.fi.sln /build Release
     - rmdir /q /s "%DEPLOY_DIR%/%CI_COMMIT_REF_SLUG%"
     - mkdir "%DEPLOY_DIR%/%CI_COMMIT_REF_SLUG%"
diff --git a/web-service/server/src/index.js b/web-service/server/src/index.js
index baddc6e5ed6e15756101f67bb330fd84535f8be2..da2a904afb4ecf6d054fe3ac0cd18a57e0c6f95f 100644
--- a/web-service/server/src/index.js
+++ b/web-service/server/src/index.js
@@ -40,6 +40,18 @@ let peer_data = [];
 
 let cfg_to_peer = {};
 
+setInterval(() => {
+	for (x in peer_by_id) {
+		let p = peer_by_id[x];
+		let start = (new Date()).getMilliseconds();
+		p.rpc("__ping__", (ts) => {
+			let end = (new Date()).getMilliseconds();
+			p.latency = (end-start) / 2;
+			console.log("Ping: ", p.latency, ts);
+		});
+	}
+}, 20000);
+
 /**
  * A client stream request object. Each source maintains a list of clients who
  * are wanting frames from that source. Clients can only request N frames at a
@@ -143,7 +155,8 @@ RGBDStream.prototype.pushFrames = function(latency, spacket, packet) {
 	//console.log("Frame = ", packet[0], packet[1]);
 
 	for (let i=0; i < this.clients.length; i++) {
-		this.clients[i].push(this.base_uri, latency, spacket, packet);
+		let l = latency+this.peer.latency+this.clients[i].peer.latency;
+		this.clients[i].push(this.base_uri, Math.ceil(l), spacket, packet);
 	}
 
 	/*let i=0;
@@ -346,6 +359,8 @@ app.ws('/', (ws, req) => {
 		for (let c in cfg_to_peer) {
 			if (cfg_to_peer[c] === p) delete cfg_to_peer[c];
 		}
+
+		// FIXME: Clear peer_data
 	});
 
 	p.bind("new_peer", (id) => {
diff --git a/web-service/server/src/peer.js b/web-service/server/src/peer.js
index f55f522c35a503eb2224f406aa6333edc15dbb6a..86aa78eec1fd8d09181276b1d76a4f2620cf7d3b 100644
--- a/web-service/server/src/peer.js
+++ b/web-service/server/src/peer.js
@@ -35,6 +35,8 @@ function Peer(ws) {
 	this.callbacks = {};
 	this.cbid = 0;
 
+	this.latency = 0;
+
 	this.uri = "unknown";
 	this.name = "unknown";
 	this.master = false;