diff --git a/frontend-js/src/main/js/map/data/MapModel.js b/frontend-js/src/main/js/map/data/MapModel.js
index b6137d4703392ac7de95740252311d301a3b6d6c..b9927e770ffcd451ee51cacb8ef13f7fad35f6dd 100644
--- a/frontend-js/src/main/js/map/data/MapModel.js
+++ b/frontend-js/src/main/js/map/data/MapModel.js
@@ -194,18 +194,10 @@ MapModel.prototype.getCompleteReactionById = function(id) {
     return Promise.resolve(self._reactions[id]);
   } else {
     var result;
-    return ServerConnector.getReactions({
-      ids : [ id ]
-    }).then(
-        function(reactions) {
-          if (self._reactions[id] === undefined) {
-            self._reactions[id] = reactions[0];
-          } else {
-            self._reactions[id].update(reactions[0]);
-          }
+    return self.getReactionById(id).then(
+        function(result) {
           var ids = [];
           var i;
-          result = self._reactions[id];
           for (i = 0; i < result.getReactants().length; i++) {
             if (!(result.getReactants()[i] instanceof Alias)) {
               if (self._aliases[result.getReactants()[i]] === undefined
@@ -304,7 +296,8 @@ MapModel.prototype.getMissingElements = function(elements) {
   var reactionPromise = null;
   if (reactionIds.length > 0) {
     reactionPromise = ServerConnector.getReactions({
-      ids : reactionIds
+      ids : reactionIds,
+      complete : elements.complete
     });
   }
 
@@ -674,7 +667,7 @@ MapModel.prototype.getByIdentifiedElements = function(identifiedElements, comple
   }).then(function() {
     var promises = [];
     for (var i = 0; i < identifiedElements.length; i++) {
-      promises.push(self.getByIdentifiedElement(identifiedElements[i]));
+      promises.push(self.getByIdentifiedElement(identifiedElements[i], complete));
     }
     return Promise.all(promises);
   });
diff --git a/frontend-js/src/main/js/map/data/Reaction.js b/frontend-js/src/main/js/map/data/Reaction.js
index e0ace636e0d9ad37347505230b35420c185c7f1c..2bf32c40817b50f13eb7571db202e0b6341df132 100644
--- a/frontend-js/src/main/js/map/data/Reaction.js
+++ b/frontend-js/src/main/js/map/data/Reaction.js
@@ -1,5 +1,7 @@
 "use strict";
 
+var Alias = require('./Alias');
+
 /**
  * Class representing reaction data.
  * 
@@ -129,7 +131,17 @@ Reaction.prototype.update = function(javaObject) {
 };
 
 Reaction.prototype.isComplete = function() {
-  return this._complete;
+  var self = this;
+  var result = self._complete;
+  var reactants = self.getReactants();
+  if (reactants.length === 0) {
+    result = false;
+  } else {
+    if (!(self.getReactants()[0] instanceof Alias)) {
+      result = false;
+    }
+  }
+  return result;
 };
 
 Reaction.prototype.setIsComplete = function(complete) {
@@ -290,4 +302,4 @@ Reaction.prototype.setHierarchyVisibilityLevel = function(hierarchyVisibilityLev
   this._hierarchyVisibilityLevel = hierarchyVisibilityLevel;
 };
 
-module.exports = Reaction;
+module.exports = Reaction;
\ No newline at end of file
diff --git a/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js b/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js
index fe99bfc0a4737d0d037af2e4bce4de427bf0a910..da502fc881d6384feb96f32c9509c7de19a487eb 100644
--- a/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js
+++ b/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js
@@ -92,8 +92,8 @@ AbstractDbOverlay.prototype.searchByQuery = function(originalQuery, perfect, fit
   var encodedQueries = [];
   var promises = [];
   for (var i = 0; i < queries.length; i++) {
-    encodedQueries.push(self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, queries[i]));
-    promises.push(self.searchBySingleQuery(queries[i]));
+    encodedQueries.push(self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, queries[i], perfect));
+    promises.push(self.searchBySingleQuery(queries[i], perfect));
   }
   self.setQueries(encodedQueries);
 
@@ -170,7 +170,7 @@ AbstractDbOverlay.prototype.searchByEncodedQuery = function(originalQuery, fitBo
   } else if (query.type === AbstractDbOverlay.QueryType.SEARCH_BY_TARGET) {
     return this.searchNamesByTarget(query.target);
   } else if (query.type === AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES) {
-    query.coordinates = new google.maps.Point(query.coordinates.x,query.coordinates.y);
+    query.coordinates = new google.maps.Point(query.coordinates.x, query.coordinates.y);
     return this.searchByCoordinates(query);
   } else {
     throw new Error("Unknown type of query: " + query.type);
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 0b2c0291ec5a92e217ff22da5ca21f17b91d1654..127812170abd136f50a883d629ddd618dbe8dbcf 100644
--- a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
@@ -45,6 +45,19 @@ describe('SearchDbOverlay', function() {
     });
   });
 
+  it("searchByQuery 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) {
+      assert.equal(result.length, 1);
+      assert.equal(result[0].length, 1);
+    });
+  });
+
   it("searchByEncodedQuery", function() {
     return ServerConnector.getProject().then(
         function(project) {
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index a784b8635460b2ee4ef45da847210c66c76d4cfb..a12b0aa3d24bbff44247714da8a08e3c60a7f058 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -4,6 +4,7 @@ var Helper = require('./helper');
 
 require("./mocha-config.js");
 
+var Alias = require('../../main/js/map/data/Alias');
 var minerva = require('../../main/js/minerva');
 var Project = require('../../main/js/map/data/Project');
 var GuiConnectorMock = require('./GuiConnector-mock');
@@ -281,6 +282,27 @@ describe('minerva global', function() {
     });
   });
 
+  it("getBioEntityById for reaction", function() {
+    var options = {
+      projectId : "sample",
+      element : testDiv
+    };
+    var globalResult;
+    return minerva.create(options).then(function(result) {
+      globalResult = result;
+      return result.getBioEntityById({
+        id : 153508,
+        modelId : 15781,
+        type : "REACTION"
+      });
+    }).then(function(result) {
+      assert.ok(result);
+      assert.ok(result.getReactants()[0] instanceof Alias);
+    }).then(function() {
+      globalResult.destroy();
+    });
+  });
+
   it("showElement", function() {
     var options = {
       projectId : "sample",
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities.search/perfectMatch=true&query=s1&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities.search/perfectMatch=true&query=s1&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..410f869e59ea4b0f4729f2cc68d0713359041200
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities.search/perfectMatch=true&query=s1&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"modelId":15781,"id":329173,"type":"ALIAS"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329168&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329168&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..4f5e996668735f845d0cd7970acda13173095c03
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329168&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"symbol":null,"formerSymbols":[],"references":[],"modelId":15781,"synonyms":[],"description":"","fullName":null,"complexId":null,"type":"Antisense RNA","abbreviation":null,"compartmentId":null,"name":"s6","bounds":{"x":101.0,"width":90.0,"y":129.5,"height":25.0},"formula":null,"id":329167,"hierarchyVisibilityLevel":0},{"symbol":null,"formerSymbols":[],"references":[],"modelId":15781,"synonyms":[],"description":"","fullName":null,"complexId":null,"type":"RNA","abbreviation":null,"compartmentId":null,"name":"s5","bounds":{"x":0.0,"width":90.0,"y":118.5,"height":25.0},"formula":null,"id":329168,"hierarchyVisibilityLevel":0}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329169&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329169&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..1442772f362a3aa390a671d73f060b12406e1741
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329169&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"symbol":null,"formerSymbols":[],"references":[],"modelId":15781,"synonyms":[],"description":"","fullName":null,"complexId":null,"type":"Antisense RNA","abbreviation":null,"compartmentId":null,"name":"s6","bounds":{"x":101.0,"width":90.0,"y":129.5,"height":25.0},"formula":null,"id":329167,"hierarchyVisibilityLevel":0},{"symbol":null,"formerSymbols":[],"references":[],"modelId":15781,"synonyms":[],"description":"","fullName":null,"complexId":null,"type":"Unknown","abbreviation":null,"compartmentId":null,"name":"s11","bounds":{"x":105.0,"width":70.0,"y":203.5,"height":25.0},"formula":null,"id":329169,"hierarchyVisibilityLevel":0}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329172&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329172&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..3ae84c4067e2680a7b614ce23091816d40352469
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329167,329172&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"symbol":null,"formerSymbols":[],"references":[],"modelId":15781,"synonyms":[],"description":"","fullName":null,"complexId":null,"type":"Antisense RNA","abbreviation":null,"compartmentId":null,"name":"s6","bounds":{"x":101.0,"width":90.0,"y":129.5,"height":25.0},"formula":null,"id":329167,"hierarchyVisibilityLevel":0},{"symbol":null,"formerSymbols":[],"references":[],"modelId":15781,"synonyms":[],"description":"","fullName":null,"complexId":null,"type":"Phenotype","abbreviation":null,"compartmentId":null,"name":"s7","bounds":{"x":213.0,"width":80.0,"y":128.0,"height":30.0},"formula":null,"id":329172,"hierarchyVisibilityLevel":0}]
\ No newline at end of file