anchor.diff:              io_lib:format("with name ~w started with ~s at ~w", [Name, MFA, proplists:get_value(pid, Off)])
       end.
   
  -format_reason({undef, [{M, F, A}|_]}) ->
  -    io_lib:format("call to undefined function ~w:~w/~w", [M, F, length(A)]);
  +format_reason({undef, [MFA|_]}) ->
  +    "call to undefined function " ++ format_mfa(MFA);
   format_reason({bad_return_value, Val}) ->
       io_lib:format("bad return value: ~w", [Val]);
  -format_reason({{case_clause, Val}, [{M, F, A}|_]}) ->
  -    io_lib:format("no case clause matching ~w in ~w:~w/~w", [Val, M, F, A]);
  +format_reason({{case_clause, Val}, [MFA|_]}) ->
  +    io_lib:format("no case clause matching ~w in ", [Val]) ++ format_mfa(MFA);
   format_reason({function_clause, [MFA|_]}) ->
       "no function clause matching " ++ format_mfa(MFA);
  +format_reason({if_clause, [MFA|_]}) ->
  +    "no true branch found while evaluating if expresion in " ++ format_mfa(MFA);
  +format_reason({{try_clause, Val}, [MFA|_]}) ->
  +    io_lib:format("no try clause matching ~w in ", [Val]) ++ format_mfa(MFA); 
   format_reason({badarith, [MFA|_]}) ->
       "bad arithmetic expression in function " ++ format_mfa(MFA);
   format_reason({{badmatch, Val}, [MFA|_]}) ->
       io_lib:format("no match of right hand value ~w in ", [Val]) ++ format_mfa(MFA);
  +%format_reason({system_limit,
  +format_reason({badarg, [MFA|_]}) ->
  +    case MFA of
  +        {_, _, A} when is_list(A) ->
  +            "bad argument in call to " ++ format_mfa(MFA);
  +        _ ->
  +            %% seems to be generated by a bad call to a BIF
  +            "bad argument in " ++ format_mfa(MFA)
  +    end;
  +format_reason({{badarity, {Fun, Args}}, [MFA|_]}) ->
  +    {arity, Arity} = lists:keyfind(arity, 1, erlang:fun_info(Fun)),
  +    io_lib:format("fun called with wrong arity of ~w instead of ~w in ", [length(Args), Arity]) ++ format_mfa(MFA);
  +format_reason({noproc, MFA}) ->
  +    "no such process or port in call to " ++ format_mfa(MFA);
   format_reason(Reason) ->
       {Str, _} = trunc_io:print(Reason, 500),
       Str.
  
positive.code:                 "** Generic server "++_ ->
                      %% gen_server terminate
                      [Name, _Msg, _State, Reason] = Args,
                      lager:log(error, Pid, "gen_server ~w crashed with reason: ~s",
                          [Name, format_reason(Reason)]);
                  "** State machine "++_ ->
                      %% gen_fsm terminate
                      [Name, _Msg, StateName, _StateData, Reason] = Args,
                      lager:log(error, Pid, "gen_fsm ~w in state ~w crashed with reason: ~s",
                          [Name, StateName, format_reason(Reason)]);
                  "** gen_event handler"++_ ->
                      %% gen_event handler terminate
                      [ID, Name, _Msg, _State, Reason] = Args,
                      lager:log(error, Pid, "gen_event ~w installed in ~w crashed with reason: ~s",
                          [ID, Name, format_reason(Reason)]);
                  _ ->
                      lager:log(error, Pid, Fmt, Args)
  
negative.code: format_crash_report(Report) ->
      Name = proplists:get_value(registered_name, Report, proplists:get_value(pid, Report)),
      {_Class, Reason, _Trace} = proplists:get_value(error_info, Report),
      io_lib:format("Process ~w crashed with reason: ~s", [Name, format_reason(Reason)]).
  
  format_offender(Off) ->
  