anchor.diff:                    {count, ?bucket_opt_spec}]}).
   -define(block_cmd_spec,
           {block, [{list,  ?bucket_opt_spec ++ ?sort_opt_spec ++
  -                         [{key, undefined, undefined, string, "key"},
  -                          {prefix,  undefined, undefined,  string, "prefix of UUIDs"}]},
  +                      [{key, undefined, undefined, string, "key"},
  +                       {prefix,  undefined, undefined,  string, "prefix of UUIDs"}]},
                    {show,  ?bucket_opt_spec ++
  -                         [{uuid, undefined, undefined, string, "UUID"},
  -                          {seq,  undefined, undefined, string, "sequential id"}]},
  +                      [{uuid, undefined, undefined, string, "UUID"},
  +                       {seq,  undefined, undefined, string, "sequence ID"}]},
                    {count, ?bucket_opt_spec ++ ?sort_opt_spec}
  -                 ]}).
  +                ]}).
   -define(gc_cmd_spec,
           {gc, [{list,  [{file, $f, "file", string, "input file"}]++?sort_opt_spec},
  -               {show,  [{key, undefined, undefined, string, "gc key"}]},
  -               {count, []}
  +              {show,  [{key, undefined, undefined, string, "gc key"}]},
  +              {count, []}
                ]}).
   -define(access_cmd_spec,
           {access, [{list, ?sort_opt_spec},
                     {show, [{key, undefined, undefined, string, "access stats key"}]}]}).
   -define(storage_cmd_spec,
           {storage, [{list, ?sort_opt_spec},
  -                    {show, [{key, undefined, undefined, string, "bucket name"}]}]}).
  +                   {show, [{key, undefined, undefined, string, "storage stats key"}]}]}).
   -define(user_cmd_spec,
           {user, [{list, ?sort_opt_spec},
  -                {show, [{key, undefined, "key", string, "UserID"},
  +                {show, [{key, undefined, "key", string, "User ID"},
                           {name, undefined, "name", string, "Username"}]}]}).
   
  -main([]) ->
  +main(Args) ->
       init_specs(),
  -    usage();
  -main([Cmd]) ->
  -    init_specs(),
  -    maybe_exit_with_usage(Cmd),
  -    usage(Cmd);
  -main([Cmd, SubCmd|Args]) ->
  -    init_specs(),
  -    maybe_exit_with_usage(Cmd, SubCmd),
  -    OptSpec = get_opt_spec(Cmd, SubCmd),
  -    case getopt:parse(OptSpec, Args) of
  -        {ok, {Opts, _NonOpts}} ->
  -            maybe_exit_with_usage(Cmd, SubCmd, Opts),
  -            {ok, RiakcPid} = connect(Opts),
  -            process_command(list_to_atom(Cmd), list_to_atom(SubCmd), Opts, RiakcPid);
  -        {error, {Reason, _Data}} ->
  -            exit_with_usage(Reason)
  +    case getopt:parse(get_merged_spec(), Args) of
  +        {error, {Reason, Data}} ->
  +            exit_with_usage({Reason, Data});
  +        {ok, {_Opts, []}} ->
  +            usage();
  +        {ok, {_Opts, [Cmd]}} ->
  +            maybe_exit_with_usage(Cmd),
  +            usage(Cmd);
  +        {ok, {_Opts, [Cmd, SubCmd | _Rest]}} ->
  +            maybe_exit_with_usage(Cmd, SubCmd),
  +            OptSpec = get_opt_spec(Cmd, SubCmd),
  +            CmdArgs = [A || A <- Args, A =/= Cmd, A =/= SubCmd],
  +            case getopt:parse(OptSpec, CmdArgs) of
  +                {error, {Reason, Data}} ->
  +                    exit_with_usage({Reason, Data});
  +                {ok, {Opts, _NonOpts}} ->
  +                    maybe_exit_with_usage(Cmd, SubCmd, Opts),
  +                    {ok, RiakcPid} = connect(Opts),
  +                    process_command(list_to_atom(Cmd), list_to_atom(SubCmd),
  +                                    Opts, RiakcPid)
  +            end
       end.
   
   process_command(bucket, list, Opts, RiakcPid) ->
  
positive.code:     %% TODO: Error handling, e.g. StatItems = "{error,{timeout,[]}}"
      [io:format("~-36s: ~32B ~32B~n", [Bucket, Objects, Bytes]) ||
          {Bucket, StatItems} <- Buckets,
          {ObjectsKey, Objects} <- StatItems, ObjectsKey =:= <<"Objects">>, 
          {BytesKey, Bytes}     <- StatItems, BytesKey   =:= <<"Bytes">>].
  
  print_users(RiakcPid, Bucket, Options) ->
  
negative.code:             FirstChars = binary:part(Value, 0, min(32, ByteSize)),
              %% http://gambasdoc.org/help/doc/pcre
              %% - :graph: printing excluding space
              %% - \A:     start of subject
              %% - \z:     end of subject
              case re:run(FirstChars, "\\A[[:graph:]]*\\z", []) of
                  nomatch ->
                      io:format("~-32s ~8B: ~10B ~64w~n",
  