diff --git a/src/built_in.c b/src/built_in.c
index 9a466e91501d5877107fb67e308275c4847bcb38..2b884030f470e315cb0f2b4d55f2e29196304ff3 100644
--- a/src/built_in.c
+++ b/src/built_in.c
@@ -5,8 +5,11 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <linux/limits.h>
+#include <io.h>
 
 #include "built_in.h"
+#include "signal_handlers.h"
+#include "commands.h"
 
 int do_cd(int argc, char** argv) {
   if (!validate_cd_argv(argc, argv))
@@ -36,11 +39,24 @@ int do_fg(int argc, char** argv) {
   if (!validate_fg_argv(argc, argv))
     return -1;
 
-  // TODO: Fill this.
+  signal(SIGSTOP);
+  kill(pid,18)
 
   return 0;
 }
 
+int do_&(int argc, char** argv){
+  pid_t pid,buf;
+  if(!validate_&_argv(argc,argv))
+    return -1;
+
+  buf = process_creation(argv);
+  if( buf > 0)
+    pid = buf;
+
+  printf("%d",pid);
+}
+
 int validate_cd_argv(int argc, char** argv) {
   if (argc != 2) return 0;
   if (strcmp(argv[0], "cd") != 0) return 0;
@@ -66,3 +82,13 @@ int validate_fg_argv(int argc, char** argv) {
   
   return 1;
 }
+int validate_&_argv(int argc, char** argv){
+  if(argc != 1)
+    return 0;
+  if(strcmp(argv[0], "&") != 0)
+    return 0;
+  if(access(argv[0],00) == 0)
+    return 0;
+
+  return 1;
+}
diff --git a/src/commands.c b/src/commands.c
index 13e9c330aedcb9d3c1c0979a5b22fd7844516ada..c179b80fa74824fa55736c91f05648d8d0523e0d 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -9,7 +9,8 @@
 static struct built_in_command built_in_commands[] = {
   { "cd", do_cd, validate_cd_argv },
   { "pwd", do_pwd, validate_pwd_argv },
-  { "fg", do_fg, validate_fg_argv }
+  { "fg", do_fg, validate_fg_argv },
+  { "&", do_&, validate_&_argv }
 };
 
 static int is_built_in_command(const char* command_name)
@@ -28,6 +29,27 @@ static int is_built_in_command(const char* command_name)
 /*
  * Description: Currently this function only handles single built_in commands. You should modify this structure to launch process and offer pipeline functionality.
  */
+
+int process_creation(struct single_command (*commands)[]){
+  pid_t pid;
+
+  const char path[4096];
+  strcpy(path,commands);
+
+  pid = fork(); 
+
+
+  if(pid>=0){
+    if(pid == 0)
+      execv(path,commands->argv);
+
+    return pid;
+  }else{
+    printf("Sorry, Fork Failed!");
+    return -1;
+  }
+}
+
 int evaluate_command(int n_commands, struct single_command (*commands)[512])
 {
   if (n_commands > 0) {
@@ -49,7 +71,7 @@ int evaluate_command(int n_commands, struct single_command (*commands)[512])
       return 0;
     } else if (strcmp(com->argv[0], "exit") == 0) {
       return 1;
-    } else {
+    }else {
       fprintf(stderr, "%s: command not found\n", com->argv[0]);
       return -1;
     }