diff --git a/examples/Makefile b/examples/Makefile
index 5978c517ee6441ee1b16dc5261324ab741fc3c2c..41a663d610cb89d30b7aa0277a644b0f63a2c0c5 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -3,7 +3,7 @@ SRCDIR = ..
 # Test programs to compile, and a list of sources for each.
 # To add a new test, put its name on the PROGS list
 # and then add a name_SRC line that lists its source files.
-PROGS = cat cmp cp echo exit halt hex-dump ls mcat mcp mkdir pwd rm shell \
+PROGS = cat cmp cp echo halt hex-dump ls mcat mcp mkdir pwd rm shell \
 	bubsort insult lineup matmult recursor my
 
 # Should work from project 2 onward.
@@ -11,7 +11,6 @@ cat_SRC = cat.c
 cmp_SRC = cmp.c
 cp_SRC = cp.c
 echo_SRC = echo.c
-exit_SRC = exit.c
 halt_SRC = halt.c
 hex-dump_SRC = hex-dump.c
 insult_SRC = insult.c
diff --git a/examples/exit.c b/examples/exit.c
deleted file mode 100644
index 2a45b770b0d8a9576c9cb5e8c4cd932edd5418b9..0000000000000000000000000000000000000000
--- a/examples/exit.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* halt.c
-
-   Simple program to test whether running a user program works.
- 	
-   Just invokes a system call that shuts down the OS. */
-
-#include <syscall.h>
-
-int
-main (void)
-{
-  exit (5);
-  /* not reached */
-}
diff --git a/userprog/syscall.c b/userprog/syscall.c
index cd6f391be6f5b7fe90472bf456d222f0f27d1676..6df02082e2b884b32149e4db5bc50165bedbe258 100644
--- a/userprog/syscall.c
+++ b/userprog/syscall.c
@@ -58,9 +58,6 @@ syscall_handler (struct intr_frame *f UNUSED)
   case SYSCALL_HALT:
     syscall_halt(f);
     break;
-  case SYSCALL_EXIT:
-    syscall_exit(f);
-    break;
   case SYSCALL_EXEC:
     syscall_exec(f);
     break;
diff --git a/userprog/syscall_exit.c b/userprog/syscall_exit.c
deleted file mode 100644
index 51b22083bc4002bcdb60a605a4fee48c3001be89..0000000000000000000000000000000000000000
--- a/userprog/syscall_exit.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "system_calls.h"
-#include "threads/interrupt.h" // Dependency for intr_frame struct
-#include "threads/thread.h" // Dependency for thread struct
-
-void syscall_exit(struct intr_frame *f) {
-	struct thread *current_thread;	// creates thread struct from thread.h
-	current_thread = thread_current(); // Sets current thread
-
-	// pop off first int argument from interrupt frame
-	int exit_code = *((int*)f->esp + 1);
-	current_thread->exit_code = exit_code; // Returns exit code to kernel
-
-	thread_exit(); // Exiting current thread
-	f->eax = -1; // Returning -1 for success
-}
\ No newline at end of file
diff --git a/userprog/system_calls.h b/userprog/system_calls.h
index 8afd9b2d163905d9e29633640499ded78fc48215..750ace2c20b8aa81223cbbd19912da5df658ade6 100644
--- a/userprog/system_calls.h
+++ b/userprog/system_calls.h
@@ -17,14 +17,6 @@ struct file_map
  */
 void syscall_halt(struct intr_frame *f);
 
-/*
- * Terminates the current user program, returning status to the kernel. If the
- * process's parent waits for it (see below), this is the status that will be
- * returned. Conventionally, a status of 0 indicates success and nonzero
- * values indicate errors. 
- */
-void syscall_exit(struct intr_frame *f);
-
 /*
  * Runs the executable whose name is given in cmd_line, passing any given
  * arguments, and returns the new process's program id (pid). Must return pid