diff --git a/CHANGELOG b/CHANGELOG
index cc4952f8ab3dba8946a7ffb678c701bc488e0ad8..ac3fc2b5e6a5d7046dd7f24f8cb3c2a4fd757706 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 minerva (14.0.0~beta.2) unstable; urgency=low
   * Small improvement: info window contains information about overlay No (#919)
   * Bug fix: exported SBML passes online validation (#831)
+  * Bug fix: changing owner of data overlay should change order index (#945)
   * Bug fix: allow user to remove own comments (#931)
   * Bug fix: validation of project name length is provided (#950)
   * Bug fix: after reducing privileges on himself interface is refreshed (#948)
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 323678e9977a20d4374f59498a57112474b5d0ab..7d616e6bfdeb4e41f34a9ab72e4ea05b08d44ca0 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
@@ -181,6 +181,7 @@ public class OverlayRestImpl extends BaseRestImpl {
     if (overlayData == null) {
       throw new QueryException("overlay field cannot be undefined");
     }
+    List<User> reorderUsers = new ArrayList<>();
     try {
       Layout layout = getOverlay(projectId, overlayId);
       for (String key : overlayData.keySet()) {
@@ -202,8 +203,17 @@ public class OverlayRestImpl extends BaseRestImpl {
           layout.setGoogleLicenseConsent((Boolean) overlayData.get("googleLicenseConsent"));
         } else if (key.equalsIgnoreCase("creator")) {
           if ("".equals(value)) {
+            if (layout.getCreator() != null) {
+              reorderUsers.add(layout.getCreator());
+            }
             layout.setCreator(null);
           } else {
+            if (layout.getCreator() == null) {
+              reorderUsers.add(getUserService().getUserByLogin((String) value));
+            } else if (!layout.getCreator().getLogin().equals(value)) {
+              reorderUsers.add(getUserService().getUserByLogin((String) value));
+              reorderUsers.add(layout.getCreator());
+            }
             layout.setCreator(getUserService().getUserByLogin((String) value));
           }
         } else {
@@ -211,6 +221,9 @@ public class OverlayRestImpl extends BaseRestImpl {
         }
       }
       layoutDao.update(layout);
+      for (User user : reorderUsers) {
+        reorderOverlays(user, layout.getProject());
+      }
       return getOverlayById(layout.getProject().getProjectId(), overlayId);
     } catch (NumberFormatException e) {
       throw new QueryException("invliad overlay id", e);
@@ -231,7 +244,12 @@ public class OverlayRestImpl extends BaseRestImpl {
     User owner = layout.getCreator();
     Project project = layout.getProject();
     layoutService.removeLayout(layout, null);
-    
+
+    reorderOverlays(owner, project);
+    return okStatus();
+  }
+
+  private void reorderOverlays(User owner, Project project) {
     List<Layout> overlays = layoutService.getLayoutsByProject(project).stream()
         .filter(lay -> lay.getCreator() == owner).collect(Collectors.toList());
 
@@ -243,7 +261,6 @@ public class OverlayRestImpl extends BaseRestImpl {
         layoutService.updateLayout(overlay);
       }
     }
-    return okStatus();
   }
 
   public Map<String, Object> addOverlay(String projectId, String name, String description, String content,
diff --git a/web/src/test/java/lcsb/mapviewer/web/OverlayControllerIntegrationTest.java b/web/src/test/java/lcsb/mapviewer/web/OverlayControllerIntegrationTest.java
index 361eb53d13da65e701bc768e2c24145b4894ead0..67b26e67e10ca3c106a840394bbe09ca7370cb36 100644
--- a/web/src/test/java/lcsb/mapviewer/web/OverlayControllerIntegrationTest.java
+++ b/web/src/test/java/lcsb/mapviewer/web/OverlayControllerIntegrationTest.java
@@ -1,6 +1,7 @@
 package lcsb.mapviewer.web;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
@@ -101,7 +102,7 @@ public class OverlayControllerIntegrationTest extends ControllerIntegrationTest
 
   @Test
   public void testListPublicOverlaysOverlaysWhenCreatorEmpty() throws Exception {
-    Layout layout= createOverlay(project, null);
+    Layout layout = createOverlay(project, null);
     layout.setPublicLayout(true);
     layoutDao.add(layout);
 
@@ -122,7 +123,7 @@ public class OverlayControllerIntegrationTest extends ControllerIntegrationTest
 
   @Test
   public void testListNonPublicOverlaysOverlaysWhenCreatorEmpty() throws Exception {
-    Layout layout= createOverlay(project, null);
+    Layout layout = createOverlay(project, null);
     layout.setPublicLayout(true);
     layoutDao.add(layout);
 
@@ -1169,7 +1170,7 @@ public class OverlayControllerIntegrationTest extends ControllerIntegrationTest
     overlay2.setOrderIndex(2);
     Layout overlay3 = createOverlay(user);
     overlay3.setOrderIndex(3);
-    
+
     layoutDao.update(overlay1);
     layoutDao.update(overlay2);
     layoutDao.update(overlay3);
@@ -1194,7 +1195,7 @@ public class OverlayControllerIntegrationTest extends ControllerIntegrationTest
     overlay2.setOrderIndex(2);
     Layout overlay3 = createOverlay(null);
     overlay3.setOrderIndex(3);
-    
+
     layoutDao.update(overlay1);
     layoutDao.update(overlay2);
     layoutDao.update(overlay3);
@@ -1211,5 +1212,38 @@ public class OverlayControllerIntegrationTest extends ControllerIntegrationTest
     assertEquals(2, overlay3.getOrderIndex());
   }
 
+  @Test
+  public void testChangeOrderAfterChaningOwner() throws Exception {
+    User user = createUser(TEST_USER_LOGIN, TEST_USER_PASSWORD);
+    User admin = userService.getUserByLogin(BUILT_IN_TEST_ADMIN_LOGIN);
+
+    Layout overlay1 = createOverlay(user);
+    overlay1.setOrderIndex(1);
+    Layout overlay2 = createOverlay(user);
+    overlay2.setOrderIndex(2);
+
+    Layout overlay3 = createOverlay(admin);
+    overlay3.setOrderIndex(1);
+    Layout overlay4 = createOverlay(admin);
+    overlay4.setOrderIndex(2);
+
+    String body = "{\"overlay\":{\"creator\":\"" + admin.getLogin() + "\"}}";
+
+    MockHttpSession session = createSession(BUILT_IN_TEST_ADMIN_LOGIN, BUILT_IN_TEST_ADMIN_PASSWORD);
+
+    RequestBuilder request = patch("/projects/" + TEST_PROJECT + "/overlays/" + overlay1.getId())
+        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+        .content(body)
+        .session(session);
+
+    mockMvc.perform(request)
+        .andExpect(status().is2xxSuccessful());
+
+    assertEquals("Order of overlays wasn't updated for original owner of overlay", 1, overlay2.getOrderIndex());
+
+    assertTrue(overlay1.getOrderIndex() == 1 || overlay3.getOrderIndex() == 1);
+    assertTrue(overlay1.getOrderIndex() == 2 || overlay3.getOrderIndex() == 2);
+    assertEquals(3, overlay4.getOrderIndex());
+  }
 
 }