diff --git a/CHANGELOG b/CHANGELOG
index 3f2e891bced487f148780f660a96dfb6ba7991ac..930484c91cf52965dae9715b14e1e718e7c67b33 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+minerva (12.1.4) stable; urgency=medium
+  * Bug fix: upload of the project failed when another project was removed 
+    during upload 
+
+ -- Piotr Gawron <piotr.gawron@uni.lu>  Fri, 28 Dec 2018 14:00:00 +0200
+
 minerva (12.1.3) stable; urgency=medium
   * Bug fix: add project button is disabled when user has no privileges
   * Bug fix: projectId was missing in the edit window
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 78f9c1a5ec8571ee77aec43f1b5884b2e8aaa312..d7f3d61c0581c9ab35cba5e4bd5dec8f8fb79776 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -809,6 +809,7 @@ public class ProjectService implements IProjectService {
             file.setOwner(owner);
             project.setInputData(file);
           }
+          addUsers(project, params);
 
           createModel(params, project);
           Model originalModel = project.getModels().iterator().next().getModel();
@@ -821,7 +822,6 @@ public class ProjectService implements IProjectService {
             }
           }
 
-          addUsers(project, params);
           createImages(originalModel, params);
 
           for (Layout layout : originalModel.getLayouts()) {
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 3c3b575db147e12db3272fe920516aaa36053af6..098127f69ed9eb1cca3cc4ba80d40a833f2d212a 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
@@ -43,7 +43,9 @@ import lcsb.mapviewer.model.map.model.SubmodelType;
 import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.model.map.species.Protein;
 import lcsb.mapviewer.model.user.ConfigurationOption;
+import lcsb.mapviewer.model.user.ObjectPrivilege;
 import lcsb.mapviewer.model.user.PrivilegeType;
+import lcsb.mapviewer.model.user.User;
 import lcsb.mapviewer.model.user.UserAnnotationSchema;
 import lcsb.mapviewer.model.user.UserClassAnnotators;
 import lcsb.mapviewer.model.user.UserClassValidAnnotations;
@@ -92,7 +94,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
   }
 
   @Test
-  public void test() throws Exception {
+  public void testGetAllProjects() throws Exception {
     try {
       List<Project> projects = projectService.getAllProjects(adminToken);
 
@@ -124,6 +126,81 @@ public class ProjectServiceTest extends ServiceTestFunctions {
     }
   }
 
+  @Test
+  public void testUserPrivilegeChangeDuringUpload() throws Exception {
+    try {
+      User admin = userService.getUserByToken(adminToken);
+      Project defaultProject = projectService.getAllProjects().get(0);
+      userService.setUserPrivilege(admin,
+          new ObjectPrivilege(defaultProject, 1, PrivilegeType.EDIT_COMMENTS_PROJECT, admin));
+      admin = userService.getUserByToken(adminToken);
+      String project_id = "test_id";
+      Thread addProjectThread = new Thread(new Runnable() {
+
+        @Override
+        public void run() {
+          try {
+            projectService.createProject(new CreateProjectParams().//
+            authenticationToken(adminToken).//
+            projectId(project_id).//
+            version("").//
+            projectFile("testFiles/sample.xml").//
+            images(false).//
+            analyzeAnnotations(true).//
+            addUser("admin", "admin").//
+            projectDir(tmpResultDir));
+          } catch (Exception e) {
+            e.printStackTrace();
+          }
+        }
+      });
+      addProjectThread.start();
+
+      Thread dropPrivilegesThread = new Thread(new Runnable() {
+
+        @Override
+        public void run() {
+          try {
+            Thread.sleep(100);
+            userService.dropPrivilegesForObjectType(PrivilegeType.VIEW_PROJECT, defaultProject.getId());
+          } catch (Exception e) {
+            e.printStackTrace();
+          }
+        }
+      });
+
+      dropPrivilegesThread.start();
+      dropPrivilegesThread.join();
+
+      addProjectThread.join();
+
+      Project project = projectService.getProjectByProjectId(project_id, adminToken);
+      assertEquals(ProjectStatus.DONE, project.getStatus());
+      Thread removeProjectThread = new Thread(new Runnable() {
+
+        @Override
+        public void run() {
+          try {
+            Project project = projectService.getProjectByProjectId(project_id, adminToken);
+            assertEquals(ProjectStatus.DONE, project.getStatus());
+            projectService.removeProject(project, null, false, adminToken);
+          } catch (Exception e) {
+            e.printStackTrace();
+          }
+        }
+      });
+      removeProjectThread.start();
+
+      removeProjectThread.join();
+
+      assertNull(projectService.getProjectByProjectId(project_id, adminToken));
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
   @Test
   public void testUpdater() throws Exception {
     try {