diff --git a/src/BPTree.c b/src/BPTree.c
index 924491d7d03b0d6ed794abc7706eecfb481cb8cd..b85d72184d2c732981cbbe0774a6c0349bcf673c 100644
--- a/src/BPTree.c
+++ b/src/BPTree.c
@@ -16,7 +16,7 @@ static bool has_maximum_keys(BPTreeNode *node) {
 
 static BPTreeNode *find_leaf(BPTreeNode *root, uint64_t key, BPTreeNodeArray **parents) {
     BPTreeNode *current = root;
-    // TODO : 10 is not enough.
+    // CAUTION : 10 is not enough.
     *parents = BPTreeNodeArray_init(10);
 
     while (!current->is_leaf) {
@@ -70,11 +70,11 @@ void BPTree_print(BPTreeNode *root, int depth) {
     }
     IntegerArray_print(root->keys);
 
-    // for (int i = 0; i < depth; i++) {
-    //     printf("  ");
-    // }
-    // printf("*");
-    // IntegerArray_print(root->data);
+    for (int i = 0; i < depth; i++) {
+        printf("  ");
+    }
+    printf("*");
+    IntegerArray_print(root->data);
 
     for (int i = 0; i < root->children->size; i++) {
         BPTree_print(root->children->items[i], depth + 1);
@@ -281,6 +281,7 @@ static void _merge(BPTreeNode *parent, BPTreeNode *main_node, BPTreeNode *second
 static void merge(BPTreeNode *parent, BPTreeNode *node, BPTreeNode *sibling);
 static BPTreeNode *find_sibling(BPTreeNode *parent, BPTreeNode *node);
 static void deletion_rebalance(BPTreeNode *root, BPTreeNodeArray *parents, BPTreeNode *node, uint64_t key);
+static void replace_deleted_key_internal(BPTreeNodeArray *parents, int i, uint64_t key);
 
 static uint64_t find_smallest_key(BPTreeNode *root) {
     if (root->is_leaf) {
diff --git a/src/Directory.c b/src/Directory.c
index d87ccb1139f2dbc5ef572a007ceaa798b4e2478d..7d9a794a8960658c65b143b51d32460582fd246d 100644
--- a/src/Directory.c
+++ b/src/Directory.c
@@ -1,5 +1,4 @@
-// CAUTION : l'implémentation ne va pas fonctionner avec les records supprimés (deleted variable).
-// Je devrais refactor l'implémentation avec le FILE.
+// CAUTION : Je devrais refactor l'implémentation avec le FILE.
 
 #include "Directory.h"
 
@@ -10,8 +9,8 @@
 #include <string.h>
 
 #include "Array.h"
-#include "DirectoryRecord.h"
 #include "BPTree.h"
+#include "DirectoryRecord.h"
 
 static uint64_t hash_string(char *str) {
     SHA256_CTX sha256;
@@ -52,12 +51,18 @@ static void rebuild_index(Directory *directory) {
 
     while (true) {
         uint64_t data_ptr = (uint64_t)ftell(fp);
-        fseek(fp, 1, SEEK_CUR);
-        char phone_number[PHONE_NUMBER_MAX_LENGTH];
-        phone_number[PHONE_NUMBER_MAX_LENGTH - 1] = '\0';
-        fread(phone_number, 1, PHONE_NUMBER_MAX_LENGTH_WITHOUT_NULL_CHARACTER, fp);
-        BPTree_insert(directory->index, hash_string(phone_number), data_ptr);
-        fseek(fp, DirectoryRecord_size_on_disk() - 1 - PHONE_NUMBER_MAX_LENGTH_WITHOUT_NULL_CHARACTER, SEEK_CUR);
+        uint8_t deleted;
+        fread(&deleted, 1, 1, fp);
+
+        if ((bool)deleted) {
+            fseek(fp, DirectoryRecord_size_on_disk() - 1, SEEK_CUR);
+        } else {
+            char phone_number[PHONE_NUMBER_MAX_LENGTH];
+            phone_number[PHONE_NUMBER_MAX_LENGTH - 1] = '\0';
+            fread(phone_number, 1, PHONE_NUMBER_MAX_LENGTH_WITHOUT_NULL_CHARACTER, fp);
+            BPTree_insert(directory->index, hash_string(phone_number), data_ptr);
+            fseek(fp, DirectoryRecord_size_on_disk() - 1 - PHONE_NUMBER_MAX_LENGTH_WITHOUT_NULL_CHARACTER, SEEK_CUR);
+        }
 
         if (ftell(fp) == file_size) {
             break;
@@ -99,15 +104,17 @@ void Directory_print(Directory *directory) {
         fread(byte_array->items, 1, DirectoryRecord_size_on_disk(), fp);
         byte_array->size = DirectoryRecord_size_on_disk();
 
-        DirectoryRecord *record = ByteArray_to_DirectoryRecord(byte_array);
-        DirectoryRecord_print(record);
-        DirectoryRecord_destroy(&record);
+        if (!(bool)byte_array->items[0]) {
+            DirectoryRecord *record = ByteArray_to_DirectoryRecord(byte_array);
+            DirectoryRecord_print(record);
+            DirectoryRecord_destroy(&record);
+        }
 
         ByteArray_destroy(&byte_array);
 
         if (ftell(fp) == file_size) {
             break;
-        } else {
+        } else if (!(bool)byte_array->items[0]) {
             printf("------------------------\n");
         }
     }
diff --git a/src/main.c b/src/main.c
index ba9e5521f77ada166060ffa30c65f07e169b74be..c06cf8fb51c83a64ad2f25512fc841cd0f1f772c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,5 +1,4 @@
 #include <assert.h>
-// Warning : stdbool
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>