anchor.diff:  	    case catch action(list_to_atom(Object),
   			      list_to_atom(Action),
   			      args_to_dictionary(Command)) of
  -		{ok, nothing} ->
  -		    nothing;
  -		{ok, Result} ->
  -		    io:format("Success: ~p~n", [Result]);
  -		{error, Reason} ->
  -		    io:format("Error: ~p~n", [Reason]);
  +		ok ->
  +		    io:format("~n"),
  +		    init:stop(0);
  +		error ->
  +		    io:format("~n"),
  +		    init:stop(2);
   		Exception when is_list(Exception) ->
  -		    io:format("Fatal: " ++ Exception ++ "~n");
  +		    io:format("Fatal: " ++ Exception ++ "~n"),
  +		    init:stop(2);
   		Exception ->
  -		    io:format("Fatal: ~p~n", [Exception])
  +		    io:format("Fatal: ~p~n", [Exception]),
  +		    init:stop(2)
   	    end;
  -	A ->
  +	_ ->
   	    usage()
       end,
       halt().
  
positive.code: action(meeting, add, Args) ->
      {[[Name], [Org], Start, End], Metadata} =
  	getopt(["name", "org", "start", "end"], Args),
      call(meeting, add, [#uce_meeting{id=[Org, Name],
  				     start_date=parse_date(Start),
  				     end_date=parse_date(End),
  				     metadata=Metadata}]);
  
  action(meeting, delete, Args) ->
      {[[Name], [Org]], _} = getopt(["name", "org"], Args),
      call(meeting, delete, [{Org, Name}]);
  
  action(meeting, get, Args) ->
      {[[Name], [Org]], _} = getopt(["name", "org"], Args),
      call(meeting, get, [{Org, Name}]);
  
  action(meeting, update, Args) ->
      {[[Name], [Org], Start, End], Metadata} =
  	getopt(["name", "org", "start", "end"], Args),
      call(meeting, update, [#uce_meeting{id=[Org, Name],
  					start_date=parse_date(Start),
  					end_date=parse_date(End),
  					metadata=Metadata}]);
  
  action(meeting, list, Args) ->
      case getopt([name, status], Args) of
  	{[[Name], [Status]], _} ->
  	    call(meeting, list, [Name, Status]);
  	{[[Name]], _} ->
  	    call(meeting, list, [Name, "all"])
      end;
  
  %%
  %% Utils
  
negative.code:     Remaining = [{Key, string:join(Value, " ")} || {Key, Value} <- RawRemaining],
      {Values, Remaining}.
  
  json_escape(String) when is_list(String) ->
      re:replace(String, "\"", "\\\"", [{return, list}]);
  json_escape(Integer) when is_integer(Integer) ->
      Integer.
  
  display_metadata(json, []) ->
      [];
  display_metadata(json, [{Key, Value}|Tail]) ->
      io:format("        ~p: ~p", [json_escape(Key), json_escape(Value)]),
      case Tail of
  	[] ->
  	    io:format("~n");
  	_ ->
  	    io:format(",~n")
      end,
     display_metadata(json, Tail).
  
  display_field(json, [], []) ->
      [];
  display_field(json, [Value|Values], [Field|Fields]) ->
      case Field of
  	metadata ->
  	    io:format("    \"metadata\": {~n"),
  	    display_metadata(json, Value),
  	    io:format("    }");
  	_ ->
  	    io:format("    ~p: ~p", [json_escape(atom_to_list(Field)),
  					     json_escape(Value)])
      end,
      case Fields of
  	[] ->
  	    io:format("~n");
  	_ ->
  	    io:format(",~n")
      end,
      display_field(json, Values, Fields).
  
  display(json, Records, Fields) when is_list(Records) ->
      io:format("["),
      [display(json, Record, Fields) || Record <- Records],
      io:format("]");
  display(json, Record, Fields) ->
      [_|Values] = tuple_to_list(Record),
      io:format("{~n"),
      display_field(json, Values, Fields),
      io:format("}");
  
  display(erlang, Record, _) ->
      io:format("~p~n", [Record]).    
      
  call(Object, Action, Args) ->
      Module = list_to_atom("uce_" ++ atom_to_list(Object)),
      NodeStr = "ucengine@localhost",
  