diff -Naur file-roller-2.24.0-orig/po/POTFILES.in file-roller-2.24.0/po/POTFILES.in
--- file-roller-2.24.0-orig/po/POTFILES.in	2008-09-22 20:58:52.000000000 +0200
+++ file-roller-2.24.0/po/POTFILES.in	2008-10-10 21:15:21.000000000 +0200
@@ -76,5 +76,6 @@
 src/main.h
 src/preferences.c
 src/preferences.h
+src/sh/gnome-archive-install
 src/typedefs.h
 src/ui.h
diff -Naur file-roller-2.24.0-orig/src/fr-archive.c file-roller-2.24.0/src/fr-archive.c
--- file-roller-2.24.0-orig/src/fr-archive.c	2008-09-22 20:58:48.000000000 +0200
+++ file-roller-2.24.0/src/fr-archive.c	2008-10-10 21:15:21.000000000 +0200
@@ -1124,17 +1124,26 @@
 
 	tmp_command = archive->command;
 
+	archive->command = 1;
 	mime_type = get_mime_type_from_filename (archive->local_copy);
 	if (! create_command_to_load_archive (archive, mime_type)) {
 		mime_type = get_mime_type_from_content (archive->local_copy);
 		if (! create_command_to_load_archive (archive, mime_type)) {
 			mime_type = get_mime_type_from_magic_numbers (archive->local_copy);
 			if (! create_command_to_load_archive (archive, mime_type)) {
-				archive->command = tmp_command;
-				fr_archive_action_completed (archive,
-							     FR_ACTION_LOADING_ARCHIVE,
-							     FR_PROC_ERROR_GENERIC,
-							     _("Archive type not supported."));
+				if (archive->command != 1 && mime_type != NULL) {				
+					archive->command = tmp_command;
+					fr_archive_action_completed (archive,
+							     	FR_ACTION_LOADING_ARCHIVE,
+							     	FR_PROC_ERROR_FORMAT_NOT_SUPPORTED,
+							     	_("Archive type not supported."));
+				} else {
+					archive->command = tmp_command;
+					fr_archive_action_completed (archive,
+							     	FR_ACTION_LOADING_ARCHIVE,
+							     	FR_PROC_ERROR_GENERIC,
+							     	_("Archive type not supported."));
+				}
 				return;
 			}
 		}
diff -Naur file-roller-2.24.0-orig/src/fr-window.c file-roller-2.24.0/src/fr-window.c
--- file-roller-2.24.0-orig/src/fr-window.c	2008-09-22 20:58:48.000000000 +0200
+++ file-roller-2.24.0/src/fr-window.c	2008-10-10 21:15:21.000000000 +0200
@@ -27,6 +27,7 @@
 #include <gio/gio.h>
 #include <gdk/gdkcursor.h>
 #include <gdk/gdkkeysyms.h>
+#include <gdk/gdkx.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 
 #include "actions.h"
@@ -2823,6 +2824,8 @@
 	       FrAction     action,
 	       FrProcError *error)
 {
+	static gboolean installer_launched = FALSE;
+
 	if (error->type == FR_PROC_ERROR_ASK_PASSWORD) {
 		close_progress_dialog (window, TRUE);
 		dlg_ask_password (window);
@@ -2915,6 +2918,16 @@
 		case FR_PROC_ERROR_SPAWN:
 			details = error->gerror->message;
 			break;
+		case FR_PROC_ERROR_FORMAT_NOT_SUPPORTED:
+			if (is_program_in_path("python") && !installer_launched) {
+				gchar cmd[256];
+				sprintf(cmd, "python " PRIVEXECDIR "gnome-archive-install --transient-for=%d", GDK_WINDOW_XID( ((GtkWidget *) window)->window) );
+				g_spawn_command_line_async(cmd, NULL);
+				installer_launched = TRUE;
+				g_hash_table_remove_all(ProgramsCache);
+				return FALSE;
+			}
+			error->type = FR_PROC_ERROR_GENERIC;
 		default:
 			if (error->gerror != NULL)
 				details = error->gerror->message;
diff -Naur file-roller-2.24.0-orig/src/sh/gnome-archive-install file-roller-2.24.0/src/sh/gnome-archive-install
--- file-roller-2.24.0-orig/src/sh/gnome-archive-install	1970-01-01 01:00:00.000000000 +0100
+++ file-roller-2.24.0/src/sh/gnome-archive-install	2008-10-10 21:15:21.000000000 +0200
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+import sys
+import gettext
+from gettext import gettext as _
+from optparse import OptionParser
+from AppInstall.activation import askConfirmation
+
+if __name__ == "__main__":
+    app="file-roller"
+    gettext.textdomain(app)
+    gettext.bindtextdomain(app, "/usr/share/locale")
+
+    parser = OptionParser()
+    parser.add_option("", "--transient-for",
+                      default=None,
+                      action="store", type="int", dest="transient_for",
+                      help="Start as a child window of the given window (Only "
+                           "needed by developers")
+    parser.add_option("", "--data-dir",
+                      default="/usr/share/gnome-app-install",
+                      action="store", type="string", dest="datadir",
+                      help="Load data from the given directory (Only needed "
+                           "by developers)")
+    parser.add_option("", "--desktopdir",
+                      default="/usr/share/app-install",
+                      action="store", type="string", dest="desktopdir",
+                      help="Read the desktop files from the given directory "
+                           "(Only needed by developers)")
+    parser.add_option("", "--cachedir",
+                      default="/var/cache/app-install",
+                      action="store", type="string", dest="cachedir",
+                      help="Use the given directory for the cache (Only "
+                           "needed by developers)")
+    parser.add_option("", "--addon-cd",
+                      default=None,
+                      action="store", type="string", dest="addon_cd",
+                      help="Start as installer for an addon cd")
+    parser.add_option("", "--test-mode", action="store_true", dest="test_mode",
+                      help="Run in a sepcial test mode"
+                           "(Only needed by developers)")
+    (options, args) = parser.parse_args()
+
+    if not askConfirmation(_("Search for suitable archiver?"),
+                    _("The required software to open this file "
+                      "is not installed. You need to install suitable "
+                      "archiver to view compressed files. Do you want "
+                      "to search for an archiver that supports the selected file?"
+                      "\n\nThe search will also include software which is not "
+                      "officially supported."),
+                    options.transient_for):
+        sys.exit(4)
+
+from AppInstall import AppInstall
+from AppInstall.activation import ActivationStyle
+
+class ArchiveActivationStyle(ActivationStyle):
+    def __init__(self):
+        self._userapproved = False
+        self._changessuccessful = False
+        self.menuFilter = None
+        self._wl_packages = {'rar': True, 'p7zip-full': True, 'unace': True}
+        self.isInstallerOnly = True
+        self.selectFilter = None
+        self.menuFilter = 0
+
+    def menuCacheName(self):
+        return "menu.p"
+
+    def lookup(self,string):
+        unapproved = False
+        for e in value.split():
+            (component,package) = e.split('/',1)
+            if self.isApproved(component,package): return (True,True,None,None)
+            unapproved = True
+
+        if unapproved: (abbrev,msg) = (
+            _("no suitable application"),
+            _("No application suitable for automatic installation is"
+              " available for handling this kind of file."))
+        else: (abbrev,msg) = (
+            _("no application found"),
+            _("No application is known for this kind of file."))
+
+        return (False, unapproved, abbrev, msg)
+
+    def isApproved(self, component, package):
+        return self._wl_packages.has_key(package)
+    def isSpecific(self): return True
+    def userApprovedNotify(self): self._userapproved = True
+    def changesSuccessfulNotify(self): self._changessuccessful = True
+    def modifyUserInterface(self, app):
+        app.scrolledwindow_left.hide()
+        app.label_progress.set_markup("<big><b>%s</b></big>\n\n%s" %
+                                      (_("Searching for appropriate "
+                                         "applications"),
+                                       _("Please wait. This might take a "
+                                         "minute or two.")))
+        app.hbox_search_show.hide()
+        app.window_main.set_property("default_width", 500)
+        app.window_main.set_property("default_height", 400)
+
+if __name__ == "__main__":
+    app = AppInstall.AppInstall(options, ArchiveActivationStyle())
+    app.run()
+
diff -Naur file-roller-2.24.0-orig/src/sh/Makefile.am file-roller-2.24.0/src/sh/Makefile.am
--- file-roller-2.24.0-orig/src/sh/Makefile.am	2008-09-22 20:58:47.000000000 +0200
+++ file-roller-2.24.0/src/sh/Makefile.am	2008-10-10 21:15:21.000000000 +0200
@@ -1,4 +1,4 @@
 shdir = $(libexecdir)/file-roller
-sh_DATA = isoinfo.sh 
+sh_DATA = isoinfo.sh gnome-archive-install
 
-EXTRA_DIST = $(sh_DATA)
\ No newline at end of file
+EXTRA_DIST = $(sh_DATA)
diff -Naur file-roller-2.24.0-orig/src/sh/Makefile.in file-roller-2.24.0/src/sh/Makefile.in
--- file-roller-2.24.0-orig/src/sh/Makefile.in	2008-09-22 20:59:19.000000000 +0200
+++ file-roller-2.24.0/src/sh/Makefile.in	2008-10-10 21:15:21.000000000 +0200
@@ -227,7 +227,7 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 shdir = $(libexecdir)/file-roller
-sh_DATA = isoinfo.sh 
+sh_DATA = isoinfo.sh gnome-archive-install
 EXTRA_DIST = $(sh_DATA)
 all: all-am
 
diff -Naur file-roller-2.24.0-orig/src/typedefs.h file-roller-2.24.0/src/typedefs.h
--- file-roller-2.24.0-orig/src/typedefs.h	2008-09-22 20:58:48.000000000 +0200
+++ file-roller-2.24.0/src/typedefs.h	2008-10-10 21:15:21.000000000 +0200
@@ -63,6 +63,7 @@
 	FR_PROC_ERROR_SPAWN,
 	FR_PROC_ERROR_STOPPED,
 	FR_PROC_ERROR_ASK_PASSWORD,
+	FR_PROC_ERROR_FORMAT_NOT_SUPPORTED,
 	FR_PROC_ERROR_MISSING_VOLUME,
 	FR_PROC_ERROR_IO_CHANNEL,
 	FR_PROC_ERROR_BAD_CHARSET
