anchor.diff:   		case lists:keysearch(pid, 1, Ann) of
    		  {value, {pid, Value}} ->
    		      case Typ of
  - 			any -> {pid, Value};
  - 			{pid, Vs} -> {pid,lists:usort(Value++Vs)}
  +			  {pid, Vs} -> {pid,lists:usort(Value++Vs)};
  +			  _ -> {pid, Value}		 		 
   		      end;
   		    false ->
   			case Typ of 
   			    any -> Typ;
   			    %% Special case: some application sites are deciable pids, some are undeciable.
  -			    {pid, Vs} -> {pid, lists:usort([any|Vs])}  
  +			    {pid, Vs} -> {pid, lists:usort([any|Vs])};
  +			    {pname, V} -> {pname, V}
  +
   			end
    		end
    	end,
  
positive.code: 		    Op = refac_syntax:application_operator(Node),
  		    Args = refac_syntax:application_arguments(Node),
  		    Args1 = case Args of 
  				     [A] -> {A1, _} = refac_util:stop_tdTP(fun do_annotate_special_fun_apps/2, A, {refac_prettypr:format(A), EnvPid}),
  					    [A1];
  				     [Node, A] -> 
  					 {A1, _} = refac_util:stop_tdTP(fun do_annotate_special_fun_apps/2, A, {refac_prettypr:format(A), EnvPid}),
  					 [Node, A1];
  				     _ -> Args			    
  				 end,	    
  
negative.code: 		    Node2 = refac_util:update_ann(Node1,
  						  {pid, [{spawn, CurrentFun, N}]}),
  		    {Node2, true};
  		_ -> 
  		    Op = refac_syntax:application_operator(Node),
  		    OpAnn= refac_syntax:get_ann(Op),
  		    case lists:keysearch(fun_def, 1, OpAnn) of 
  			{value, {fun_def, {erlang, self, 0, _, _}}} ->
  			    Node1 = refac_util:update_ann(Node, {pid, [{self, CurrentFun}]}),
  			    {Node1, true};
  			_->{Node, false}
  		    end
  	    end;
  	_ -> {Node, false}
      end.
  
  
  do_annotate_special_fun_apps_pname(Node, EnvPid) ->
      case refac_syntax:type(Node) of
  	application ->
  	    Op = refac_syntax:application_operator(Node),
  	    OpAnn= refac_syntax:get_ann(Op),
  	    case lists:keysearch(fun_def, 1, OpAnn) of 
  		{value, {fun_def, {erlang, register, 2, _,_}}} ->
  		    [Arg1, Arg2] = refac_syntax:application_arguments(Node),
  		    PidInfo = case lists:keysearch(pid, 1, refac_syntax:get_ann(Arg2)) of
  				  {value, {pid, PidInfo1}} -> PidInfo1;
  				  _ -> []
  			      end,
  		    io:format("Arg2:\n~p\n", [Arg2]),
  		    io:format("PidInfo:\n~p\n", [PidInfo]),
  		    Arg11 = refac_util:update_ann(Arg1, {pname, PidInfo}), 
  		    Node1 = refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11, Arg2])),
  		    case lists:keysearch(def,1, refac_syntax:get_ann(Arg1)) of 
  			{value, {def, DefinePos}} ->  %% the process name is a variable.
  			    EnvPid ! {add, {{def, DefinePos}, {pname, PidInfo}}};
  			_ -> case refac_syntax:type(Arg1) of
  				 atom -> EnvPid ! {add, {{name, refac_syntax:atom_value(Arg1)}, {pname, PidInfo}}};
  				 _ -> ok
  			    end				 
  		    end,
  		    Node1;
  		{value, {fun_def, {erlang, unregister, 1, _,_}}} ->
  		    [Arg1] = refac_syntax:application_arguments(Node),
  		    case lists:keysearch(def,1, refac_syntax:get_ann(Arg1)) of 
  			{value, {def, DefinePos}} ->
  			    EnvPid !{self(), get, {def, DefinePos}},
  			    receive
  				{EnvPid, value, Value} ->
  				    Arg11 = refac_util:update_ann(Arg1, Value),  
  				    refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11]));
  				{EnvPid, false} ->
  				    Arg11 = refac_util:update_ann(Arg1,{pname, []}), %% keep an empty list for information extension.
  				    EnvPid ! {add, {{def, DefinePos}, {pname, []}}},
  				    refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11]))
  			    end;
  			_ -> Arg11 = refac_util:update_ann(Arg1,{pname, []}),
  			    refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11]))
  		    end;
  		{value, {fun_def, {erlang, whereis, 1, _,_}}} ->
  		    [Arg1] = refac_syntax:application_arguments(Node),
  		    case lists:keysearch(def,1, refac_syntax:get_ann(Arg1)) of 
  			{value, {def, DefinePos}} ->
  			    EnvPid !{self(), get, {def, DefinePos}},
  			    receive
  				{EnvPid, value, Value} ->
  				    Arg11 = refac_util:update_ann(Arg1, Value),  
  				    refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11]));
  				{EnvPid, false} ->
  				    Arg11 = refac_util:update_ann(Arg1,{pname, []}),
  				    EnvPid ! {add, {{def, DefinePos}, {pname, []}}},
  				    refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11]))
  			    end;
  			_ -> 
  			    Arg11 = refac_util:update_ann(Arg1,{pname, []}),
  			    refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11]))
  		    end;
  		{value, {fun_def, {erlang, send, 2, _, _}}} -> 
  		    [Arg1, Arg2] = refac_syntax:application_arguments(Node),
  		    Arg11 = case refac_syntax:type(Arg1) of 
  				atom -> refac_util:update_ann(Arg1, {pname, []});
  				_ -> Arg1
  			    end,
  		    Node1 = refac_syntax:copy_attrs(Node, refac_syntax:application(Op, [Arg11, Arg2])),
  		    case lists:keysearch(def,1, refac_syntax:get_ann(Arg1)) of 
  			{value, {def, DefinePos}} ->
  			    EnvPid ! {add, {{def, DefinePos}, {pname, []}}};
  			_ -> ok
  		    end,
  		    Node1; 
  		_ -> 		    
  		   Node
  	    end;
  	infix_expr -> Op  = refac_syntax:infix_expr_operator(Node),
  		      case refac_syntax:operator_name(Op) of 
  			  '!' ->
  			      Left = refac_syntax:infix_expr_left(Node),
  			      Right = refac_syntax:infix_expr_right(Node),
  			      case refac_syntax:type(Left) of 
  				  atom ->
  				      Left1 = refac_util:update_ann(Left, {pname, []}),
  				      refac_syntax:copy_attrs(Node, refac_syntax:infix_expr(Left1, Op, Right));
  				  _ -> Node
  			      end;
  			  _ -> Node
  		      end;
  	_ -> Node
      end.
  
  
  is_spawn_app(Tree) ->
      SpawnFuns1 = [{erlang, spawn, 1}, {erlang, spawn, 2}, {erlang, spawn, 3}, {erlang, spawn, 4},
  