diff --git a/adb_install.cpp b/adb_install.cpp
index f227bc0..c18126d 100644
--- a/adb_install.cpp
+++ b/adb_install.cpp
@@ -24,17 +24,13 @@
 #include <sys/stat.h>
 #include <signal.h>
 #include <fcntl.h>
+#include <stdio.h>
 
 #include "ui.h"
 #include "cutils/properties.h"
-#include "install.h"
-#include "common.h"
 #include "adb_install.h"
 extern "C" {
 #include "minadbd/adb.h"
-#include "twinstall.h"
-#include "data.h"
-int TWinstall_zip(const char* path, int* wipe_cache);
 }
 
 static RecoveryUI* ui = NULL;
@@ -47,20 +43,20 @@
    It's not a critical error so we're disabling the error messages.
         ui->Print("failed to open driver control: %s\n", strerror(errno));
 */
-		LOGI("failed to open driver control: %s\n", strerror(errno));
+		printf("failed to open driver control: %s\n", strerror(errno));
         return;
     }
     if (write(fd, enabled ? "1" : "0", 1) < 0) {
 /*
         ui->Print("failed to set driver control: %s\n", strerror(errno));
 */
-		LOGI("failed to set driver control: %s\n", strerror(errno));
+		printf("failed to set driver control: %s\n", strerror(errno));
     }
     if (close(fd) < 0) {
 /*
         ui->Print("failed to close driver control: %s\n", strerror(errno));
 */
-		LOGI("failed to close driver control: %s\n", strerror(errno));
+		printf("failed to close driver control: %s\n", strerror(errno));
     }
 }
 
@@ -76,28 +72,29 @@
     char value[PROPERTY_VALUE_MAX+1];
     int len = property_get("ro.debuggable", value, NULL);
     if (len == 1 && value[0] == '1') {
-        ui->Print("Restarting adbd...\n");
+        printf("Restarting adbd...\n");
         set_usb_driver(true);
         property_set("ctl.start", "adbd");
     }
 }
 
 int
-apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) {
-    ui = ui_;
+apply_from_adb(const char* install_file) {
 
     stop_adbd();
     set_usb_driver(true);
-
+/*
     ui->Print("\n\nNow send the package you want to apply\n"
               "to the device with \"adb sideload <filename>\"...\n");
-
+*/
     pid_t child;
     if ((child = fork()) == 0) {
         execl("/sbin/recovery", "recovery", "--adbd", install_file, NULL);
         _exit(-1);
     }
-	DataManager_SetIntValue("tw_child_pid", child);
+	char child_prop[PROPERTY_VALUE_MAX];
+	sprintf(child_prop, "%i", child);
+	property_set("tw_child_pid", child_prop);
     int status;
     // TODO(dougz): there should be a way to cancel waiting for a
     // package (by pushing some button combo on the device).  For now
@@ -105,20 +102,19 @@
     // package, like "/dev/null".
     waitpid(child, &status, 0);
     if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
-        ui->Print("status %d\n", WEXITSTATUS(status));
+        printf("status %d\n", WEXITSTATUS(status));
     }
-	DataManager_SetIntValue("tw_has_cancel", 0); // Remove cancel button from gui now that the zip install is going to start
     set_usb_driver(false);
     maybe_restart_adbd();
 
     struct stat st;
     if (stat(install_file, &st) != 0) {
         if (errno == ENOENT) {
-            ui->Print("No package received.\n");
+            printf("No package received.\n");
         } else {
-            ui->Print("Error reading package:\n  %s\n", strerror(errno));
+            printf("Error reading package:\n  %s\n", strerror(errno));
         }
-        return INSTALL_ERROR;
+        return -1;
     }
-	return TWinstall_zip(install_file, wipe_cache);
+	return 0;
 }
