anchor.diff:  %% ====================================================================================
   %% @spec duplicated_code(FileName::filename(),MinLines::integer(),MinClones::integer()) -> term().
   %%  
  +
  +duplicated_code_1(DirFileList, MinLength1, MinClones1) ->
  +    FileNames = refac_util:expand_files(DirFileList, ".erl"),
  +    MinLength = case MinLength1==[] orelse  (list_to_integer(MinLength1)< ?DEFAULT_MIN_CLONE_LEN) of 
  +		    true -> ?DEFAULT_MIN_CLONE_LEN;
  +		    _ -> list_to_integer(MinLength1)
  +		end,
  +    MinClones = case MinClones1==[] orelse (list_to_integer(MinClones1) <?DEFAULT_MIN_CLONE_MEMBER) of 
  +		     true ->?DEFAULT_MIN_CLONE_MEMBER;
  +		     _ -> list_to_integer(MinClones1)
  +		 end,
  +    {Toks, ProcessedToks} = tokenize(FileNames),
  +    Tree = suffix_tree(alphabet()++"&",ProcessedToks++"&"),  %% '&' does not occur in program source.
  +    Cs=lists:flatten(lists:map(fun(B) -> collect_clones(MinLength,MinClones,B) end, Tree)),
  +    Cs1 = filter_out_sub_clones(Cs),
  +    Cs2 = clones_with_atoms(Cs1, Toks, MinLength, MinClones),
  +    %% io:format("Cs2:\n~p\n", [Cs2]),
  +    Cs3 = filter_out_sub_clones(Cs2),
  +    Cs4 = combine_neighbour_clones(Cs3, MinLength, MinClones),
  +    Cs5 = trim_clones(FileNames, Cs4, MinLength, MinClones),
  +    remove_sub_clones(Cs5).
  + 
   
   duplicated_code(DirFileList, MinLength1, MinClones1) ->
       FileNames = refac_util:expand_files(DirFileList, ".erl"),
  
positive.code: 	{string, _L3, _V3} -> 'S';  
  	{float, _, _} ->'F';        
  	{char, _, _} ->'C' ;        
  	{A, _} -> case lists:keysearch(A, 1, alphabet_1()) of 
  		      {value, {A, Value}} -> Value;
  		      _  -> erlang:error(io:format("Unhandled token:\n~p\n", [T]))
  		  end
  
negative.code: 
  -module(refac_duplicated_code).
  
  -export([duplicated_code/3]).
  
  -export([duplicated_code_1/3,suffix_tree/2, remove_var_literals/1]).
  
  %% TODO:  
  %% 1) does recusive function calls affect the result?
  