anchor.diff:  collect([TM | TMs]) ->
       ?t:format(        "Expecting:      ~p~n", [TM]),
       receive
  -	M ->
  -	    case if element(1, M) == trace_ts ->
  -			 list_to_tuple(lists:reverse(
  -					 tl(lists:reverse(tuple_to_list(M)))));
  -		    true -> M
  -		 end of
  -		TM ->
  -		    ?t:format("Got:            ~p~n", [M]),
  -		    collect(TMs);
  -		_ ->
  -		    ?t:format("Got unexpected: ~p~n", [M]),
  -		    flush({got_unexpected,M})
  +	M0 ->
  +	    M = case element(1, M0) of
  +		    trace_ts ->
  +			list_to_tuple(lists:reverse(
  +					tl(lists:reverse(tuple_to_list(M0)))));
  +		    _ -> M0
  +		end,
  +	    case is_function(TM,1) of
  +		true ->
  +		    case (catch TM(M)) of
  +			true ->
  +			    ?t:format("Got:            ~p~n", [M]),
  +			    collect(TMs);
  +			_ ->
  +			    ?t:format("Got unexpected: ~p~n", [M]),
  +			    flush({got_unexpected,M})
  +		    end;
  +
  +		false ->
  +		    case M of
  +			TM ->
  +			    ?t:format("Got:            ~p~n", [M]),
  +			    collect(TMs);
  +			_ ->
  +			    ?t:format("Got unexpected: ~p~n", [M]),
  +			    flush({got_unexpected,M})
  +		    end
   	    end
       end.
   
  
positive.code: 	     [{['$1','$1'],[{is_atom, '$1'}],[kakalorum]}],
  	     [{call, {?MODULE, f2, [a, a]}}]),
  
  %    case tr0(fun() -> ?MODULE:f2(a, a) end,
  %	     {?MODULE, f2, 2},
  %	     [{['$1','$1'],[{is_atom, '$1'}],[{message, {process_dump}}]}]) of
  %	[{trace, _, call, {?MODULE, f2, [a, a]}, Bin}] ->
  %	    erlang:display(binary_to_list(Bin))
  %    end,
  
  % Error cases
      ?line errchk([{['$1','$1'],[{is_atom, '$1'}],[{banka, kanin}]}]),
  
negative.code: fn(X, Y, Z) ->
      [X, Y, Z].
  
  fbinmatch(<<Int, Rest/binary>>, Acc) ->
      fbinmatch(Rest, [?MODULE:f1(Int) | Acc]);
  fbinmatch(<<>>, Acc) -> Acc.
  
  id(X) ->
      X.
  
  