diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts
index 904bd0cc4316ca3707952cff91bf3063e2d8fdc2..6e1ed6832d2173ff2b2601da6ac3db96634c19c6 100644
--- a/src/app/home/home.page.ts
+++ b/src/app/home/home.page.ts
@@ -15,10 +15,12 @@ declare var H: any;
   styleUrls: ['home.page.scss'],
 })
 
-export class HomePage {
+export class HomePage implements OnInit {
   private platform: any;
   private map: any;
   private defaultLayers: any;
+  private locationsGroup: any;
+  private currentUserPosition = {lat: 0, lng: 0};
 
   bikes = [];
   bikeApi: Observable<any>;
@@ -28,6 +30,8 @@ export class HomePage {
   public selectedBike = { id: 0 };
   public isBikeReserved = false;
 
+  public currentLocationMarker: any;
+
   @ViewChild("mapElement", { static: false })
   public mapElement: ElementRef;
 
@@ -40,52 +44,33 @@ export class HomePage {
     this.platform = new H.service.Platform({
       'apikey': 'tiVTgBnPbgV1spie5U2MSy-obhD9r2sGiOCbBzFY2_k'
     });
+
+    let watch = this.geolocation.watchPosition({ enableHighAccuracy: true, maximumAge: 10000 });
+    watch.subscribe((position) => {
+      console.log(position.coords.latitude);
+      console.log(position.coords.longitude);
+      this.currentUserPosition.lat = position.coords.latitude;
+      this.currentUserPosition.lng = position.coords.longitude;
+      this.currentLocationMarker.setGeometry( {lat:position.coords.latitude, lng:position.coords.longitude})
+    }, (errorObj) => {
+      console.log(errorObj.code + ": " + errorObj.message);
+    });
   }
 
   ngOnInit() {
-    this.getBikesList();
   }
 
   ngAfterViewInit() {
-    setTimeout(() => {
-      this.loadmap();
-    }, 700);
-
+    this.initializeMap();
     window.addEventListener('resize', () => this.map.getViewPort().resize());
+    setTimeout(() => {
+      window.dispatchEvent(new Event('resize'));  
+    },100);
+    this.getUserLocation();
+    this.getBikesList();
   }
 
-  getBikesList() {
-    this.geolocation.getCurrentPosition({
-      maximumAge: 1000, timeout: 4000,
-      enableHighAccuracy: true
-    }).then((resp) => {
-      let lat = resp.coords.latitude;
-      let lng = resp.coords.longitude;
-
-      this.currentLocation.lat = resp.coords.latitude;
-      this.currentLocation.lng = resp.coords.longitude;
-
-      this.storage.get('token').then((token) => {
-        let url = 'http://193.196.52.237:8081/bikes' + '?lat=' + lat + '&lng=' + lng;
-        const headers = new HttpHeaders().set("Authorization", "Bearer " + token);
-        this.bikeApi = this.httpClient.get(url, { headers });
-        this.bikeApi.subscribe((resp) => {
-          console.log("bikes response", resp);
-          this.bikes = resp;
-          for (let i = 0; i < this.bikes.length; i++) {
-            this.bikes[i].distance = this.bikes[i].distance.toFixed(2);;
-            this.reverseGeocode(this.platform, this.bikes[i].lat, this.bikes[i].lon, i);
-          }
-        }, (error) => console.log(error));
-      });
-    }, er => {
-      alert('Can not retrieve location');
-    }).catch((error) => {
-      alert('Error getting location - ' + JSON.stringify(error));
-    });
-  }
-
-  loadmap() {
+  initializeMap() {
     // Obtain the default map types from the platform object
     this.defaultLayers = this.platform.createDefaultLayers();
     this.map = new H.Map(
@@ -128,7 +113,10 @@ export class HomePage {
     mapSettings.setAlignment('top-right');
     zoom.setAlignment('right-top');
 
-    this.map.addEventListener('baselayerchange', (data) => {
+    this.map.getViewPort().setPadding(30, 30, 30, 30);
+
+    // Listen for base layer change event (eg. from satellite to 3D)
+    this.map.addEventListener('baselayerchange', (evt) => {
       let mapConfig = this.map.getBaseLayer().getProvider().getStyleInternal().getConfig();
       if (mapConfig === null || (mapConfig && mapConfig.sources && mapConfig.sources.omv)) {
         this.map.getViewModel().setLookAtData({ tilt: 60 });
@@ -136,8 +124,48 @@ export class HomePage {
         this.map.getViewModel().setLookAtData({ tilt: 0 });
       }
     });
-    this.getLocation(this.map);
 
+    // listen for map click event
+    this.map.addEventListener('tap', (event) =>{
+      console.log(event.type, event.currentPointer.type);
+    });
+
+    this.locationsGroup = new H.map.Group();
+  }
+
+  getBikesList() {
+    this.geolocation.getCurrentPosition({
+      maximumAge: 1000, timeout: 4000,
+      enableHighAccuracy: true
+    }).then((resp) => {
+      let lat = resp.coords.latitude;
+      let lng = resp.coords.longitude;
+
+      this.currentUserPosition.lat = resp.coords.latitude;
+      this.currentUserPosition.lng = resp.coords.longitude;
+
+      this.storage.get('token').then((token) => {
+        let url = 'http://193.196.52.237:8081/bikes' + '?lat=' + lat + '&lng=' + lng;
+        const headers = new HttpHeaders().set("Authorization", "Bearer " + token);
+        this.bikeApi = this.httpClient.get(url, { headers });
+        this.bikeApi.subscribe((resp) => {
+          console.log("bikes response", resp);
+          this.bikes = resp;
+          for (let i = 0; i < this.bikes.length; i++) {
+            this.bikes[i].distance = this.bikes[i].distance.toFixed(2);;
+            this.reverseGeocode(this.platform, this.bikes[i].lat, this.bikes[i].lon, i);
+          }
+          this.showBikesOnMap();
+        }, (error) => console.log(error));
+      });
+    }, er => {
+      //alert('Can not retrieve location');
+    }).catch((error) => {
+      //alert('Error getting location - ' + JSON.stringify(error));
+    });
+  }
+
+  showBikesOnMap() {
     var img = ['../../../assets/images/100_percent.png', '../../../assets/images/75_percent.png', '../../../assets/images/50_percent.png', '../../../assets/images/25_percent.png', '../../../assets/images/0_percent.png'];
     for (let i = 0; i < this.bikes.length; i++) {
       if (this.bikes[i].batteryPercentage < 100 && this.bikes[i].batteryPercentage >= 75) {
@@ -151,18 +179,28 @@ export class HomePage {
       } else if (this.bikes[i].batteryPercentage < 25 && this.bikes[i].batteryPercentage >= 0) {
         this.addMarker(Number(this.bikes[i].lat), Number(this.bikes[i].lon), img[3]);
       }
-
     }
+
+    this.map.addObject(this.locationsGroup);
+    this.setZoomLevelToPointersGroup();
   }
 
+  //TODO change this logic
   getCurrentPosition() {
-    this.getLocation(this.map.setZoom(17));
+    this.map.setZoom(17);
+    this.map.setCenter({ lat: this.currentUserPosition.lat, lng: this.currentUserPosition.lng });
   }
 
-  getLocation(map) {
+  setZoomLevelToPointersGroup() {
+    this.map.getViewModel().setLookAtData({
+      bounds: this.locationsGroup.getBoundingBox()
+    });
+  }
+
+  getUserLocation() {
     this.geolocation.getCurrentPosition(
       {
-        maximumAge: 1000, timeout: 2000,
+        maximumAge: 1000, timeout: 4000,
         enableHighAccuracy: true
       }
     ).then((resp) => {
@@ -170,21 +208,32 @@ export class HomePage {
       let lng = resp.coords.longitude;
       this.currentLocation.lat = resp.coords.latitude;
       this.currentLocation.lng = resp.coords.longitude;
-      this.moveMapToGiven(map, lat, lng);
+      this.showUserLocationOnMap(lat, lng);
     }, er => {
-      alert('Can not retrieve Location')
+      //alert('Can not retrieve Location')
+      this.showUserLocationOnMap(this.currentUserPosition.lat, this.currentUserPosition.lng);
     }).catch((error) => {
-      alert('Error getting location - ' + JSON.stringify(error))
+      this.showUserLocationOnMap(this.currentUserPosition.lat, this.currentUserPosition.lng);
+      //alert('Error getting location - ' + JSON.stringify(error))
     });
   }
 
-  moveMapToGiven(map, lat, lng) {
-    var icon = new H.map.Icon('../../../assets/images/current_location.png');
+  showUserLocationOnMap(lat, lng) {
+    let svgMarkup = '<svg width="24" height="24" ' +
+    'xmlns="http://www.w3.org/2000/svg">' +
+    '<circle cx="10" cy="10" r="10" ' +
+      'fill="#007cff" stroke="white" stroke-width="2"  />' +
+    '</svg>';
+    let icon = new H.map.Icon(svgMarkup);
+    //let icon = new H.map.Icon('../../../assets/images/current_location.png');
     // Create a marker using the previously instantiated icon:
-    var marker = new H.map.Marker({ lat: lat, lng: lng }, { icon: icon });
+    this.currentLocationMarker = new H.map.Marker({ lat: lat, lng: lng }, { icon: icon });
     // Add the marker to the map:
-    map.addObject(marker);
-    map.setCenter({ lat: lat, lng: lng });
+    this.locationsGroup.addObjects([this.currentLocationMarker]);
+    this.setZoomLevelToPointersGroup();
+
+    //this.map.addObject(marker);
+    //this.map.setCenter({ lat: lat, lng: lng });
   }
 
   addMarker(lat, lng, img) {
@@ -192,7 +241,9 @@ export class HomePage {
     // Create a marker using the previously instantiated icon:
     var marker = new H.map.Marker({ lat: lat, lng: lng }, { icon: icon });
     // Add the marker to the map:
-    this.map.addObject(marker);
+    //this.map.addObject(marker);
+
+    this.locationsGroup.addObjects([marker]);
   }
 
   enable3DMaps() {
@@ -210,7 +261,6 @@ export class HomePage {
       };
 
     geocoder.reverseGeocode(parameters, result => {
-      console.log(result);
       var streets = result.Response.View[0].Result[0].Location.Address.Street;
       var houseNumber = result.Response.View[0].Result[0].Location.Address.HouseNumber;
       var zipcode = result.Response.View[0].Result[0].Location.Address.PostalCode;