diff --git a/_main.c b/_main.c
new file mode 100644
index 0000000000000000000000000000000000000000..9f584fe03ae65a54f038697f87e7abcb108fd8c2
--- /dev/null
+++ b/_main.c
@@ -0,0 +1,32 @@
+#include <assert.h>
+// Warning : stdbool
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "bptree.h"
+#include "sorted_array.h"
+
+int main() {
+    BPTreeNode *root = bptree_init(2);
+    int keys_length = 40;
+    uint64_t keys[] = {8, 12, 11, 47, 22, 95, 86, 40, 33, 78, 28, 5, 75, 88, 21, 56, 82, 51, 93, 66, 48, 70, 57, 65, 35, 4, 60, 41, 49, 55, 68, 72, 23, 31, 30, 42, 18, 87, 24, 58};
+    array_print(keys_length, keys);
+
+    for (int i = 0; i < keys_length; i++) {
+        bptree_insert(root, keys[i], keys[i] * 1000);
+    }
+
+    bptree_print(root, 0);
+
+    for (int i = 0; i < keys_length; i++) {
+        uint64_t data;
+        bool found = bptree_search(root, keys[i], &data);
+
+        assert(found == true);
+        assert(data == keys[i] * 1000);
+    }
+
+    bptree_destroy(&root);
+    return EXIT_SUCCESS;
+}
diff --git a/src/Directory.c b/src/Directory.c
new file mode 100644
index 0000000000000000000000000000000000000000..796581f27b7fb65a58d648b7218d7391f0892007
--- /dev/null
+++ b/src/Directory.c
@@ -0,0 +1,43 @@
+#include "Directory.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "DirectoryRecord.h"
+
+Directory *Directory_init() {
+    Directory *directory = (Directory *)malloc(sizeof(Directory));
+    directory->records_length = 0;
+    // WARNING
+    directory->records = (DirectoryRecord **)malloc(sizeof(Directory *) * 1000);
+    return directory;
+}
+
+void Directory_destroy(Directory **directory) {
+    for (int i = 0; i < (*directory)->records_length; i++) {
+        DirectoryRecord_destroy(&(*directory)->records[i]);
+    }
+
+    free((*directory)->records);
+    free(*directory);
+    *directory = NULL;
+}
+
+void Directory_print(Directory *directory) {
+    printf("========================\n");
+
+    for (int i = 0; i < directory->records_length; i++) {
+        DirectoryRecord_print(directory->records[i]);
+
+        if (i < directory->records_length - 1) {
+            printf("------------------------\n");
+        }
+    }
+
+    printf("========================\n");
+}
+
+void Directory_insert(Directory *directory, DirectoryRecord *record) {
+    directory->records[directory->records_length] = record;
+    directory->records_length += 1;
+}
diff --git a/src/Directory.h b/src/Directory.h
new file mode 100644
index 0000000000000000000000000000000000000000..6063a5ff31f8dc4d4d07c6143fadd26fe8318c98
--- /dev/null
+++ b/src/Directory.h
@@ -0,0 +1,16 @@
+#ifndef DIRECTORY_H
+#define DIRECTORY_H
+
+#include "DirectoryRecord.h"
+
+typedef struct Directory {
+    int records_length;
+    DirectoryRecord **records;
+} Directory;
+
+Directory *Directory_init();
+void Directory_destroy(Directory **directory);
+void Directory_print(Directory *directory);
+void Directory_insert(Directory *directory, DirectoryRecord *record);
+
+#endif
diff --git a/src/Directory.o b/src/Directory.o
new file mode 100644
index 0000000000000000000000000000000000000000..44cdaf0a743353597ff980dca51462dc4e9396e4
Binary files /dev/null and b/src/Directory.o differ
diff --git a/src/DirectoryRecord.c b/src/DirectoryRecord.c
new file mode 100644
index 0000000000000000000000000000000000000000..94fb4bb1c919fbd1b2640563ab8679d336217fd5
--- /dev/null
+++ b/src/DirectoryRecord.c
@@ -0,0 +1,28 @@
+#include "DirectoryRecord.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+DirectoryRecord *DirectoryRecord_init(char phone_number[11], char name[21], char surname[21], int birth_date_year, int birth_date_month, int birth_date_day) {
+    DirectoryRecord *record = (DirectoryRecord *)malloc(sizeof(DirectoryRecord));
+    strcpy(record->phone_number, phone_number);
+    strcpy(record->name, name);
+    strcpy(record->surname, surname);
+    record->birth_date_year = birth_date_year;
+    record->birth_date_month = birth_date_month;
+    record->birth_date_day = birth_date_day;
+    return record;
+}
+
+void DirectoryRecord_destroy(DirectoryRecord **record) {
+    free(*record);
+    *record = NULL;
+}
+
+void DirectoryRecord_print(DirectoryRecord *record) {
+    printf("Phone Number: %s\n", record->phone_number);
+    printf("Name: %s\n", record->name);
+    printf("Surname: %s\n", record->surname);
+    printf("Birth Date: %d-%.2d-%.2d\n", record->birth_date_year, record->birth_date_month, record->birth_date_day);
+}
diff --git a/src/DirectoryRecord.h b/src/DirectoryRecord.h
new file mode 100644
index 0000000000000000000000000000000000000000..a398b9603a4bcf61f976e3012e04a83f4b06d397
--- /dev/null
+++ b/src/DirectoryRecord.h
@@ -0,0 +1,17 @@
+#ifndef DIRECTORY_RECORD_H
+#define DIRECTORY_RECORD_H
+
+typedef struct DirectoryRecord {
+    char phone_number[11];
+    char name[21];
+    char surname[21];
+    int birth_date_year;
+    int birth_date_month;
+    int birth_date_day;
+} DirectoryRecord;
+
+DirectoryRecord *DirectoryRecord_init(char phone_number[11], char name[21], char surname[21], int birth_date_year, int birth_date_month, int birth_date_day);
+void DirectoryRecord_destroy(DirectoryRecord **record);
+void DirectoryRecord_print(DirectoryRecord *record);
+
+#endif
diff --git a/src/DirectoryRecord.o b/src/DirectoryRecord.o
new file mode 100644
index 0000000000000000000000000000000000000000..86700a2bced8ec1297755924790fa9a47b1b5744
Binary files /dev/null and b/src/DirectoryRecord.o differ
diff --git a/src/bptree.h b/src/bptree.h
index bff78b36d3a68d91ce42e204306ad613bec4949d..05fdd197a9d4008a55ad25cfaf7c08205cc0b856 100644
--- a/src/bptree.h
+++ b/src/bptree.h
@@ -21,8 +21,6 @@ void bptree_destroy(BPTreeNode **root);
 void bptree_print(BPTreeNode *root, int depth);
 bool bptree_search(BPTreeNode *root, uint64_t key, uint64_t *data);
 
-// ...
-
 // Insertion
 
 void bptree_insert(BPTreeNode *root, uint64_t key, uint64_t data);
diff --git a/src/main.c b/src/main.c
index 9f584fe03ae65a54f038697f87e7abcb108fd8c2..ee5ea626811d449c48d13b4c052c6cec4601e108 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,29 +4,20 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "Directory.h"
+#include "DirectoryRecord.h"
 #include "bptree.h"
 #include "sorted_array.h"
 
 int main() {
-    BPTreeNode *root = bptree_init(2);
-    int keys_length = 40;
-    uint64_t keys[] = {8, 12, 11, 47, 22, 95, 86, 40, 33, 78, 28, 5, 75, 88, 21, 56, 82, 51, 93, 66, 48, 70, 57, 65, 35, 4, 60, 41, 49, 55, 68, 72, 23, 31, 30, 42, 18, 87, 24, 58};
-    array_print(keys_length, keys);
+    BPTreeNode *index = bptree_init(2);
 
-    for (int i = 0; i < keys_length; i++) {
-        bptree_insert(root, keys[i], keys[i] * 1000);
-    }
+    Directory *directory = Directory_init();
+    Directory_insert(directory, DirectoryRecord_init("0794592180", "Florian", "Burgener", 2000, 10, 03));
+    Directory_insert(directory, DirectoryRecord_init("0799494969", "Daisy", "Luna", 1995, 05, 31));
+    Directory_print(directory);
 
-    bptree_print(root, 0);
-
-    for (int i = 0; i < keys_length; i++) {
-        uint64_t data;
-        bool found = bptree_search(root, keys[i], &data);
-
-        assert(found == true);
-        assert(data == keys[i] * 1000);
-    }
-
-    bptree_destroy(&root);
+    Directory_destroy(&directory);
+    bptree_destroy(&index);
     return EXIT_SUCCESS;
 }
diff --git a/src/main.o b/src/main.o
index 48a3065119e6f7e4a258d9e3f7cababf73859fc3..ca2341be399e9bed35f53bf070ec7056618708e1 100644
Binary files a/src/main.o and b/src/main.o differ
diff --git a/src/program b/src/program
index 9e4a14ec81fca974afb54dcc39df11dba1aa35df..c0146df79aba0eb288537ce614d67e08d5b8afbd 100644
Binary files a/src/program and b/src/program differ