diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
index ca0c72a1213ceb9a5309643f95ef843e61b1a0b2..8ee4e0cefaf44bb525d71dd1923407e8230debfe 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
@@ -1,6 +1,7 @@
 package lcsb.mapviewer.api.projects;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
@@ -37,6 +38,13 @@ public class ProjectController extends BaseController {
 		return projectController.getMetaData(projectId, token);
 	}
 
+	@RequestMapping(value = "/projects/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public List<ProjectMetaData> getProjects(//
+			@CookieValue(value = Configuration.AUTH_TOKEN) String token //
+	) throws SecurityException, ObjectNotFoundException {
+		return projectController.getProjects(token);
+	}
+
 	@RequestMapping(value = "/projects/{projectId}/statistics", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
 	public Object getStatistics(//
 			@PathVariable(value = "projectId") String projectId, //
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
index 529e8792c63d95a2a1c58797e75bc9da6c4cc8a9..da81928faa1673a509ebedaa2607403d142f9158 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
@@ -94,17 +94,11 @@ public class ProjectRestImpl extends BaseRestImpl {
 		if (project == null) {
 			throw new ObjectNotFoundException("Project with given id doesn't exist");
 		}
-		ProjectMetaData result = createData(project, authenticationToken);
-		if (project.getOrganism() != null) {
-			result.setOrganism(createAnnotation(project.getOrganism()));
-		}
-		if (project.getDisease() != null) {
-			result.setDisease(createAnnotation(project.getDisease()));
-		}
+		ProjectMetaData result = createData(project);
 		return result;
 	}
 
-	private ProjectMetaData createData(Project project, AuthenticationToken token) {
+	private ProjectMetaData createData(Project project) {
 		ProjectMetaData result = new ProjectMetaData();
 
 		result.setName(project.getName());
@@ -130,6 +124,13 @@ public class ProjectRestImpl extends BaseRestImpl {
 			result.setTopOverviewImage(factory.create(project.getOverviewImages().get(0)));
 		}
 
+		if (project.getOrganism() != null) {
+			result.setOrganism(createAnnotation(project.getOrganism()));
+		}
+		if (project.getDisease() != null) {
+			result.setDisease(createAnnotation(project.getDisease()));
+		}
+
 		return result;
 	}
 
@@ -383,4 +384,14 @@ public class ProjectRestImpl extends BaseRestImpl {
 		return result;
 	}
 
+	public List<ProjectMetaData> getProjects(String token) throws SecurityException {
+		AuthenticationToken authenticationToken = getUserService().getToken(token);
+		List<Project> projects = getProjectService().getAllProjects(authenticationToken);
+		List<ProjectMetaData> result = new ArrayList<>();
+		for (Project project : projects) {
+			result.add(createData(project));
+		}
+		return result;
+	}
+
 }
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java
index ec6bb96897cb4a0c4b6f3a8223ea59bc6be51813..4d008c74dc9ecfaaadda2c0750045acc84547236 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java
@@ -28,8 +28,6 @@ import lcsb.mapviewer.persist.dao.map.LayoutDao;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.interfaces.ILayoutService;
 import lcsb.mapviewer.services.interfaces.ILayoutService.CreateLayoutParams;
-import lcsb.mapviewer.services.interfaces.IModelService;
-import lcsb.mapviewer.services.interfaces.IUserService;
 import lcsb.mapviewer.services.search.data.ElementIdentifier.ElementIdentifierType;
 import lcsb.mapviewer.services.search.layout.FullLayoutAliasView;
 import lcsb.mapviewer.services.search.layout.FullLayoutReactionView;
@@ -45,8 +43,7 @@ public class OverlayRestImpl extends BaseRestImpl {
 	/**
 	 * Default class logger.
 	 */
-	private Logger								 logger	= Logger.getLogger(OverlayRestImpl.class);
-
+	private Logger				 logger	= Logger.getLogger(OverlayRestImpl.class);
 
 	@Autowired
 	private ILayoutService layoutService;
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java
index 8340abe87ecc4061b61e2ab7a6dcd37e9a994217..75b04a6d071ab987dc60926aabe7429ff1e5f819 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java
@@ -5,7 +5,6 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 
 import java.util.List;
-import java.util.Map;
 
 import org.junit.After;
 import org.junit.AfterClass;
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
index ee67364eb830c52470c347b423fffacb13bf2eed..604b1f3da3158fa9ae3749ff2d88893e06a91c17 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -284,15 +284,24 @@ public class ProjectService implements IProjectService {
 	}
 
 	@Override
-	public List<Project> getAllProjects() {
-		List<Project> result = projectDao.getAll();
+	public List<Project> getAllProjects(AuthenticationToken token) {
+		List<Project> projects = projectDao.getAll();
+		if (userService.userHasPrivilege(token, PrivilegeType.ADD_MAP)) {
+			return projects;
+		}
+		List<Project> result = new ArrayList<>();
+		for (Project project : projects) {
+			if (userService.userHasPrivilege(token, PrivilegeType.VIEW_PROJECT, result)) {
+				result.add(project);
+			}
+		}
 		return result;
 	}
 
 	@Override
-	public List<ProjectView> getAllProjectViews() {
-		List<ProjectView> result = new ArrayList<ProjectView>();
-		List<Project> projects = getAllProjects();
+	public List<ProjectView> getAllProjectViews(AuthenticationToken token) {
+		List<ProjectView> result = new ArrayList<>();
+		List<Project> projects = getAllProjects(token);
 		for (Project project : projects) {
 			result.add(projectViewFactory.create(project));
 		}
@@ -661,8 +670,6 @@ public class ProjectService implements IProjectService {
 	 *          params used to create model
 	 * @param dbProject
 	 *          project where the model should be placed
-	 * @return model loaded from the input and updated by PostLoadModification
-	 *         (from CreateProjectParams)
 	 * @throws InvalidInputDataExecption
 	 *           thrown when there is a problem with input file
 	 */
diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java
index 5175441f3ffc840f43b4f81e3e35b02430dea2b9..36035412c901ef307dde799f32f2a241d1641237 100644
--- a/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java
@@ -44,14 +44,14 @@ public interface IProjectService {
 	 * 
 	 * @return list of all projects.
 	 */
-	List<Project> getAllProjects();
+	List<Project> getAllProjects(AuthenticationToken token);
 
 	/**
 	 * Returns a list of Project views for all projects.
 	 * 
 	 * @return list of Project views for all projects
 	 */
-	List<ProjectView> getAllProjectViews();
+	List<ProjectView> getAllProjectViews(AuthenticationToken token);
 
 	/**
 	 * Updates project.
@@ -184,4 +184,5 @@ public interface IProjectService {
 	 *         parameter
 	 */
 	byte[] getInputDataForProject(ProjectView projectView);
+
 }
diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
index 101892cd487cc00c34ea5f1c8678aeaa2d734e82..f2d08ea6cc581e3b68b5b7eb0f3d0157503f3671 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
@@ -85,14 +85,14 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 	@Test
 	public void test() {
 		try {
-			List<Project> projects = projectService.getAllProjects();
+			List<Project> projects = projectService.getAllProjects(adminToken);
 
 			Project project = new Project();
 			project.setProjectId(projectId);
 			projectDao.add(project);
 			projectDao.evict(project);
 
-			List<Project> projects2 = projectService.getAllProjects();
+			List<Project> projects2 = projectService.getAllProjects(adminToken);
 
 			assertEquals(projects.size() + 1, projects2.size());
 
@@ -124,7 +124,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 			project.setProjectId(project_id);
 			projectDao.add(project);
 
-			List<ProjectView> projects2 = projectService.getAllProjectViews();
+			List<ProjectView> projects2 = projectService.getAllProjectViews(adminToken);
 			ProjectView row = null;
 			for (ProjectView projectRow : projects2) {
 				if (projectRow.getIdObject() == project.getId()) {
@@ -174,7 +174,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 			project.setProjectId(projectId);
 			projectDao.add(project);
 
-			List<ProjectView> projects2 = projectService.getAllProjectViews();
+			List<ProjectView> projects2 = projectService.getAllProjectViews(adminToken);
 			ProjectView row = null;
 			for (ProjectView projectRow : projects2) {
 				if (projectRow.getIdObject() == project.getId()) {
@@ -315,9 +315,9 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 			// and now check layouts (check if every submodel have them, and point
 			// into different directory)
 
-			//there are 2 levels
+			// there are 2 levels
 			int semanticOverlays = 2;
-			//-1 is due to pathways and compartments that is not there
+			// -1 is due to pathways and compartments that is not there
 			int overlays = BuildInLayout.values().length + semanticOverlays - 1;
 			assertEquals(overlays, model.getLayouts().size());
 			assertEquals(overlays, s1Model.getLayouts().size());
@@ -719,7 +719,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 			assertEquals("main", model.getName());
 			assertEquals(ProjectStatus.DONE, project.getStatus());
 			assertEquals("Cannot find overview images the model", 2, project.getOverviewImages().size());
-			assertEquals("Number of layouts doesn't match", BuildInLayout.values().length-1, model.getLayouts().size());
+			assertEquals("Number of layouts doesn't match", BuildInLayout.values().length - 1, model.getLayouts().size());
 			assertEquals(BuildInLayout.NESTED.getTitle(), model.getLayouts().get(0).getTitle());
 			assertEquals(BuildInLayout.NORMAL.getTitle(), model.getLayouts().get(1).getTitle());
 			projectService.removeProject(project, null, false, adminToken);
@@ -763,7 +763,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 			assertEquals("main", model.getName());
 			assertEquals(ProjectStatus.DONE, project.getStatus());
 			assertEquals("Cannot find overview images the model", 2, project.getOverviewImages().size());
-			assertEquals("Number of layouts doesn't match", BuildInLayout.values().length-1, model.getLayouts().size());
+			assertEquals("Number of layouts doesn't match", BuildInLayout.values().length - 1, model.getLayouts().size());
 			assertEquals(BuildInLayout.NESTED.getTitle(), model.getLayouts().get(1).getTitle());
 			assertEquals(BuildInLayout.NORMAL.getTitle(), model.getLayouts().get(0).getTitle());
 			projectService.removeProject(project, null, false, adminToken);
@@ -814,7 +814,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 			assertNotNull(model);
 			assertEquals("main", model.getName());
 			assertEquals(ProjectStatus.DONE, project.getStatus());
-			assertEquals("Number of layouts doesn't match", BuildInLayout.values().length-1, model.getLayouts().size());
+			assertEquals("Number of layouts doesn't match", BuildInLayout.values().length - 1, model.getLayouts().size());
 			projectService.removeProject(project, null, false, adminToken);
 		} catch (Exception e) {
 			e.printStackTrace();
diff --git a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
index 0e08e4a105f21283040a4609fe99c885458f1cfb..d023d64bf743dad4d9ecf3b64e5d6cfd7d7d7a3b 100644
--- a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
+++ b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
@@ -587,7 +587,7 @@ public class ProjectBean extends AbstractManagedBean implements Serializable {
 			projects = new ArrayList<>();
 		}
 		projects.clear();
-		List<ProjectView> localProjectList = projectService.getAllProjectViews();
+		List<ProjectView> localProjectList = projectService.getAllProjectViews(userBean.getAuthenticationToken());
 		for (ProjectView projectRow : localProjectList) {
 			projects.add(projectRow);
 		}
diff --git a/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java b/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java
index bbdc0f5f8702c77af9f9ce6c16849ff958b606bf..27d28c8d53f74fe1064a7edf21ae6852d5fbb540 100644
--- a/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java
+++ b/web/src/main/java/lcsb/mapviewer/bean/utils/StartupBean.java
@@ -15,6 +15,7 @@ import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.ProjectStatus;
 import lcsb.mapviewer.model.map.layout.ReferenceGenome;
 import lcsb.mapviewer.model.user.ConfigurationElementType;
+import lcsb.mapviewer.persist.dao.ProjectDao;
 import lcsb.mapviewer.services.interfaces.IConfigurationService;
 import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.services.interfaces.IReferenceGenomeService;
@@ -33,15 +34,14 @@ public class StartupBean {
 	/**
 	 * Default class logger.
 	 */
-	private final transient Logger					logger = Logger.getLogger(StartupBean.class);
+	private final transient Logger						logger = Logger.getLogger(StartupBean.class);
 
 	/**
-	 * Service used to access information about projects.
+	 * Dao used to access information about projects.
 	 * 
-	 * @see IProjectService
 	 */
-	@ManagedProperty(value = "#{ProjectService}")
-	private transient IProjectService				projectService;
+	@ManagedProperty(value = "#{ProjectDao}")
+	private transient ProjectDao							projectDao;
 
 	/**
 	 * Service used to access configuration params from db.
@@ -49,7 +49,7 @@ public class StartupBean {
 	 * @see IProjectService
 	 */
 	@ManagedProperty(value = "#{ConfigurationService}")
-	private transient IConfigurationService	configurationService;
+	private transient IConfigurationService		configurationService;
 
 	/**
 	 * Service used to access information about reference genomes.
@@ -98,7 +98,7 @@ public class StartupBean {
 	 * when application was shutdown.
 	 */
 	private void setInterruptedProjectsStatuses() {
-		for (Project project : projectService.getAllProjects()) {
+		for (Project project : projectDao.getAll()) {
 			if (!ProjectStatus.DONE.equals(project.getStatus()) && !ProjectStatus.FAIL.equals(project.getStatus())) {
 				String errors = project.getErrors();
 				if (errors == null || errors.trim().isEmpty()) {
@@ -109,29 +109,12 @@ public class StartupBean {
 				errors += "Project uploading was interrupted by application restart (at the stage: " + project.getStatus() + ").";
 				project.setStatus(ProjectStatus.FAIL);
 				project.setErrors(errors);
-				projectService.updateProject(project);
+				projectDao.update(project);
 				logger.info("Status of project: " + project.getProjectId() + " changed to fail. Errors: " + errors);
 			}
 		}
 	}
 
-	/**
-	 * @return the projectService
-	 * @see #projectService
-	 */
-	public IProjectService getProjectService() {
-		return projectService;
-	}
-
-	/**
-	 * @param projectService
-	 *          the projectService to set
-	 * @see #projectService
-	 */
-	public void setProjectService(IProjectService projectService) {
-		this.projectService = projectService;
-	}
-
 	/**
 	 * @return the configurationService
 	 * @see #configurationService
@@ -165,4 +148,20 @@ public class StartupBean {
 	public void setReferenceGenomeService(IReferenceGenomeService referenceGenomeService) {
 		this.referenceGenomeService = referenceGenomeService;
 	}
+
+	/**
+	 * @return the projectDao
+	 * @see #projectDao
+	 */
+	public ProjectDao getProjectDao() {
+		return projectDao;
+	}
+
+	/**
+	 * @param projectDao the projectDao to set
+	 * @see #projectDao
+	 */
+	public void setProjectDao(ProjectDao projectDao) {
+		this.projectDao = projectDao;
+	}
 }