diff --git a/inferior-shell.asd b/inferior-shell.asd
index cf6229cbc27b46746482d2e585401d95f5586549..30605f6fb940f49228c721399da14dff598390fa 100644
--- a/inferior-shell.asd
+++ b/inferior-shell.asd
@@ -2,12 +2,12 @@
 #-asdf3 (error "inferior-shell requires ASDF 3.0.3 or later")
 
 (defsystem "inferior-shell"
-  :version "2.0.3.4"
+  :version "2.0.4"
   :description "spawn local or remote processes and shell pipes"
   :author "Francois-Rene Rideau"
   :license "MIT"
   :depends-on ((:version "asdf" "3.0.3") ; input and error-output redirection
-               #+sbcl (:require "sb-posix")
+               (:feature :sbcl (:require "sb-posix"))
                "alexandria" "optima"
                "fare-utils" "fare-quasiquote-extras" "fare-mop")
   :around-compile "uiop:call-with-safe-io-syntax" ;; ensures that quasiquote syntax doesn't escape
@@ -17,7 +17,7 @@
    (:file "utilities" :depends-on ("pkgdcl"))
    (:file "macros" :depends-on ("pkgdcl"))
    (:file "host" :depends-on ("pkgdcl"))
-   (:file "run" :depends-on ("process-spec" "macros"))
+   (:file "run" :depends-on ("process-spec" "macros")))
   :in-order-to ((test-op (load-op "inferior-shell/test")))
   :perform (test-op (o s) ;; symbol-call will only work if loaded with ASDF3
               (symbol-call :inferior-shell-test :test-suite)))
diff --git a/run.lisp b/run.lisp
index 8a81a4b88162bb8461fbf153b6d0138c8dd28cdb..d8b1a4f90d5ae284821072edacf11c741b484d30 100644
--- a/run.lisp
+++ b/run.lisp
@@ -21,6 +21,8 @@
           (etypecase command
             (direct-command-spec
              (command-arguments spec))
+            (command-spec
+             (strcat "exec " (print-process-spec spec)))
             (process-spec
              (print-process-spec spec))
             (string