diff --git a/pressure-vessel/launch.1.md b/pressure-vessel/launch.1.md
index d3322f551f6afb877eb1de231184d8991c698872..7baef52445b9a659f643e27a26a93fca56afa622 100644
--- a/pressure-vessel/launch.1.md
+++ b/pressure-vessel/launch.1.md
@@ -60,9 +60,7 @@ as a subprocess of **pressure-vessel-launcher**.
     owned by the **flatpak-session-helper** per-user service, and the
     *COMMAND* is launched on the host system, similar to the
     **--host** option of **flatpak-spawn**(1).
-    The **--terminate** option is not allowed in this mode, and most
-    options that would unset environment variables, such as **--unset-env**,
-    are ignored with a warning (but **--clear-env** is still possible).
+    The **--terminate** option is not allowed in this mode.
 
     As another special case, if the *NAME* is
     **org.freedesktop.portal.Flatpak**, then it is assumed to be
@@ -72,8 +70,7 @@ as a subprocess of **pressure-vessel-launcher**.
     Options that alter how the sub-sandbox is created, such as
     **--sandbox-flag**, are not currently supported.
     As with **org.freedesktop.Flatpak**, the
-    **--terminate** option is not allowed in this mode, and most
-    options that would unset environment variables are ignored with a warning.
+    **--terminate** option is not allowed in this mode.
 
 **--clear-env**
 :   The *COMMAND* runs in an empty environment, apart from any environment
diff --git a/pressure-vessel/launch.c b/pressure-vessel/launch.c
index 000452ad3f3fe7ba924e492dd53732b3baf687cd..cc9023917f82596d312a1ca997c148e7cad31ec7 100644
--- a/pressure-vessel/launch.c
+++ b/pressure-vessel/launch.c
@@ -534,6 +534,7 @@ main (int argc,
   g_auto(GStrv) original_environ = NULL;
   g_autoptr(GMainLoop) loop = NULL;
   g_autoptr(GOptionContext) context = NULL;
+  g_autoptr(GPtrArray) replacement_command_and_args = NULL;
   g_autoptr(GError) local_error = NULL;
   GError **error = &local_error;
   char **command_and_args;
@@ -881,9 +882,29 @@ main (int argc,
         }
       else
         {
+          replacement_command_and_args = g_ptr_array_new_with_free_func (g_free);
+
+          g_ptr_array_add (replacement_command_and_args, g_strdup ("/usr/bin/env"));
+
           while (g_hash_table_iter_next (&iter, &key, NULL))
-            g_warning ("Cannot unset %s when using Flatpak services",
-                       (const char *) key);
+            {
+              g_ptr_array_add (replacement_command_and_args, g_strdup ("-u"));
+              g_ptr_array_add (replacement_command_and_args, g_strdup (key));
+            }
+
+          if (strchr (command_and_args[0], '=') != NULL)
+            {
+              g_ptr_array_add (replacement_command_and_args, g_strdup ("/bin/sh"));
+              g_ptr_array_add (replacement_command_and_args, g_strdup ("-euc"));
+              g_ptr_array_add (replacement_command_and_args, g_strdup ("exec \"$@\""));
+              g_ptr_array_add (replacement_command_and_args, g_strdup ("sh"));  /* argv[0] */
+            }
+
+          for (i = 0; command_and_args[i] != NULL; i++)
+            g_ptr_array_add (replacement_command_and_args, g_strdup (command_and_args[i]));
+
+          g_ptr_array_add (replacement_command_and_args, NULL);
+          command_and_args = (char **) replacement_command_and_args->pdata;
         }
     }