diff --git a/libtar/extract.c b/libtar/extract.c
index 49e7599..613e29f 100644
--- a/libtar/extract.c
+++ b/libtar/extract.c
@@ -45,6 +45,11 @@
 	gid = th_get_gid(t);
 	ut.modtime = ut.actime = th_get_mtime(t);
 
+#ifdef DEBUG
+	printf("   ==> setting perms: %s (mode %04o, uid %d, gid %d)\n",
+	       filename, mode, uid, gid);
+#endif
+
 	/* change owner/group */
 	if (geteuid() == 0)
 #ifdef HAVE_LCHOWN
@@ -109,6 +114,7 @@
 
 	if (TH_ISDIR(t))
 	{
+		printf("dir\n");
 		i = tar_extract_dir(t, realname);
 		if (i == 1)
 			i = 0;
@@ -172,10 +178,10 @@
 int
 tar_extract_regfile(TAR *t, char *realname)
 {
-	mode_t mode;
+	//mode_t mode;
 	size_t size;
-	uid_t uid;
-	gid_t gid;
+	//uid_t uid;
+	//gid_t gid;
 	int fdout;
 	int i, k;
 	char buf[T_BLOCKSIZE];
@@ -194,17 +200,19 @@
 	}
 
 	filename = (realname ? realname : th_get_pathname(t));
-	mode = th_get_mode(t);
+	//mode = th_get_mode(t);
 	size = th_get_size(t);
-	uid = th_get_uid(t);
-	gid = th_get_gid(t);
+	//uid = th_get_uid(t);
+	//gid = th_get_gid(t);
 
 	if (mkdirhier(dirname(filename)) == -1)
 		return -1;
 
 #ifdef DEBUG
-	printf("  ==> extracting: %s (mode %04o, uid %d, gid %d, %d bytes)\n",
-	       filename, mode, uid, gid, size);
+	//printf("  ==> extracting: %s (mode %04o, uid %d, gid %d, %d bytes)\n",
+	//       filename, mode, uid, gid, size);
+	printf("  ==> extracting: %s (file size %d bytes)\n",
+	       filename, size);
 #endif
 	fdout = open(filename, O_WRONLY | O_CREAT | O_TRUNC
 #ifdef O_BINARY
@@ -468,7 +476,6 @@
 {
 	mode_t mode;
 	char *filename;
-	printf("filename: %s\n", filename);
 	if (!TH_ISDIR(t))
 	{
 		errno = EINVAL;
@@ -478,8 +485,10 @@
 	filename = (realname ? realname : th_get_pathname(t));
 	mode = th_get_mode(t);
 
-	if (mkdirhier(dirname(filename)) == -1)
+	if (mkdirhier(dirname(filename)) == -1) {
+		printf("tar_extract_dir mkdirhier failed\n");
 		return -1;
+	}
 
 #ifdef DEBUG
 	printf("  ==> extracting: %s (mode %04o, directory)\n", filename,
@@ -489,20 +498,9 @@
 	{
 		if (errno == EEXIST)
 		{
-			if (chmod(filename, mode) == -1)
-			{
 #ifdef DEBUG
-				perror("chmod()");
+			printf("  *** using existing directory");
 #endif
-				return -1;
-			}
-			else
-			{
-#ifdef DEBUG
-				puts("  *** using existing directory");
-#endif
-				return 1;
-			}
 		}
 		else
 		{
diff --git a/libtar/wrapper.c b/libtar/wrapper.c
index 4d82162..116dc28 100644
--- a/libtar/wrapper.c
+++ b/libtar/wrapper.c
@@ -79,7 +79,7 @@
 		printf("    tar_extract_all(): calling tar_extract_file(t, "
 		       "\"%s\")\n", buf);
 #endif
-		printf("filename: %s\n", filename);
+		printf("item name: '%s'\n", filename);
 		/*
 		if (strcmp(filename, "/") == 0) {
 			printf("skipping /\n");
diff --git a/twrpTar.cpp b/twrpTar.cpp
index cf225db..dd6d5c3 100644
--- a/twrpTar.cpp
+++ b/twrpTar.cpp
@@ -215,7 +215,6 @@
 		if (de->d_type == DT_DIR && strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0)
 		{
 			unsigned long long folder_size = TWFunc::Get_Folder_Size(FileName, false);
-			tardir = FileName;
 			if (Archive_Current_Size + folder_size > MAX_ARCHIVE_SIZE) {
 				LOGI("Calling Generate_Multiple_Archives\n");
 				if (Generate_Multiple_Archives(FileName) < 0)
@@ -337,41 +336,43 @@
 int twrpTar::tarDirs(bool include_root) {
 	DIR* d;
 	string mainfolder = tardir + "/", subfolder;
-	char buf[1024];
-	char* charTarFile = (char*) tarfn.c_str();
+	char buf[PATH_MAX];
 	d = opendir(tardir.c_str());
 	if (d != NULL) {
 		struct dirent* de;
 		while ((de = readdir(d)) != NULL) {
-			LOGI("adding %s\n", de->d_name);
 #ifdef RECOVERY_SDCARD_ON_DATA
 			if ((tardir == "/data" || tardir == "/data/") && strcmp(de->d_name, "media") == 0) continue;
-			if (de->d_type == DT_BLK || de->d_type == DT_CHR)
-				continue;
 #endif
-			if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0)   continue;
-
+			if (de->d_type == DT_BLK || de->d_type == DT_CHR || strcmp(de->d_name, "..") == 0)
+				continue;
 			subfolder = mainfolder;
-			subfolder += de->d_name;
+			if (strcmp(de->d_name, ".") != 0) {
+				subfolder += de->d_name;
+			} else {
+				LOGI("adding '%s'\n", subfolder.c_str());
+				if (addFile(subfolder, include_root) != 0)
+					return -1;
+				continue;
+			}
+			LOGI("adding '%s'\n", subfolder.c_str());
 			strcpy(buf, subfolder.c_str());
 			if (de->d_type == DT_DIR) {
-					if (include_root) {
-				if (tar_append_tree(t, buf, NULL) != 0) {
-					LOGE("Error appending '%s' to tar archive '%s'\n", buf, charTarFile);
+				char* charTarPath;
+				if (include_root) {
+					charTarPath = NULL;
+				} else {
+					string temp = Strip_Root_Dir(buf);
+					charTarPath = (char*) temp.c_str();
+				}
+				if (tar_append_tree(t, buf, charTarPath) != 0) {
+					LOGE("Error appending '%s' to tar archive '%s'\n", buf, tarfn.c_str());
 					return -1;
 				}
-							} else {
-								string temp = Strip_Root_Dir(buf);
-								char* charTarPath = (char*) temp.c_str();
-								if (tar_append_tree(t, buf, charTarPath) != 0) {
-					LOGE("Error appending '%s' to tar archive '%s'\n", buf, charTarFile);
-					return -1;
-				}
-							}
 			} else if (tardir != "/" && (de->d_type == DT_REG || de->d_type == DT_LNK)) {
-							if (addFile(buf, include_root) != 0)
-								return -1;
-						}
+				if (addFile(buf, include_root) != 0)
+					return -1;
+			}
 			fflush(NULL);
 		}
 		closedir(d);
