anchor.diff:      launch_triggers(AdList, Ads, Actor),
   
       %% Create instance for convergence tracking
  +    %% Also schedule check convergence
       track_convergence(),
   
       {ok, #state{actor=Actor, ads=Ads}}.
  
positive.code: %% Macros.
  -define(MAX_IMPRESSIONS, 100).
  -define(LOG_INTERVAL, 10000).
  -define(ADS, 10).
  
  %% State record.
  
negative.code:     {ok, Ads, AdList}.
  
  %% @private
  launch_triggers(AdList, Ads, Actor) ->
      lists:map(fun(Ad) ->
                        spawn_link(fun() ->
                                           trigger(Ad, Ads, Actor)
                                   end)
                end, AdList).
  
  %% @private
  trigger(#ad{counter=CounterId} = Ad, Ads, Actor) ->
      %% Blocking threshold read for max advertisement impressions.
      {ok, Value} = lasp:read(CounterId, {value, ?MAX_IMPRESSIONS}),
  
      lager:info("Threshold for ~p reached; disabling!", [Ad]),
      lager:info("Counter: ~p", [Value]),
  
      %% Remove the advertisement.
      {ok, _} = lasp:update(Ads, {rmv, Ad}, Actor),
  
      ok.
  
  %% @private
  client_number() ->
      ?NUM_NODES.
  
  %% @private
  convergence_id() ->
      PairType = {?PAIR_TYPE,
                      [
                          ?COUNTER_TYPE,
                          {?GMAP_TYPE, [?BOOLEAN_TYPE]}
                      ]
                  },
      {?CONVERGENCE_TRACKING, PairType}.
  
  %% @private
  track_convergence() ->
      {Id, Type} = convergence_id(),
      {ok, _} = lasp:declare(Id, Type),
      schedule_check_convergence().
  
  %% @private
  schedule_check_convergence() ->
      erlang:send_after(?CONVERGENCE_INTERVAL, self(), check_convergence).
  
  %% @private
  schedule_logging() ->
  