anchor.diff:  %%      either because it formed a loop, or because some of the
   %%      vertices weren't in the graph.
   %%
  --spec add_edges(list(id()), id(), pid(), list({id(), function()}), function(), {id(), function()}) -> ok | error.
  +-spec add_edges(list(lasp_vertex()),
  +                lasp_vertex(),
  +                pid(),
  +                list({lasp_vertex(), function()}),
  +                     function(),
  +                     {lasp_vertex(), function()}) -> ok | error.
  +
   add_edges(Src, Dst, Pid, ReadFuns, TransFun, WriteFun) ->
       gen_server:call(?MODULE, {add_edges, Src, Dst, Pid, ReadFuns, TransFun, WriteFun}, infinity).
   
  
positive.code:     gen_server:call(?MODULE, {add_vertices, Vs}, infinity).
  
  %% @doc Check if linking the given vertices will form a loop.
  -spec will_form_cycle(list(id()), id()) -> boolean().
  will_form_cycle(Src, Dst) ->
      gen_server:call(?MODULE, {will_form_cycle, Src, Dst}, infinity).
  
  
negative.code:     false.
  
  %% @doc Delete all edges between Src and Dst with the given pid..
  -spec delete_with_pid(digraph:graph(), lasp_vertex(), lasp_vertex(), term()) -> digraph:graph().
  delete_with_pid(Graph, Src, Dst, Pid) ->
      lists:foreach(fun
          ({E, _, _, #edge_label{pid=TargetPid}}) when TargetPid =:= Pid ->
  