diff --git a/plugins/fileroller/file-roller-plugin.c b/plugins/fileroller/file-roller-plugin.c
index ab4f500..c47b326 100644
--- a/plugins/fileroller/file-roller-plugin.c
+++ b/plugins/fileroller/file-roller-plugin.c
@@ -95,6 +95,8 @@ on_extract_cwd (GtkMenuItem *item, GnomeVFSURI *uri)
     gchar *local_path = gnome_vfs_get_local_path_from_uri (uri_str);
     gchar *target_name = gtk_object_get_data (GTK_OBJECT (item), "target_name");
     gchar *cmd, *t;
+    guint argc;
+    gchar **argv;
 
     t = g_path_get_dirname (local_path);
     target_dir = target_name ? g_build_path (G_DIR_SEPARATOR_S, t, target_name, NULL) : g_strdup (t);
@@ -109,7 +111,9 @@ on_extract_cwd (GtkMenuItem *item, GnomeVFSURI *uri)
     cmd = g_strdup_printf ("file-roller %s %s", target_arg, archive_arg);
 
     t = g_path_get_dirname (local_path);
-    gnome_execute_shell (t, cmd);
+    g_shell_parse_argv (cmd, &argc, &argv, NULL);
+    g_spawn_async (t, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
+    g_strfreev (argv);
     g_free (t);
 
     g_free (target_arg);
@@ -129,6 +133,8 @@ do_add_to_archive (const gchar *name, GnomeCmdState *state)
     gchar *cmd = g_strdup_printf ("file-roller %s ", arg);
     gchar *active_dir_path, *uri_str;
     GList *files;
+    guint argc;
+    gchar **argv;
 
     for (files = state->active_dir_selected_files; files; files = files->next)
     {
@@ -147,7 +153,9 @@ do_add_to_archive (const gchar *name, GnomeCmdState *state)
     g_printerr ("add: %s\n", cmd);
     uri_str = gnome_vfs_uri_to_string (state->active_dir_uri, 0);
     active_dir_path = gnome_vfs_get_local_path_from_uri (uri_str);
-    gnome_execute_shell (active_dir_path, cmd);
+    g_shell_parse_argv (cmd, &argc, &argv, NULL);
+    g_spawn_async (active_dir_path, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
+    g_strfreev (argv);
 
     g_free (cmd);
     g_free (uri_str);
diff --git a/src/gnome-cmd-user-actions.cc b/src/gnome-cmd-user-actions.cc
index 6929a61..0c5e858 100644
--- a/src/gnome-cmd-user-actions.cc
+++ b/src/gnome-cmd-user-actions.cc
@@ -936,6 +936,9 @@ void command_execute (GtkMenuItem *menuitem, gpointer command)
     string dir_path = "[d]";
     string quoted_dir_path = "[D]";
     string uri = "[U]";
+    
+    gint argc;
+    gchar **argv;
 
     GnomeCmdFileList *fl = get_fl (ACTIVE);
     GList *sfl = gnome_cmd_file_list_get_selected_files (fl);
@@ -1016,7 +1019,9 @@ void command_execute (GtkMenuItem *menuitem, gpointer command)
 
     DEBUG ('g', "running: %s\n", cmd.c_str());
 
-    gnome_execute_shell (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, cmd.c_str());
+    g_shell_parse_argv (cmd.c_str(), &argc, &argv, NULL);
+    g_spawn_async (gnome_cmd_dir_is_local (dir) ? dir_path.c_str() : NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
+    g_strfreev (argv);
 }
 
 
diff --git a/src/utils.cc b/src/utils.cc
index 2759947..0220cb7 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -116,6 +116,8 @@ void warn_print (const gchar *fmt, ...)
 void run_command_indir (const gchar *in_command, const gchar *dir, gboolean term)
 {
     gchar *command;
+    gint argc;
+    gchar **argv;
 
     if (term)
     {
@@ -139,7 +141,9 @@ void run_command_indir (const gchar *in_command, const gchar *dir, gboolean term
 
     DEBUG ('g', "running%s: %s\n", (term?" in terminal":""), command);
 
-    gnome_execute_shell (dir, command);
+    g_shell_parse_argv (command, &argc, &argv, NULL);
+    g_spawn_async (dir, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
+    g_strfreev (argv);
     g_free (command);
 }
 
