diff --git a/libtar/libtar.h b/libtar/libtar.h
index f2f423b..1d6c1df 100644
--- a/libtar/libtar.h
+++ b/libtar/libtar.h
@@ -291,6 +291,8 @@
 /* add a whole tree of files */
 int tar_append_tree(TAR *t, char *realdir, char *savedir);
 
+/* find an entry */
+int tar_find(TAR *t, char *searchstr);
 
 #ifdef __cplusplus
 }
diff --git a/libtar/wrapper.c b/libtar/wrapper.c
index 116dc28..7f65375 100644
--- a/libtar/wrapper.c
+++ b/libtar/wrapper.c
@@ -153,3 +153,33 @@
 
 	return 0;
 }
+
+
+int
+tar_find(TAR *t, char *searchstr)
+{
+	if (!searchstr)
+		return 0;
+
+	char *filename;
+	int i, entryfound = 0;
+#ifdef DEBUG
+	printf("==> tar_find(0x%lx, %s)\n", (long unsigned int)t, searchstr);
+#endif
+	while ((i = th_read(t)) == 0) {
+		filename = th_get_pathname(t);
+		if (fnmatch(searchstr, filename, FNM_FILE_NAME | FNM_PERIOD) == 0) {
+			entryfound++;
+#ifdef DEBUG
+			printf("Found matching entry: %s\n", filename);
+#endif
+			break;
+		}
+	}
+#ifdef DEBUG
+	if (!entryfound)
+		printf("No matching entry found.\n");
+#endif
+
+	return entryfound;
+}
diff --git a/twrpTar.cpp b/twrpTar.cpp
index dd6d5c3..1ab1ab7 100644
--- a/twrpTar.cpp
+++ b/twrpTar.cpp
@@ -308,23 +308,34 @@
 	return 0;
 }
 
+int twrpTar::getArchiveType() {
+        int type = 0;
+        string::size_type i = 0;
+        int firstbyte = 0, secondbyte = 0;
+	char header[3];
+        
+        ifstream f;
+        f.open(tarfn.c_str(), ios::in | ios::binary);
+        f.get(header, 3);
+        f.close();
+        firstbyte = header[i] & 0xff;
+        secondbyte = header[++i] & 0xff;
+
+        if (firstbyte == 0x1f && secondbyte == 0x8b)
+		type = 1; // Compressed
+	else
+		type = 0; // Uncompressed
+
+	return type;
+}
+
 int twrpTar::extract() {
-	int len = 3;
-	char header[len];
-	string::size_type i = 0;
-	int firstbyte = 0;
-	int secondbyte = 0;
-	int ret;
-	ifstream f;
-	f.open(tarfn.c_str(), ios::in | ios::binary);
-	f.get(header, len);
-	firstbyte = header[i] & 0xff;
-	secondbyte = header[++i] & 0xff;
-	f.close();
-	if (firstbyte == 0x1f && secondbyte == 0x8b) {
+	int Archive_Current_Type = getArchiveType();
+
+	if (Archive_Current_Type == 1) {
 		//if you return the extractTGZ function directly, stack crashes happen
 		LOGI("Extracting gzipped tar\n");
-		ret = extractTGZ();
+		int ret = extractTGZ();
 		return ret;
 	}
 	else {
@@ -580,6 +591,23 @@
 	return 0;
 }
 
+int twrpTar::entryExists(string entry) {
+	char* searchstr = (char*)entry.c_str();
+	int ret;
+
+	int Archive_Current_Type = getArchiveType();
+
+	if (openTar(Archive_Current_Type) == -1)
+		ret = 0;
+	else
+		ret = tar_find(t, searchstr);
+
+	if (tar_close(t) != 0)
+		LOGI("Unable to close tar file after searching for entry '%s'.\n", entry.c_str());
+
+	return ret;
+}
+
 extern "C" ssize_t write_tar(int fd, const void *buffer, size_t size) {
 	return (ssize_t) write_libtar_buffer(fd, buffer, size);
 }
diff --git a/twrpTar.hpp b/twrpTar.hpp
index 427e6d1..3ee6028 100644
--- a/twrpTar.hpp
+++ b/twrpTar.hpp
@@ -38,6 +38,7 @@
                 int addFilesToExistingTar(vector <string> files, string tarFile);
 		int createTar();
 		int addFile(string fn, bool include_root);
+		int entryExists(string entry);
 		int closeTar(bool gzip);
 		int createTarGZFork();
 		int createTarFork();
@@ -59,6 +60,7 @@
 		int has_data_media;
 		int Archive_File_Count;
 		unsigned long long Archive_Current_Size;
+		int getArchiveType(); // 1 for compressed - 0 for uncompressed
 		TAR *t;
 		FILE* p;
 		int fd;
