diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverterParams.java b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverterParams.java
index 78946c93d35c5bb5e8d461219429fadf45dd4368..4d059ffe90bbe4644f6e1c1c52249ae2b6a4f905 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverterParams.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverterParams.java
@@ -1,14 +1,19 @@
 package lcsb.mapviewer.converter;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.zip.ZipFile;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
 
 /**
  * Class that contains information about input data used for creation of the
@@ -52,6 +57,12 @@ public class ComplexZipConverterParams {
     return this;
   }
 
+  public ComplexZipConverterParams zipFile(UploadedFileEntry file) throws IOException {
+    File temp = File.createTempFile("model", ".xml");
+    IOUtils.copy(new ByteArrayInputStream(file.getFileContent()), new FileOutputStream(temp));
+    return zipFile(temp.getAbsolutePath());
+  }
+
   /**
    * Sets {@link #zipFile}.
    * 
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 325645b14f40c7e8f4e17aa9a9b48f9d1c1bcbc2..e13408a974fc63ff5a03a97e5969f9f2f68903da 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
@@ -372,7 +372,7 @@ public class ProjectRestImpl extends BaseRestImpl {
     params.notifyEmail(getFirstValue(data.get("notify-email")));
     params.projectDir(directory);
     params.projectDisease(getFirstValue(data.get("disease")));
-    params.projectFile(new ByteArrayInputStream(file.getFileContent()));
+    params.projectFile(file);
     params.projectId(projectId);
     params.projectName(getFirstValue(data.get("name")));
     params.projectOrganism(getFirstValue(data.get("organism")));
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 013ec3131eefab498b9e142983794da2ca2ed140..d73022892d9183f7742b3ca389118c38be6caff3 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -1,9 +1,9 @@
 package lcsb.mapviewer.services.impl;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -18,8 +18,6 @@ import java.util.concurrent.CountDownLatch;
 import javax.mail.MessagingException;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 import org.hibernate.HibernateException;
 import org.primefaces.model.DefaultTreeNode;
@@ -54,7 +52,6 @@ import lcsb.mapviewer.converter.graphics.DrawingException;
 import lcsb.mapviewer.converter.graphics.MapGenerator;
 import lcsb.mapviewer.converter.graphics.MapGenerator.MapGeneratorParams;
 import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
-import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter;
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.ProjectStatus;
@@ -557,22 +554,16 @@ public class ProjectService implements IProjectService {
         throw new InvalidInputDataExecption(e);
       }
     } else {
-      IConverter parser;
-      if (params.getParser() != null) {
-        parser = params.getParser();
-      } else if (params.getProjectFile().endsWith("sbgn")) {
-        parser = new SbgnmlXmlConverter();
-      } else {
-        parser = new CellDesignerXmlParser();
-      }
-      try {
-        Model model = parser.createModel(new ConverterParams().filename(params.getProjectFile())
-            .sizeAutoAdjust(params.isAutoResize()).sbgnFormat(params.isSbgnFormat()));
-        model.setName(params.getProjectName());
-        project.addModel(model);
-      } catch (FileNotFoundException ex) {
-        throw new InvalidInputDataExecption(ex);
+      IConverter parser = params.getParser();
+      if (parser == null) {
+        throw new InvalidArgumentException("Parser is undefined");
       }
+      InputStream input = new ByteArrayInputStream(params.getProjectFile().getFileContent());
+      Model model = parser
+          .createModel(new ConverterParams().inputStream(input, params.getProjectFile().getOriginalFileName())
+              .sizeAutoAdjust(params.isAutoResize()).sbgnFormat(params.isSbgnFormat()));
+      model.setName(params.getProjectName());
+      project.addModel(model);
     }
     Model topModel = project.getModels().iterator().next().getModel();
     topModel.setZoomLevels(generator.computeZoomLevels(topModel));
@@ -736,16 +727,8 @@ public class ProjectService implements IProjectService {
             outOfMemoryBuffer[i] = Math.random() * OUT_OF_MEMORY_BACKUP_BUFFER_SIZE;
           }
 
-          File inputFile = new File(params.getProjectFile());
-          if (inputFile.exists()) {
-            UploadedFileEntry file = new UploadedFileEntry();
-            file.setFileContent(IOUtils.toByteArray(new FileInputStream(inputFile)));
-            file.setOriginalFileName(FilenameUtils.getName(params.getProjectFile()));
-            file.setLength(file.getFileContent().length);
-            User owner = userService.getUserByToken(params.getAuthenticationToken());
-            file.setOwner(owner);
-            project.setInputData(file);
-          }
+          UploadedFileEntry file = params.getProjectFile();
+          project.setInputData(file);
 
           createModel(params, project);
           Model originalModel = project.getModels().iterator().next().getModel();
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java
index 569c725ca466034a3f075446f23ada949c6a2ef9..01c52b7743c3aee3f6d6e2dd6a5469f4eb1fd2fa 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java
@@ -1,9 +1,6 @@
 package lcsb.mapviewer.services.utils;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -13,11 +10,11 @@ import java.util.Map;
 import java.util.Queue;
 import java.util.Set;
 
-import org.apache.commons.io.IOUtils;
 import org.primefaces.model.TreeNode;
 
 import lcsb.mapviewer.converter.IConverter;
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
 import lcsb.mapviewer.model.graphics.MapCanvasType;
 import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.MiriamType;
@@ -55,7 +52,7 @@ public class CreateProjectParams {
   /**
    * Path to a file used as a model.
    */
-  private String projectFile;
+  private UploadedFileEntry projectFile;
 
   private IConverter parser;
 
@@ -191,17 +188,6 @@ public class CreateProjectParams {
     return this;
   }
 
-  /**
-   * @param projectFile
-   *          the projectFile to set
-   * @return object with all parameters
-   * @see #projectFile
-   */
-  public CreateProjectParams projectFile(String projectFile) {
-    this.projectFile = projectFile;
-    return this;
-  }
-
   /**
    * @param autoResize
    *          the autoResize to set
@@ -220,28 +206,14 @@ public class CreateProjectParams {
   /**
    * Sets input stream from which projects should be generated.
    * 
-   * @param is
-   *          inputstream with the data of the project to be generated
+   * @param fileEntry
+   *          uploaded file that should be used to create a project
    * @return object with all parameters
    * @throws IOException
    *           thrown if there are some problem with the stream
    */
-  public CreateProjectParams projectFile(InputStream is) throws IOException {
-    File temp = File.createTempFile("model", ".xml");
-    IOUtils.copy(is, new FileOutputStream(temp));
-    this.projectFile = temp.getAbsolutePath();
-    return this;
-  }
-
-  /**
-   * Sets file from which projects should be generated.
-   * 
-   * @param file
-   *          file with the data of the project to be generated
-   * @return object with all parameters
-   */
-  public CreateProjectParams projectFile(File file) {
-    this.projectFile = file.getAbsolutePath();
+  public CreateProjectParams projectFile(UploadedFileEntry fileEntry) throws IOException {
+    this.projectFile = fileEntry;
     return this;
   }
 
@@ -379,7 +351,7 @@ public class CreateProjectParams {
    * @return the projectFile
    * @see #projectFile
    */
-  public String getProjectFile() {
+  public UploadedFileEntry getProjectFile() {
     return projectFile;
   }
 
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 0a58875c94372072436b680d85def08a31f349b9..136ab291acb93a5d0d2e6c65f902d9d1a2a17802 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
@@ -7,6 +7,8 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -18,6 +20,7 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
 import org.apache.log4j.Logger;
+import org.apache.poi.util.IOUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -35,6 +38,7 @@ import lcsb.mapviewer.converter.zip.ZipEntryFile;
 import lcsb.mapviewer.converter.zip.ZipEntryFileFactory;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.ProjectStatus;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
 import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.OverviewImage;
@@ -134,11 +138,9 @@ public class ProjectServiceTest extends ServiceTestFunctions {
   @Test
   public void testUpdater() throws Exception {
     try {
-      String project_id = "test_id";
-      projectService.createProject(new CreateProjectParams().authenticationToken(adminToken).projectId(project_id)
-          .version("").projectFile("testFiles/centeredAnchorInModifier.xml").annotations(true).images(true).async(false)
-          .projectDir(tmpResultDir).analyzeAnnotations(true));
-      Project project = projectService.getProjectByProjectId(project_id, adminToken);
+      projectService.createProject(createProjectParams("testFiles/centeredAnchorInModifier.xml").analyzeAnnotations(true));
+      Project project = projectService.getProjectByProjectId(projectId, adminToken);
+      assertNotNull(project);
       assertEquals(ProjectStatus.DONE, project.getStatus());
       projectService.removeProject(project, null, false, adminToken);
     } catch (Exception e) {
@@ -149,18 +151,20 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 
   @Test
   public void testCreateComplex() throws Exception {
-    String projectId = "test_id";
     try {
       ZipEntryFile entry1 = new ModelZipEntryFile("main.xml", "main", true, false, SubmodelType.UNKNOWN);
       ZipEntryFile entry2 = new ModelZipEntryFile("s1.xml", "s1", false, false, SubmodelType.UNKNOWN);
       ZipEntryFile entry3 = new ModelZipEntryFile("s2.xml", "s2", false, false, SubmodelType.UNKNOWN);
       ZipEntryFile entry4 = new ModelZipEntryFile("s3.xml", "s3", false, false, SubmodelType.UNKNOWN);
       ZipEntryFile entry5 = new ModelZipEntryFile("mapping.xml", "mapping", false, true, SubmodelType.UNKNOWN);
-      projectService.createProject(new CreateProjectParams().authenticationToken(adminToken).projectId(projectId)
-          .version("").complex(true).projectFile("testFiles/complexModel/complex_model.zip").addZipEntry(entry1)
-          .addZipEntry(entry2).addZipEntry(entry3).addZipEntry(entry4).addZipEntry(entry5).annotations(true)
-          .semanticZoomContainsMultipleLayouts(true).images(true).async(false).projectDir(tmpResultDir)
-          .analyzeAnnotations(true));
+      projectService.createProject(createProjectParams("testFiles/complexModel/complex_model.zip").
+          addZipEntry(entry1).
+          addZipEntry(entry2).
+          addZipEntry(entry3).
+          addZipEntry(entry4).
+          addZipEntry(entry5).
+          semanticZoomContainsMultipleLayouts(true).
+          images(true));
       Project project = projectService.getProjectByProjectId(projectId, adminToken);
 
       Model model = modelService.getLastModelByProjectId(projectId, adminToken);
@@ -257,7 +261,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
       layout.addDataOverlayImageLayer(new DataOverlayImageLayer(model, path + "/nested"));
       project.addLayout(layout);
 
-      CreateProjectParams params = new CreateProjectParams().images(true).projectDir(tmpResultDir);
+      CreateProjectParams params = createProjectParams("testFiles/sample.xml").images(true).projectDir(tmpResultDir);
 
       ProjectService pService = new ProjectService();
       pService.setProjectDao(Mockito.mock(ProjectDao.class));
@@ -301,7 +305,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 
       model.addSubmodelConnection(new ModelSubmodelConnection(model2, SubmodelType.UNKNOWN, "name"));
 
-      CreateProjectParams params = new CreateProjectParams().images(true).projectDir(tmpResultDir);
+      CreateProjectParams params = createProjectParams("testFiles/sample.xml").images(true).projectDir(tmpResultDir);
 
       ProjectService pService = new ProjectService();
       pService.setProjectDao(Mockito.mock(ProjectDao.class));
@@ -332,14 +336,16 @@ public class ProjectServiceTest extends ServiceTestFunctions {
       ZipEntryFile entry4 = new ModelZipEntryFile("s3.xml", "s3", false, false, SubmodelType.UNKNOWN);
       ZipEntryFile entry5 = new ModelZipEntryFile("mapping.xml", "mapping", false, true, SubmodelType.UNKNOWN);
 
-      CreateProjectParams params = new CreateProjectParams().projectId(projectId).version("").complex(true)
-          .projectFile("testFiles/complexModel/complex_model_with_compartment.zip").addZipEntry(entry1)
-          .addZipEntry(entry2).addZipEntry(entry3).addZipEntry(entry4).addZipEntry(entry5).annotations(false)
-          .images(false).async(false).projectDir(tmpResultDir).analyzeAnnotations(false);
+      CreateProjectParams params = createProjectParams("testFiles/complexModel/complex_model_with_compartment.zip").
+          addZipEntry(entry1).
+          addZipEntry(entry2).
+          addZipEntry(entry3).
+          addZipEntry(entry4).
+          addZipEntry(entry5).
+          analyzeAnnotations(false);
 
       ComplexZipConverter parser = new ComplexZipConverter(CellDesignerXmlParser.class);
-      ComplexZipConverterParams complexParams;
-      complexParams = new ComplexZipConverterParams().zipFile(params.getProjectFile());
+      ComplexZipConverterParams complexParams = new ComplexZipConverterParams().zipFile(params.getProjectFile());
       for (ZipEntryFile entry : params.getZipEntries()) {
         complexParams.entry(entry);
       }
@@ -558,7 +564,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
   }
 
   protected Project createComplexProject(String projectId, String filename) throws IOException, SecurityException {
-    CreateProjectParams params = new CreateProjectParams();
+    CreateProjectParams params = createProjectParams(filename);
 
     ZipFile zipFile = new ZipFile(filename);
     Enumeration<? extends ZipEntry> entries = zipFile.entries();
@@ -569,9 +575,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
     }
     zipFile.close();
 
-    projectService.createProject(params.authenticationToken(adminToken).projectId(projectId).version("").complex(true)
-        .projectFile(filename).annotations(true).images(false).async(false).projectDir(tmpResultDir)
-        .analyzeAnnotations(true));
+    projectService.createProject(params);
     Project project = projectService.getProjectByProjectId(projectId, adminToken);
     return project;
   }
@@ -601,7 +605,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
   public void testCreateComplexWithLayoutOrder() throws Exception {
     try {
       String filename = "testFiles/complexModel/complex_model_with_images.zip";
-      CreateProjectParams params = new CreateProjectParams();
+      CreateProjectParams params = createProjectParams(filename);
 
       ZipFile zipFile = new ZipFile(filename);
       Enumeration<? extends ZipEntry> entries = zipFile.entries();
@@ -611,9 +615,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
       }
       zipFile.close();
 
-      projectService.createProject(params.authenticationToken(adminToken).projectId(projectId).version("").complex(true)
-          .projectFile(filename).annotations(true).images(false).async(false).networkLayoutAsDefault(true)
-          .projectDir(tmpResultDir).analyzeAnnotations(true));
+      projectService.createProject(params.networkLayoutAsDefault(true));
       Project project = projectService.getProjectByProjectId(projectId, adminToken);
 
       Model model = modelService.getLastModelByProjectId(projectId, adminToken);
@@ -638,6 +640,19 @@ public class ProjectServiceTest extends ServiceTestFunctions {
     }
   }
 
+  private CreateProjectParams createProjectParams(String filename) throws FileNotFoundException, IOException {
+    logger.debug(filename);
+    UploadedFileEntry fileEntry = new UploadedFileEntry();
+    fileEntry.setLocalPath(filename);
+    byte[] data = IOUtils.toByteArray(new FileInputStream(filename));
+    fileEntry.setLength(data.length);
+    fileEntry.setFileContent(data);
+
+    return new CreateProjectParams().authenticationToken(adminToken).projectId(projectId).version("").complex(filename.endsWith("zip"))
+        .projectFile(fileEntry).annotations(true).images(false).async(false).projectDir(tmpResultDir)
+        .analyzeAnnotations(true).parser(new CellDesignerXmlParser());
+  }
+
   @Test(timeout = 15000)
   public void testCreateComplexWithLayouts() throws Exception {
     try {