anchor.diff:  send_log_msg(LoggerPid, Msg) ->
       %% don't log the sending of log messages ...
       RestoreThis = own_passed_state_get(),
  -    stop(),
  -    comm:send(LoggerPid, Msg),
  -    own_passed_state_put(RestoreThis).
  +    case RestoreThis of
  +        undefined ->
  +            stop(),
  +            comm:send(LoggerPid, Msg),
  +            own_passed_state_put(RestoreThis);
  +        _ ->
  +            FilterFun = passed_state_filter_fun(RestoreThis),
  +            case FilterFun(Msg) of
  +                true ->
  +                    stop(),
  +                    comm:send(LoggerPid, Msg),
  +                    own_passed_state_put(RestoreThis);
  +                false -> ok
  +            end
  +     end.
   
   -spec normalize_pidinfo(anypid()) -> pidinfo().
   normalize_pidinfo(Pid) ->
  
positive.code: 
  -spec start(trace_id() | passed_state()) -> ok.
  start(TraceId) when is_atom(TraceId) ->
      LoggerPid = pid_groups:find_a(trace_mpath),
      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),
            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) ->
      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.
  
negative.code: -type trace_event()  :: send_event() | info_event() | recv_event().
  -type trace()        :: [trace_event()].
  -type msg_map_fun()  :: fun((comm:message()) -> comm:message()).
  -type filter_fun()   :: fun((trace_event()) -> boolean()).
  -type passed_state() :: {trace_id(), logger(), msg_map_fun(), filter_fun()}.
  -type gc_mpath_msg() :: {'$gen_component', trace_mpath, passed_state(),
                           Source::pidinfo(), Dest::pidinfo(), comm:message()}.
  -type options()      :: [{logger, logger() | comm:mypid()} |
                           {map_fun, msg_map_fun()} |
                           {filter_fun, filter_fun()}].
  
  -ifdef(with_export_type_support).
  -export_type([logger/0]).
  -export_type([pidinfo/0]).
  -export_type([passed_state/0]).
  -export_type([trace_event/0]).
  -endif.
  
  -spec start() -> ok.
  