diff --git a/frontend-js/src/main/js/InvalidArgumentError.js b/frontend-js/src/main/js/InvalidArgumentError.js
new file mode 100644
index 0000000000000000000000000000000000000000..3833bbf547eca95a26c8a28ad6301fc60c207a72
--- /dev/null
+++ b/frontend-js/src/main/js/InvalidArgumentError.js
@@ -0,0 +1,13 @@
+"use strict";
+
+/* exported logger */
+
+var logger = require('./logger');
+
+function InvalidArgumentError(message) {
+  this.name = "InvalidArgumentError";
+  this.message = message;
+  this.stack = (new Error()).stack;
+}
+
+module.exports = InvalidArgumentError;
diff --git a/frontend-js/src/main/js/map/overlay/UserDbOverlay.js b/frontend-js/src/main/js/map/overlay/UserDbOverlay.js
index 47b59846d0f5dd063d302b2082e1362bac02c42a..0e6713ec37f420d1e9e0caebbb9345e1f0bae2fa 100644
--- a/frontend-js/src/main/js/map/overlay/UserDbOverlay.js
+++ b/frontend-js/src/main/js/map/overlay/UserDbOverlay.js
@@ -7,6 +7,7 @@ var logger = require('../../logger');
 var AbstractDbOverlay = require('./AbstractDbOverlay');
 
 var IdentifiedElement = require('../data/IdentifiedElement');
+var InvalidArgumentError = require('../../InvalidArgumentError');
 
 var Promise = require("bluebird");
 
@@ -36,37 +37,59 @@ UserDbOverlay.prototype.getDetailDataByIdentifiedElement = function(element) {
   return model.getByIdentifiedElement(element, true);
 };
 
-UserDbOverlay.prototype.addMarker = function(params) {
+UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray) {
   var self = this;
+  var result = [];
+  var promises = [];
+  for (var i = 0; i < params.length; i++) {
+    var singleElementParam = params[i];
+    var element = new IdentifiedElement(singleElementParam.element);
+    element.setIcon(singleElementParam.icon);
+    if (singleElementParam.options !== undefined) {
+      element.setColor(singleElementParam.options.color);
+      element.setOpacity(singleElementParam.options.opacity);
+      element.setLineColor(singleElementParam.options.lineColor);
+      element.setLineWeight(singleElementParam.options.lineWeight);
+      element.setLineOpacity(singleElementParam.options.lineOpacity);
+    }
+    if (sourceArray[element.getType()][element.getId()] !== undefined) {
+      return Promise.reject(new Error("Element already highlighted: " + element.getId()));
+    }
+    result.push(element);
+    promises.push(self.getMap().getSubmapById(element.getModelId()).getModel().getByIdentifiedElement(element));
+  }
+  return Promise.all(promises).then(function(elementsFromModel) {
+    for (var i = 0; i < elementsFromModel.length; i++) {
+      if (elementsFromModel[i] === undefined || elementsFromModel[i] === null) {
+        return Promise.reject(new InvalidArgumentError("Element doesn't exist: " + result[i].getId()));
+      }
+    }
+    return result;
+  })
+};
 
+UserDbOverlay.prototype.addMarker = 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);
-    element.setIcon(singleElementParam.icon);
-    if (self._markerIdentifiedElements[element.getType()][element.getId()] !== undefined) {
-      self.enableAddRemoveElements();
-      return Promise.reject(new Error("Element already highlighted: " + element.getId()));
+  return self._createIdentifiedElements(params, self._markerIdentifiedElements).then(function(elements) {
+    for (var i = 0; i < elements.length; i++) {
+      var element = elements[i];
+      self._markerIdentifiedElements[element.getType()][element.getId()] = element;
     }
-    elements.push(element);
-  }
-  for (i = 0; i < elements.length; i++) {
-    element = elements[i];
-    self._markerIdentifiedElements[element.getType()][element.getId()] = element;
-  }
-
-  return self.getIdentifiedElements().then(function(elements) {
+    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);
   });
 };
 
@@ -74,38 +97,25 @@ UserDbOverlay.prototype.addSurface = 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 (singleElementParam.options !== undefined) {
-      element.setColor(singleElementParam.options.color);
-      element.setOpacity(singleElementParam.options.opacity);
-      element.setLineColor(singleElementParam.options.lineColor);
-      element.setLineWeight(singleElementParam.options.lineWeight);
-      element.setLineOpacity(singleElementParam.options.lineOpacity);
-    }
-    if (self._surfaceIdentifiedElements[element.getType()][element.getId()] !== undefined) {
-      self.enableAddRemoveElements();
-      return Promise.reject(new Error("Element already highlighted: " + element.getId()));
-    }
-    elements.push(element);
-  }
-  for (i = 0; i < elements.length; i++) {
-    element = elements[i];
-    self._surfaceIdentifiedElements[element.getType()][element.getId()] = element;
-  }
 
-  return self.getIdentifiedElements().then(function(elements) {
+  return self._createIdentifiedElements(params, self._surfaceIdentifiedElements).then(function(elements) {
+    for (var i = 0; i < elements.length; i++) {
+      var element = elements[i];
+      self._surfaceIdentifiedElements[element.getType()][element.getId()] = element;
+    }
+    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);
   });
 };
 
diff --git a/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js
index 1ab3853a466d08d061a948215d26e58ee311cfbf..6ee50e21e1dea5c39b6f18960dc634db98cfea1f 100644
--- a/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js
@@ -4,6 +4,8 @@ var Helper = require('../../Helper');
 
 var logger = require('../../logger');
 
+var CustomMap = require('../../../../main/js/map//CustomMap');
+var InvalidArgumentError = require('../../../../main/js/InvalidArgumentError');
 var UserDbOverlay = require('../../../../main/js/map/overlay/UserDbOverlay');
 
 var assert = require('assert');
@@ -27,30 +29,60 @@ describe('UserDbOverlay', function() {
   });
 
   it("clear", function() {
-    var map = helper.createCustomMap();
-    var oc = new UserDbOverlay({
-      map : map,
-      name : 'user'
-    });
-    return oc.addMarker({
-      element : {
-        id : 329171,
-        modelId : 15781,
-        type : "ALIAS"
-      },
-      options : {
-        type : "SURFACE"
-      }
+    var overlay;
+    return ServerConnector.getProject().then(function(project) {
+      var options = helper.createCustomMapOptions(project);
+      var map = new CustomMap(options);
+      overlay = new UserDbOverlay({
+        map : map,
+        name : 'user'
+      });
+      return overlay.addMarker({
+        element : {
+          id : 329171,
+          modelId : 15781,
+          type : "ALIAS"
+        },
+        options : {
+          type : "SURFACE"
+        }
+      });
     }).then(function() {
-      return oc.getIdentifiedElements();
+      return overlay.getIdentifiedElements();
     }).then(function(elements) {
       assert.equal(elements.length, 1);
-      return oc.clear();
+      return overlay.clear();
     }).then(function() {
-      return oc.getIdentifiedElements();
+      return overlay.getIdentifiedElements();
     }).then(function(elements) {
       assert.equal(elements.length, 0);
     });
   });
 
+  it("add unexisting object", function() {
+    var overlay;
+    return ServerConnector.getProject().then(function(project) {
+      var options = helper.createCustomMapOptions(project);
+      var map = new CustomMap(options);
+      overlay = new UserDbOverlay({
+        map : map,
+        name : 'user'
+      });
+      return overlay.addMarker({
+        element : {
+          id : -1,
+          modelId : 15781,
+          type : "ALIAS"
+        },
+        options : {
+          type : "SURFACE"
+        }
+      });
+    }).then(function() {
+      assert.ok(false, "Exception expected");
+    }, function(error) {
+      assert.ok(error instanceof InvalidArgumentError)
+    });
+  });
+
 });
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId&id=-1&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId&id=-1&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId&id=-1&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[]
\ No newline at end of file