diff --git a/gui/action.cpp b/gui/action.cpp
index d758430..e7f74d4 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -56,6 +56,7 @@
 
 #include "rapidxml.hpp"
 #include "objects.hpp"
+#include "../tw_atomic.hpp"
 
 void curtainClose(void);
 
@@ -169,6 +170,7 @@
 		mf["fixsu"] = &GUIAction::fixsu;
 		mf["startmtp"] = &GUIAction::startmtp;
 		mf["stopmtp"] = &GUIAction::stopmtp;
+		mf["cancelbackup"] = &GUIAction::cancelbackup;
 
 		// remember actions that run in the caller thread
 		for (mapFunc::const_iterator it = mf.begin(); it != mf.end(); ++it)
@@ -314,6 +316,13 @@
 	gui_print("Simulating actions...\n");
 	for (int i = 0; i < 5; i++)
 	{
+		if (PartitionManager.stop_backup.get_value()) {
+			DataManager::SetValue("tw_cancel_backup", 1);
+			gui_print("Backup Canceled.\n");
+			DataManager::SetValue("ui_progress", 0);
+			PartitionManager.stop_backup.set_value(0);
+			return;
+		}
 		usleep(500000);
 		DataManager::SetValue("ui_progress", i * 20);
 	}
@@ -1087,13 +1096,13 @@
 
 int GUIAction::nandroid(std::string arg)
 {
-	operation_start("Nandroid");
-	int ret = 0;
-
 	if (simulate) {
 		DataManager::SetValue("tw_partition", "Simulation");
 		simulate_progress_bar();
 	} else {
+		operation_start("Nandroid");
+		int ret = 0;
+
 		if (arg == "backup") {
 			string Backup_Name;
 			DataManager::GetValue(TW_BACKUP_NAME, Backup_Name);
@@ -1103,7 +1112,6 @@
 			else {
 				operation_end(1);
 				return -1;
-
 			}
 			DataManager::SetValue(TW_BACKUP_NAME, "(Auto Generate)");
 		} else if (arg == "restore") {
@@ -1112,16 +1120,42 @@
 			ret = PartitionManager.Run_Restore(Restore_Name);
 		} else {
 			operation_end(1);
-					return -1;
-				}
-			}
-			DataManager::SetValue("tw_encrypt_backup", 0);
+			return -1;
+		}
+		DataManager::SetValue("tw_encrypt_backup", 0);
+		if (!PartitionManager.stop_backup.get_value()) {
 			if (ret == false)
 				ret = 1; // 1 for failure
 			else
 				ret = 0; // 0 for success
+			DataManager::SetValue("tw_cancel_backup", 0);
 			operation_end(ret);
-			return 0;
+		}
+		else {
+			DataManager::SetValue("tw_cancel_backup", 1);
+			gui_print("Backup Canceled.\n");
+			ret = 0;
+		}
+		return ret;
+	}
+	return 0;
+}
+
+int GUIAction::cancelbackup(std::string arg) {
+	if (simulate) {
+		simulate_progress_bar();
+		PartitionManager.stop_backup.set_value(1);
+		operation_end(0);
+	}
+	else {
+		operation_start("Cancel Backup");
+		int op_status = PartitionManager.Cancel_Backup();
+		if (op_status != 0)
+			op_status = 1; // failure
+		operation_end(op_status);
+	}
+
+	return 0;
 }
 
 int GUIAction::fixpermissions(std::string arg)
