diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/Args.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/Args.java
index ceb873d..8a721b9 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/Args.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/Args.java
@@ -35,11 +35,11 @@
     @Option(name = "-clusterport", metaVar = "<port>", usage = "Port of the cluster to connect to")
     protected int clusterPort = 19002;
 
-    @Option(name = "-clusterstatepath", metaVar = "<path>",
+    @Option(name = "-clusterstatepath", metaVar = "<path>", hidden = true,
             usage = "Path on host:port to check for cluster readiness")
     protected String clusterStatePath = "admin/cluster";
 
-    @Option(name = "-shutdownpath", metaVar = "<path>",
+    @Option(name = "-shutdownpath", metaVar = "<path>", hidden = true,
             usage = "Path on host:port to invoke to initiate shutdown")
     protected String shutdownPath = "admin/shutdown";
 
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java
index dcb4d24..cf7fd4f 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java
@@ -60,26 +60,35 @@
             }
         } catch (CmdLineException e) {
             System.err.println("ERROR: " + e.getMessage() + "\n\n"
-                    + "Usage: " + getHelperCommandName() + " [options] <command>\n\n"
-                    + "Commands:");
-            printCommandsUsage(System.err);
-            System.err.println("Options:");
-            parser.printUsage(System.err);
-            System.err.flush();
+                    + "Usage: " + getHelperCommandName() + " [options] <command>");
+
+            printUsageDetails(parser, System.err);
             return 99;
         }
     }
 
+    protected void printUsageDetails(CmdLineParser parser, PrintStream ps) {
+        ps.println("\nCommands:");
+        printCommandsUsage(ps);
+        ps.println("\nOptions:");
+        parser.printUsage(ps);
+        ps.flush();
+    }
+
     protected String getHelperCommandName() {
         return ASTERIX_HELPER;
     }
 
     protected void printCommandsUsage(PrintStream out) {
         for (Command command : Command.values()) {
-            printCommandUsage(out, command.name(), command.usage());
+            printCommandUsage(out, command);
         }
     }
 
+    protected void printCommandUsage(PrintStream out, Command command) {
+        printCommandUsage(out, command.name(), command.usage());
+    }
+
     protected void printCommandUsage(PrintStream out, String name, String usage) {
         StringBuilder padding = new StringBuilder();
         for (int i = name.length(); i < COMMAND_USAGE_ALIGNMENT; i++) {
