anchor.diff:      end, {0,0, Tree}, Data).
   
   %% manipulators
  -
  -sort_mfa(Bpfs, ascending) when is_list(Bpfs) ->
  +sort_mfa(Bpfs, mfa) when is_list(Bpfs) ->
       lists:sort(fun
  -	    ({_,{_,A}}, {_,{_,B}}) when A > B -> true;
  +	    ({A,_}, {B,_}) when A < B -> true;
   	    (_, _) -> false
   	end, Bpfs);
  -sort_mfa(Bpfs, descending) when is_list(Bpfs) ->
  +sort_mfa(Bpfs, time) when is_list(Bpfs) ->
  +    lists:sort(fun
  +	    ({_,{A,_}}, {_,{B,_}}) when A < B -> true;
  +	    (_, _) -> false
  +	end, Bpfs);
  +sort_mfa(Bpfs, calls) when is_list(Bpfs) ->
       lists:sort(fun
   	    ({_,{_,A}}, {_,{_,B}}) when A < B -> true;
   	    (_, _) -> false
   	end, Bpfs);
  -sort_mfa(Bpfs, _) when is_list(Bpfs) -> sort_mfa(Bpfs, ascending).
  +sort_mfa(Bpfs, _) when is_list(Bpfs) -> sort_mfa(Bpfs, calls).
   
   filter_mfa(Bpfs, Ts) when is_list(Ts) ->
       filter_mfa(Bpfs, [], proplists:get_value(calls, Ts, 0), proplists:get_value(time, Ts, 0));
  
positive.code: filter_mfa([{_, {C, T}}=Bpf|Bpfs], Out, Ct, Tt) when C >= Ct, T >= Tt -> filter_mfa(Bpfs, [Bpf|Out], Ct, Tt);
  filter_mfa([_|Bpfs], Out, Ct, Tt) -> filter_mfa(Bpfs, Out, Ct, Tt).
  
  %% strings and format
  
  s({M,F,A}) -> s("~w:~w/~w",[M,F,A]);
  s(Term) -> s("~p", [Term]).
  
negative.code: 	    exit(Pid, kill),
  	    {reply, error, #state{ fd = Fd}}
      end;
  
  handle_call({profile, _Rootset, _Pattern}, _From, #state{ profiling = true } = S) ->
      {reply, {error, already_profiling}, S};
  
  handle_call({profile, Rootset, Pattern}, From, #state{ fd = Fd } = S) ->
  
  