diff --git a/gui/action.cpp b/gui/action.cpp
index 4c3d88e..afa52d1 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -29,7 +29,6 @@
 #include "../common.h"
 #include "../minuitwrp/minui.h"
 #include "../recovery_ui.h"
-#include "../extra-functions.h"
 #include "../variables.h"
 #include "../twinstall.h"
 
@@ -825,6 +824,7 @@
 		if (function == "partitionsd")
 		{
 			operation_start("Partition SD Card");
+			int ret_val = 0;
 
 			if (simulate) {
 				simulate_progress_bar();
@@ -834,75 +834,11 @@
 				if (allow_partition == 0) {
 					ui_print("This device does not have a real SD Card!\nAborting!\n");
 				} else {
-					// Below seen in Koush's recovery
-					char sddevice[256];
-					char mkdir_path[255];
-#ifdef TW_EXTERNAL_STORAGE_PATH
-					TWPartition* SDCard = PartitionManager.Find_Partition_By_Path(EXPAND(TW_EXTERNAL_STORAGE_PATH));
-#else
-					TWPartition* SDCard = PartitionManager.Find_Partition_By_Path("/sdcard");
-#endif
-					if (SDCard == NULL) {
-						LOGE("Unable to locate device to partition.\n");
-						operation_end(1, simulate);
-						return 0;
-					}
-					strcpy(sddevice, SDCard->Actual_Block_Device.c_str());
-					// Just need block not whole partition
-					sddevice[strlen("/dev/block/mmcblkX")] = '\0';
-
-					char es[64];
-					std::string ext_format, sd_path;
-					int ext, swap;
-					DataManager::GetValue("tw_sdext_size", ext);
-					DataManager::GetValue("tw_swap_size", swap);
-					DataManager::GetValue("tw_sdpart_file_system", ext_format);
-					sprintf(es, "/sbin/sdparted -es %dM -ss %dM -efs ext3 -s > /cache/part.log",ext,swap);
-					LOGI("\nrunning script: %s\n", es);
-					run_script("\nContinue partitioning?",
-						   "\nPartitioning sdcard : ",
-						   es,
-						   "\nunable to execute parted!\n(%s)\n",
-						   "\nOops... something went wrong!\nPlease check the recovery log!\n",
-						   "\nPartitioning complete!\n\n",
-						   "\nPartitioning aborted!\n\n", 0);
-					
-					// recreate TWRP folder and rewrite settings - these will be gone after sdcard is partitioned
-#ifdef TW_EXTERNAL_STORAGE_PATH
-					PartitionManager.Mount_By_Path(EXPAND(TW_EXTERNAL_STORAGE_PATH), 1);
-					DataManager::GetValue(TW_EXTERNAL_PATH, sd_path);
-					memset(mkdir_path, 0, sizeof(mkdir_path));
-					sprintf(mkdir_path, "%s/TWRP", sd_path.c_str());
-#else
-					PartitionManager.Mount_By_Path("/sdcard", 1);
-					strcpy(mkdir_path, "/sdcard/TWRP");
-#endif
-					mkdir(mkdir_path, 0777);
-					DataManager::Flush();
-#ifdef TW_EXTERNAL_STORAGE_PATH
-					DataManager::SetValue(TW_ZIP_EXTERNAL_VAR, EXPAND(TW_EXTERNAL_STORAGE_PATH));
-					if (DataManager::GetIntValue(TW_USE_EXTERNAL_STORAGE) == 1)
-						DataManager::SetValue(TW_ZIP_LOCATION_VAR, EXPAND(TW_EXTERNAL_STORAGE_PATH));
-#else
-					DataManager::SetValue(TW_ZIP_EXTERNAL_VAR, "/sdcard");
-					if (DataManager::GetIntValue(TW_USE_EXTERNAL_STORAGE) == 1)
-						DataManager::SetValue(TW_ZIP_LOCATION_VAR, "/sdcard");
-#endif
-					// This is sometimes needed to make a healthy ext4 partition
-					if (ext > 0 && strcmp(ext_format.c_str(), "ext4") == 0) {
-						char command[256];
-						LOGE("Fix this format command!\n");
-						//sprintf(command, "mke2fs -t ext4 -m 0 %s", sde.blk);
-						ui_print("Formatting sd-ext as ext4...\n");
-						LOGI("Formatting sd-ext after partitioning, command: '%s'\n", command);
-						system(command);
-						ui_print("DONE\n");
-					}
-
-					PartitionManager.Update_System_Details();
+					if (!PartitionManager.Partition_SDCard())
+						ret_val = 1; // failed
 				}
 			}
-			operation_end(0, simulate);
+			operation_end(ret_val, simulate);
 			return 0;
 		}
 		if (function == "installhtcdumlock")
