diff --git a/userprog/parse_arguments.c b/userprog/parse_arguments.c
index 71abd85bcc806cd23e693f543bf4d8891c9a2aee..785058f398ca3121392e632434da63ad3f008166 100644
--- a/userprog/parse_arguments.c
+++ b/userprog/parse_arguments.c
@@ -14,6 +14,12 @@ int parse_arguments(const char* command_line, char**argv) {
     printf("parse_arguments(): argv[0] = '%s'\n", argv[0]);
     argc++;
     // now, parse token-by-token for any additional arguments
-    // TODO: implementation!
+    char* token = strtok_r(NULL, " ", &state_pointer);
+    while (token != NULL) {
+        argv[argc] = token;
+        printf("parse_arguments(): argv[%d] = '%s'\n", argc, argv[argc]);
+        argc++;
+        token = strtok_r(NULL, " ", &state_pointer);
+    }
     return argc;
 }
diff --git a/userprog/process.c b/userprog/process.c
index ce72cf27604a863c4c658a2f26ebc05da80f86c4..34c5aa6f41d17f760dcc720a374fad5d6aa2ffc9 100644
--- a/userprog/process.c
+++ b/userprog/process.c
@@ -241,7 +241,9 @@ load (const char *command, void (**eip) (void), void **esp)
   strlcpy(command_copy, command, 255);
   printf("load(): command_copy = '%s'\n", command_copy);
   int argc = parse_arguments(command_copy, argv);
-  printf("load(): argv[0] = '%s'\n", argv[0]);
+  for (int i = 0; i < argc; i++) {
+    printf("load(): argv[%d] = '%s'\n", i, argv[i]);
+  }
   char* file_name = argv[0]; // file name is always argument 0
 
   /* Allocate and activate page directory. */