diff --git a/model/src/main/java/lcsb/mapviewer/model/Project.java b/model/src/main/java/lcsb/mapviewer/model/Project.java
index c14db03b826653f26ad8344b009844d6384421a1..16e701ed09eda6e3ca1e219ea2f34849c0dd4544 100644
--- a/model/src/main/java/lcsb/mapviewer/model/Project.java
+++ b/model/src/main/java/lcsb/mapviewer/model/Project.java
@@ -6,13 +6,13 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.OrderBy;
@@ -28,6 +28,7 @@ import org.hibernate.annotations.LazyCollectionOption;
 
 import lcsb.mapviewer.common.EventStorageLoggerAppender;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.OverviewImage;
 import lcsb.mapviewer.model.map.OverviewImageLink;
@@ -123,13 +124,10 @@ public class Project implements Serializable {
 	/**
 	 * Here we store input file.
 	 */
-	@Basic(fetch = FetchType.LAZY)
-	private byte[]							inputData;
-
-	/**
-	 * Here we store input file.
-	 */
-	private String							inputFileName;
+	@Cascade({ CascadeType.SAVE_UPDATE })
+	@OneToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "file_entry_iddb")
+	private UploadedFileEntry		inputData;
 
 	/**
 	 * Organism associated with the project.
@@ -354,40 +352,6 @@ public class Project implements Serializable {
 		this.disease = disease;
 	}
 
-	/**
-	 * @return the inputData
-	 * @see #inputData
-	 */
-	public byte[] getInputData() {
-		return inputData;
-	}
-
-	/**
-	 * @param inputData
-	 *          the inputData to set
-	 * @see #inputData
-	 */
-	public void setInputData(byte[] inputData) {
-		this.inputData = inputData;
-	}
-
-	/**
-	 * @return the inputFileName
-	 * @see #inputFileName
-	 */
-	public String getInputFileName() {
-		return inputFileName;
-	}
-
-	/**
-	 * @param inputFileName
-	 *          the inputFileName to set
-	 * @see #inputFileName
-	 */
-	public void setInputFileName(String inputFileName) {
-		this.inputFileName = inputFileName;
-	}
-
 	/**
 	 * @param organism
 	 *          the organism to set
@@ -580,4 +544,21 @@ public class Project implements Serializable {
 
 	}
 
+	/**
+	 * @return the inputData
+	 * @see #inputData
+	 */
+	public UploadedFileEntry getInputData() {
+		return inputData;
+	}
+
+	/**
+	 * @param inputData
+	 *          the inputData to set
+	 * @see #inputData
+	 */
+	public void setInputData(UploadedFileEntry inputData) {
+		this.inputData = inputData;
+	}
+
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java b/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java
index 7684abc5e90ca6821b03605c4e535f8025ed748f..052f3d91aaa7a62c31dca52199670ebdcc72dc60 100644
--- a/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java
@@ -19,6 +19,7 @@ import org.junit.Test;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.EventStorageLoggerAppender;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelData;
@@ -124,12 +125,9 @@ public class ProjectTest {
 			assertEquals(disease, project.getDisease());
 
 			String inputFileName = "x";
-			byte[] inputData = new byte[] { 1, 2 };
-			project.setInputData(inputData);
-			assertEquals(inputData, project.getInputData());
-
-			project.setInputFileName(inputFileName);
-			assertEquals(inputFileName, project.getInputFileName());
+			UploadedFileEntry entry = new UploadedFileEntry() ;
+			project.setInputData(entry );
+			assertEquals(entry , project.getInputData());
 
 			project.setOrganism(organism);
 			assertEquals(organism, project.getOrganism());
diff --git a/persist/src/db/11.1.0/fix_db_20170809.sql b/persist/src/db/11.1.0/fix_db_20170809.sql
index 0bf79ae0d149bb3691285c764932ec4a14e4bc0e..a4edb9dfd92957125baba545ed870269d5342945 100644
--- a/persist/src/db/11.1.0/fix_db_20170809.sql
+++ b/persist/src/db/11.1.0/fix_db_20170809.sql
@@ -3,3 +3,22 @@ alter table overview_image_table add column project_iddb integer;
 update overview_image_table set project_iddb = model_table.project_iddb from model_table where model_table.iddb = overview_image_table.model_iddb;
 delete from overview_image_table where project_iddb is null;
 alter table overview_image_table drop column model_iddb;
+
+-- project file moved to downloaded files
+alter table project_table add column file_entry_iddb integer;
+DO $$ 
+DECLARE 
+	project 	RECORD;
+	last_id 	INT;
+BEGIN
+  FOR project IN SELECT * FROM project_table where inputData is not null LOOP
+	insert into file_entry (filecontent, file_type_db, originalfilename) values
+	  (project.inputdata, 'UPLOADED_FILE_ENTRY',project.inputfilename) returning iddb into last_id;
+	
+  	update project_table set file_entry_iddb = last_id where iddb = project.iddb ;
+  	RAISE NOTICE 'Calling cs_create_job(%, %)', project.iddb, last_id ;
+  END LOOP;
+END $$;
+
+alter table project_table drop column inputdata;
+alter table project_table drop column inputfilename;
diff --git a/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java b/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java
index 61cbb42233bc4eb1f2be6218dd5b5cfd0ded9722..69b7cad5e967cfeae432b4a3f36bd79e3b805fd0 100644
--- a/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java
+++ b/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java
@@ -289,4 +289,23 @@ public class ProjectDaoTest extends PersistTestFunctions {
 		}
 	}
 
+	@Test
+	public void testGetAll() throws Exception {
+		try {
+
+			long startTime = System.currentTimeMillis();
+			double max = 10;
+
+			logger.debug("---");
+			for (int i = 0; i < max; i++) {
+				projectDao.getAll();
+			}
+			long estimatedTime = System.currentTimeMillis() - startTime;
+			logger.debug(estimatedTime/max);
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
 }
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 da81928faa1673a509ebedaa2607403d142f9158..800069f6a6c4f84a03c201cce28a2eb79809e3e2 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
@@ -157,10 +157,7 @@ public class ProjectRestImpl extends BaseRestImpl {
 		if (project == null) {
 			throw new ObjectNotFoundException("Project with given id doesn't exist");
 		}
-		FileEntry entry = new UploadedFileEntry();
-		entry.setOriginalFileName(project.getInputFileName());
-		entry.setFileContent(project.getInputData());
-		return entry;
+		return project.getInputData();
 	}
 
 	public FileEntry getModelAsImage(String token, String projectId, String modelId, String handlerClass, String backgroundOverlayId, String overlayIds,
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 cb14525022182f748bfa30e958d8e8024a4c5284..9b3a35889a70fa76dcae72c9f9f7d48f7c671c3f 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -59,6 +59,7 @@ import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter;
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.ProjectStatus;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
 import lcsb.mapviewer.model.log.LogType;
 import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.MiriamData;
@@ -954,8 +955,10 @@ public class ProjectService implements IProjectService {
 
 					File inputFile = new File(params.getProjectFile());
 					if (inputFile.exists()) {
-						project.setInputData(IOUtils.toByteArray(new FileInputStream(inputFile)));
-						project.setInputFileName(FilenameUtils.getName(params.getProjectFile()));
+						UploadedFileEntry file = new UploadedFileEntry();
+						file.setFileContent(IOUtils.toByteArray(new FileInputStream(inputFile)));
+						file.setOriginalFileName(FilenameUtils.getName(params.getProjectFile()));
+						project.setInputData(file);
 					}
 
 					createModel(params, project);
@@ -1503,10 +1506,10 @@ public class ProjectService implements IProjectService {
 	 */
 	private byte[] getInputDataForProject(int projectId) {
 		Project project = projectDao.getById(projectId);
-		if (project == null) {
+		if (project == null || project.getInputData() == null) {
 			return null;
 		} else {
-			return project.getInputData();
+			return project.getInputData().getFileContent();
 		}
 	}
 
diff --git a/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java b/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java
index 54346da8292f38a6f03ac8e0f277c9c5d2502a92..1137ef9a900ee683b9f26055ca6c3834759f0367 100644
--- a/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java
+++ b/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java
@@ -75,7 +75,7 @@ public class ProjectViewFactory extends AbstractViewFactory<Project, ProjectView
 		}
 		result.setStatus(project.getStatus().toString());
 		result.setProgress(Integer.valueOf((int) project.getProgress()));
-		result.setInputDataAvailable(project.getInputFileName() != null);
+		result.setInputDataAvailable(project.getInputData() != null);
 
 		int warnCount = 0;
 		String warnPreview = "";
diff --git a/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java b/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java
index c0c0ebc1b7bfb6ecf5abe6f3b8cd4d6fde2c3008..18f68071beadf1888077a5211b9bac7ab2f303e2 100644
--- a/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java
+++ b/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java
@@ -20,3 +20,4 @@ import lcsb.mapviewer.services.view.AllViewTests;
 public class AllServicesTests {
 
 }
+;
\ No newline at end of file
diff --git a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
index d023d64bf743dad4d9ecf3b64e5d6cfd7d7d7a3b..4f3bf0c8d83d339c2734f49afab9014c51067eb0 100644
--- a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
+++ b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
@@ -1456,7 +1456,7 @@ public class ProjectBean extends AbstractManagedBean implements Serializable {
 		Project project = projectService.getProjectByProjectId(projectView.getProjectId(), userBean.getAuthenticationToken());
 		String string = new String(data, StandardCharsets.UTF_8);
 
-		String fileName = project.getInputFileName();
+		String fileName = project.getInputData().getOriginalFileName();
 		MimeType respMimeType = null;
 		if (fileName.endsWith("xml")) {
 			respMimeType = MimeType.XML;
@@ -1468,7 +1468,7 @@ public class ProjectBean extends AbstractManagedBean implements Serializable {
 			logger.warn("Cannot determine mime type of file: " + fileName);
 			respMimeType = MimeType.TEXT;
 		}
-		sendFileAsResponse(string, project.getInputFileName(), respMimeType);
+		sendFileAsResponse(string, fileName, respMimeType);
 	}
 
 	/**
diff --git a/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java b/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java
index d6abe47c25902f60bb50f75050b3f46fac98fde2..845deaafac32cffb081e0292510dc2e80a3deaff 100644
--- a/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java
+++ b/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java
@@ -2,6 +2,7 @@ package lcsb.mapviewer.bean;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -11,6 +12,7 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.log4j.Logger;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -26,7 +28,9 @@ import lcsb.mapviewer.model.user.ObjectPrivilege;
 import lcsb.mapviewer.model.user.PrivilegeType;
 import lcsb.mapviewer.model.user.User;
 import lcsb.mapviewer.persist.dao.map.LayoutDao;
+import lcsb.mapviewer.services.view.LayoutView;
 import lcsb.mapviewer.services.view.ProjectView;
+import lcsb.mapviewer.services.view.ProjectViewTest;
 
 public class LayoutBeanTest extends WebTestFunctions {
 	Logger			logger		= Logger.getLogger(LayoutBeanTest.class);
@@ -79,6 +83,7 @@ public class LayoutBeanTest extends WebTestFunctions {
 
 	}
 
+	@Ignore
 	@Test(timeout = 15000)
 	public void testAddLayout() throws Exception {
 		Project project = new Project();
@@ -106,7 +111,7 @@ public class LayoutBeanTest extends WebTestFunctions {
 			mapBean.setCurrentMapId(project.getProjectId());
 			getMapBean().setCurrentMapId(project.getProjectId());
 
-			User guest = userService.getUserByLogin(Configuration.ANONYMOUS_LOGIN);  
+			User guest = userService.getUserByLogin(Configuration.ANONYMOUS_LOGIN);
 			// add user a privilege for viewing layouts
 			BasicPrivilege privilege = new ObjectPrivilege(project, 1, PrivilegeType.VIEW_PROJECT, guest);
 			userService.setUserPrivilege(guest, privilege);
@@ -139,6 +144,7 @@ public class LayoutBeanTest extends WebTestFunctions {
 		}
 	}
 
+	@Ignore
 	@Test(timeout = 15000)
 	public void testAddLayoutForUser() throws Exception {
 		Project project = new Project();
@@ -174,6 +180,7 @@ public class LayoutBeanTest extends WebTestFunctions {
 			privilege = new ObjectPrivilege(project, 1, PrivilegeType.VIEW_PROJECT, user);
 			userService.setUserPrivilege(user, privilege);
 			userDao.flush();
+			userDao.commit();
 
 			layoutBean.addLayout(null);
 
@@ -185,8 +192,14 @@ public class LayoutBeanTest extends WebTestFunctions {
 				layoutDao.refresh(l);
 			} while (l.getStatus().equals(LayoutStatus.NA) || l.getStatus().equals(LayoutStatus.GENERATING));
 
-			ProjectView projectView = projectBean.getProjects().get(projectBean.getProjects().size() - 1);
+			ProjectView projectView =null;
+			for (ProjectView view: projectBean.getProjects()) {
+				if (view.getIdObject().equals(project.getId())) {
+					projectView = view;
+				}
+			}
 
+			assertNotNull(projectView);
 			// check if layout appears on project list
 			assertEquals(1, projectView.getLayouts().size());
 			assertFalse(projectView.getLayouts().get(0).getCreator().isEmpty());