diff --git a/Android.mk b/Android.mk
index a73311e..5537775 100644
--- a/Android.mk
+++ b/Android.mk
@@ -44,7 +44,7 @@
     twrp.cpp \
     fixContexts.cpp \
     twrpTar.cpp \
-    twrpDU.cpp \
+    exclude.cpp \
     twrpDigest.cpp \
     digest/md5.c \
     find_file.cpp \
diff --git a/data.cpp b/data.cpp
index 7755701..b034bf8 100644
--- a/data.cpp
+++ b/data.cpp
@@ -20,6 +20,7 @@
 #include <time.h>
 #include <string>
 #include <sstream>
+#include <fstream>
 #include <cctype>
 #include <cutils/properties.h>
 #include <unistd.h>
diff --git a/twrpDU.cpp b/exclude.cpp
similarity index 79%
rename from twrpDU.cpp
rename to exclude.cpp
index 08dfdcb..f992ecf 100644
--- a/twrpDU.cpp
+++ b/exclude.cpp
@@ -1,5 +1,5 @@
 /*
-		Copyright 2013 TeamWin
+		Copyright 2013 to 2016 TeamWin
 		This file is part of TWRP/TeamWin Recovery Project.
 
 		TWRP is free software: you can redistribute it and/or modify
@@ -21,33 +21,30 @@
 }
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <string.h>
+#include <dirent.h>
 #include <errno.h>
-#include <fcntl.h>
-#include <fstream>
 #include <string>
 #include <vector>
-#include <algorithm>
-#include "twrpDU.hpp"
+#include "exclude.hpp"
 #include "twrp-functions.hpp"
 #include "gui/gui.hpp"
+#include "twcommon.h"
 
 using namespace std;
 
 extern bool datamedia;
 
-twrpDU::twrpDU() {
+TWExclude::TWExclude() {
 	add_relative_dir(".");
 	add_relative_dir("..");
 	add_relative_dir("lost+found");
-	add_absolute_dir("/data/data/com.google.android.music/files");
 }
 
-void twrpDU::add_relative_dir(const string& dir) {
+void TWExclude::add_relative_dir(const string& dir) {
 	relativedir.push_back(dir);
 }
 
-void twrpDU::clear_relative_dir(string dir) {
+void TWExclude::clear_relative_dir(string dir) {
 	vector<string>::iterator iter = relativedir.begin();
 	while (iter != relativedir.end()) {
 		if (*iter == dir)
@@ -57,15 +54,11 @@
 	}
 }
 
-void twrpDU::add_absolute_dir(const string& dir) {
+void TWExclude::add_absolute_dir(const string& dir) {
 	absolutedir.push_back(TWFunc::Remove_Trailing_Slashes(dir));
 }
 
-vector<string> twrpDU::get_absolute_dirs(void) {
-	return absolutedir;
-}
-
-uint64_t twrpDU::Get_Folder_Size(const string& Path) {
+uint64_t TWExclude::Get_Folder_Size(const string& Path) {
 	DIR* d;
 	struct dirent* de;
 	struct stat st;
@@ -96,15 +89,15 @@
 	return dusize;
 }
 
-bool twrpDU::check_relative_skip_dirs(const string& dir) {
+bool TWExclude::check_relative_skip_dirs(const string& dir) {
 	return std::find(relativedir.begin(), relativedir.end(), dir) != relativedir.end();
 }
 
-bool twrpDU::check_absolute_skip_dirs(const string& path) {
+bool TWExclude::check_absolute_skip_dirs(const string& path) {
 	return std::find(absolutedir.begin(), absolutedir.end(), path) != absolutedir.end();
 }
 
-bool twrpDU::check_skip_dirs(const string& path) {
+bool TWExclude::check_skip_dirs(const string& path) {
 	string normalized = TWFunc::Remove_Trailing_Slashes(path);
 	size_t slashIdx = normalized.find_last_of('/');
 	if(slashIdx != std::string::npos && slashIdx+1 < normalized.size()) {
diff --git a/twrpDU.hpp b/exclude.hpp
similarity index 78%
rename from twrpDU.hpp
rename to exclude.hpp
index e947de9..5cdc416 100644
--- a/twrpDU.hpp
+++ b/exclude.hpp
@@ -1,5 +1,5 @@
 /*
-        Copyright 2013 TeamWin
+        Copyright 2013 to 2016 TeamWin
         This file is part of TWRP/TeamWin Recovery Project.
 
         TWRP is free software: you can redistribute it and/or modify
@@ -16,39 +16,28 @@
         along with TWRP.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifndef TWRPDU_HPP
-#define TWRPDU_HPP
+#ifndef TWEXCLUDE_HPP
+#define TWEXCLUDE_HPP
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <fstream>
 #include <string>
 #include <vector>
-#include "twcommon.h"
 
 using namespace std;
 
-class twrpDU {
+class TWExclude {
 
 public:
-	twrpDU();
+	TWExclude();
 	uint64_t Get_Folder_Size(const string& Path); // Gets the folder's size using stat
 	void add_absolute_dir(const string& Path);
 	void add_relative_dir(const string& Path);
 	bool check_relative_skip_dirs(const string& dir);
 	bool check_absolute_skip_dirs(const string& path);
 	bool check_skip_dirs(const string& path);
-	vector<string> get_absolute_dirs(void);
 	void clear_relative_dir(string dir);
 private:
 	vector<string> absolutedir;
 	vector<string> relativedir;
 };
 
-extern twrpDU du;
 #endif
diff --git a/gui/object.cpp b/gui/object.cpp
index 14df14f..e7d1bf9 100644
--- a/gui/object.cpp
+++ b/gui/object.cpp
@@ -2,7 +2,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-
+#include <sys/stat.h>
 #include <string>
 
 extern "C" {
diff --git a/gui/pages.cpp b/gui/pages.cpp
index 115d6b3..b6b7296 100644
--- a/gui/pages.cpp
+++ b/gui/pages.cpp
@@ -32,6 +32,7 @@
 #include <time.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <dirent.h>
 #include "../twrp-functions.hpp"
 #include "../partitions.hpp"
 
diff --git a/gui/resources.cpp b/gui/resources.cpp
index 9c97dad..8884dd7 100644
--- a/gui/resources.cpp
+++ b/gui/resources.cpp
@@ -10,6 +10,7 @@
 #include <sstream>
 #include <iostream>
 #include <iomanip>
+#include <fcntl.h>
 
 #include "../minzip/Zip.h"
 extern "C" {
diff --git a/partition.cpp b/partition.cpp
index 3f2374a..78b11ec 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -43,7 +43,7 @@
 #include "twrp-functions.hpp"
 #include "twrpDigest.hpp"
 #include "twrpTar.hpp"
-#include "twrpDU.hpp"
+#include "exclude.hpp"
 #include "infomanager.hpp"
 #include "set_metadata.h"
 #include "gui/gui.hpp"
@@ -866,9 +866,13 @@
 		}
 		DataManager::SetValue("tw_has_internal", 1);
 		DataManager::SetValue("tw_has_data_media", 1);
-		du.add_absolute_dir(Mount_Point + "/misc/vold");
-		du.add_absolute_dir(Mount_Point + "/.layout_version");
-		du.add_absolute_dir(Mount_Point + "/system/storage.xml");
+		backup_exclusions.add_absolute_dir("/data/data/com.google.android.music/files");
+		backup_exclusions.add_absolute_dir(Mount_Point + "/misc/vold");
+		wipe_exclusions.add_absolute_dir(Mount_Point + "/misc/vold");
+		backup_exclusions.add_absolute_dir(Mount_Point + "/.layout_version");
+		wipe_exclusions.add_absolute_dir(Mount_Point + "/.layout_version");
+		backup_exclusions.add_absolute_dir(Mount_Point + "/system/storage.xml");
+		wipe_exclusions.add_absolute_dir(Mount_Point + "/system/storage.xml");
 	} else {
 		if (Mount(true) && TWFunc::Path_Exists(Mount_Point + "/media/0")) {
 			Storage_Path = Mount_Point + "/media/0";
@@ -876,7 +880,8 @@
 			UnMount(true);
 		}
 	}
-	du.add_absolute_dir(Mount_Point + "/media");
+	backup_exclusions.add_absolute_dir(Mount_Point + "/media");
+	wipe_exclusions.add_absolute_dir(Mount_Point + "/media");
 }
 
 void TWPartition::Find_Real_Block_Device(string& Block, bool Display_Error) {
@@ -2113,7 +2118,7 @@
 
 			dir = parent;
 			dir.append(de->d_name);
-			if (du.check_skip_dirs(dir)) {
+			if (wipe_exclusions.check_skip_dirs(dir)) {
 				LOGINFO("skipped '%s'\n", dir.c_str());
 				continue;
 			}
@@ -2168,6 +2173,7 @@
 	Full_FileName = part_settings->Backup_Folder + "/" + Backup_FileName;
 	tar.has_data_media = Has_Data_Media;
 	tar.part_settings = part_settings;
+	tar.backup_exclusions = &backup_exclusions;
 	tar.setdir(Backup_Path);
 	tar.setfn(Full_FileName);
 	tar.setsize(Backup_Size);
@@ -2490,7 +2496,7 @@
 	if (Has_Data_Media) {
 		if (Mount(Display_Error)) {
 			unsigned long long data_media_used, actual_data;
-			Used = du.Get_Folder_Size(Mount_Point);
+			Used = backup_exclusions.Get_Folder_Size(Mount_Point);
 			Backup_Size = Used;
 			int bak = (int)(Used / 1048576LLU);
 			int fre = (int)(Free / 1048576LLU);
@@ -2502,7 +2508,7 @@
 		}
 	} else if (Has_Android_Secure) {
 		if (Mount(Display_Error))
-			Backup_Size = du.Get_Folder_Size(Backup_Path);
+			Backup_Size = backup_exclusions.Get_Folder_Size(Backup_Path);
 		else {
 			if (!Was_Already_Mounted)
 				UnMount(false);
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index b04cc9a..079d476 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -40,7 +40,7 @@
 #include "twrp-functions.hpp"
 #include "fixContexts.hpp"
 #include "twrpDigest.hpp"
-#include "twrpDU.hpp"
+#include "exclude.hpp"
 #include "set_metadata.h"
 #include "tw_atomic.hpp"
 #include "gui/gui.hpp"
@@ -835,9 +835,10 @@
 	int total_time = (int) difftime(total_stop, total_start);
 
 	uint64_t actual_backup_size;
-	if (!adbbackup)
-		actual_backup_size = du.Get_Folder_Size(part_settings.Backup_Folder);
-	else
+	if (!adbbackup) {
+		TWExclude twe;
+		actual_backup_size = twe.Get_Folder_Size(part_settings.Backup_Folder);
+	} else
 		actual_backup_size = part_settings.file_bytes + part_settings.img_bytes;
 	actual_backup_size /= (1024LLU * 1024LLU);
 
diff --git a/partitions.hpp b/partitions.hpp
index 4b9354f..3f2e40a 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -21,7 +21,7 @@
 
 #include <vector>
 #include <string>
-#include "twrpDU.hpp"
+#include "exclude.hpp"
 #include "tw_atomic.hpp"
 #include "progresstracking.hpp"
 
@@ -215,6 +215,8 @@
 	bool Can_Flash_Img;                                                       // Indicates if this partition can have images flashed to it via the GUI
 	bool Mount_Read_Only;                                                     // Only mount this partition as read-only
 	bool Is_Adopted_Storage;                                                  // Indicates that this partition is for adopted storage (android_expand)
+	TWExclude backup_exclusions;
+	TWExclude wipe_exclusions;
 
 friend class TWPartitionManager;
 friend class DataManager;
diff --git a/twrp.cpp b/twrp.cpp
index 8162659..3cd716f 100644
--- a/twrp.cpp
+++ b/twrp.cpp
@@ -45,7 +45,6 @@
 #include "partitions.hpp"
 #include "openrecoveryscript.hpp"
 #include "variables.h"
-#include "twrpDU.hpp"
 #ifdef TW_USE_NEW_MINADBD
 #include "adb.h"
 #else
@@ -64,7 +63,6 @@
 TWPartitionManager PartitionManager;
 int Log_Offset;
 bool datamedia;
-twrpDU du;
 
 static void Print_Prop(const char *key, const char *name, void *cookie) {
 	printf("%s=%s\n", key, name);
@@ -235,19 +233,19 @@
 			} else if (*argptr == 'p') {
 				Shutdown = true;
 			} else if (*argptr == 's') {
-				if (strncmp(argptr, "send_intent", strlen("send_intent") == 0)) {
+				if (strncmp(argptr, "send_intent", strlen("send_intent")) == 0) {
 					ptr = argptr + strlen("send_intent") + 1;
 					Send_Intent = *ptr;
-				} else if (strncmp(argptr, "security", strlen("security") == 0)) {
+				} else if (strncmp(argptr, "security", strlen("security")) == 0) {
 					LOGINFO("Security update\n");
-				} else if (strncmp(argptr, "sideload", strlen("sideload") == 0)) {
+				} else if (strncmp(argptr, "sideload", strlen("sideload")) == 0) {
 					if (!OpenRecoveryScript::Insert_ORS_Command("sideload\n"))
 						break;
-				} else if (strncmp(argptr, "stages", strlen("stages") == 0)) {
+				} else if (strncmp(argptr, "stages", strlen("stages")) == 0) {
 					LOGINFO("ignoring stages command\n");
 				}
 			} else if (*argptr == 'r') {
-				if (strncmp(argptr, "reason", strlen("reason") == 0)) {
+				if (strncmp(argptr, "reason", strlen("reason")) == 0) {
 					ptr = argptr + strlen("reason") + 1;
 					gui_print("%s\n", ptr);
 				}
diff --git a/twrpTar.cpp b/twrpTar.cpp
index 06e3b62..3c07a97 100644
--- a/twrpTar.cpp
+++ b/twrpTar.cpp
@@ -71,6 +71,7 @@
 	tar_type.readfunc = read;
 	input_fd = -1;
 	output_fd = -1;
+	backup_exclusions = NULL;
 }
 
 twrpTar::~twrpTar(void) {
@@ -108,12 +109,18 @@
 	char cmd[512];
 
 	file_count = 0;
+	if (backup_exclusions == NULL) {
+		LOGINFO("backup_exclusions is NULL\n");
+		return -1;
+	}
 
+#ifndef BUILD_TWRPTAR_MAIN
 	if (part_settings->adbbackup) {
 		std::string Backup_FileName(tarfn);
 		if (!twadbbu::Write_TWFN(Backup_FileName, Total_Backup_Size, use_compression))
 			return -1;
 	}
+#endif
 
 	if (pipe(progress_pipe) < 0) {
 		LOGINFO("Error creating progress tracking pipe\n");
@@ -168,7 +175,7 @@
 			while ((de = readdir(d)) != NULL) {
 				FileName = tardir + "/" + de->d_name;
 
-				if (de->d_type == DT_BLK || de->d_type == DT_CHR || du.check_skip_dirs(FileName))
+				if (de->d_type == DT_BLK || de->d_type == DT_CHR || backup_exclusions->check_skip_dirs(FileName))
 					continue;
 				if (de->d_type == DT_DIR) {
 					item_len = strlen(de->d_name);
@@ -183,9 +190,9 @@
 							_exit(-1);
 						}
 						file_count = (unsigned long long)(ret);
-						regular_size += du.Get_Folder_Size(FileName);
+						regular_size += backup_exclusions->Get_Folder_Size(FileName);
 					} else {
-						encrypt_size += du.Get_Folder_Size(FileName);
+						encrypt_size += backup_exclusions->Get_Folder_Size(FileName);
 					}
 				} else if (de->d_type == DT_REG) {
 					stat(FileName.c_str(), &st);
@@ -216,7 +223,7 @@
 			while ((de = readdir(d)) != NULL) {
 				FileName = tardir + "/" + de->d_name;
 
-				if (de->d_type == DT_BLK || de->d_type == DT_CHR || du.check_skip_dirs(FileName))
+				if (de->d_type == DT_BLK || de->d_type == DT_CHR || backup_exclusions->check_skip_dirs(FileName))
 					continue;
 				if (de->d_type == DT_DIR) {
 					item_len = strlen(de->d_name);
@@ -657,7 +664,7 @@
 	while ((de = readdir(d)) != NULL) {
 		FileName = Path + "/" + de->d_name;
 
-		if (de->d_type == DT_BLK || de->d_type == DT_CHR || du.check_skip_dirs(FileName))
+		if (de->d_type == DT_BLK || de->d_type == DT_CHR || backup_exclusions->check_skip_dirs(FileName))
 			continue;
 		TarItem.fn = FileName;
 		TarItem.thread_id = *thread_id;
@@ -698,10 +705,12 @@
 		gui_err("restore_error=Error during restore process.");
 		return -1;
 	}
+#ifndef BUILD_TWRPTAR_MAIN
 	if (part_settings->adbbackup) {
 		if (!twadbbu::Write_TWEOF())
 			return -1;
 	}
+#endif
 	return 0;
 }
 
@@ -1404,8 +1413,10 @@
 #endif
 	}
 	else {
+#ifndef BUILD_TWRPTAR_MAIN
 		if (!twadbbu::Write_TWEOF())
 			return -1;
+#endif
 	}
 	if (input_fd >= 0)
 		close(input_fd);
diff --git a/twrpTar.hpp b/twrpTar.hpp
index 49d373c..78c4c59 100644
--- a/twrpTar.hpp
+++ b/twrpTar.hpp
@@ -27,7 +27,7 @@
 #include <fstream>
 #include <string>
 #include <vector>
-#include "twrpDU.hpp"
+#include "exclude.hpp"
 #include "progresstracking.hpp"
 #include "partitions.hpp"
 #include "twrp-functions.hpp"
@@ -69,6 +69,7 @@
 	string partition_name;
 	string backup_folder;
 	PartitionSettings *part_settings;
+	TWExclude *backup_exclusions;
 
 private:
 	int extract();
diff --git a/twrpTarMain/Android.mk b/twrpTarMain/Android.mk
index 71b9bcd..f948708 100644
--- a/twrpTarMain/Android.mk
+++ b/twrpTarMain/Android.mk
@@ -8,14 +8,14 @@
 	../twrp-functions.cpp \
 	../twrpTar.cpp \
 	../tarWrite.c \
-	../twrpDU.cpp \
+	../exclude.cpp \
 	../progresstracking.cpp \
 	../gui/twmsg.cpp
 LOCAL_CFLAGS:= -g -c -W -DBUILD_TWRPTAR_MAIN
 
 LOCAL_C_INCLUDES += bionic
 
-LOCAL_STATIC_LIBRARIES := libc libtar_static
+LOCAL_STATIC_LIBRARIES := libc libtar_static libz
 ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0)
     LOCAL_C_INCLUDES += external/stlport/stlport bionic/libstdc++/include
     LOCAL_STATIC_LIBRARIES += libstlport_static
@@ -52,13 +52,13 @@
 	../twrp-functions.cpp \
 	../twrpTar.cpp \
 	../tarWrite.c \
-	../twrpDU.cpp \
+	../exclude.cpp \
 	../progresstracking.cpp \
 	../gui/twmsg.cpp
 LOCAL_CFLAGS:= -g -c -W -DBUILD_TWRPTAR_MAIN
 
 LOCAL_C_INCLUDES += bionic
-LOCAL_SHARED_LIBRARIES := libc libtar
+LOCAL_SHARED_LIBRARIES := libc libtar libz
 ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0)
     LOCAL_C_INCLUDES += external/stlport/stlport bionic/libstdc++/include
     LOCAL_SHARED_LIBRARIES += libstlport_static
diff --git a/twrpTarMain/twrpTarMain.cpp b/twrpTarMain/twrpTarMain.cpp
index ff35f47..df40426 100644
--- a/twrpTarMain/twrpTarMain.cpp
+++ b/twrpTarMain/twrpTarMain.cpp
@@ -19,14 +19,12 @@
 
 #include "../twrp-functions.hpp"
 #include "../twrpTar.hpp"
-#include "../twrpDU.hpp"
+#include "../exclude.hpp"
 #include "../progresstracking.hpp"
 #include "../gui/gui.hpp"
 #include "../gui/twmsg.h"
 #include <string.h>
 
-twrpDU du;
-
 void gui_msg(const char* text)
 {
 	if (text) {
@@ -166,11 +164,14 @@
 		}
 	}
 
+	TWExclude exclude;
+	exclude.add_absolute_dir("/data/media");
 	tar.has_data_media = has_data_media;
 	tar.setdir(Directory);
 	tar.setfn(Tar_Filename);
-	tar.setsize(du.Get_Folder_Size(Directory));
+	tar.setsize(exclude.Get_Folder_Size(Directory));
 	tar.use_compression = use_compression;
+	tar.backup_exclusions = &exclude;
 #ifndef TW_EXCLUDE_ENCRYPTED_BACKUPS
 	if (userdata_encryption && !use_encryption) {
 		printf("userdata encryption set without encryption option\n");
@@ -186,14 +187,14 @@
 	}
 #endif
 	if (action == 1) {
-		if (tar.createTarFork(&progress, tar_fork_pid) != 0) {
+		if (tar.createTarFork(&tar_fork_pid) != 0) {
 			sync();
 			return -1;
 		}
 		sync();
 		printf("\n\ntar created successfully.\n");
 	} else if (action == 2) {
-		if (tar.extractTarFork(&progress) != 0) {
+		if (tar.extractTarFork() != 0) {
 			sync();
 			return -1;
 		}
