diff --git a/Main.c b/Main.c
index 932d1a6b548de554fd1566a6c9980cb5d003dbbc..dc945ef525eb701af3769e418befbcb3b1267188 100644
--- a/Main.c
+++ b/Main.c
@@ -85,7 +85,7 @@ void change_directory();    // Change current directory.
 char* get_directory_path(); // Gets full pathname of current directory.
 void get_umask();           // Gets current umask value.
 void set_umask();           // Sets umask value.
-void handler();             // Handler for ctrl+c signal.
+void interupt_handler();    // Handler for ctrl+c signal.
 void free_memory();         // Frees memory of vars.
 
 void make_arg_example();
@@ -103,7 +103,7 @@ int main(int argc, char* argv[]) {
 
     // Set ctrl+c signal interupt.
     memset(&action, '\0', sizeof(action));
-    action.sa_handler = handler;
+    action.sa_handler = interupt_handler;
     action.sa_flags = SA_RESTART;
     sigaction(SIGINT, &action, NULL);
 
@@ -148,6 +148,7 @@ int main(int argc, char* argv[]) {
         user_input = get_user_input_with_prompt("");
         free(current_directory);
         parse_line(user_input);
+        free(user_input);
 
         // Make sure at least one command is present.
         if (line_argv->argc > 0) {
@@ -201,8 +202,6 @@ int main(int argc, char* argv[]) {
             } else {
                 execute_command();
             }
-
-            free(user_input);
             free_memory();
         }
     }
@@ -323,8 +322,11 @@ void recursive_execute(int argc, makeargv_struct* args, int current_arg) {
             ++temp_pointer;
             index++;
         }
-        execvp(**temp_pointer->argv, *temp_pointer->argv);
-        err_sys("Failed to exec.");
+        if (execvp(**temp_pointer->argv, *temp_pointer->argv) == -1) {
+            err_msg("Invalid exec arg(s).");
+            free_memory();
+            exit(-1);
+        }
     }
 }
 
@@ -435,7 +437,7 @@ void set_umask(char* string_val) {
 /**
  * Handler for ctrl+c signal.
  */
-void handler() {
+void interupt_handler() {
     printf(" - Nope.\n");
 }