diff --git a/BuildDataBase.c b/BuildDataBase.c
index ebc3ef0e44e3f7d05cbd95abbb928a7706bfbe4e..c18da7aaa8ef4b3b98b5426841743611361a3081 100644
--- a/BuildDataBase.c
+++ b/BuildDataBase.c
@@ -57,7 +57,9 @@ void tokenize_line();           // Separates lines into fields.
 void populate_array();          // Populates array with fields.
 void resize_array();            // Reallocates memory for array.
 char* remove_quotes();          // Removes quotes from string value.
+void print_all_songs();         // Prints info for all songs in array.
 void print_song_info();         // Prints all info for provided song.
+void sort_array();              // Sorts array by song name.
 void exit_program();            // Frees memory and closes program.
 
 
@@ -70,17 +72,10 @@ int main(int argc, char* argv[]) {
     int file_descriptor = open_file();
     read_file(file_descriptor);
     write(1, "\n\n\n\n\n", 10);
-    print_song_info(songs_array[1]);
-    print_song_info(songs_array[2]);
-    print_song_info(songs_array[3]);
-    print_song_info(songs_array[4]);
-    print_song_info(songs_array[5]);
-    print_song_info(songs_array[6]);
-    print_song_info(songs_array[7]);
-    print_song_info(songs_array[8]);
-    print_song_info(songs_array[9]);
-    print_song_info(songs_array[10]);
-
+    print_all_songs();
+    write(1, "\nSorting...\n\n\n", 15);
+    sort_array();
+    print_all_songs();
 
     exit_program();
 }
@@ -123,7 +118,6 @@ void read_file(int file_descriptor) {
     index = BUFFER_SIZE - 1;
     offset_amount = 0;
     *temp_buffer = *read_buffer;
-    printf("Looping through buffer...\n");
     while (index > 0) {
         if (temp_buffer[index] == '\n') {
             // Found first null terminator. Save location and exit loop.
@@ -141,7 +135,6 @@ void read_file(int file_descriptor) {
         err_sys("Failed to update pointer on read in.");
     }
 
-    printf("Buffer: %d, Offset: %d, ReadSize: %ld\n\n", BUFFER_SIZE, offset_amount, read_size);
     read_line(read_buffer, read_size);
     free(read_buffer);
 }
@@ -157,7 +150,6 @@ void read_line(char *read_buffer, size_t read_size) {
 
     line_buffer = calloc(BUFFER_SIZE, sizeof(char));
 
-    printf("Looping through for individual lines...\n");
     // Loop through entire chunk.
     while ((chunk_index < read_size) && (strcmp(&read_buffer[chunk_index], "\0") != 0)) {
         // Loop through individual line and copy values.
@@ -178,9 +170,6 @@ void read_line(char *read_buffer, size_t read_size) {
             chunk_index++;
         }
     }
-    // Last field so tokenize line one last time.
-    line_buffer[line_index] = '\0';
-    tokenize_line(line_buffer);
     free(line_buffer);
 }
 
@@ -303,6 +292,44 @@ char* remove_quotes(char* a_string) {
 }
 
 
+/**
+ * Sorts array by song name.
+ */
+void sort_array() {
+    int sorted_bool = 0;    // Holds if array has been sorted during this call.
+    int index = 1;          // Current index.
+    songs_struct* temp_song;
+
+    // Loop through all array elements and sort if necessary.
+    // Starts at 1 due to comparing two elements at once.
+    while (songs_array[index] != NULL) {
+        if (strcmp(songs_array[index - 1]->song_name, songs_array[index]->song_name) > 0) {
+            temp_song = songs_array[index - 1];
+            songs_array[index - 1] = songs_array[index];
+            songs_array[index] = temp_song;
+            sorted_bool = 1;
+        }
+        index++;
+    }
+
+    if (sorted_bool == 1) {
+        sort_array();
+    }
+}
+
+
+/**
+ * Prints all songs.
+ */
+void print_all_songs() {
+    int index = 0;
+    while (songs_array[index] != NULL) {
+        print_song_info(songs_array[index]);
+        index++;
+    }
+}
+
+
 /**
  * Attempts to find song with provided name. Prints result.
  */