anchor.diff:      {ok, Ads, AdList}.
   
   %% @private
  -track_convergence() ->
  +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]}
                       ]
                   },
  -    {ok, _} = lasp:declare(?CONVERGENCE_TRACKING, PairType).
  -
  -%% @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.
  +    {?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() ->
  
positive.code:     schedule_logging(),
  
      {noreply, State};
  handle_info(Msg, State) ->
      lager:warning("Unhandled messages: ~p", [Msg]),
      {noreply, State}.
  
negative.code: %% Macros.
  -define(MAX_IMPRESSIONS, 100).
  -define(LOG_INTERVAL, 10000).
  -define(CONVERGENCE_INTERVAL, 5000).
  -define(ADS, 10).
  
  %% State record.
  