diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index b5daee848b2f3de149c979e6eb0c2fae058c72f4..c2b258c9df331d0117442c7d28766a7ef1943ee7 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -25,7 +25,7 @@ function AbstractCustomMap(model, options) {
   if (model === undefined) {
     throw Error("Model must be defined");
   }
-  
+
   this.setElement(options.getElement());
 
   this.setModel(model);
@@ -97,12 +97,12 @@ AbstractCustomMap.prototype.setupLayouts = function() {
  */
 AbstractCustomMap.prototype.creatMapOptions = function() {
   var self = this;
-  
+
   var centerPoint = this.getModel().getCenterLatLng();
-  
+
   // if we have coordinate data stored in session then restore it
   var point = ServerConnector.getSessionData(self.getProject()).getCenter(self.getModel());
-  if (point!== undefined) {
+  if (point !== undefined) {
     centerPoint = self.fromPointToLatLng(point);
   }
 
@@ -317,7 +317,11 @@ AbstractCustomMap.prototype.registerMapClickEvents = function() {
   google.maps.event.addListener(this.getGoogleMap(), 'click', function(mouseEvent) {
     var point = self.fromLatLngToPoint(mouseEvent.latLng);
     var searchDb = customMap.getOverlayByName('search');
-    return searchDb.searchByCoordinates({modelId: self.getModel().getId(), coordinates:point, zoom: self.getGoogleMap().getZoom()}).catch(GuiConnector.alert);
+    return searchDb.searchByCoordinates({
+      modelId : self.getModel().getId(),
+      coordinates : point,
+      zoom : self.getGoogleMap().getZoom()
+    }).then(null, GuiConnector.alert);
   });
 
   // select last clicked map
@@ -587,18 +591,18 @@ AbstractCustomMap.prototype._showSelectedLayout = function(layoutId, index, leng
       layoutAliases = layout.getAliases();
       layoutReactions = layout.getReactions();
 
-      return Promise.each(layoutAliases,function(layoutAlias){
-        if (layoutAlias.getModelId()===self.getId()) {
+      return Promise.each(layoutAliases, function(layoutAlias) {
+        if (layoutAlias.getModelId() === self.getId()) {
           return self.getModel().getAliasById(layoutAlias.getId()).then(function(aliasData) {
             return AliasOverlay.create(layoutAlias, aliasData, self, startX, endX);
-          }).then(function(overlay){
+          }).then(function(overlay) {
             self.selectedLayoutOverlays[layoutId].push(overlay);
           });
         }
       });
-    }).then(function(){
-      return Promise.each(layoutReactions,function(layoutReaction){
-        if (layoutReaction.getModelId()===self.getId()) {
+    }).then(function() {
+      return Promise.each(layoutReactions, function(layoutReaction) {
+        if (layoutReaction.getModelId() === self.getId()) {
           return self.getModel().getReactionById(layoutReaction.getId()).then(function(reactionData) {
             var reactionOverlay = new ReactionOverlay(layoutReaction, reactionData, self, length === 1);
             self.selectedLayoutOverlays[layoutId].push(reactionOverlay);
@@ -606,9 +610,9 @@ AbstractCustomMap.prototype._showSelectedLayout = function(layoutId, index, leng
           });
         }
       });
-    }).then(function(){
+    }).then(function() {
       resolve();
-    }).catch(reject);
+    }).then(null, reject);
   });
 };
 
@@ -947,7 +951,7 @@ AbstractCustomMap.prototype.getElement = function() {
   return this._element;
 };
 AbstractCustomMap.prototype.setElement = function(element) {
-  this._element= element;
+  this._element = element;
 };
 
 /**
@@ -967,7 +971,6 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) {
   }
 };
 
-
 /**
  * Sets zoom level for google maps.
  * 
@@ -976,7 +979,7 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) {
  * @param zoom
  *          new zoom level on map
  */
-AbstractCustomMap.prototype.setZoom = function( zoom) {
+AbstractCustomMap.prototype.setZoom = function(zoom) {
   if (this.initialized) {
     this.getGoogleMap().setZoom(zoom);
   } else {
@@ -984,15 +987,15 @@ AbstractCustomMap.prototype.setZoom = function( zoom) {
   }
 };
 
-AbstractCustomMap.prototype.fitBounds = function( markers) {
+AbstractCustomMap.prototype.fitBounds = function(markers) {
   var self = this;
-  var map = self.getGoogleMap(); 
-  if (map !==undefined) {
+  var map = self.getGoogleMap();
+  if (map !== undefined) {
     var bounds = new google.maps.LatLngBounds();
 
-    for (var i=0;i<markers.length;i++){
+    for (var i = 0; i < markers.length; i++) {
       var marker = markers[i];
-      if (marker.getModelId()===self.getId()) {
+      if (marker.getModelId() === self.getId()) {
         var markerBounds = marker.getBounds();
         bounds.extend(markerBounds.getNorthEast());
         bounds.extend(markerBounds.getSouthWest());
@@ -1004,5 +1007,4 @@ AbstractCustomMap.prototype.fitBounds = function( markers) {
   }
 };
 
-
 module.exports = AbstractCustomMap;
diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 78bd410fbc22c8af9ecf9f57b53a43e6f7178bd9..bd8be12e30cbf0666138db28ff4d434b105ef4f1 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -155,27 +155,18 @@ CustomMap.prototype.clearDbOverlays = function() {
  */
 CustomMap.prototype.hideMarkersForDbOverlay = function(dbOverlay) {
   logger.debug("Clear dbOverlay: " + dbOverlay.name);
-  for ( var aliasKey in dbOverlay.aliasMarkers) {
-    if (dbOverlay.aliasMarkers.hasOwnProperty(aliasKey)) {
-      dbOverlay.aliasMarkers[aliasKey].setMap(null);
-    }
-  }
-
-  for ( var pointKey in dbOverlay.pointMarkers) {
-    if (dbOverlay.pointMarkers.hasOwnProperty(pointKey)) {
-      dbOverlay.pointMarkers[pointKey].setMap(null);
-    }
-  }
-
-  for ( var key in dbOverlay.reactionMarkers) {
-    if (dbOverlay.reactionMarkers.hasOwnProperty(key)) {
-      dbOverlay.reactionMarkers[key].setMap(null);
+  for ( var markerType in dbOverlay.markers) {
+    if (dbOverlay.markers.hasOwnProperty(markerType)) {
+      var markers = dbOverlay.markers[markerType];
+      for ( var key in markers) {
+        if (markers.hasOwnProperty(key)) {
+          markers[key].setMap(null);
+        }
+      }
+      markers = [];
     }
   }
 
-  dbOverlay.aliasMarkers = [];
-  dbOverlay.pointMarkers = [];
-  dbOverlay.reactionMarkers = [];
 };
 
 /**
@@ -284,9 +275,11 @@ CustomMap.prototype.registerDbOverlay = function(dbOverlay) {
 
   this.overlayCollections[dbOverlay.getName()] = dbOverlay;
 
-  dbOverlay.aliasMarkers = [];
-  dbOverlay.pointMarkers = [];
-  dbOverlay.reactionMarkers = [];
+  dbOverlay.markers = {
+    ALIAS : [],
+    REACTION : [],
+    POINT : []
+  };
 
   if (dbOverlay.getName() === "search" || dbOverlay.getName() === "user") {
     dbOverlay.addListener("onSearch", function(e) {
@@ -353,38 +346,15 @@ CustomMap.prototype.refreshMarkers = function() {
 CustomMap.prototype.refreshOverlayMarkers = function(overlay) {
   logger.debug("Refresh overlay: " + overlay.name);
 
-  for ( var aliasKey in overlay.aliasMarkers) {
-    if (overlay.aliasMarkers.hasOwnProperty(aliasKey) && overlay.aliasMarkers[aliasKey] !== undefined
-        && overlay.aliasMarkers[aliasKey] !== null) {
-      var alias = overlay.aliasMarkers[aliasKey];
-      if (!this.isMarkerOptimization()) {
-        alias.hide();
-        alias.show();
-      }
-    }
-  }
-
-  for ( var key in overlay.pointMarkers) {
-    if (overlay.pointMarkers.hasOwnProperty(key) && overlay.pointMarkers[key] !== undefined
-        && overlay.pointMarkers[key] !== null) {
-      var pointMarker = overlay.pointMarkers[key];
-      if (!this.isMarkerOptimization()) {
-        pointMarker.hide();
-        pointMarker.show();
-      }
-    }
-  }
-
-  for ( var reactionKey in overlay.reactionMarkers) {
-    if (overlay.reactionMarkers.hasOwnProperty(reactionKey) && overlay.reactionMarkers[reactionKey] !== undefined
-        && overlay.reactionMarkers[reactionKey] !== null) {
-      var reactionOverlay = overlay.reactionMarkers[reactionKey];
-      if (!reactionOverlay.isShown()) {
-        reactionOverlay.show();
-      }
-      if (!this.isMarkerOptimization()) {
-        reactionOverlay.hide();
-        reactionOverlay.show();
+  if (!this.isMarkerOptimization()) {
+    if (dbOverlay.markers.hasOwnProperty(markerType)) {
+      var markers = dbOverlay.markers[markerType];
+      for ( var key in markers) {
+        if (markers.hasOwnProperty(key)) {
+          var marker = markers[key].setMap(null);
+          marker.hide();
+          marker.show();
+        }
       }
     }
   }
@@ -734,14 +704,14 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou
         return Promise.each(elements, function(element) {
           var model = self.getSubmapById(element.modelId);
           if (element.getType() === "ALIAS") {
-            if (overlayCollection.aliasMarkers[element.getId()] !== undefined) {
+            if (overlayCollection.markers["ALIAS"][element.getId()] !== undefined) {
               logger.warn("More than one marker in " + overlayCollection.name + " for alias " + element.getId()
                   + ". Skipping duplicates.");
               return null;
             } else {
               return model.getModel().getAliasById(element.getId()).then(function(aliasData) {
                 var aliasMarker = new AliasMarker(element.getId(), element.icon, aliasData, model);
-                overlayCollection.aliasMarkers[element.getId()] = aliasMarker;
+                overlayCollection.markers["ALIAS"][element.getId()] = aliasMarker;
                 markers.push(aliasMarker);
                 return aliasMarker;
               });
@@ -763,18 +733,18 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou
                 marker = new ReactionMarker(element.getId(), icon, reactionData, model);
               }
               marker.show();
-              overlayCollection.reactionMarkers[element.getId()] = marker;
+              overlayCollection.markers["REACTION"][element.getId()] = marker;
               markers.push(marker);
               return marker;
             });
           } else if (element.getType() === "POINT") {
             var pointData = model.getModel().getPointDataByPoint(element.getPoint());
-            if (overlayCollection.pointMarkers[pointData.getId()] === undefined) {
+            if (overlayCollection.markers["POINT"][pointData.getId()] === undefined) {
               var pointMarker = new PointMarker(pointData, element.icon, model);
-              overlayCollection.pointMarkers[pointData.getId()] = pointMarker;
+              overlayCollection.markers["POINT"][pointData.getId()] = pointMarker;
               markers.push(pointMarker);
             }
-            return overlayCollection.pointMarkers[pointData.getId()];
+            return overlayCollection.markers["POINT"][pointData.getId()];
           } else {
             throw new Error("Unknown type of the element in overlay: " + element.type);
           }
diff --git a/frontend-js/src/test/js/GuiConnector-mock.js b/frontend-js/src/test/js/GuiConnector-mock.js
index 6cafa12520e005885f87c7dea8496b0bed010e06..838c69eb1fd7b7d2fbe46e0037cb1f3e3723445c 100644
--- a/frontend-js/src/test/js/GuiConnector-mock.js
+++ b/frontend-js/src/test/js/GuiConnector-mock.js
@@ -6,9 +6,13 @@ var OriginalGuiConnector = require('../../main/js/GuiConnector');
 
 var GuiConnectorMock = OriginalGuiConnector;
 
-GuiConnectorMock.alert = function(message) {
-  logger.error(message);
-  throw new Error(message);
+GuiConnectorMock.alert = function(error) {
+  logger.error(error);
+  if (error instanceof Error) {
+    throw error;
+  } else {
+    throw new Error(error);
+  }
 };
 
 module.exports = GuiConnectorMock;
diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js
index 685f4db8cd1660bd1164e7f38195f4e8167d7e1b..344e5e3f6c31019778bc0e62a16f37afdbf4a7ab 100644
--- a/frontend-js/src/test/js/map/CustomMap-test.js
+++ b/frontend-js/src/test/js/map/CustomMap-test.js
@@ -287,8 +287,9 @@ describe('CustomMap', function() {
       overlayCollection : oc
     }).then(function() {
       var aliasMarkerCount = 0;
-      for ( var id in oc.aliasMarkers) {
-        if (oc.aliasMarkers.hasOwnProperty(id)) {
+      var markers = oc.markers["ALIAS"];
+      for ( var id in markers) {
+        if (markers.hasOwnProperty(id)) {
           aliasMarkerCount++;
         }
       }
@@ -316,8 +317,9 @@ describe('CustomMap', function() {
       overlayCollection : oc
     }).then(function() {
       var aliasMarkerCount = 0;
-      for ( var id in oc.aliasMarkers) {
-        if (oc.aliasMarkers.hasOwnProperty(id)) {
+      var markers = oc.markers["ALIAS"];
+      for ( var id in markers) {
+        if (markers.hasOwnProperty(id)) {
           aliasMarkerCount++;
         }
       }
@@ -346,8 +348,9 @@ describe('CustomMap', function() {
       overlayCollection : oc
     }).then(function() {
       var markerCount = 0;
-      for ( var id in oc.pointMarkers) {
-        if (oc.pointMarkers.hasOwnProperty(id)) {
+      var markers = oc.markers["POINT"];
+      for ( var id in markers) {
+        if (markers.hasOwnProperty(id)) {
           markerCount++;
         }
       }
@@ -376,8 +379,9 @@ describe('CustomMap', function() {
       overlayCollection : oc
     }).then(function() {
       var markerCount = 0;
-      for ( var id in oc.reactionMarkers) {
-        if (oc.reactionMarkers.hasOwnProperty(id)) {
+      var markers = oc.markers["REACTION"];
+      for ( var id in markers) {
+        if (markers.hasOwnProperty(id)) {
           markerCount++;
         }
       }
@@ -446,9 +450,9 @@ describe('CustomMap', function() {
     oc.getIdentifiedElements = function() {
       return Promise.resolve(searchResults);
     };
-    oc.clear = function(){
+    oc.clear = function() {
       searchResults = [];
-      return this.callListeners("onSearch",searchResults);
+      return this.callListeners("onSearch", searchResults);
     }
 
     return map.renderOverlayCollection({
@@ -524,7 +528,7 @@ describe('CustomMap', function() {
 
     }).then(function() {
       assert.equal(map.getId(), map.getActiveSubmapId());
-      assert.ok(searchOverlay.aliasMarkers[329171]);
+      assert.ok(searchOverlay.markers["ALIAS"][329171]);
     });
 
   });
@@ -546,9 +550,9 @@ describe('CustomMap', function() {
       return google.maps.event.trigger(map.getGoogleMap(), 'click', mev);
     }).then(function() {
       assert.equal(map.getId(), map.getActiveSubmapId());
-      assert.ok(searchOverlay.reactionMarkers[153521]);
-      assert.ok(searchOverlay.reactionMarkers[153521].isShown());
-      assert.ok(searchOverlay.aliasMarkers[329165]);
+      assert.ok(searchOverlay.markers["REACTION"][153521]);
+      assert.ok(searchOverlay.markers["REACTION"][153521].isShown());
+      assert.ok(searchOverlay.markers["ALIAS"][329165]);
     });
   });
 
@@ -643,9 +647,9 @@ describe('CustomMap', function() {
 
     ServerConnector.getSessionData().setShowComments(true);
     return map.refreshComments().then(function() {
-      assert.ok(commentsOverlay.pointMarkers['(241.01,372.35)']);
-      assert.ok(commentsOverlay.pointMarkers['(643.96,144.09)']);
-      assert.notOk(commentsOverlay.pointMarkers['unkId']);
+      assert.ok(commentsOverlay.markers["POINT"]['(241.01,372.35)']);
+      assert.ok(commentsOverlay.markers["POINT"]['(643.96,144.09)']);
+      assert.notOk(commentsOverlay.markers["POINT"]['unkId']);
     });
   });
 
@@ -659,7 +663,7 @@ describe('CustomMap', function() {
       ServerConnector.getSessionData().setShowComments(false);
       return map.refreshComments();
     }).then(function() {
-      assert.notOk(commentsOverlay.pointMarkers['(241.01, 372.35)']);
+      assert.notOk(commentsOverlay.markers["POINT"]['(241.01, 372.35)']);
     });
   });