anchor.diff:          watchers=Watchers} = State,
       NewNumpeers = increment(Pieceset, Numpeers),
       NewMonitors = etorrent_monitorset:insert(PeerPid, Pieceset, Monitors),
  -    send_updates(Pieceset, Watchers, NewNumpeers),
  +    NewWatchers = send_updates(Pieceset, Watchers, NewNumpeers),
       NewState = State#state{
           peer_monitors=NewMonitors,
  -        num_peers=NewNumpeers},
  +        num_peers=NewNumpeers,
  +        watchers=NewWatchers},
       {reply, ok, NewState};
   
   handle_call({add_piece, Pid, PieceIndex, Pieceset}, _, State) ->
  
positive.code:     end, Numpeers, Piecelist).
  
  
  -spec send_updates(pieceset() | pos_integer(), [#watcher{}], array()) -> ok.
  send_updates(Index, Watchers, Numpeers) when is_integer(Index) ->
      Matching = [Watch || #watcher{pieceset=Watchedset}=Watch <- Watchers,
          etorrent_pieceset:is_member(Index, Watchedset)],
      [send_update(Watcher, Numpeers) || Watcher <- Matching],
      ok;
  
  send_updates(Pieceset, Watchers, Numpeers) ->
      IsMatching = fun(Watchedset) ->
          Intersection = etorrent_pieceset:intersection(Pieceset, Watchedset),
          not etorrent_pieceset:is_empty(Intersection)
      end,
      Matching = [Watch || #watcher{pieceset=Watchedset}=Watch <- Watchers,
          IsMatching(Watchedset)],
      [send_update(Watcher, Numpeers) || Watcher <- Matching],
      ok.
  
  
  -spec send_update(#watcher{}, array()) -> ok.
  send_update(Watcher, Numpeers) ->
      #watcher{
          pid=Pid,
          ref=Ref,
          tag=Tag,
          pieceset=Pieceset} = Watcher,
      Piecelist = sorted_piecelist(Pieceset, Numpeers),
      Pid ! {scarcity, Ref, Tag, Piecelist},
      ok.
  
  
  -ifdef(TEST).
  
negative.code:     receive
          {scarcity, Ref, Tag, Order} ->
              ?assertEqual(eight, Tag),
              ?assertEqual([4,6,0,2], Order);
          Other ->
              ?assertEqual(make_ref(), Other)
      end.
  
  add_piece_update_case() ->
  