diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/BioEntitiesRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/BioEntitiesRestImpl.java
index a82e66e114699e9ec8a1ca8a64c3323036b37bf2..599e6256c9b24ea6b8d26662db1a7b60bdcf5043 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/BioEntitiesRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/BioEntitiesRestImpl.java
@@ -10,18 +10,22 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
 import lcsb.mapviewer.api.BaseRestImpl;
+import lcsb.mapviewer.model.map.AnnotatedObject;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.UserAccessException;
 import lcsb.mapviewer.services.interfaces.IModelService;
 import lcsb.mapviewer.services.interfaces.ISearchService;
 import lcsb.mapviewer.services.interfaces.IUserService;
-import lcsb.mapviewer.services.view.AnnotationViewFactory;
 
 @Transactional(value = "txManager")
 public class BioEntitiesRestImpl extends BaseRestImpl {
 
-	Logger								 logger	= Logger.getLogger(BioEntitiesRestImpl.class);
+	/**
+	 * Default class logger.
+	 */
+	@SuppressWarnings("unused")
+	private Logger				 logger	= Logger.getLogger(BioEntitiesRestImpl.class);
 
 	@Autowired
 	private IUserService	 userService;
@@ -32,9 +36,6 @@ public class BioEntitiesRestImpl extends BaseRestImpl {
 	@Autowired
 	private ISearchService searchService;
 
-	@Autowired
-	AnnotationViewFactory	 annotationViewFactory;
-
 	/**
 	 * @return the userService
 	 * @see #userService
@@ -60,7 +61,7 @@ public class BioEntitiesRestImpl extends BaseRestImpl {
 
 		Model submodel = model.getSubmodelById(modelId);
 
-		List<Object> elements = searchService.getClosestElements(submodel, coordinates, count, perfectMatch.equalsIgnoreCase("true"));
+		List<AnnotatedObject> elements = searchService.getClosestElements(submodel, coordinates, count, perfectMatch.equalsIgnoreCase("true"));
 		for (Object object : elements) {
 			Map<String, Object> result = createMinifiedSearchResult(object);
 			resultMap.add(result);
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java b/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java
index 947a3d32991a6e0c51c83535987c72923b18b4da..c99199d01ec1d90b8a2dab61a7a043c89c63cc04 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java
@@ -527,8 +527,8 @@ public class SearchService implements ISearchService {
 	}
 
 	@Override
-	public List<Object> getClosestElements(Model model, Point2D point, int numberOfElements, boolean perfectHit) {
-		List<Object> result = new ArrayList<>();
+	public List<AnnotatedObject> getClosestElements(Model model, Point2D point, int numberOfElements, boolean perfectHit) {
+		List<AnnotatedObject> result = new ArrayList<>();
 
 		// probably this could be improved algorithmitically, right now all objects
 		// are sorted by distance, and numberOfElements closest are chosen as a list
@@ -566,12 +566,18 @@ public class SearchService implements ISearchService {
 		/**
 		 * Reference to the object.
 		 */
-		private Object reference;
+		private AnnotatedObject reference;
+
 		/**
 		 * Distance between the object and some point.
 		 */
 		private double distance;
 
+		/**
+		 * Size of the object.
+		 */
+		private double size;
+
 		/**
 		 * Constructor for reaction objects.
 		 * 
@@ -583,6 +589,7 @@ public class SearchService implements ISearchService {
 		DistanceToObject(Reaction reaction, Point2D point) {
 			reference = reaction;
 			distance = reaction.getDistanceFromPoint(point);
+			size = 0;
 		}
 
 		/**
@@ -596,6 +603,7 @@ public class SearchService implements ISearchService {
 		DistanceToObject(Element alias, Point2D point) {
 			reference = alias;
 			distance = alias.getDistanceFromPoint(point);
+			size = alias.getSize();
 
 		}
 
@@ -606,7 +614,13 @@ public class SearchService implements ISearchService {
 			} else if (arg0.getDistance() > getDistance()) {
 				return -1;
 			} else {
-				return 0;
+				if (arg0.getSize() < getSize()) {
+					return 1;
+				} else if (arg0.getSize() > getSize()) {
+					return -1;
+				} else {
+					return 0;
+				}
 			}
 		}
 
@@ -614,7 +628,7 @@ public class SearchService implements ISearchService {
 		 * @return the reference
 		 * @see #reference
 		 */
-		public Object getReference() {
+		public AnnotatedObject getReference() {
 			return reference;
 		}
 
@@ -626,6 +640,13 @@ public class SearchService implements ISearchService {
 			return distance;
 		}
 
+		/**
+		 * @return the size
+		 * @see #size
+		 */
+		public double getSize() {
+			return size;
+		}
 	}
 
 	/**
diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/ISearchService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/ISearchService.java
index c7f51a65f43b178ba00c4eed1258cdaf3938bc4f..ba82510d70903606ce9591c699d1ca28d2ccb9a4 100644
--- a/service/src/main/java/lcsb/mapviewer/services/interfaces/ISearchService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/ISearchService.java
@@ -5,6 +5,7 @@ import java.util.List;
 
 import org.apache.log4j.Logger;
 
+import lcsb.mapviewer.model.map.AnnotatedObject;
 import lcsb.mapviewer.model.map.layout.Layout;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelSubmodelConnection;
@@ -295,7 +296,7 @@ public interface ISearchService {
 	 *          how many closest elements should be returned
 	 * @return list of the closest elements
 	 */
-	List<Object> getClosestElements(Model model, Point2D point, int numberOfElements, boolean perfectHit);
+	List<AnnotatedObject> getClosestElements(Model model, Point2D point, int numberOfElements, boolean perfectHit);
 
 	/**
 	 * Returns list of autocomplete strings for the partial query.
diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java
index 571ef6105b32936e8d38fdcabce39d4d96cfe470..64ff5dc2de7f86973ef15604b34035dd5a409e9c 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java
@@ -18,6 +18,7 @@ import org.junit.Test;
 
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.model.Project;
+import lcsb.mapviewer.model.map.AnnotatedObject;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.MiriamRelationType;
 import lcsb.mapviewer.model.map.MiriamType;
@@ -45,7 +46,7 @@ import lcsb.mapviewer.services.search.data.SearchElementResult;
 import lcsb.mapviewer.services.utils.SearchIndexer;
 
 public class SearchServiceTest extends ServiceTestFunctions {
-	static Logger					logger										 = Logger.getLogger(SearchService.class);
+	static Logger					logger										 = Logger.getLogger(SearchServiceTest.class);
 
 	private Model					model											 = null;
 	SearchIndexer					indexer										 = new SearchIndexer();
@@ -231,7 +232,7 @@ public class SearchServiceTest extends ServiceTestFunctions {
 	public void testSearchClosest() throws Exception {
 		try {
 			model = getModelForFile("testFiles/graph_path_example3.xml", true);
-			List<Object> elements = searchService.getClosestElements(model, new Point2D.Double(0, 0), 5, false);
+			List<AnnotatedObject> elements = searchService.getClosestElements(model, new Point2D.Double(0, 0), 5, false);
 			assertNotNull(elements);
 			assertEquals(5, elements.size());
 			assertTrue(elements.get(0) instanceof Species);
@@ -256,11 +257,50 @@ public class SearchServiceTest extends ServiceTestFunctions {
 		}
 	}
 
+	@Test
+	public void testSearchClosest2() throws Exception {
+		try {
+			model = new ModelFullIndexed(null);
+			GenericProtein protein1 = new GenericProtein("s1");
+			protein1.setWidth(20);
+			protein1.setHeight(20);
+			protein1.setX(5);
+			protein1.setY(5);
+			model.addElement(protein1);
+			GenericProtein protein2 = new GenericProtein("s2");
+			protein2.setWidth(10);
+			protein2.setHeight(10);
+			protein2.setX(5);
+			protein2.setY(5);
+			model.addElement(protein2);
+			GenericProtein protein3 = new GenericProtein("s3");
+			protein3.setWidth(30);
+			protein3.setHeight(30);
+			protein3.setX(0);
+			protein3.setY(0);
+			model.addElement(protein3);
+
+			List<AnnotatedObject> elements = searchService.getClosestElements(model, new Point2D.Double(10, 10), 5, false);
+			assertNotNull(elements);
+			assertEquals(3, elements.size());
+			AnnotatedObject sAlias = elements.get(0);
+			assertEquals("s2", sAlias.getName());
+			AnnotatedObject reaction = elements.get(1);
+			assertEquals("s1", reaction.getName());
+			sAlias = elements.get(2);
+			assertEquals("s3", sAlias.getName());
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
 	@Test
 	public void testSearchClosestWithEmptyModel() throws Exception {
 		try {
 			model = new ModelFullIndexed(null);
-			List<Object> elements = searchService.getClosestElements(model, new Point2D.Double(0, 0), 5, false);
+			List<AnnotatedObject> elements = searchService.getClosestElements(model, new Point2D.Double(0, 0), 5, false);
 			assertNotNull(elements);
 			assertEquals(0, elements.size());