diff --git a/recovery.cpp b/recovery.cpp
index ce4358a..2c77271 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -45,6 +45,18 @@
 #include "minadbd/adb.h"
 }
 
+extern "C" {
+#include "extra-functions.h"
+#include "data.h"
+#include "gui/gui.h"
+}
+#include "partitions.hpp"
+
+int gui_init(void);
+int gui_loadResources(void);
+int gui_start(void);
+int gui_console_only(void);
+
 struct selabel_handle *sehandle;
 
 static const struct option OPTIONS[] = {
@@ -232,7 +244,7 @@
 }
 
 // How much of the temp log we have copied to the copy in cache.
-static long tmplog_offset = 0;
+//static long tmplog_offset = 0;
 
 static void
 copy_log_file(const char* source, const char* destination, int append) {
@@ -777,14 +789,34 @@
         return 0;
     }
 
-    printf("Starting recovery on %s", ctime(&start));
+    printf("Starting TWRP %s on %s", EXPAND(TW_VERSION_STR), ctime(&start));
+	// Recovery needs to install world-readable files, so clear umask
+    // set by init
+    umask(0);
 
-    Device* device = make_device();
-    ui = device->GetUI();
+    //Device* device = make_device();
+    //ui = device->GetUI();
 
-    ui->Init();
-    ui->SetBackground(RecoveryUI::NONE);
+	//ui->Init();
+    //ui->SetBackground(RecoveryUI::NONE);
     load_volume_table();
+
+	// Load default values to set DataManager constants and handle ifdefs
+	DataManager_LoadDefaults();
+	printf("Starting the UI...");
+	printf(" result was: %i\n", gui_init());
+	printf("=> Installing busybox into /sbin\n");
+	__system("/sbin/bbinstall.sh"); // Let's install busybox
+	printf("=> Linking mtab\n");
+	__system("ln -s /proc/mounts /etc/mtab"); // And link mtab for mke2fs
+	printf("=> Processing recovery.fstab\n");
+	if (TWPartitionManager::Process_Fstab("/etc/recovery.fstab", 1)) {
+		LOGE("Failing out of recovery due to problem with recovery.fstab.\n");
+		//return -1;
+	}
+	// Load up all the resources
+	gui_loadResources();
+
     get_args(&argc, &argv);
 
     int previous_runs = 0;
@@ -822,7 +854,7 @@
     }
 #endif
 
-    device->StartRecovery();
+    //device->StartRecovery();
 
     printf("Command:");
     for (arg = 0; arg < argc; arg++) {
@@ -849,9 +881,21 @@
     property_list(print_property, NULL);
     printf("\n");
 
+	// Check for and run startup script if script exists
+	check_and_run_script("/sbin/runatboot.sh", "boot");
+	check_and_run_script("/sbin/postrecoveryboot.sh", "boot");
+
+#ifdef TW_INCLUDE_INJECTTWRP
+	// Back up TWRP Ramdisk if needed:
+	LOGI("Backing up TWRP ramdisk...\n");
+	__system("injecttwrp --backup /tmp/backup_recovery_ramdisk.img");
+	LOGI("Backup of TWRP ramdisk done.\n");
+#endif
+
     int status = INSTALL_SUCCESS;
 
     if (update_package != NULL) {
+		gui_console_only();
         status = install_package(update_package, &wipe_cache, TEMPORARY_INSTALL_FILE);
         if (status == INSTALL_SUCCESS && wipe_cache) {
             if (erase_volume("/cache")) {
@@ -860,20 +904,28 @@
         }
         if (status != INSTALL_SUCCESS) ui->Print("Installation aborted.\n");
     } else if (wipe_data) {
-        if (device->WipeData()) status = INSTALL_ERROR;
-        if (erase_volume("/data")) status = INSTALL_ERROR;
-        if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
+		gui_console_only();
+		if (TWPartitionManager::Factory_Reset()) status = INSTALL_ERROR;
+        //if (device->WipeData()) status = INSTALL_ERROR;
+        //if (erase_volume("/data")) status = INSTALL_ERROR;
+        //if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
         if (status != INSTALL_SUCCESS) ui->Print("Data wipe failed.\n");
     } else if (wipe_cache) {
+		gui_console_only();
         if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
         if (status != INSTALL_SUCCESS) ui->Print("Cache wipe failed.\n");
     } else if (!just_exit) {
         status = INSTALL_ERROR;  // No command specified
     }
 
-    if (status != INSTALL_SUCCESS) ui->SetBackground(RecoveryUI::ERROR);
-    if (status != INSTALL_SUCCESS || ui->IsTextVisible()) {
-        prompt_and_wait(device);
+    //if (status != INSTALL_SUCCESS) ui->SetBackground(RecoveryUI::ERROR);
+    if (status != INSTALL_SUCCESS /*|| ui->IsTextVisible()*/) {
+		DataManager_ReadSettingsFile();
+
+		// Update some of the main data
+		update_tz_environment_variables();
+        gui_start();
+		//prompt_and_wait(device);
     }
 
     // Otherwise, get ready to boot the main system...
