diff -urpN john-1.7.8-jumbo-6/src/cracker.c john-1.7.8-jumbo-6b/src/cracker.c
--- john-1.7.8-jumbo-6/src/cracker.c	2011-09-14 17:11:19.000000000 +0000
+++ john-1.7.8-jumbo-6b/src/cracker.c	2011-09-21 14:17:43.703125000 +0000
@@ -141,7 +141,8 @@ static int crk_process_guess(struct db_s
 		crk_guesses->count++;
 	}
 
-	ldr_remove_hash(crk_db, salt, pw);
+	if (!(crk_params.flags & FMT_NOT_EXACT))
+		ldr_remove_hash(crk_db, salt, pw);
 
 	if (!crk_db->salts)
 		return 1;
diff -urpN john-1.7.8-jumbo-6/src/formats.h john-1.7.8-jumbo-6b/src/formats.h
--- john-1.7.8-jumbo-6/src/formats.h	2011-09-20 16:12:22.000000000 +0000
+++ john-1.7.8-jumbo-6b/src/formats.h	2011-09-21 20:48:23.890625000 +0000
@@ -27,6 +27,8 @@ struct fmt_main;
 #define FMT_UNICODE			0x00000004
 /* Honours the --encoding=utf8 flag (typically changes the 8859-1 behaviour above) */
 #define FMT_UTF8			0x00000008
+/* Format has false positive matches.  Thus, do not remove hashes when a likely PW is found */
+#define FMT_NOT_EXACT		0x00000100
 /* Uses a bitslice implementation */
 #define FMT_BS				0x00010000
 /* The split() method unifies the case of characters in hash encodings */
diff -urpN john-1.7.8-jumbo-6/src/loader.c john-1.7.8-jumbo-6b/src/loader.c
--- john-1.7.8-jumbo-6/src/loader.c	2011-09-20 20:42:12.000000000 +0000
+++ john-1.7.8-jumbo-6b/src/loader.c	2011-09-21 20:49:27.640625000 +0000
@@ -638,13 +638,15 @@ static void ldr_remove_marked(struct db_
 		if ((current_pw = current_salt->list))
 		do {
 			if (!current_pw->binary) {
-				db->password_count--;
-				current_salt->count--;
+				if ( !(db->format->params.flags & FMT_NOT_EXACT) ) {
+					db->password_count--;
+					current_salt->count--;
 
-				if (last_pw)
-					last_pw->next = current_pw->next;
-				else
-					current_salt->list = current_pw->next;
+					if (last_pw)
+						last_pw->next = current_pw->next;
+					else
+						current_salt->list = current_pw->next;
+				}
 			} else {
 				last_pw = current_pw;
 				if (db->options->showuncracked)
@@ -653,12 +655,14 @@ static void ldr_remove_marked(struct db_
 		} while ((current_pw = current_pw->next));
 
 		if (!current_salt->list) {
-			db->salt_count--;
+			if ( !(db->format->params.flags & FMT_NOT_EXACT) ) {
+				db->salt_count--;
 
-			if (last_salt)
-				last_salt->next = current_salt->next;
-			else
-				db->salts = current_salt->next;
+				if (last_salt)
+					last_salt->next = current_salt->next;
+				else
+					db->salts = current_salt->next;
+			}
 		} else
 			last_salt = current_salt;
 	} while ((current_salt = current_salt->next));
diff -urpN john-1.7.8-jumbo-6/src/zip_fmt.c john-1.7.8-jumbo-6b/src/zip_fmt.c
--- john-1.7.8-jumbo-6/src/zip_fmt.c	2011-09-14 17:11:20.000000000 +0000
+++ john-1.7.8-jumbo-6b/src/zip_fmt.c	2011-09-21 14:17:44.156250000 +0000
@@ -161,7 +161,7 @@ struct fmt_main zip_fmt = {
 		SALT_SIZE,
 		MIN_KEYS_PER_CRYPT,
 		MAX_KEYS_PER_CRYPT,
-		FMT_CASE | FMT_8_BIT | FMT_OMP,
+		FMT_CASE | FMT_8_BIT | FMT_OMP | FMT_NOT_EXACT,   /*ldr_remove_hash(crk_db, salt, pw);*/
 		zip_tests
 	}, {
 		fmt_default_init,
