diff --git a/app/utils/array.js b/app/utils/array.js
index 6f36cd397d165005d27599fded1f2cee9c27a45a..f80ba54bfbdb43e5b31b1361faf8ca3380e0fb2e 100644
--- a/app/utils/array.js
+++ b/app/utils/array.js
@@ -37,6 +37,7 @@ function merge_items(item_id, items) {
   return result_items;
 }
 
+
 function reposition_items({items, selected_ids, drop_pos}) {
   let selected_items = [],
     remaining_items = Array.from(items),
@@ -48,16 +49,20 @@ function reposition_items({items, selected_ids, drop_pos}) {
 
     idx = remaining_items.findIndex(p => get_id(p) == item_id);
 
-    extracted_item = remaining_items.slice(idx, 1);
-    selected_items.push(extracted_item);
+    extracted_item = remaining_items.slice(idx, idx + 1);
+    remaining_items.splice(idx, 1);
+    selected_items.push(...extracted_item);
   });
 
-  for (i=0, j=0; i < items.length; j++) {
+  for (i=0, j=0; i < items.length;) {
     if (i == drop_pos) {
-      result.push(selected_items);
-      i += selected_items.length + 1;
+      result.push(...selected_items);
+      i += selected_items.length;
     } else { // i < drop_pos || i > drop_pos
-      result.push(remaining_items[j]);
+      if ( j < remaining_items.length ) {
+        result.push(remaining_items[j]);
+        j++;
+      }
       i++;
     }
   }
@@ -69,4 +74,4 @@ export {
   get_id,
   merge_items,
   reposition_items,
-}
\ No newline at end of file
+}
diff --git a/tests/unit/utils/array-test.js b/tests/unit/utils/array-test.js
index d03e9d4f5acb9c646303b994f45ead1baf64ac77..538e3ddfa549553c49d3619cba0d043146ce7687 100644
--- a/tests/unit/utils/array-test.js
+++ b/tests/unit/utils/array-test.js
@@ -62,7 +62,86 @@ module('Unit | Utils | Array', function () {
     expected_result.forEach((page, index) => {
       assert.strictEqual(page.id, actual_result[index].id);
     });
+  });
+
+
+  test('reposition_items 2', function(assert) {
+    let items,
+      selected_ids = ['2', '3'],
+      drop_pos = 0,
+      actual_result,
+      expected_result;
+
+    items = [
+      new Page('1'), new Page('2'), new Page('3'), new Page('4')
+    ];
+
+    expected_result = [
+      new Page('2'), new Page('3'), new Page('1'), new Page('4')
+    ]
+
+    actual_result = reposition_items({
+      items, selected_ids, drop_pos
+    });
 
+    assert.expect( expected_result.length );
+
+    expected_result.forEach((page, index) => {
+      assert.strictEqual(page.id, actual_result[index].id);
+    });
+  });
+
+
+  test('reposition_items 3', function(assert) {
+    let items,
+      selected_ids = ['1'],
+      drop_pos = 3,
+      actual_result,
+      expected_result;
+
+    items = [
+      new Page('1'), new Page('2'), new Page('3'), new Page('4')
+    ];
+
+    expected_result = [
+      new Page('2'), new Page('3'), new Page('4'), new Page('1')
+    ]
+
+    actual_result = reposition_items({
+      items, selected_ids, drop_pos
+    });
+
+    assert.expect( expected_result.length );
+
+    expected_result.forEach((page, index) => {
+      assert.strictEqual(page.id, actual_result[index].id);
+    });
   });
-});
 
+  test('reposition_items 4', function(assert) {
+    let items,
+      selected_ids = ['2', '3'],
+      drop_pos = 3,
+      actual_result,
+      expected_result;
+
+    items = [
+      new Page('1'), new Page('2'), new Page('3'), new Page('4')
+    ];
+
+    expected_result = [
+      new Page('1'), new Page('4'), new Page('2'), new Page('3')
+    ]
+
+    actual_result = reposition_items({
+      items, selected_ids, drop_pos
+    });
+
+    assert.expect( expected_result.length );
+
+    expected_result.forEach((page, index) => {
+      assert.strictEqual(page.id, actual_result[index].id);
+    });
+  });
+
+});