diff --git a/backend/README.md b/backend/README.md
index 4ee2dd727e5f44bab790f763ee37a83ebf7bb317..459a7f51a586b4b7d92c0d780cffeb46ba65e2fb 100644
--- a/backend/README.md
+++ b/backend/README.md
@@ -7,8 +7,8 @@ cd gateway
 docker build -t provee-gateway .
 cd ..
 
-cd app
-docker build -t provee-app .
+cd projector
+docker build -t provee-projector .
 cd ..
 
 docker-compose up
diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml
index f42b96035916c4afde445958bde6e0560c97e18d..6628e4b3d7afc8f46c33342d62668b5f36c1a58a 100644
--- a/backend/docker-compose.yml
+++ b/backend/docker-compose.yml
@@ -11,34 +11,7 @@ services:
     ports:
       - "9090:9090"
     environment:
-      - APP_URL=http://haproxy:8090
-  haproxy:
-    image: haproxy
-    ports:
-      - "8090:8090"
-    volumes:
-      - ./haproxy:/usr/local/etc/haproxy
-  app1:
-    image: provee-app
-    ports:
-      - "8091:8090"
-    environment:
-      - APPID=1
-  app2:
-    image: provee-app
-    ports:
-      - "8092:8090"
-    environment:
-      - APPID=2
-  app3:
-    image: provee-app
-    ports:
-      - "8093:8090"
-    environment:
-      - APPID=3
-  app4:
-    image: provee-app
-    ports:
-      - "8094:8090"
-    environment:
-      - APPID=4
\ No newline at end of file
+      - PROJECTOR_URL=http://projector:8090
+  projector:
+    image: provee-projector
+    scale: 4
\ No newline at end of file
diff --git a/backend/gateway/package-lock.json b/backend/gateway/package-lock.json
index 83bad860b8e1ec0e223affe2b532c168a3398f12..70a588b7ba8b6b1e0a203c8fd5f4d033f9bb9b95 100644
--- a/backend/gateway/package-lock.json
+++ b/backend/gateway/package-lock.json
@@ -1,6 +1,6 @@
 {
-  "name": "vuewebgrpc",
-  "version": "0.1.0",
+  "name": "provee-gateway",
+  "version": "1.0.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
diff --git a/backend/gateway/package.json b/backend/gateway/package.json
index a1b1c5ae02ca426debc2b145adbf9cba6429f22d..cc46db9b2056065bfe761a2918d046e2eac186c5 100644
--- a/backend/gateway/package.json
+++ b/backend/gateway/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "gateway",
+  "name": "provee-gateway",
   "version": "1.0.0",
   "description": "",
   "main": "src/index.js",
diff --git a/backend/gateway/src/database.js b/backend/gateway/src/database.js
index dce08432179cd5c622ce1f552b0b476badc1a929..88b5177cb943aab5a59cbefb72f139bbd58b1e59 100644
--- a/backend/gateway/src/database.js
+++ b/backend/gateway/src/database.js
@@ -1,5 +1,3 @@
-const { request } = require('http');
-
 var Connection = require('tedious').Connection
 var Request = require('tedious').Request
 
diff --git a/backend/gateway/src/index.js b/backend/gateway/src/index.js
index 878943635bbbc612a8138ac117d0e2bf911e6360..4b5302ab3ac39afe2728b1038bfd6cd8234a39a7 100644
--- a/backend/gateway/src/index.js
+++ b/backend/gateway/src/index.js
@@ -13,7 +13,7 @@ const { callErrorFromStatus } = require('@grpc/grpc-js/build/src/call');
 //let connection = mysql.createConnection(config);
 
 const port = process.env.PORT || 9090;
-const appUrl = process.env.APP_URL || 'http://localhost:8090';
+const projectorUrl = process.env.PROJECTOR_URL || 'http://localhost:8090';
 
 var packageDefinition = protoLoader.loadSync(
     PROTO_PATH,
@@ -28,7 +28,7 @@ var projectorPackage = protoDescriptor.provee;
 
 //OLD
 function sendPoint(call, callback) {
-  axios.get(`${appUrl}/generatePoint`).then(resp=>{
+  axios.get(`${projectorUrl}/generatePoint`).then(resp=>{
     callback(null, resp["data"]["point"]);
   })
 }
@@ -64,7 +64,7 @@ function sendPointStream(call) {
     modelID = call.request.modelid;
   }
 
-  var requestURL = `${appUrl}/generatePointStream?modelID=${modelID}`;
+  var requestURL = `${projectorUrl}/generatePointStream?modelID=${modelID}`;
     
    http.get(requestURL, res =>{
 
diff --git a/backend/haproxy/haproxy.cfg b/backend/haproxy/haproxy.cfg
deleted file mode 100644
index 65080b407136dddc659f00a47dbf46646ba3bf0c..0000000000000000000000000000000000000000
--- a/backend/haproxy/haproxy.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-frontend http
-    bind *:8090
-    mode http
-    timeout client 10s
-    use_backend all
-
-backend all
-    mode http
-    server app1 app1:8090
-    server app2 app2:8090
-    server app3 app3:8090
-    server app4 app4:8090
diff --git a/backend/app/.dockerignore b/backend/projector/.dockerignore
similarity index 100%
rename from backend/app/.dockerignore
rename to backend/projector/.dockerignore
diff --git a/backend/app/Dockerfile b/backend/projector/Dockerfile
similarity index 100%
rename from backend/app/Dockerfile
rename to backend/projector/Dockerfile
diff --git a/backend/app/package-lock.json b/backend/projector/package-lock.json
similarity index 99%
rename from backend/app/package-lock.json
rename to backend/projector/package-lock.json
index 3118f981cef16db28b830089988f304300fc9b01..dcfdaa7a430b008e9b7b46a99a54f57c4e51b695 100644
--- a/backend/app/package-lock.json
+++ b/backend/projector/package-lock.json
@@ -1,5 +1,5 @@
 {
-  "name": "app",
+  "name": "provee-projector",
   "version": "1.0.0",
   "lockfileVersion": 1,
   "requires": true,
diff --git a/backend/app/package.json b/backend/projector/package.json
similarity index 86%
rename from backend/app/package.json
rename to backend/projector/package.json
index a94170c48e9c6190ada27113781e7bf960cce120..8f3a58f0905ef6dfa41ca9aefd8ad6aa217494bf 100644
--- a/backend/app/package.json
+++ b/backend/projector/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "app",
+  "name": "provee-projector",
   "version": "1.0.0",
   "description": "",
   "main": "src/index.js",
diff --git a/backend/app/src/database.js b/backend/projector/src/database.js
similarity index 97%
rename from backend/app/src/database.js
rename to backend/projector/src/database.js
index dce08432179cd5c622ce1f552b0b476badc1a929..88b5177cb943aab5a59cbefb72f139bbd58b1e59 100644
--- a/backend/app/src/database.js
+++ b/backend/projector/src/database.js
@@ -1,5 +1,3 @@
-const { request } = require('http');
-
 var Connection = require('tedious').Connection
 var Request = require('tedious').Request
 
diff --git a/backend/app/src/index.js b/backend/projector/src/index.js
similarity index 77%
rename from backend/app/src/index.js
rename to backend/projector/src/index.js
index a354d4734a9d224a2559ccd32551158d849d8d45..57b16d69d3ea8b4f658498908b4ee8c314439707 100644
--- a/backend/app/src/index.js
+++ b/backend/projector/src/index.js
@@ -1,15 +1,13 @@
 const app = require("express")();
-const http = require('http');
 const database = require('./database');
 
 //Default at 8090 to enable easy development
 const port = process.env.PORT || 8090;
-const appid = process.env.APPID || 1;
 
 //OLD (Single point)
 app.get("/generatePoint", (req,res) => {
   console.log("Generating single point")
-  res.send({"appid": appid, "point": generatePoint()})
+  res.send({"point": generatePoint()})
 })
 
 //Sends the stream Had to limit the speed with intervals
@@ -46,7 +44,7 @@ function sendDatabasePoints(dataList,res){
 
     var point = {id: currentData[0].value, x: currentData[1].value, y:currentData[2].value};
     
-    var response = JSON.stringify({"appid": appid,"point":point});
+    var response = JSON.stringify({"point":point});
     res.write(response+"\n");
   }
   res.end();
@@ -60,7 +58,7 @@ function streamGeneratedPoints(res){
   var intervalId = setInterval(function(){    
 
     for(var i = 0; i<100;i++){
-      var response = JSON.stringify({"appid": appid,"point":generatePoint()})
+      var response = JSON.stringify({"point":generatePoint()})
       res.write(response + "\n");
     }
     setTimeout(function() {
@@ -74,12 +72,14 @@ function streamGeneratedPoints(res){
 
 
 //Generate randomPoint
-function generatePoint(){
-    console.log
-    var xVal = Math.floor(Math.random()*100);
-    var yVal = Math.floor(Math.random()*100);    
-    return {id:appid, x:xVal,y:yVal};
-  }
+let pointId = 0;
+function generatePoint() {
+  const id = pointId++;
+  const x = Math.floor(Math.random() * 100);
+  const y = Math.floor(Math.random() * 100);
+
+  return { id, x, y };
+}
 
 app.listen(port, () => {
   console.log(`Server listening at http://0.0.0.0:${port}`);
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 992ca848977fd2c9061703be3ee8a44e39fcb505..da3ad7e1f67c25a53238b3ef82b7c47f6fb430de 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,6 +1,6 @@
 {
-  "name": "vuewebgrpc",
-  "version": "0.1.0",
+  "name": "provee-frontend",
+  "version": "1.0.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -1872,16 +1872,6 @@
           "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==",
           "dev": true
         },
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
         "cacache": {
           "version": "13.0.1",
           "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
@@ -1908,34 +1898,6 @@
             "unique-filename": "^1.1.1"
           }
         },
-        "chalk": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
         "find-cache-dir": {
           "version": "3.3.1",
           "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
@@ -1957,25 +1919,6 @@
             "path-exists": "^4.0.0"
           }
         },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
         "locate-path": {
           "version": "5.0.0",
           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -2040,16 +1983,6 @@
             "minipass": "^3.1.1"
           }
         },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
         "terser-webpack-plugin": {
           "version": "2.3.8",
           "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz",
@@ -2066,18 +1999,6 @@
             "terser": "^4.6.12",
             "webpack-sources": "^1.4.3"
           }
-        },
-        "vue-loader-v16": {
-          "version": "npm:vue-loader@16.0.0-rc.1",
-          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.1.tgz",
-          "integrity": "sha512-yR+BS90EOXTNieasf8ce9J3TFCpm2DGqoqdbtiwQ33hon3FyIznLX7sKavAq1VmfBnOeV6It0Htg4aniv8ph1g==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "hash-sum": "^2.0.0",
-            "loader-utils": "^2.0.0"
-          }
         }
       }
     },
@@ -2885,6 +2806,16 @@
       "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
       "dev": true
     },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
     "bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -5973,6 +5904,13 @@
         "schema-utils": "^2.5.0"
       }
     },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "dev": true,
+      "optional": true
+    },
     "filesize": {
       "version": "3.6.1",
       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@@ -6150,11 +6088,6 @@
         "readable-stream": "^2.0.0"
       }
     },
-    "fs": {
-      "version": "0.0.1-security",
-      "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
-      "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
-    },
     "fs-extra": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
@@ -12276,6 +12209,87 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.0.0-rc.2",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.2.tgz",
+      "integrity": "sha512-cz8GK4dgIf1UTC+do80pGvh8BHcCRHLIQVHV9ONVQ8wtoqS9t/+H02rKcQP+TVNg7khgLyQV2+8eHUq7/AFq3g==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
     "vue-resource": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/vue-resource/-/vue-resource-1.5.1.tgz",
@@ -12413,6 +12427,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
@@ -12718,6 +12733,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
diff --git a/frontend/package.json b/frontend/package.json
index 9509e176e14f610475213f7f985fcfafc433aad0..e4c287a30b278efc126736e43d9b38a92ec35cd5 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,8 +1,9 @@
 {
-  "name": "vuewebgrpc",
-  "version": "0.1.0",
+  "name": "provee-frontend",
+  "version": "1.0.0",
   "private": true,
   "scripts": {
+    "start": "npm run serve",
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint"
@@ -12,7 +13,6 @@
     "axios": "^0.20.0",
     "core-js": "^3.6.5",
     "d3": "^5.16.0",
-    "fs": "0.0.1-security",
     "google-protobuf": "^3.6.1",
     "grpc": "^1.24.3",
     "grpc-web": "^1.0.0",
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 25f3af5fb41e77c71c22dd391c653204897e1e36..3635152f99cad5e8d2e0585b2f010ad029e00e8f 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -44,7 +44,9 @@ export default {
   methods: {
     addPoint: function(point){
       this.streamStarted = true;
-      this.pointList.push(point);      
+      this.pointList.push(point);
+      console.log("Received point ID",point.getId());
+      
     },
     //Update all the components which rely on the data
     //Is this the best way to do this?