diff -rubd file-roller/data/file-roller.schemas file-roller_new/data/file-roller.schemas
--- file-roller/data/file-roller.schemas	2010-04-06 00:57:35.000000000 +0400
+++ file-roller_new/data/file-roller.schemas	2010-04-06 00:47:43.000000000 +0400
@@ -255,6 +255,18 @@
       </schema>
 
       <schema>
+        <key>/schemas/apps/file-roller/general/use_zip</key>
+        <applyto>/apps/file-roller/general/use_zip</applyto>
+        <owner>file-roller</owner>
+        <type>bool</type>
+        <default>false</default>
+        <locale name="C">
+          <short>Use zip/unzip instead of p7zip if available</short>
+          <long>Whether to use zip/unzip if they are available instead of p7zip for operations with .zip files.  Useful when you whant to extract files from .zip archive in custom encoding using UNZIP env option with -O value.</long>
+        </locale>
+      </schema>
+
+      <schema>
         <key>/schemas/apps/file-roller/dialogs/extract/overwrite</key>
 	<applyto>/apps/file-roller/dialogs/extract/overwrite</applyto>
         <owner>file-roller</owner>

diff -rubd file-roller/src/main.c file-roller_new/src/main.c
--- file-roller/src/main.c	2010-04-06 00:57:37.000000000 +0400
+++ file-roller_new/src/main.c	2010-04-06 00:41:18.000000000 +0400
@@ -599,9 +599,11 @@
 	 * priority.  However commands that can read and write a file format
 	 * have higher priority over commands that can only read the same
 	 * format, regardless of the registration order. */
-
+	gboolean use_zip = eel_gconf_get_boolean (PREF_USE_ZIP, FALSE);
 	register_command (FR_TYPE_COMMAND_TAR);
 	register_command (FR_TYPE_COMMAND_CFILE);
+	if (use_zip && is_program_available("zip", TRUE) && is_program_available("unzip", TRUE))
+		register_command(FR_TYPE_COMMAND_ZIP);		
 	register_command (FR_TYPE_COMMAND_7Z);
 
 	register_command (FR_TYPE_COMMAND_ACE);
@@ -615,6 +617,7 @@
 	register_command (FR_TYPE_COMMAND_RAR);
 	register_command (FR_TYPE_COMMAND_RPM);
 	register_command (FR_TYPE_COMMAND_UNSTUFF);
+	if (!use_zip)
 	register_command (FR_TYPE_COMMAND_ZIP);
 	register_command (FR_TYPE_COMMAND_ZOO);
 }

diff -rubd file-roller/src/preferences.h file-roller_new/src/preferences.h
--- file-roller/src/preferences.h	2010-04-06 00:57:37.000000000 +0400
+++ file-roller_new/src/preferences.h	2010-04-05 23:44:10.000000000 +0400
@@ -49,6 +49,7 @@
 #define PREF_ADD_COMPRESSION_LEVEL "/apps/file-roller/general/compression_level"
 #define PREF_ENCRYPT_HEADER        "/apps/file-roller/general/encrypt_header"
 #define PREF_MIGRATE_DIRECTORIES   "/apps/file-roller/general/migrate_directories"
+#define PREF_USE_ZIP		   "/apps/file-roller/general/use_zip"	
 
 #define PREF_EXTRACT_OVERWRITE        "/apps/file-roller/dialogs/extract/overwrite"
 #define PREF_EXTRACT_SKIP_NEWER       "/apps/file-roller/dialogs/extract/skip_newer"

