diff --git a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js
index 15fbc9e6587bbb7ce763ac7e7200e7bfbd206cf5..32d295284650e715ba1f3d84215684f79e760522 100644
--- a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js
+++ b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js
@@ -25,6 +25,42 @@ var Promise = require("bluebird");
  * @property {number} options.lineOpacity
  */
 
+/**
+ * @typedef {Object} PluginProjectData
+ *
+ * @property {function(*=): Promise<any>} getBioEntityById
+ * @property {function(): *} getAllBioEntities
+ * @property {function(*=): *} getReactionsWithElement
+ * @property {function(): string} getProjectId
+ * @property {function(): string} getName
+ * @property {function(): string} getVersion
+ * @property {function(): *} getDisease
+ * @property {function(): *} getOrganism
+ * @property {function(): *[]} getModels
+ * @property {function(): DataOverlay[]} getDataOverlays
+ */
+
+/**
+ * @typedef {Object} PluginProjectMap
+ *
+ * @property {function(): (Promise<DataOverlay[]>|*)} getVisibleDataOverlays
+ * @property {function(number|DataOverlay): (Promise<DataOverlay[]>|*)} showDataOverlay
+ * @property {function(number|DataOverlay): (Promise<DataOverlay[]>|*)} hideDataOverlay
+ * @property {function(*)} addListener
+ * @property {function(*)} removeListener
+ * @property {function(): Array} removeAllListeners
+ * @property {(function(*=): Promise<Array|never>)} getHighlightedBioEntities
+ * @property {(function(*=): Promise<any|never>)} hideBioEntity
+ * @property {(function(*): PromiseLike)} setCenter
+ * @property {(function(*): Point)} getCenter
+ * @property {(function(*): Bounds)} getBounds
+ * @property {(function(*): void)} fitBounds
+ * @property {(function(*): *)} setZoom
+ * @property {(function(*): number)} getZoom
+ * @property {(function(*): PromiseLike)} openMap
+ */
+
+
 /**
  *
  * @param {CustomMap} customMap
@@ -118,7 +154,7 @@ function getElements(elementIdentifiers, customMap) {
  *
  * @param {Object} options
  * @param {CustomMap} options.map
- * @returns {{getBioEntityById: function(*=): Promise<any>, getAllBioEntities: function(): *, getReactionsWithElement: function(*=): *, getProjectId: function(): string, getName: function(): string, getVersion: function(): string, getDisease: getDisease, getOrganism: getOrganism, getModels: function(): *[]}}
+ * @returns {PluginProjectData}
  */
 function createProjectData(options) {
   var map = options.map;
@@ -137,6 +173,16 @@ function createProjectData(options) {
         }
       });
     },
+    getDataOverlays: function () {
+      var overlays = map.getProject().getDataOverlays();
+      var result = [];
+      for (var i = 0; i < overlays.length; i++) {
+        if (overlays[i].getInputDataAvailable()) {
+          result.push(overlays[i]);
+        }
+      }
+      return result;
+    },
     /**
      * Export part of the map that includes bioEntities into a known format.
      *
@@ -344,7 +390,7 @@ function createWrapperFunctionForDialogGuiUpdate(param) {
  * @param {CustomMap} options.map
  * @param {Plugin} options.plugin
  * @param {string} options.pluginId
- * @returns {{getVisibleDataOverlays: (function(): (Promise<DataOverlay[]>|*)), addListener: addListener, removeListener: removeListener, removeAllListeners: (function(): Array), getHighlightedBioEntities: (function(*=): Promise<Array | never>), showBioEntity: (function(*=): *), hideBioEntity: (function(*=): Promise<any | never>), setCenter: (function(*): PromiseLike), getCenter: (function(*): Point), getBounds: (function(*): Bounds), fitBounds: (function(*): void), setZoom: (function(*): *), getZoom: (function(*): number), openMap: (function(*): PromiseLike)}}
+ * @returns {PluginProjectMap}
  */
 function createProjectMap(options) {
   var map = options.map;
@@ -358,6 +404,22 @@ function createProjectMap(options) {
     getVisibleDataOverlays: function () {
       return map.getVisibleDataOverlays();
     },
+    /**
+     *
+     * @param {number|DataOverlay} param
+     * @return {PromiseLike|Promise}
+     */
+    showDataOverlay: function (param) {
+      return map.openDataOverlay(param);
+    },
+    /**
+     *
+     * @param {number|DataOverlay} param
+     * @return {PromiseLike|Promise}
+     */
+    hideDataOverlay: function (param) {
+      return map.hideDataOverlay(param);
+    },
     /**
      *
      * @param {Object} param
@@ -601,7 +663,7 @@ function createProjectMap(options) {
  * @param {CustomMap} options.map
  * @param {Plugin} options.plugin
  * @param {string} options.pluginId
- * @returns {{data: {getBioEntityById: (function(*=): Promise<any>), getAllBioEntities: (function(): *), getReactionsWithElement: (function(*=): *), getProjectId: (function(): string), getName: (function(): string), getVersion: (function(): string), getDisease: getDisease, getOrganism: getOrganism, getModels: (function(): *[])}, map: {getVisibleDataOverlays: (function(): (Promise<DataOverlay[]>|*)), addListener: addListener, removeListener: removeListener, removeAllListeners: (function(): Array), getHighlightedBioEntities: (function(*=): Promise<Array|never>), showBioEntity: (function(*=): *), hideBioEntity: (function(*=): Promise<any|never>), setCenter: (function(*): PromiseLike), getCenter: (function(*): Point), getBounds: (function(*): Bounds), fitBounds: (function(*): void), setZoom: (function(*): *), getZoom: (function(*): number), openMap: (function(*): PromiseLike)}}}
+ * @returns {{data: PluginProjectData, map: PluginProjectMap}}
  */
 function createProject(options) {
   return {
@@ -667,7 +729,7 @@ function createPluginData(options) {
  * @param {HTMLElement} options.element
  * @param {Configuration} options.configuration
  * @param {ServerConnector} options.serverConnector
- * @returns {{pluginId: (string|string), element: HTMLElement, project: {data: {getBioEntityById: (function(*=): Promise<any>), getAllBioEntities: (function(): *), getReactionsWithElement: (function(*=): *), getProjectId: (function(): string), getName: (function(): string), getVersion: (function(): string), getDisease: getDisease, getOrganism: getOrganism, getModels: (function(): *[])}, map: {getVisibleDataOverlays: (function(): (Promise<DataOverlay[]>|*)), addListener: addListener, removeListener: removeListener, removeAllListeners: (function(): Array), getHighlightedBioEntities: (function(*=): Promise<Array|never>), showBioEntity: (function(*=): *), hideBioEntity: (function(*=): Promise<any|never>), setCenter: (function(*): PromiseLike), getCenter: (function(*): Point), getBounds: (function(*): Bounds), fitBounds: (function(*): void), setZoom: (function(*): *), getZoom: (function(*): number), openMap: (function(*): PromiseLike)}}, configuration: {options: ConfigurationOption[], overlayTypes: string[], imageConverters: ImageConverter[], modelConverters: ModelConverter[], elementTypes: BioEntityType[], reactionTypes: BioEntityType[], miriamTypes: MiriamType[], mapTypes: MapType[], modificationStateTypes: ModificationStateType[], privilegeTypes: PrivilegeType[], annotators: Annotator[]}, pluginData: {setGlobalParam: (function(*=, *=): *), getGlobalParam: (function(*=): *), setUserParam: (function(*=, *=): *), getUserParam: (function(*=): *)}}}
+ * @returns {{pluginId: (string|string), element: HTMLElement, project: {data: PluginProjectData, map: PluginProjectMap}, configuration: {options: ConfigurationOption[], overlayTypes: string[], imageConverters: ImageConverter[], modelConverters: ModelConverter[], elementTypes: BioEntityType[], reactionTypes: BioEntityType[], miriamTypes: MiriamType[], mapTypes: MapType[], modificationStateTypes: ModificationStateType[], privilegeTypes: PrivilegeType[], annotators: Annotator[]}, pluginData: {setGlobalParam: (function(*=, *=): *), getGlobalParam: (function(*=): *), setUserParam: (function(*=, *=): *), getUserParam: (function(*=): *)}}}
  * @constructor
  */
 function MinervaPluginProxy(options) {
diff --git a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
index 116e8d8537e7e2190081c191c07ee9c6a2910d54..3fe725e9187c3368507b6eba9ca1422500601f2e 100644
--- a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
+++ b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
@@ -563,6 +563,140 @@ describe('MinervaPluginProxy', function () {
     });
   });
 
+  /**
+   *
+   * @param {Project} project
+   * @return {DataOverlay}
+   */
+  function getDataOverlayFromProject(project) {
+    for (var i = 0; i < project.getDataOverlays().length; i++) {
+      if (project.getDataOverlays()[i].getInputDataAvailable()) {
+        return project.getDataOverlays()[i];
+      }
+    }
+    return null;
+  }
+
+  describe('showDataOverlay', function () {
+    it('by id', function () {
+      var map, proxy, overlay;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        proxy = createProxy(map);
+        overlay = getDataOverlayFromProject(project);
+
+        return proxy.project.map.showDataOverlay(overlay.getId());
+      }).then(function () {
+        return proxy.project.map.getVisibleDataOverlays();
+      }).then(function (visibleDataOverlays) {
+        assert.equal(1, visibleDataOverlays.length);
+        return map.destroy();
+      });
+    });
+    it('by invalid id', function () {
+      var map;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        var proxy = createProxy(map);
+        return proxy.project.map.showDataOverlay(-1);
+      }).then(function () {
+        assert.notOk("Expected error");
+      }).catch(function () {
+      }).finally(function () {
+        return map.destroy();
+      });
+    });
+
+    it('by object', function () {
+      var map, proxy, overlay;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        proxy = createProxy(map);
+        overlay = getDataOverlayFromProject(project);
+
+        return proxy.project.map.showDataOverlay(overlay);
+      }).then(function () {
+        return proxy.project.map.getVisibleDataOverlays();
+      }).then(function (visibleDataOverlays) {
+        assert.equal(1, visibleDataOverlays.length);
+        return map.destroy();
+      });
+    });
+  });
+
+  describe('hideDataOverlay', function () {
+    it('by id', function () {
+      var map, proxy, overlay;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        proxy = createProxy(map);
+        overlay = getDataOverlayFromProject(project);
+
+        return proxy.project.map.showDataOverlay(overlay.getId());
+      }).then(function () {
+        return proxy.project.map.hideDataOverlay(overlay.getId());
+      }).then(function () {
+        return proxy.project.map.getVisibleDataOverlays();
+      }).then(function (visibleDataOverlays) {
+        assert.equal(0, visibleDataOverlays.length);
+        return map.destroy();
+      });
+    });
+    it('by invalid id', function () {
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        proxy = createProxy(map);
+        return proxy.project.map.hideDataOverlay(-1);
+      }).then(function () {
+        assert.notOk("Expected error");
+      }).catch(function () {
+      }).finally(function () {
+        return map.destroy();
+      });
+    });
+    it('by object', function () {
+      var map, proxy, overlay;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        proxy = createProxy(map);
+        overlay = getDataOverlayFromProject(project);
+
+        return proxy.project.map.showDataOverlay(overlay.getId());
+      }).then(function () {
+        return proxy.project.map.hideDataOverlay(overlay.getId());
+      }).then(function () {
+        return proxy.project.map.getVisibleDataOverlays();
+      }).then(function (visibleDataOverlays) {
+        assert.equal(0, visibleDataOverlays.length);
+        return map.destroy();
+      });
+    });
+  });
+
+  describe('getDataOverlays', function () {
+    it('default', function () {
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        proxy = createProxy(map);
+        var overlays = proxy.project.data.getDataOverlays();
+        assert.ok(overlays.length>0);
+        for (var i=0;i<overlays.length;i++) {
+          assert.ok(overlays[i].getInputDataAvailable());
+        }
+        return map.destroy();
+      });
+    });
+  });
+
   describe('addListener', function () {
     it('on show overlay', function () {
       var callbackOk = false;
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId,linkedSubmodel&id=329163,329178,329183&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId,linkedSubmodel&id=329163,329178,329183&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..4dfcd14edace7cfa32fd7961fd87e2efb7f82b96
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId,linkedSubmodel&id=329163,329178,329183&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"bounds":{"height":25.0,"width":70.0,"x":1214.2682370820667,"y":128.5000000000009},"id":329163,"linkedSubmodel":null,"modelId":15781},{"bounds":{"height":40.0,"width":80.0,"x":695.0,"y":239.0},"id":329178,"linkedSubmodel":null,"modelId":15781},{"bounds":{"height":40.0,"width":80.0,"x":656.0,"y":42.0},"id":329183,"linkedSubmodel":null,"modelId":15781}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/overlays/18076/models/all/bioEntities/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/overlays/18076/models/all/bioEntities/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..fb544de8369a9d817160af67f12c22af4153c288
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/overlays/18076/models/all/bioEntities/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"overlayContent":{"modelId":15781,"idObject":"329163","value":1.0,"color":null,"uniqueId":"329163"},"type":"ALIAS"},{"overlayContent":{"modelId":15781,"idObject":"329178","value":-1.0,"color":null,"uniqueId":"329178"},"type":"ALIAS"},{"overlayContent":{"modelId":15781,"idObject":"329183","value":-1.0,"color":null,"uniqueId":"329183"},"type":"ALIAS"}]
\ No newline at end of file