diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
index 47d2804b852b922fab276515773c6f834517ca60..c538683bfd90e4d0d46cc0ac57b47951fc427bd8 100644
--- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
@@ -44,13 +44,13 @@ function OverlayPanel(params) {
       toggleOverlayPromise = self.getMap().hideDataOverlay(overlayId);
     }
     $(thisCheckbox).prop("disabled", true);
-    return toggleOverlayPromise.then(null, GuiConnector.alert).finally(function () {
+    return toggleOverlayPromise.catch(GuiConnector.alert).finally(function () {
       $(thisCheckbox).prop("disabled", false);
     });
   });
   $(self.getElement()).on("click", "[name='overlayLink']", function () {
     var overlayId = $(this).attr("data");
-    self.getMap().openDataOverlay(overlayId);
+    return self.getMap().openDataOverlay(overlayId);
   });
   self.getMap().addListener("onBackgroundOverlayChange", function (e) {
     var overlayId = e.arg.toString();
diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index 3536c8e6d74c9cf13abc442f1fcb61a7cb0381cd..1e9b6aeb682cfad34e265f3fc260f044ab50da2a 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -51,6 +51,7 @@ function AbstractCustomMap(model, options) {
   // this array contains elements that are presented on a specific overlay (set
   // of google map object representing lines/areas that are associated with
   // overlay)
+  // @type {Array<AbstractSurface[]>}
   this.selectedLayoutOverlays = [];
 
   // array with info windows for Marker pointing to aliases
@@ -425,17 +426,22 @@ AbstractCustomMap.prototype._showSelectedDataOverlay = function (overlayId, inde
  *
  * @param {number} overlayId
  *          identifier of a overlay
+ *
+ * @returns {Promise}
  */
 AbstractCustomMap.prototype._hideSelectedLayout = function (overlayId) {
   // if map is not initialized then don't perform this operation
   if (!this.isInitialized()) {
     logger.debug("Model " + this.getId() + " not initialized");
-    return;
+    return Promise.resolve();
   }
+
+  var promises =[];
   for (var i = 0; i < this.selectedLayoutOverlays[overlayId].length; i++) {
-    this.selectedLayoutOverlays[overlayId][i].hide();
+    promises.push(this.selectedLayoutOverlays[overlayId][i].hide());
   }
   this.selectedLayoutOverlays[overlayId] = [];
+  return Promise.all(promises);
 };
 
 /**
diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 9fa139d1c02941adcb69e0cf55eeb21d73702b73..2d6db63d2b6955af99c3baa2c1a1e21451105999 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -600,16 +600,18 @@ CustomMap.prototype.redrawSelectedDataOverlays = function () {
         promises.push(self.showSelectedDataOverlay(overlayId, i, visibleDataOverlays.length));
       }
     }
-    return Promise.all(promises).then(function () {
-      // hide overlays that were visible
-      var overlays = self.getProject().getDataOverlays();
-      for (var i = 0; i < overlays.length; i++) {
-        var id = overlays[i].getId();
-        if (!self._selectedOverlays[id] && self.layoutContainsOverlays(id)) {
-          self.hideSelectedLayout(id);
-        }
+    return Promise.all(promises);
+  }).then(function () {
+    var promises = [];
+    // hide overlays that were visible
+    var overlays = self.getProject().getDataOverlays();
+    for (var i = 0; i < overlays.length; i++) {
+      var id = overlays[i].getId();
+      if (!self._selectedOverlays[id] && self.layoutContainsOverlays(id)) {
+        promises.push(self.hideSelectedLayout(id));
       }
-    });
+    }
+    return Promise.all(promises);
   });
 };
 
@@ -618,12 +620,16 @@ CustomMap.prototype.redrawSelectedDataOverlays = function () {
  *
  * @param {number} overlayId
  *          identifier of a overlay to hide
+ *
+ * @returns {Promise}
  */
 CustomMap.prototype.hideSelectedLayout = function (overlayId) {
-  this._hideSelectedLayout(overlayId);
+  var promises = [];
+  promises.push(this._hideSelectedLayout(overlayId));
   for (var i = 0; i < this.submaps.length; i++) {
-    this.submaps[i]._hideSelectedLayout(overlayId);
+    promises.push(this.submaps[i]._hideSelectedLayout(overlayId));
   }
+  return Promise.all(promises);
 };
 
 /**