anchor.diff:  in_edges(V) ->
       gen_server:call(?MODULE, {in_edges, V}, infinity).
   
  +process_map() ->
  +    gen_server:call(?MODULE, get_process_map, infinity).
  +
   %%%===================================================================
   %%% gen_server callbacks
   %%%===================================================================
   
   %% @doc Initialize state.
   init([]) ->
  -    {ok, #state{dag=digraph:new([acyclic])}}.
  -
  -%% @private
  +    {ok, #state{dag=digraph:new([acyclic]),
  +                process_map=dict:new()}}.
  +
   -spec handle_call(term(), {pid(), term()}, #state{}) ->
       {reply, term(), #state{}}.
   
  
positive.code:          export_dot/1]).
  
  %% Test
  -export([n_vertices/0,
           n_edges/0,
           out_degree/1,
           in_degree/1,
  
negative.code: 
  %% @private
  -spec handle_info(term(), #state{}) -> {noreply, #state{}}.
  
  %% @doc Remove the edges associated with a lasp process when it terminates.
  %%
  %%      Given that lasp processes might get restarted or terminated,
  %%      we have to know when it happens so we can delete the appropiate
  %%      edges in the graph.
  %%
  handle_info({'DOWN', _, process, Pid, _Reason}, #state{dag=Dag, process_map=PM}=State) ->
      {ok, Edges} = dict:find(Pid, PM),
      NewDag = lists:foldl(fun({F, T}, G) ->
          delete_with_label(G, F, T, Pid)
      end, Dag, Edges),
      {noreply, State#state{dag=NewDag, process_map=dict:erase(Pid, PM)}};
  
  handle_info(Msg, State) ->
      _ = lager:warning("Unhandled messages ~p", [Msg]),
      {noreply, State}.
  
  %% @private
  