diff --git a/partition.cpp b/partition.cpp
index 89650db..6edc368 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -1612,7 +1612,7 @@
 	return false;
 }
 
-bool TWPartition::Check_MD5(string restore_folder) {
+bool TWPartition::Check_MD5(PartitionSettings *part_settings) {
 	string Full_Filename, md5file;
 	char split_filename[512];
 	int index = 0;
@@ -1621,7 +1621,7 @@
 	sync();
 
 	memset(split_filename, 0, sizeof(split_filename));
-	Full_Filename = restore_folder + "/" + Backup_FileName;
+	Full_Filename = part_settings->Restore_Name + "/" + part_settings->Backup_FileName;
 	if (!TWFunc::Path_Exists(Full_Filename)) {
 		// This is a split archive, we presume
 		sprintf(split_filename, "%s%03i", Full_Filename.c_str(), index);
@@ -1647,7 +1647,7 @@
 		// Single file archive
 		md5file = Full_Filename + ".md5";
 		if (!TWFunc::Path_Exists(md5file)) {
-			gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(split_filename));
+			gui_msg(Msg(msg::kError, "no_md5_found=No md5 file found for '{1}'. Please unselect Enable MD5 verification to restore.")(md5file));
 			return false;
 		}
 		md5sum.setfn(Full_Filename);
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index a326d79..1c7a970 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -551,11 +551,21 @@
 	part_settings->Backup_FileName = part_settings->Part->Backup_Name + "." +  part_settings->Part->Current_File_System + ".win";
 	if (part_settings->Part->Backup(part_settings, &tar_fork_pid)) {
 		bool md5Success = false;
+		if (part_settings->adbbackup) {
+			md5Success = true;
+		}
+		else
+			md5Success = Make_MD5(part_settings);
+
+		TWFunc::SetPerformanceMode(false);
 		if (part_settings->Part->Has_SubPartition) {
 			std::vector<TWPartition*>::iterator subpart;
+			TWPartition *parentPart = part_settings->Part;
 
 			for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
-				if ((*subpart)->Can_Be_Backed_Up && (*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == part_settings->Part->Mount_Point) {
+				part_settings->Part = *subpart;
+				if ((*subpart)->Can_Be_Backed_Up && (*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
+					part_settings->Backup_FileName = part_settings->Part->Backup_Name + "." +  part_settings->Part->Current_File_System + ".win";
 					if (!(*subpart)->Backup(part_settings, &tar_fork_pid)) {
 						TWFunc::SetPerformanceMode(false);
 						Clean_Backup_Folder(part_settings->Backup_Folder);
@@ -577,6 +587,7 @@
 		time(&stop);
 		int backup_time = (int) difftime(stop, start);
 		LOGINFO("Partition Backup time: %d\n", backup_time);
+
 		if (part_settings->Part->Backup_Method == BM_FILES) {
 			part_settings->file_time += backup_time;
 		} else {
@@ -584,13 +595,6 @@
 
 		}
 
-		if (part_settings->adbbackup) {
-			md5Success = true;
-		}
-		else
-			md5Success = Make_MD5(part_settings);
-		TWFunc::SetPerformanceMode(false);
-
 		return md5Success;
 	} else {
 		Clean_Backup_Folder(part_settings->Backup_Folder);
@@ -889,10 +893,12 @@
 	}
 	if (part_settings->Part->Has_SubPartition) {
 		std::vector<TWPartition*>::iterator subpart;
+		TWPartition *parentPart = part_settings->Part;
 
 		for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
-
-			if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == part_settings->Part->Mount_Point) {
+			part_settings->Part = *subpart;
+			if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
+				part_settings->Part = (*subpart);
 				if (!(*subpart)->Restore(part_settings)) {
 					TWFunc::SetPerformanceMode(false);
 					return false;
@@ -953,16 +959,19 @@
 					return false;
 				}
 
-				if (check_md5 > 0 && !part_settings.Part->Check_MD5(Restore_Name))
+				if (check_md5 > 0 && !part_settings.Part->Check_MD5(&part_settings))
 					return false;
 				part_settings.partition_count++;
 				part_settings.total_restore_size += part_settings.Part->Get_Restore_Size(&part_settings);
 				if (part_settings.Part->Has_SubPartition) {
+					TWPartition *parentPart = part_settings.Part;
 					std::vector<TWPartition*>::iterator subpart;
 
 					for (subpart = Partitions.begin(); subpart != Partitions.end(); subpart++) {
-						if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == part_settings.Part->Mount_Point) {
-							if (check_md5 > 0 && !(*subpart)->Check_MD5(Restore_Name))
+						part_settings.Backup_FileName = parentPart->Backup_Name + "." +  parentPart->Current_File_System + ".win";
+						part_settings.Part = *subpart;
+						if ((*subpart)->Is_SubPartition && (*subpart)->SubPartition_Of == parentPart->Mount_Point) {
+							if (check_md5 > 0 && !(*subpart)->Check_MD5(&part_settings))
 								return false;
 							part_settings.total_restore_size += (*subpart)->Get_Restore_Size(&part_settings);
 						}
diff --git a/partitions.hpp b/partitions.hpp
index 7416fbe..201a4e1 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -60,8 +60,8 @@
 	uint64_t img_bytes;                                                        // total image bytes of all emmc partitions
 	uint64_t file_bytes;                                                       // total file bytes of all file based partitions
 	int partition_count;                                                       // Number of partitions to restore
-	ProgressTracking *progress;
-	enum PartitionManager_Op PM_Method;                                        //Current operation of backup or restore
+	ProgressTracking *progress;                                                // Keep track of progress in GUI	
+	enum PartitionManager_Op PM_Method;                                        // Current operation of backup or restore
 };
 
 enum Backup_Method_enum {
@@ -94,7 +94,7 @@
 	bool Can_Resize();                                                        // Checks to see if we have everything needed to be able to resize the current file system
 	bool Resize();                                                            // Resizes the current file system
 	bool Backup(PartitionSettings *part_settings, pid_t *tar_fork_pid);       // Backs up the partition to the folder specified
-	bool Check_MD5(string restore_folder);                                    // Checks MD5 of a backup
+	bool Check_MD5(PartitionSettings *part_settings);                         // Checks MD5 of a backup
 	bool Restore(PartitionSettings *part_settings);                           // Restores the partition using the backup folder provided
 	unsigned long long Get_Restore_Size(PartitionSettings *part_settings);// Returns the overall restore size of the backup
 	string Backup_Method_By_Name();                                           // Returns a string of the backup method for human readable output
