diff --git a/frontend-js/src/main/js/map/overlay/UserDbOverlay.js b/frontend-js/src/main/js/map/overlay/UserDbOverlay.js
index 0eaebd13844670e9c9aac3c7a07a87303d76f520..1e0b6ef9cdd431a0009feb795db410c50821f239 100644
--- a/frontend-js/src/main/js/map/overlay/UserDbOverlay.js
+++ b/frontend-js/src/main/js/map/overlay/UserDbOverlay.js
@@ -37,10 +37,11 @@ UserDbOverlay.prototype.getDetailDataByIdentifiedElement = function(element) {
   return model.getByIdentifiedElement(element, true);
 };
 
-UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray) {
+UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray, mustBeUndefined) {
   var self = this;
   var result = [];
   var promises = [];
+  var mustBeDefined = !mustBeUndefined;
   for (var i = 0; i < params.length; i++) {
     var singleElementParam = params[i];
     var element = new IdentifiedElement(singleElementParam.element);
@@ -52,9 +53,12 @@ UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray
       element.setLineWeight(singleElementParam.options.lineWeight);
       element.setLineOpacity(singleElementParam.options.lineOpacity);
     }
-    if (sourceArray[element.getType()][element.getId()] !== undefined) {
+    if (sourceArray[element.getType()][element.getId()] !== undefined && mustBeUndefined) {
       return Promise.reject(new Error("Element already highlighted: " + element.getId()));
     }
+    if (sourceArray[element.getType()][element.getId()] === undefined && mustBeDefined) {
+      return Promise.reject(new Error("Element is not highlighted: " + element.getId()));
+    }
     result.push(element);
     var submap = self.getMap().getSubmapById(element.getModelId());
     if (submap === null) {
@@ -79,7 +83,7 @@ UserDbOverlay.prototype.addMarker = function(params) {
   if (params.length === undefined) {
     params = [ params ];
   }
-  return self._createIdentifiedElements(params, self._markerIdentifiedElements).then(function(elements) {
+  return self._createIdentifiedElements(params, self._markerIdentifiedElements, true).then(function(elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
       self._markerIdentifiedElements[element.getType()][element.getId()] = element;
@@ -105,7 +109,7 @@ UserDbOverlay.prototype.addSurface = function(params) {
     params = [ params ];
   }
 
-  return self._createIdentifiedElements(params, self._surfaceIdentifiedElements).then(function(elements) {
+  return self._createIdentifiedElements(params, self._surfaceIdentifiedElements, true).then(function(elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
       self._surfaceIdentifiedElements[element.getType()][element.getId()] = element;
@@ -127,32 +131,26 @@ UserDbOverlay.prototype.removeMarker = function(params) {
   var self = this;
   self.disableAddRemoveElements();
 
-  var elements = [];
   if (params.length === undefined) {
     params = [ params ];
   }
-  var i, element;
-  for (i = 0; i < params.length; i++) {
-    var singleElementParam = params[i];
-    element = new IdentifiedElement(singleElementParam.element);
-    if (self._markerIdentifiedElements[element.getType()][element.getId()] === undefined) {
-      self.enableAddRemoveElements();
-      return Promise.reject(new Error("Element is not highlighted: " + element.getId()));
-    }
-    elements.push(element);
-  }
-  for (i = 0; i < elements.length; i++) {
-    element = elements[i];
-    self._markerIdentifiedElements[element.getType()][element.getId()] = undefined;
-    delete self._markerIdentifiedElements[element.getType()][element.getId()];
-  }
 
-  return self.getIdentifiedElements().then(function(elements) {
+  return self._createIdentifiedElements(params, self._markerIdentifiedElements, false).then(function(elements) {
+    for (var i = 0; i < elements.length; i++) {
+      var element = elements[i];
+      self._markerIdentifiedElements[element.getType()][element.getId()] = undefined;
+      delete self._markerIdentifiedElements[element.getType()][element.getId()];
+    }
+    return self.getIdentifiedElements();
+  }).then(function(elements) {
     self.enableAddRemoveElements();
     return self.callListeners("onSearch", {
       fitBounds : false,
       identifiedElements : elements,
     });
+  }).then(null, function(error) {
+    self.enableAddRemoveElements();
+    return Promise.reject(error);
   });
 };
 
@@ -164,23 +162,14 @@ UserDbOverlay.prototype.removeSurface = function(params) {
   if (params.length === undefined) {
     params = [ params ];
   }
-  var i, element;
-  for (i = 0; i < params.length; i++) {
-    var singleElementParam = params[i];
-    element = new IdentifiedElement(singleElementParam.element);
-    if (self._surfaceIdentifiedElements[element.getType()][element.getId()] === undefined) {
-      self.enableAddRemoveElements();
-      return Promise.reject(new Error("Element is not highlighted: " + element.getId()));
+  return self._createIdentifiedElements(params, self._surfaceIdentifiedElements, false).then(function(elements) {
+    for (var i = 0; i < elements.length; i++) {
+      var element = elements[i];
+      self._surfaceIdentifiedElements[element.getType()][element.getId()] = undefined;
+      delete self._surfaceIdentifiedElements[element.getType()][element.getId()];
     }
-    elements.push(element);
-  }
-  for (i = 0; i < elements.length; i++) {
-    element = elements[i];
-    self._surfaceIdentifiedElements[element.getType()][element.getId()] = undefined;
-    delete self._surfaceIdentifiedElements[element.getType()][element.getId()];
-  }
-
-  return self.getIdentifiedElements().then(function(elements) {
+    return self.getIdentifiedElements();
+  }).then(function(elements) {
     self.enableAddRemoveElements();
     return self.callListeners("onSearch", {
       fitBounds : false,