diff --git a/Makefile.build b/Makefile.build
index 30d709bed0682faf702cab87e8fe75b2e85cffd3..2fb7073287800f5c80383e3a10287304011d6a18 100644
--- a/Makefile.build
+++ b/Makefile.build
@@ -67,6 +67,7 @@ userprog_SRC += userprog/syscall_exit.c
 userprog_SRC += userprog/syscall_halt.c
 userprog_SRC += userprog/syscall_wait.c
 userprog_SRC += userprog/syscall_create.c
+userprog_SRC += userprog/syscall_write.c
 
 # No virtual memory code yet.
 #vm_SRC = vm/file.c			# Some file.
diff --git a/userprog/syscall.c b/userprog/syscall.c
index c78175f256fa5a9e0b31bda1d2ae6fe2fb2bdd07..24a265420b8dd82f46874e7cd85af02ca9f36c36 100644
--- a/userprog/syscall.c
+++ b/userprog/syscall.c
@@ -70,9 +70,11 @@ syscall_handler (struct intr_frame *f UNUSED)
   case SYSCALL_CREATE:
     syscall_create(f);
     break;
+  case SYSCALL_WRITE:
+    syscall_write(f);
+    break;
   default:
     printf ("WARNING: Invalid Syscall (%d)\n", syscall_number);
     thread_exit ();
   }
-  // TODO: remove this call to exit as we don't want all syscalls to make the thread exit
 }
diff --git a/userprog/syscall_write.c b/userprog/syscall_write.c
new file mode 100644
index 0000000000000000000000000000000000000000..cf476a75ac71b4cca1b482a88a46d47f4fb97edc
--- /dev/null
+++ b/userprog/syscall_write.c
@@ -0,0 +1,12 @@
+/*
+ * The Write System Call
+ *
+ * Authored by Joshua Saxby
+ */
+#include "system_calls.h"
+#include "threads/interrupt.h"
+
+void syscall_write(struct intr_frame *f) {
+    // TODO: implement me!
+    (void*)0;
+}
diff --git a/userprog/system_calls.h b/userprog/system_calls.h
index 6fadcd1f7e3d556e4884521bb746da97de11b6e0..be83270c704309e07150583226503aafc2ce1c82 100644
--- a/userprog/system_calls.h
+++ b/userprog/system_calls.h
@@ -35,6 +35,13 @@ void syscall_wait(struct intr_frame *f);
  */
 void syscall_create(struct intr_frame *f);
 
+/*
+ * Writes size bytes from buffer to the open file fd.
+ * Returns the number of bytes actually written, which may be less than size if
+ * some bytes could not be written.
+ */
+void syscall_write(struct intr_frame *f);
+
 /*
  * NOTE: There are more system calls implemented by Pintos but we are not
  * implementing them because the assignment brief does not ask of it.