diff --git a/src/BPTree.c b/src/BPTree.c
index 479d7e1749cbf1dd44562be0831e7ccc92c76e4a..52f9a313e8acf85d3c47d6785b24d2022c5474a9 100644
--- a/src/BPTree.c
+++ b/src/BPTree.c
@@ -322,29 +322,29 @@ static bool is_sibling_left_side(BPTreeNode *parent, BPTreeNode *node, BPTreeNod
 static void merge(BPTreeNode *parent, BPTreeNode *left_node, BPTreeNode *right_node) {
     int index_in_children = BPTreeNodeArray_search(parent->children, left_node);
 
-    if (!right_node->is_leaf) {
-        IntegerArray_insert_at_index(right_node->keys, 0, parent->keys->items[index_in_children]);
+    if (!left_node->is_leaf) {
+        IntegerArray_append(left_node->keys, parent->keys->items[index_in_children]);
     }
 
     // Merge the keys.
-    for (int i = left_node->keys->size - 1; i >= 0; i--) {
-        IntegerArray_insert_at_index(right_node->keys, 0, left_node->keys->items[i]);
+    for (int i = 0; i < right_node->keys->size; i++) {
+        IntegerArray_append(left_node->keys, right_node->keys->items[i]);
     }
 
     // Merge the data.
-    for (int i = left_node->data->size - 1; i >= 0; i--) {
-        IntegerArray_insert_at_index(right_node->data, 0, left_node->data->items[i]);
+    for (int i = 0; i < right_node->data->size; i++) {
+        IntegerArray_append(left_node->data, right_node->data->items[i]);
     }
 
     // Merge the children.
-    for (int i = left_node->children->size - 1; i >= 0; i--) {
-        BPTreeNodeArray_insert_at_index(right_node->children, 0, left_node->children->items[i]);
+    for (int i = 0; i < right_node->children->size; i++) {
+        BPTreeNodeArray_append(left_node->children, right_node->children->items[i]);
     }
 
     IntegerArray_delete_at_index(parent->keys, index_in_children);
-    BPTreeNodeArray_delete_at_index(parent->children, index_in_children);
-
-    BPTreeNode_destroy(&left_node);
+    BPTreeNodeArray_delete_at_index(parent->children, index_in_children + 1);
+    left_node->next = right_node->next;
+    BPTreeNode_destroy(&right_node);
 }
 
 static void steal_leaf(BPTreeNode *parent, BPTreeNode *node, BPTreeNode *sibling) {