diff --git a/setup/cli/modules/class.module.php b/setup/cli/modules/class.module.php
index 421e49bd11a22f115af0e9d3c288099f07859e3f..a1647ce3cac8d2be9a57e29ab0fe60fe1eb82ce5 100644
--- a/setup/cli/modules/class.module.php
+++ b/setup/cli/modules/class.module.php
@@ -157,8 +157,18 @@ class Module {
         if ($this->arguments) {
             echo "\nArguments:\n";
             foreach ($this->arguments as $name=>$help)
+                $extra = '';
+                if (is_array($help)) {
+                    if (isset($help['options']) && is_array($help['options'])) {
+                        foreach($help['options'] as $op=>$desc)
+                            $extra .= wordwrap(
+                                "\n        $op - $desc", 76, "\n            ");
+                    }
+                    $help = $help['help'];
+                }
                 echo $name . "\n    " . wordwrap(
-                    preg_replace('/\s+/', ' ', $help), 76, "\n    ");
+                    preg_replace('/\s+/', ' ', $help), 76, "\n    ")
+                        .$extra."\n";
         }
 
         if ($this->epilog) {
@@ -198,6 +208,10 @@ class Module {
         foreach (array_keys($this->arguments) as $idx=>$name)
             if (!isset($this->_args[$idx]))
                 $this->optionError($name . " is a required argument");
+            elseif (is_array($this->arguments[$name])
+                    && isset($this->arguments[$name]['options'])
+                    && !isset($this->arguments[$name]['options'][$this->_args[$idx]]))
+                $this->optionError($name . " does not support such a value");
             else
                 $this->_args[$name] = &$this->_args[$idx];