diff --git a/extendedcommands.c b/extendedcommands.c
index 507810b..29dfb93 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -796,6 +796,7 @@
                             "Wipe Battery Stats",
                             "Report Error",
                             "Key Test",
+                            "Restart adbd",
                             NULL
     };
 
@@ -847,6 +848,11 @@
                 }
                 while (action != GO_BACK);
             }
+            case 5:
+            {
+                __system("kill $(ps | grep adbd)");
+                __system("/sbin/adbd &");
+            }
         }
     }
 }
diff --git a/hijack/Android.mk b/hijack/Android.mk
index f877f39..c08d200 100644
--- a/hijack/Android.mk
+++ b/hijack/Android.mk
@@ -6,7 +6,7 @@
 LOCAL_SRC_FILES := hijack.c
 LOCAL_MODULE := hijack
 LOCAL_MODULE_TAGS := eng
-LOCAL_STATIC_LIBRARIES := libmtdutils libcutils libc
+LOCAL_STATIC_LIBRARIES := libbusybox libclearsilverregex libm libcutils libc
 LOCAL_FORCE_STATIC_EXECUTABLE := true
 LOCAL_CFLAGS += -DBOARD_HIJACK_RECOVERY_PATH=\"$(BOARD_HIJACK_RECOVERY_PATH)\"
 include $(BUILD_EXECUTABLE)
diff --git a/hijack/hijack.c b/hijack/hijack.c
index 231408d..eb55de5 100644
--- a/hijack/hijack.c
+++ b/hijack/hijack.c
@@ -19,33 +19,33 @@
 
 #include <signal.h>
 #include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
 
+#include <limits.h>
 
-#define RECOVERY_MODE_FILE "/cache/.recovery_mode"
+#include <cutils/properties.h>
+
+#define RECOVERY_MODE_FILE "/data/.recovery_mode"
 #define UPDATE_BINARY BOARD_HIJACK_RECOVERY_PATH"/update-binary"
 #define UPDATE_PACKAGE BOARD_HIJACK_RECOVERY_PATH"/recovery.zip"
-#define BUSYBOX BOARD_HIJACK_RECOVERY_PATH"/busybox"
-#define PREPARE_SCRIPT BOARD_HIJACK_RECOVERY_PATH"/prepare.sh"
+#define PRERECOVERY_BOOT BOARD_HIJACK_RECOVERY_PATH"/prerecoveryboot.sh"
 
-// This was pulled from bionic: The default system command always looks
-// for shell in /system/bin/sh. This is bad.
-#define _PATH_BSHELL BOARD_HIJACK_RECOVERY_PATH"/sh"
-
-extern char **environ;
 int
-__system(const char *command)
+exec_and_wait(char** argp)
 {
   pid_t pid;
     sig_t intsave, quitsave;
     sigset_t mask, omask;
     int pstat;
-    char *argp[] = {"sh", "-c", NULL, NULL};
-
-    if (!command)        /* just checking... */
-        return(1);
-
-    argp[2] = (char *)command;
-
+    
     sigemptyset(&mask);
     sigaddset(&mask, SIGCHLD);
     sigprocmask(SIG_BLOCK, &mask, &omask);
@@ -55,7 +55,7 @@
         return(-1);
     case 0:                /* child */
         sigprocmask(SIG_SETMASK, &omask, NULL);
-        execve(_PATH_BSHELL, argp, environ);
+        execve(argp[0], argp, environ);
     _exit(127);
   }
 
@@ -68,12 +68,27 @@
     return (pid == -1 ? -1 : pstat);
 }
 
+typedef char* string;
+
 int main(int argc, char** argv) {
     char* hijacked_executable = argv[0];
     struct stat info;
     
     if (NULL != strstr(hijacked_executable, "hijack")) {
         // no op
+        if (argc >= 2) {
+            if (strcmp("sh", argv[1]) == 0) {
+                return ash_main(argc - 1, argv + 1);
+            }
+            if (strcmp("mount", argv[1]) == 0) {
+                printf("mount!\n");
+                return mount_main(argc - 1, argv + 1);
+            }
+            if (strcmp("umount", argv[1]) == 0) {
+                printf("umount!\n");
+                return umount_main(argc - 1, argv + 1);
+            }
+        }
         printf("Hijack!\n");
         return 0;
     }
@@ -81,19 +96,46 @@
     char cmd[PATH_MAX];
     if (0 == stat(RECOVERY_MODE_FILE, &info)) {
         remove(RECOVERY_MODE_FILE);
-        kill(getppid(), SIGKILL);
         sprintf(cmd, "%s 2 0 %s", UPDATE_BINARY, UPDATE_PACKAGE);
-        return __system(cmd);
+        
+        char* remount_root_args[] = { "/system/bin/hijack", "mount", "-orw,remount", "/", NULL };
+        //mount_main(3, remount_root_args);
+        //__system("/system/bin/hijack mount -orw,remount /");
+        exec_and_wait(remount_root_args);
+
+        mkdir("/preinstall", S_IRWXU);
+        mkdir("/tmp", S_IRWXU);
+        mkdir("/res", S_IRWXU);
+        mkdir("/res/images", S_IRWXU);
+        remove("/etc");
+        mkdir("/etc", S_IRWXU);
+        rename("/sbin/adbd", "/sbin/adbd.old");
+        property_set("ctl.stop", "runtime");
+        property_set("ctl.stop", "zygote");
+        property_set("persist.service.adb.enable", "1");
+
+        char* mount_preinstall_args[] = { "/system/bin/hijack", "mount", "/dev/block/preinstall", "/preinstall", NULL };
+        //mount_main(3, mount_preinstall_args);
+        //__system("/system/bin/hijack mount /dev/block/preinstall /preinstall");
+        exec_and_wait(mount_preinstall_args);
+
+        char* umount_args[] = { "/system/bin/hijack", "umount", "-l", "/system", NULL };
+        exec_and_wait(umount_args);
+
+        char* updater_args[] = { UPDATE_BINARY, "2", "0", UPDATE_PACKAGE, NULL };
+        return exec_and_wait(updater_args);
     }
     
-    sprintf(cmd, "%s.bin", hijacked_executable);
+    char real_executable[PATH_MAX];
+    sprintf(real_executable, "%s.bin", hijacked_executable);
+    string* argp = (string*)malloc(sizeof(string) * (argc + 1));
     int i;
-    for (i = 1; i < argc; i++) {
-        strcat(cmd, " '");
-        strcat(cmd, argv[i]);
-        strcat(cmd, "'");
+    for (i = 0; i < argc; i++) {
+        argp[i]=argv[i];
     }
+    argp[argc] = NULL;
     
-    __system(PREPARE_SCRIPT);
-    return __system(cmd);
+    argp[0] = real_executable;
+    
+    return exec_and_wait(argp);
 }
diff --git a/hijack/prepare.sh b/hijack/prepare.sh
deleted file mode 100644
index cfa6322..0000000
--- a/hijack/prepare.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/preinstall/recovery/sh
-export PATH=$PATH:/preinstall/recovery
-busybox mount -orw,remount /
-busybox mkdir -p /res/images
diff --git a/killrecovery.sh b/killrecovery.sh
index 776725e..352cb4b 100755
--- a/killrecovery.sh
+++ b/killrecovery.sh
@@ -3,8 +3,8 @@
 rm /cache/recovery/command
 rm /cache/update.zip
 touch /tmp/.ignorebootmessage
-#kill $(ps | grep /sbin/adbd)
-#kill $(ps | grep /sbin/recovery)
+kill $(ps | grep /sbin/adbd)
+kill $(ps | grep /sbin/recovery)
 
 # On the Galaxy S, the recovery comes test signed, but the
 # recovery is not automatically restarted.
@@ -13,9 +13,10 @@
     /sbin/recovery &
 fi
 
-if [ -f init.mapphone_cdma.rc ]
+# Droid X
+if [ -f /init.mapphone_cdma.rc ]
 then
     /sbin/recovery &
 fi
 
-exit 1
\ No newline at end of file
+exit 1
