anchor.diff:  start() -> start(default).
   
   -spec start(trace_id() | passed_state()) -> ok.
  -start(TraceName) when is_atom(TraceName) ->
  +start(TraceId) when is_atom(TraceId) ->
       LoggerPid = pid_groups:find_a(trace_mpath),
  -    start(TraceName, comm:make_global(LoggerPid));
  +    start(TraceId, comm:make_global(LoggerPid), fun(Msg) -> Msg end);
   start(PState) when is_tuple(PState) ->
  -    start(passed_state_trace_id(PState), passed_state_logger(PState)).
  -
  --spec start(trace_id(), logger() | comm:mypid()) -> ok.
  +    start(passed_state_trace_id(PState), 
  +          passed_state_logger(PState),
  +          passed_state_msg_map_fun(PState)).
  +
  +-spec start(trace_id(), logger() | comm:mypid() | msg_map_fun()) -> ok.
  +start(TraceId, MsgMapFun) when is_function(MsgMapFun) ->
  +    LoggerPid = pid_groups:find_a(trace_mpath),    
  +    start(TraceId, comm:make_global(LoggerPid), MsgMapFun);
   start(TraceId, Logger) ->
  -    case comm:is_valid(Logger) of
  -        true -> %% just a pid was given
  -            PState = passed_state_new(TraceId, {log_collector, Logger}),
  -            own_passed_state_put(PState);
  -        false ->
  -            PState = passed_state_new(TraceId, Logger),
  -            own_passed_state_put(PState)
  -    end,
  -    ok.
  +    start(TraceId, Logger, fun(Msg) -> Msg end).
  +
  +-spec start(trace_id(), logger() | comm:mypid(), msg_map_fun()) -> ok.
  +start(TraceId, _Logger, MsgMapFun) ->
  +    Logger = case comm:is_valid(_Logger) of
  +                 true -> {log_collector, _Logger}; %% just a pid was given                     
  +                 false -> _Logger
  +             end,
  +    PState = passed_state_new(TraceId, Logger, MsgMapFun),
  +    own_passed_state_put(PState).
   
   -spec stop() -> ok.
   stop() ->
  
positive.code:         false                       -> State
      end.
  
  passed_state_new(TraceId, Logger) -> {TraceId, Logger}.
  passed_state_trace_id(State)      -> element(1, State).
  passed_state_logger(State)        -> element(2, State).
  
  own_passed_state_put(State)       -> erlang:put(trace_mpath, State), ok.
  own_passed_state_get()            -> erlang:get(trace_mpath).
  
negative.code:                          Source::pidinfo(), Dest::pidinfo(), comm:message()}.
  -type trace_event()  :: send_event() | info_event() | recv_event().
  -type trace()        :: [trace_event()].
  -type msg_map_fun()  :: fun((comm:message()) -> comm:message()).
  -type passed_state() :: {trace_id(), logger(), msg_map_fun()}.
  -type gc_mpath_msg() :: {'$gen_component', trace_mpath, passed_state(),
                           Source::pidinfo(), Dest::pidinfo(), comm:message()}.
  
  