diff --git a/userprog/syscall.c b/userprog/syscall.c
index b2a467fbeeb37c54c80b70394c71372b205952c5..98fc8eb0fd70fdde9f1b3f4f4398edd7676cc790 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. */
@@ -88,15 +89,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