diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index abf9eedc134329defe54ed3a23a25a832617370c..0241373a2a9e94f7b5340386df18834ba286911b 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -654,7 +654,7 @@ AbstractCustomMap.prototype._showSelectedLayout = function (layoutId, index, len
               startX: startX,
               endX: endX,
               onClick: [function () {
-                return self._openInfoWindowForAlias(aliasData, surface.getGoogleMarker());
+                return self.getTopMap().getOverlayByName("search").searchByTarget(element);
               }, function () {
                 return self.getTopMap().callListeners("onBioEntityClick", element);
               }]
@@ -676,7 +676,7 @@ AbstractCustomMap.prototype._showSelectedLayout = function (layoutId, index, len
               reaction: reactionData,
               map: self,
               onClick: [function () {
-                return self._openInfoWindowForReaction(reactionData, surface.getGoogleMarker());
+                return self.getTopMap().getOverlayByName("search").searchByTarget(element);
               }, function () {
                 return self.getTopMap().callListeners("onBioEntityClick", element);
               }],
diff --git a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js
index 03001a285e37b1fae8f102c333a8c630e410dd73..3256bf80c97c09c0e00f8d29e764fb2948357b76 100644
--- a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js
+++ b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js
@@ -86,7 +86,7 @@ SearchDbOverlay.prototype._getFirstVisibleParentOrObject = function (identifiedE
         var parent = new IdentifiedElement({
           id: parentId,
           type: "ALIAS",
-          modelId: identifiedElement.getModelId(),
+          modelId: identifiedElement.getModelId()
         });
         return self._getFirstVisibleParentOrObject(parent, zoomLevel, coordinates);
       } else {
@@ -152,9 +152,8 @@ SearchDbOverlay.prototype.searchByCoordinates = function (params) {
         searchResult = [visibleObject];
         if (searchResult[0].getType() === "REACTION") {
           return model.getReactionById(searchResult[0].getId(), true).then(function (reaction) {
-            var i = 0;
             var reactionElements = reaction.getElements();
-            for (i = 0; i < reactionElements.length; i++) {
+            for (var i = 0; i < reactionElements.length; i++) {
               searchResult.push(new IdentifiedElement(reactionElements[i]));
             }
           });
@@ -167,7 +166,7 @@ SearchDbOverlay.prototype.searchByCoordinates = function (params) {
         return self.getMap().getDistance({
           modelId: modelId,
           coordinates: coordinates,
-          element: searchResult[0],
+          element: searchResult[0]
         });
       } else {
         return Number.POSITIVE_INFINITY;
@@ -182,7 +181,7 @@ SearchDbOverlay.prototype.searchByCoordinates = function (params) {
       return self.callListeners('onSearch', {
         fitBounds: params.fitBounds,
         identifiedElements: [self._elementsByQuery[query]],
-        type: AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES,
+        type: AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES
       });
     }).then(function () {
       return self._elementsByQuery[query];
@@ -212,6 +211,29 @@ SearchDbOverlay.prototype.searchBySingleQuery = function (originalQuery, perfect
   }
 };
 
+SearchDbOverlay.prototype.searchByTarget = function (element) {
+  var self = this;
+  var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_TARGET, element);
+
+  ServerConnector.getSessionData().setSearchQuery(query);
+
+  if (self._elementsByQuery[query] === undefined) {
+    self._elementsByQuery[query] = [element];
+  }
+  return self.getMap().fetchIdentifiedElements(element, true).then(function () {
+    self.setQueries([query]);
+    return self.callListeners('onSearch', {
+      fitBounds: false,
+      identifiedElements: [self._elementsByQuery[query]],
+      type: AbstractDbOverlay.QueryType.SEARCH_BY_TARGET
+    });
+  }).then(function () {
+    return Promise.resolve(self._elementsByQuery[query]);
+  });
+
+};
+
+
 SearchDbOverlay.prototype.getIdentifiedElements = function () {
   var self = this;
 
diff --git a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
index 3b2f590424bab6f119dce1589e977b279dea1b20..0821e7e5bbea02532c282ab7c10b308cdc0a5e07 100644
--- a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
@@ -1,6 +1,7 @@
 "use strict";
 
 var logger = require('../../logger');
+require("../../mocha-config");
 
 var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
 var SearchDbOverlay = require('../../../../main/js/map/overlay/SearchDbOverlay');
@@ -10,12 +11,12 @@ var ServerConnector = require('../../ServerConnector-mock');
 var assert = require('assert');
 var Promise = require('bluebird');
 
-describe('SearchDbOverlay', function() {
-  it("constructor 1", function() {
+describe('SearchDbOverlay', function () {
+  it("constructor 1", function () {
     var map = helper.createCustomMap();
     var oc = new SearchDbOverlay({
-      map : map,
-      name : 'search'
+      map: map,
+      name: 'search'
     });
     assert.ok(oc);
     assert.equal(oc.getName(), 'search');
@@ -23,44 +24,44 @@ describe('SearchDbOverlay', function() {
     assert.equal(logger.getWarnings.length, 0);
   });
 
-  it("searchByCoordinates with too far alias as result", function() {
-    return ServerConnector.getProject().then(function(project) {
+  it("searchByCoordinates with too far alias as result", function () {
+    return ServerConnector.getProject().then(function (project) {
       var map = helper.createCustomMap(project);
       var searchDb = helper.createSearchDbOverlay(map);
 
       var searchParams = {
-        modelId : map.getModel().getId(),
-        coordinates : new google.maps.Point(207.73, 479.18),
-        zoom : 4
+        modelId: map.getModel().getId(),
+        coordinates: new google.maps.Point(207.73, 479.18),
+        zoom: 4
       };
       return searchDb.searchByCoordinates(searchParams);
-    }).then(function(result) {
+    }).then(function (result) {
       assert.equal(result.length, 0);
     });
   });
 
-  describe("searchByQuery", function() {
-    it("with perfectMatch", function() {
-      return ServerConnector.getProject().then(function(project) {
+  describe("searchByQuery", function () {
+    it("with perfectMatch", function () {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         map.getModel().setId(15781);
         var searchDb = helper.createSearchDbOverlay(map);
 
         return searchDb.searchByQuery("s1", true);
-      }).then(function(result) {
+      }).then(function (result) {
         assert.equal(result.length, 1);
         assert.equal(result[0].length, 1);
       });
     });
-    it("check state when network problems", function() {
+    it("check state when network problems", function () {
       var problematicQuery = "sxx1";
       var searchDb;
-      return ServerConnector.getProject().then(function(project) {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         searchDb = helper.createSearchDbOverlay(map);
 
         return searchDb.searchByQuery(problematicQuery);
-      }).then(null, function() {
+      }).then(null, function () {
         var queries = searchDb.getQueries();
         var promises = [];
         for (var i = 0; i < queries.length; i++) {
@@ -71,119 +72,139 @@ describe('SearchDbOverlay', function() {
     });
   });
 
-  it("searchByEncodedQuery", function() {
-    return ServerConnector.getProject().then(function(project) {
-      var map = helper.createCustomMap(project);
-      var searchDb = helper.createSearchDbOverlay(map);
-      var point = new google.maps.Point(316.05, 253.61);
-      var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES;
-      var query = searchDb.encodeQuery(queryType, map.getModel().getId(), point, 2);
-      return searchDb.searchByEncodedQuery(query);
-    }).then(function(result) {
-      assert.ok(result.length > 0);
+  describe("searchByEncodedQuery", function () {
+    it("SEARCH_BY_COORDINATES", function () {
+      return ServerConnector.getProject().then(function (project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+        var point = new google.maps.Point(316.05, 253.61);
+        var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES;
+        var query = searchDb.encodeQuery(queryType, map.getModel().getId(), point, 2);
+        return searchDb.searchByEncodedQuery(query);
+      }).then(function (result) {
+        assert.ok(result.length > 0);
+      });
+    });
+
+    it("SEARCH_BY_TARGET", function () {
+      return ServerConnector.getProject().then(function (project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+        var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_TARGET;
+
+        var target = new IdentifiedElement({
+          type: "ALIAS",
+          id: 329170,
+          modelId: 15781
+        });
+        var query = searchDb.encodeQuery(queryType, target);
+        return searchDb.searchByEncodedQuery(query);
+      }).then(function (result) {
+        assert.equal(result.length, 1);
+      });
     });
   });
 
-  describe("searchByCoordinates", function() {
-    it("with too far reaction as result", function() {
-      return ServerConnector.getProject().then(function(project) {
+  describe("searchByCoordinates", function () {
+    it("with too far reaction as result", function () {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         var searchDb = helper.createSearchDbOverlay(map);
 
         var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(553.10, 479.18),
-          zoom : 4
+          modelId: map.getModel().getId(),
+          coordinates: new google.maps.Point(553.10, 479.18),
+          zoom: 4
         };
         return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
+      }).then(function (result) {
         assert.equal(result.length, 0);
       });
 
     });
 
-    it("on empty map", function() {
+    it("on empty map", function () {
       helper.setUrl("http://test/?id=empty");
-      return ServerConnector.getProject().then(function(project) {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         var searchDb = helper.createSearchDbOverlay(map);
 
         var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(553.10, 479.18),
-          zoom : 4
+          modelId: map.getModel().getId(),
+          coordinates: new google.maps.Point(553.10, 479.18),
+          zoom: 4
         };
         return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
+      }).then(function (result) {
         assert.equal(result.length, 0);
       });
 
     });
 
-    it("on hidden nested object", function() {
-      return ServerConnector.getProject().then(function(project) {
+    it("on hidden nested object", function () {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         var searchDb = helper.createSearchDbOverlay(map);
 
         var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(316.05, 253.61),
-          zoom : 2
+          modelId: map.getModel().getId(),
+          coordinates: new google.maps.Point(316.05, 253.61),
+          zoom: 2
         };
         return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
+      }).then(function (result) {
         // id of the parent
         assert.equal(result[0].getId(), 329159);
       });
 
     });
 
-    it("on nested object", function() {
-      return ServerConnector.getProject().then(function(project) {
+    it("on nested object", function () {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         var searchDb = helper.createSearchDbOverlay(map);
 
         var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(316.05, 253.61),
-          zoom : 4
+          modelId: map.getModel().getId(),
+          coordinates: new google.maps.Point(316.05, 253.61),
+          zoom: 4
         };
         return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
+      }).then(function (result) {
         assert.equal(result[0].getId(), 329159);
       });
     });
   });
 
-  describe("getDetailDataByIdentifiedElement", function() {
-    it("get by alias", function() {
-      return ServerConnector.getProject().then(function(project) {
+  describe("getDetailDataByIdentifiedElement", function () {
+    it("get by alias", function () {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         var searchDb = helper.createSearchDbOverlay(map);
 
         var searchParams = new IdentifiedElement({
-          type : "ALIAS",
-          id : 329177,
-          modelId : project.getModel().getId()
+          type: "ALIAS",
+          id: 329177,
+          modelId: project.getModel().getId()
         });
         return searchDb.getDetailDataByIdentifiedElement(searchParams);
-      }).then(function(result) {
+      }).then(function (result) {
         assert.equal(result.getId(), 329177);
       });
 
     });
-    it("get by point", function() {
-      return ServerConnector.getProject().then(function(project) {
+    it("get by point", function () {
+      return ServerConnector.getProject().then(function (project) {
         var map = helper.createCustomMap(project);
         var searchDb = helper.createSearchDbOverlay(map);
 
         var searchParams = new IdentifiedElement({
-          type : "POINT",
-          id : "2,3",
-          modelId : project.getModel().getId()
+          type: "POINT",
+          id: "2,3",
+          modelId: project.getModel().getId()
         });
         return searchDb.getDetailDataByIdentifiedElement(searchParams);
-      }).then(function(result) {
+      }).then(function (result) {
         assert.equal(result, null);
       });
     });