anchor.diff:                                      data_max_age = DataMaxAge}) ->
       DateTime = calendar:universal_time(),
       clean(Digraph, DateTime, DataMaxAge),
  -    {noreply, State, hibernate};
  +    {noreply, State#?STATE{dirty = true}, hibernate};
   handle_cast({stop_nci, CalcPid}, State = #?STATE{calc_pid = CalcPid}) ->
  -    do_stop_nci(CalcPid),
  -    {noreply, State#?STATE{calc_pid = no_process}};
  +    Dirty = case do_stop_nci(CalcPid) of
  +        stopped ->
  +            true;
  +        _ ->
  +            false
  +    end,
  +    {noreply, State#?STATE{dirty = Dirty, calc_pid = no_process}};
   handle_cast({stop_nci, _}, State) ->
       {noreply, State};
   handle_cast(Msg, State) ->
  
positive.code:             random:seed(now()),
              G = ?LOGDURATION(new_digraph(Vertices, Edges)),
              {NCI, Communities} = nci:compute_from_graph(G, Limits),
              ?LOGDURATION(tap_client_data:nci(NCI, Communities,
                                                  calendar:universal_time())),
              ?LOGDURATION(digraph:delete(G))
          end),
      Pid.
  
negative.code:     CommSizeLimit = tap_config:getconfig(comm_size_limit),
      CalcTimeout = tap_config:getconfig(nci_calc_time_limit_sec),
      {ok, #?STATE{calc_timeout = CalcTimeout,
                   dirty = true,
                   limits = {MaxVertices, MaxEdges, CommSizeLimit, MaxCommunities}}}.
  
  handle_call({setlimit, Key, Value}, _From,
                                          State = #?STATE{limits = Limits}) ->
      NewLimits = update_limits(Limits, Key, Value),
      {reply, NewLimits, State#?STATE{dirty = true, limits = NewLimits}};
  handle_call({save_graph, Filename}, _From,
                                          State = #?STATE{digraph = Digraph}) ->
      Reply = save_graph(Filename, Digraph),
  