diff --git a/Data/test/test b/Data/test/test
new file mode 100644
index 0000000000000000000000000000000000000000..7d3f1aab4f2b2d88eb0bf103a36cb6cf206c208d
--- /dev/null
+++ b/Data/test/test
@@ -0,0 +1,5 @@
+Impeartale,fooQu1yee5m,A+,TextFiction.com,2757
+Mhen1958,Ohfi0ieLei,O+,FindSpin.com,971
+Allonand,Shootuy0ie,O+,FlameBalls.com,2864
+Proffelf,Ko6JohzoC,O+,BidPursuit.com,307
+Suntly,paech2ooSei,O+,BaseRingTones.com,783
diff --git a/Main.c b/Main.c
index 3ef2129a9ab3485a2aeb2de2f062bdef6dd80776..e2127c7ffdbb4107423cba722f7a249944694ac2 100644
--- a/Main.c
+++ b/Main.c
@@ -108,12 +108,12 @@ int main(int argc, char* argv[]) {
             for (index = 0; index < dir_file_counter; index++) {
                 pthread_join(thread_array[index], (void**) &return_struct);
                 data_array = return_struct->data_array;
-                for (struct_number = 0; struct_number < return_struct->array_count; struct_number++) {
-                    printf("User: %s   ", data_array[struct_number].user_name);
-                    printf("Password: %s   ", data_array[struct_number].password);
-                    printf("Blood Type: %s   ", data_array[struct_number].blood_type);
-                    printf("Domain: %s   ", data_array[struct_number].domain_name);
-                    printf("DB Index: %d  \n", data_array[struct_number].db_index);
+                for (struct_number = 0; struct_number <= return_struct->array_count; struct_number++) {
+                    printf("User: %-16s   ", data_array[struct_number].user_name);
+                    printf("Password: %-17s   ", data_array[struct_number].password);
+                    printf("Blood Type: %-7s   ", data_array[struct_number].blood_type);
+                    printf("Domain: %-28s   ", data_array[struct_number].domain_name);
+                    printf("DB Index: %-15d  \n", data_array[struct_number].db_index);
                     free(data_array[struct_number].user_name);
                     free(data_array[struct_number].password);
                     free(data_array[struct_number].blood_type);
@@ -121,6 +121,7 @@ int main(int argc, char* argv[]) {
                 }
                 free(data_array);
                 free(return_struct);
+                printf("\n\n");
             }
 
             free(absolute_path);
@@ -337,7 +338,7 @@ void* thread_read_file(void* file_location) {
         // printf("DB Index: %d  \n", data_array[struct_number].db_index);
     }
 
-    // data_array = merge_sort(data_array, 0, struct_number, struct_number);
+    data_array = merge_sort(data_array, 0, struct_number, (struct_number) + 1);
 
     return_struct = calloc(1, sizeof(thread_return_struct));
     return_struct->array_count = struct_number;
@@ -352,3 +353,133 @@ void* thread_read_file(void* file_location) {
     free(line_buffer);
     pthread_exit((void*) return_struct);
 }
+
+
+data_struct* sort_data_array(data_struct* data_array, int array_size) {
+    data_struct* temp_array = calloc(array_size, sizeof(data_struct));
+
+    temp_array = merge_sort(data_array, 0, array_size);
+
+    free(data_array);
+    return temp_array;
+}
+
+
+data_struct* merge_sort(data_struct* data_array, int low_int, int high_int, int array_size) {
+    int mid_int;
+
+    // Base case. If equal or less, back out of recursion.
+    if (high_int <= low_int) {
+        return data_array;
+    }
+
+    // Recursively divide and merge.
+    mid_int = (low_int + high_int) / 2;
+    data_array = merge_sort(data_array, low_int, mid_int, array_size);
+    data_array = merge_sort(data_array, (mid_int + 1), high_int, array_size);
+    return merge_array(data_array, low_int, mid_int, high_int, array_size);
+}
+
+
+data_struct* merge_array(data_struct* data_array, int low_int, int mid_int, int high_int, int array_size) {
+    int index;
+    int left_int = low_int;
+    int right_int = mid_int + 1;
+    data_struct* temp_array = calloc(array_size, sizeof(data_struct));
+
+    // printf("\n\n\nDuplicating data_array into temp_array... Low: %d   Mid: %d   High: %d   ArraySize: %d\n", low_int, mid_int, high_int, array_size);
+
+    // Duplicate array.
+    for (index = low_int; index < array_size; index++) {
+        temp_array[index] = data_array[index];
+
+        // printf("Temp UserN: %-20s   ", temp_array[index].user_name);
+        // printf("Temp Index: %-20d   ", temp_array[index].db_index);
+        // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+        // printf("Strd Index: %-20d\n", data_array[index].db_index);
+    }
+    // printf("\n");
+
+    // Loop until all index have been iterated.
+    for (index = low_int; index < (high_int + 1); index++) {
+
+        // Check if left side is done but right is not.
+        if (left_int > mid_int) {
+
+            // printf("Left(%d) not less than mid(%d), \n", low_int, mid_int);
+            // printf("Temp UserN: %-20s   ", temp_array[right_int].user_name);
+            // printf("Temp Index: %-20d   ", temp_array[right_int].db_index);
+            // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+            // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+            data_array[index] = temp_array[right_int];
+
+            // printf("Swapped.\n");
+            // printf("Temp UserN: %-20s   ", temp_array[right_int].user_name);
+            // printf("Temp Index: %-20d   ", temp_array[right_int].db_index);
+            // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+            // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+            right_int++;
+        } else {
+            // Check if right side is done but left is not.
+            if (right_int > high_int) {
+
+                // printf("Right(%d) not less than high(%d), \n", right_int, high_int);
+                // printf("Temp UserN: %-20s   ", temp_array[left_int].user_name);
+                // printf("Temp Index: %-20d   ", temp_array[left_int].db_index);
+                // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+                // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+                data_array[index] = temp_array[left_int];
+
+                // printf("Swapped.\n");
+                // printf("Temp UserN: %-20s   ", temp_array[left_int].user_name);
+                // printf("Temp Index: %-20d   ", temp_array[left_int].db_index);
+                // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+                // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+                left_int++;
+            } else {
+                // Both sides not done. Compare both values.
+                if (temp_array[left_int].db_index < temp_array[right_int].db_index) {
+
+                    // printf("Left(%d) less than right(%d), \n", left_int, right_int);
+                    // printf("Temp UserN: %-20s   ", temp_array[left_int].user_name);
+                    // printf("Temp Index: %-20d   ", temp_array[left_int].db_index);
+                    // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+                    // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+                    data_array[index] = temp_array[left_int];
+
+                    // printf("Swapped.\n");
+                    // printf("Temp UserN: %-20s   ", temp_array[left_int].user_name);
+                    // printf("Temp Index: %-20d   ", temp_array[left_int].db_index);
+                    // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+                    // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+                    left_int++;
+                } else {
+
+                    // printf("Right(%d) less than left(%d), \n", right_int, left_int);
+                    // printf("Temp UserN: %-20s   ", temp_array[right_int].user_name);
+                    // printf("Temp Index: %-20d   ", temp_array[right_int].db_index);
+                    // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+                    // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+                    data_array[index] = temp_array[right_int];
+
+                    // printf("Swapped.\n");
+                    // printf("Temp UserN: %-20s   ", temp_array[right_int].user_name);
+                    // printf("Temp Index: %-20d   ", temp_array[right_int].db_index);
+                    // printf("Strd UserN: %-20s   ", data_array[index].user_name);
+                    // printf("Strd Index: %-20d\n", data_array[index].db_index);
+
+                    right_int++;
+                }
+            }
+        }
+    }
+    free(temp_array);
+    return data_array;
+}