anchor.diff:  
   hash_loop({Index, ExpHashTab, {NewData, OldData}}) ->
       receive
  +	%% add a new entry.
   	{add, {Key, {{M, F, A, Index1}, NumOfToks,{StartEndLoc, StartLine}}}} ->
   	    case ets:lookup(ExpHashTab, Key) of
   		[{Key, I}] ->
  +		    %% an existing key.
  +		    %% here 'true' means that the entry is completely new.
   		    Elem={{{M, F, A, Index1}, NumOfToks,{StartEndLoc, StartLine}, true}, I},
   		    hash_loop({Index, ExpHashTab,{[Elem| NewData],OldData}});
  -		[] -> ets:insert(ExpHashTab, {Key, Index}),
  -		      Elem={{{M, F, A, Index1}, NumOfToks, {StartEndLoc, StartLine}, true}, Index},
  -		      hash_loop({Index + 1, ExpHashTab, {[Elem|NewData], OldData}})
  +		[] -> 
  +		    %% New Key.
  +		    ets:insert(ExpHashTab, {Key, Index}),
  +		    Elem={{{M, F, A, Index1}, NumOfToks, {StartEndLoc, StartLine}, true}, Index},
  +		    hash_loop({Index + 1, ExpHashTab, {[Elem|NewData], OldData}})
   	    end;
   	{quick_hash,{{FileName, FunName, Arity}, StartLine}} ->
   	    %%refac_io:format("OldData:\n~p\n", [OldData]),
  
positive.code: 
  ast_loop(ASTTab, {CurM, CurF, CurA, Index, HashPid}) ->
      receive
  	{add, {{M, F, A}, ExprASTs, StartLine}} ->
  	    NewIndex = case {M, F, A} == {CurM, CurF, CurA} of
  			   true -> Index;
  			   false ->1
  		       end,
  	    Len = length(ExprASTs),
  	    ExprASTsWithIndex = lists:zip(ExprASTs, lists:seq(0, Len - 1)),
  	    [begin
  		 NoOfToks = no_of_tokens(E),
  		 ets:insert(ASTTab, {{M, F, A, NewIndex+I}, E}),
  		 E1 = do_generalise(E),
  		 HashVal = erlang:md5(refac_prettypr:format(E1)),
  		 StartEndLoc=refac_misc:get_start_end_loc(E),
  		 insert_hash(HashPid, {HashVal, 
  				       {{M, F, A, NewIndex+I}, 
  					NoOfToks, {StartEndLoc, StartLine}}})
  	     end || {E, I} <- ExprASTsWithIndex],
  	    insert_dummy_entry(HashPid, M),
  	    ast_loop(ASTTab, {M, F, A, NewIndex+Len, HashPid});
  	{quick_hash, {{FName, FunName, Arity}, StartLine}}->
  	    update_hash(HashPid, {{FName, FunName, Arity}, StartLine}),
  	    ast_loop(ASTTab, {FName, FunName, Arity, Index, HashPid});
  	{get_clone_candidates, From, Thresholds, Dir} ->
  
negative.code: 	{fun_def, {M, F, A,{L1, C1},{L2, C2}}} ->
  	    {fun_def, {M, F, A, {to_relative(L1,StartLine),C1}, 
  		       {to_relative(L2,StartLine), C2}}};
  	%% the following has nothing to do with locations,
  	%% just remove some information not to be used from 
          %% from the AST.
  	{toks, _} ->  
  	    {toks, []};
  	{env, _} ->
  