diff --git a/userprog/syscall.c b/userprog/syscall.c
index e08f21a5955ada96170c0966f37edad2ebe3074e..a74a83ae5e991ac5c25d6653d59f5d84f103ad8b 100644
--- a/userprog/syscall.c
+++ b/userprog/syscall.c
@@ -4,7 +4,8 @@
 #include "system_calls.h"
 #include "threads/interrupt.h"
 #include "threads/thread.h"
-#include "lib/kernel/list.h" // Dependencies for 
+// Dependency for list_elem struct and list_next / is_tail functions
+#include "lib/kernel/list.h"
 
 
 /* System call numbers. */
@@ -82,15 +83,30 @@ syscall_handler (struct intr_frame *f UNUSED)
 
 static struct list *file_list;
 
-// Goes through all the files in the file_list and looks for the 
+/* Goes through all the files in the file_list and looks for the given file 
+ * Descriptor.
+ */
 void file_search(struct file_map *f) {
+	// Creates a struct to hold the currently checked file
 	struct file_map *curr_file;
+	// Creates the list element to test for end of list
 	struct list_elem *list_element;
 	*list_element = *list_begin(file_list);
+
+	// Loop to check each file in the linked list in turn
 	while ((curr_file->file_descriptor != f->file_descriptor) &&
-		(is_tail(curr_file->list_element) == false)
+		(is_tail(list_element) == false)
 		) {
-		*list_element = curr_file->list_element;
+		// Swaps the list_element for the next one in place
 		list_next(list_element);
 	}
+	// Copies list_element to current file
+	curr_file->list_element = *list_element;
+	// Checks if file has been found returning NULL if not or the file if it has
+	if (curr_file->file_descriptor != f->file_descriptor) {
+		f->file = NULL;
+	}
+	else {
+		f = curr_file;
+	}
 }
\ No newline at end of file