diff --git a/src/app/components/map/map.component.ts b/src/app/components/map/map.component.ts
index 8aa59a8b4bd775d9e104757404312a594d83a319..b277cb202759cfac6fb0618016dcce2002bdb573 100644
--- a/src/app/components/map/map.component.ts
+++ b/src/app/components/map/map.component.ts
@@ -4,8 +4,9 @@ import { Subscription } from 'rxjs';
 import * as L from "leaflet";
 import { IMqttMessage, MqttService } from 'ngx-mqtt';
 
-import { environment } from 'src/environments/environment';
-import {RelativePos, WGS84} from 'src/app/model/base-model';
+import { environment, MarkerColorMap } from 'src/environments/environment';
+import {Position, PositionUpdate, RelativePos, WGS84} from 'src/app/model/base-model';
+
 
 @Component({
   selector: 'app-map',
@@ -18,61 +19,92 @@ export class MapComponent implements OnInit {
   private subsOrigin: Subscription;
 
   private map!: L.Map;
-
-  private origin!: WGS84;
+  private root!: Position;
   
-  agentsInfo = new Map();
-  markOverlays = new Map();
+  agentsInfo: { [key: string]: {} } = {};
+  markOverlays: { [key: string]: L.LayerGroup<any> } = {}; 
   posOverlays: { [key: string]: L.LayerGroup<any> } = {};
 
   constructor(private _mqttService: MqttService) {
-    this.origin = {"latitude": 51.02545, "longitude": 13.72295}
+    this.root = {"refSystemId": "ROOT", "point": {"latitude": 51.02545, "longitude": 13.72295}}
 
-    this.subsPosition = this._mqttService.observe('testtopic/5699').subscribe((message: IMqttMessage) => {
-      let pos: RelativePos = JSON.parse(message.payload.toString())
-      this.updatePosition('default', pos)
+    this.subsPosition = this._mqttService.observe('ipos/client/root').subscribe((message: IMqttMessage) => {
+      this.root = JSON.parse(message.payload.toString())
+      console.log("New root: ", this.root)
+      this.registerPoint("ROOT", {"position": this.root})
     });
 
-    this.subsOrigin = this._mqttService.observe('testtopic/5699/origin').subscribe((message: IMqttMessage) => {
-      this.origin = JSON.parse(message.payload.toString())
+    this.subsOrigin = this._mqttService.observe('ipos/client/position').subscribe((message: IMqttMessage) => {
+      let upd: PositionUpdate = JSON.parse(message.payload.toString())
+      upd.object.forEach(obj => this.registerPoint(obj.id, obj));
     });
   }
 
-  ngOnInit(): void {}
+  ngOnInit(): void { }
 
   // --- Controllers
 
-  updatePosition(key: string, pos: RelativePos) {
-    // estimated position of an agent
-
-    let glob_pos = this.convert2wgs(pos)
+  ref2root(pos: RelativePos) {
+    // convert a relative position to WFG84 format
+    let source = <WGS84>this.root.point
+    let origin = L.latLng([source.latitude, source.longitude])
+    let point = L.Projection.Mercator.project(origin)
+    let newPoint = L.point([point.x + pos.x, point.y + pos.y])
+    let newLatLng = L.Projection.Mercator.unproject(newPoint)
+    return newLatLng
+  }
 
-    // let point = L.point(pos.x, pos.y);
-    // let glob_pos = (this.map).layerPointToLatLng(point)
 
-    // --- Leyers
-    if (key in this.posOverlays) {
-      this.posOverlays[key].clearLayers();
+  registerPoint(key: string, desc: { [key: string]: any }) {
+    // --- Leyers for markers
+    if (key in this.markOverlays) {
+      this.markOverlays[key].clearLayers();
     } else {
-      this.posOverlays[key] = L.layerGroup().addTo(<L.Map>this.map)
+      this.markOverlays[key] = L.layerGroup().addTo(<L.Map>this.map)
     }
 
     // --- Info
-    this.agentsInfo.set(key, {"glob_pos": glob_pos})
+    let pos = desc["position"]
+    this.agentsInfo[key] = desc
+    this.addMarker(key, pos)
+  }
 
-    L.circle(glob_pos, 6, { color: '#d32f2f' }
-    ).addTo(this.posOverlays[key]);
+  addMarker(key: string, pos: Position) {
+    let point = pos.point
 
-  }
+    if ('x' in point) {
+      var globPos = this.ref2root(point)
+    } else {
+      var globPos = L.latLng([point.latitude, point.longitude]);
+    }
 
-  convert2wgs(pos: RelativePos) {
-    let origin = L.latLng([this.origin.latitude, this.origin.longitude]);
-    let point = this.map.latLngToContainerPoint(origin);
-    let newPoint = L.point([point.x + pos.x, point.y + pos.y]);
-    let newLatLng = this.map.containerPointToLatLng(newPoint);
-    return newLatLng
+    // --- Marker
+    if (key in MarkerColorMap) {
+      var markerConf = MarkerColorMap[key]
+    } else {
+      var markerConf = MarkerColorMap['Default']
+    }
+      
+    let marker = L.marker(globPos, {
+      icon: L.icon({
+        iconSize: [25, 41],
+        iconAnchor: [13, 41],
+        iconUrl: `assets/marker-icon-${markerConf.marker}.png`,
+        iconRetinaUrl: `assets/marker-icon-2x-${markerConf.marker}.png`,
+        shadowUrl: 'assets/marker-shadow.png',
+        className: 'true-position-marker'
+      })
+    }).bindPopup(key).openPopup();
+    marker.addTo(this.markOverlays[key])
+
+    // --- Accuracy
+    if (pos?.accuracy) {
+      L.circle(globPos, pos.accuracy, { color: markerConf.circle}
+      ).addTo(this.markOverlays[key]);
+    }
   }
 
+
   // @https://asymmetrik.com/ngx-leaflet-tutorial-angular-cli/
   // --- Layers: Define base layers so we can reference them multiple times
   streetMaps = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
@@ -117,13 +149,18 @@ export class MapComponent implements OnInit {
     let legend = new L.Control({ position: "bottomleft" });
     legend.onAdd = function () {
       var div = L.DomUtil.create("div", "legend");
-      div.innerHTML += '<img style="opacity: .5" src="assets/marker-icon-grey.png"> <span> Agents </span><br>';
+      div.innerHTML += '<img style="opacity: .5" src="assets/marker-icon-grey.png"> <span> Employee </span><br>';
       div.innerHTML += '<i class="est-pos"></i> <span> Estimated position </span><br>';
 
       return div;
     };
 
-    legend.addTo(this.map);
+    // legend.addTo(this.map);
+
+    //-- check root
+    if (this.root) {
+      this.registerPoint("ROOT", {"position": this.root})
+    }
 
   }  
 
diff --git a/src/app/model/base-model.ts b/src/app/model/base-model.ts
index 009c868db22757ac1fa243dcb1d6480f4305459b..eecefd6d9f348e0d4b519c1eeec7811b5ef5e2f5 100644
--- a/src/app/model/base-model.ts
+++ b/src/app/model/base-model.ts
@@ -1,10 +1,60 @@
    
+export interface PositionUpdate {
+    object: Object[]
+    type: NotificationType
+}
+
+export interface Object {
+    id: string
+    sensorId: string
+    type: ObjectType
+    sensorType: SensorType
+    position: Position
+    orientation?: Orientation
+    lastPosUpdate: string
+}
+
+export interface Position {
+    refSystemId: string
+    point: WGS84 | RelativePos
+    accuracy?: number
+}
+
 export interface WGS84 {
     latitude: number
     longitude: number
+    altitude?: number
 }
 
 export interface RelativePos {
     x: number
     y: number
+    z?: number
+}
+
+interface Orientation {
+    x: number
+    y: number
+    z: number
+    w: number
 }
+
+enum NotificationType {
+    EntryNotification,
+    Unknown
+}
+
+enum ObjectType {
+    HUMAN,
+    BOX,
+    ROBOT
+}
+
+enum SensorType {
+    UWB,
+    Bluetooth,
+    WiFi
+}
+
+
+
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index e774c01f3394fdae294675b02dfe07c08b67cdfd..bd32caccf976dccb6b8d1038f005ab3d906fa9cf 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -1,4 +1,35 @@
+import { IMqttServiceOptions } from 'ngx-mqtt';
+
 export const environment = {
   production: true,
-  APIEndpoint: 'http://webserver:7071'
+
+  mapbox: {
+    accessToken1: 'pk.eyJ1IjoidmFsYXZhbmNhIiwiYSI6ImNrbGZlNzhpaTJhb3oyeG4weHEyZ2dvaDMifQ.3CSKC5AkzxrAtQ40BD5tsQ',
+    accessToken2: 'pk.eyJ1IjoidmFsYXZhbmNhIiwiYSI6ImNrbGZlYm13ZTJtZ2gyb25wbGhqdGhmZzkifQ.atRzBqwKjY9wEUlue2YLzQ'
+  },
+
+  indoorequal: {
+    APIkey: 'l70N1y3m02lRDrlIqOzYyB'
+  },
+
 };
+
+export const MQTTconfig: IMqttServiceOptions = {
+  hostname: 'broker.hivemq.com',
+  port: 8000,
+  path: '/mqtt'
+};
+
+export const MarkerColorMap: { [key: string]: MarkerColor } = {
+  "ROOT": {"marker": "red", "circle": "#d32f2f"},
+  "Employee1": {"marker": "green", "circle": "#008632"},
+  "Employee2": {"marker": "blue", "circle": "#0076EE"},
+  "Employee3": {"marker": "violet", "circle": "#9700ee"},
+  "Employee4": {"marker": "yellow", "circle": "#eee600"},
+  "Default": {"marker": "grey", "circle": "#606060"},
+}
+
+interface MarkerColor {
+  marker: string
+  circle: string
+}
\ No newline at end of file
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index c18a7872e7be2aad6a2922ce6f1c315fcc3d6fe0..156a6241ea12cdd965e6ff6c76b5617a387addb6 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -6,7 +6,6 @@ import { IMqttServiceOptions } from 'ngx-mqtt';
 
 export const environment = {
   production: false,
-  APIEndpoint: 'http://localhost:7071',
 
   mapbox: {
     accessToken1: 'pk.eyJ1IjoidmFsYXZhbmNhIiwiYSI6ImNrbGZlNzhpaTJhb3oyeG4weHEyZ2dvaDMifQ.3CSKC5AkzxrAtQ40BD5tsQ',
@@ -25,6 +24,20 @@ export const MQTTconfig: IMqttServiceOptions = {
   path: '/mqtt'
 };
 
+export const MarkerColorMap: { [key: string]: MarkerColor } = {
+  "ROOT": {"marker": "red", "circle": "#d32f2f"},
+  "Employee1": {"marker": "green", "circle": "#008632"},
+  "Employee2": {"marker": "blue", "circle": "#0076EE"},
+  "Employee3": {"marker": "violet", "circle": "#9700ee"},
+  "Employee4": {"marker": "yellow", "circle": "#eee600"},
+  "Default": {"marker": "grey", "circle": "#606060"},
+}
+
+interface MarkerColor {
+  marker: string
+  circle: string
+}
+
 
 /*
  * For easier debugging in development mode, you can import the following file