diff --git a/src/built_in.c b/src/built_in.c
index 848b6f0a7594ab158606b6ac3f28d5ed4ef39bb4..1644fdb21fff3b3bfbf578749722667960d92c66 100644
--- a/src/built_in.c
+++ b/src/built_in.c
@@ -37,13 +37,20 @@ int do_fg(int argc, char** argv) {
   if (!validate_fg_argv(argc, argv))
     return -1;
 
-  int pid = waitpid(0,0,0);
+  int pid;
+  int stat;
 
-  if(pid == -1)
-	printf("Current: no such job\n");
-  
+  pid = fork();
+  waitpid(pid, &stat, 0);
+
+  if(WIFEXITED(stat))
+  {
+    printf("%d done", pid);
+  }
   else
-	printf("%d done\n", pid);
+  {
+    printf("%d running", pid);
+  }
 
   return 0;
 }
diff --git a/src/commands.c b/src/commands.c
index 55bcd9cda89e047247cdb13a6aa39d5c9293ac54..eea613d2966bbd1dfa0f8e09b1b188770476e096 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -59,30 +59,37 @@ int evaluate_command(int n_commands, struct single_command (*commands)[512])
     } else if (strcmp(com->argv[0], "exit") == 0) {
       return 1;
     } 
-      else {
-
-      pid_t pid;
-      pid = fork();
-
-      switch(pid)
+      else
       {
-	case -1 :
-	//printf("fail\n");
-
-	case 0 :
-	execv(com->argv[0], com->argv);
-	fprintf(stderr, "%s: command not found\n", com->argv[0]);
-	return -1;
 
-	default :
-	wait((int*)0);
-	//printf("complete\n");
-      	return -1;
+        pid_t pid;
+        pid = fork();
+	if(pid<0)
+	printf("FAIL \n");
+	else if(pid==0)
+	{
+		if(strcmp(com->argv[0], "ls")==0 || strcmp(com->argv[0], "cat")==0)
+		{
+			char path[]= "/bin/";
+			strcat(path, com->argv[0]);
+			com->argv[0]=path;
+			execv(com->argv[0], com->argv);
+		}
+		else if(strcmp(com->argv[0], "vim")==0)
+		{
+			char path[]="/usr/bin/";
+			strcat(path, com->argv[0]);
+			com->argv[0]=path;
+			execv(com->argv[0], com->argv);
+		}
+		else
+		execv(com->argv[0], com->argv);
+	}
+	else
+	wait(&pid);	
       }
-    }
-  }
-
   return 0;
+ }
 }
 
 void free_commands(int n_commands, struct single_command (*commands)[512])
diff --git a/src/main.c b/src/main.c
index de5e5291d299b1c97ecdb747f96dd94b61fdfd44..23cc7d10f3e98b73ab00ad521f647c1cc2f63c13 100644
--- a/src/main.c
+++ b/src/main.c
@@ -12,20 +12,20 @@ int main()
 {
   char buf[8096];
 
-  signal(SIGINT, catch_sigint);
-  signal(SIGTSTP, catch_sigtstp);
+  catch_sigint(SIGINT);
+  catch_sigtstp(SIGTSTP);
 
   while (1) {
     fgets(buf, 8096, stdin);
 
-    struct single_command commands[512];
+    struct single_command commands[512]; //argv
     int n_commands = 0;
     mysh_parse_command(buf, &n_commands, &commands);
 
     int ret = evaluate_command(n_commands, &commands);
 
     free_commands(n_commands, &commands);
-    n_commands = 0;
+    n_commands = 0; //argc
 
     if (ret == 1) {
       break;
diff --git a/src/signal_handlers.c b/src/signal_handlers.c
index a599b8a16e6a81c02099a4686de178919aa372fc..8e341220ffbf6587d1c53822f70afdd177ae2c86 100644
--- a/src/signal_handlers.c
+++ b/src/signal_handlers.c
@@ -5,10 +5,11 @@
 void catch_sigint(int signalNo)
 {
   signal(signalNo, SIG_IGN);
+  return ;
 }
 
 void catch_sigtstp(int signalNo)
 {
   signal(signalNo, SIG_IGN);
-
+  return ;
 }