diff --git a/src/66/66.c b/src/66/66.c
index df52d9e4ab7c598835951412daeea83de3e36ec1..3e767dfb624e4bc72b330c5a6719b7cf34382e2f 100644
--- a/src/66/66.c
+++ b/src/66/66.c
@@ -96,6 +96,12 @@ int main(int argc, char const *const *argv)
     if (!argv[1]) {
         PROG = "66" ;
         log_usage(usage_66) ;
+
+    } else if (!strcmp(argv[1], "version")) {
+
+        PROG = "version" ;
+        log_info(SS_VERSION) ;
+        return 0 ;
     }
 
     int r, n = 0, i = 0 ;
@@ -271,29 +277,15 @@ int main(int argc, char const *const *argv)
         nargv[n++] = PROG ;
         func = &ssexec_tree_wrapper ;
 
-        auto_strings(opts, main, OPTS_TREE) ;
-
-    } else if (!strcmp(argv[1], "inresolve")) {
-
-        PROG = "inresolve" ;
-        nargv[n++] = PROG ;
-        info.prog = PROG ;
-        info.help = help_inresolve ;
-        info.usage = usage_inresolve ;
-        func = &ssexec_inresolve ;
+        auto_strings(opts, main) ;
 
-        auto_strings(opts, main, OPTS_INRESOLVE) ;
+    } else if (!strcmp(argv[1], "service")) {
 
-    } else if (!strcmp(argv[1], "instate")) {
-
-        PROG = "instate" ;
+        PROG = "service" ;
         nargv[n++] = PROG ;
-        info.prog = PROG ;
-        info.help = help_instate ;
-        info.usage = usage_instate ;
-        func = &ssexec_instate ;
+        func = &ssexec_service_wrapper ;
 
-        auto_strings(opts, main, OPTS_INSTATE) ;
+        auto_strings(opts, main) ;
 
     } else if (!strcmp(argv[1], "intree")) {