anchor.diff:                  opt_unchoke_chain = []}).
   
   -record(rechoke_info, {pid :: pid(),
  -                       kind :: 'seeding' | 'leeching',
  -                       state :: 'seeding' | 'leeching' ,
  +                       peer_state :: 'seeding' | 'leeching', % Is the peer seeding or leeching
  +                       state :: 'seeding' | 'leeching' , % Are we seeding or leeching the torrent of the peer
                          snubbed :: boolean(),
                          r_interest_state :: 'interested' | 'not_interested',
                          r_choke_state :: 'choked' | 'unchoked' ,
  
positive.code:             end
      end.
  
  split_preferred_peers([], Downs, Leechs) ->
      {Downs, Leechs};
  split_preferred_peers([P | Next], Downs, Leechs) ->
      case P#rechoke_info.kind =:= seeding
            orelse P#rechoke_info.r_interest_state =:= not_interested of
          true ->
              split_preferred_peers(Next, Downs, Leechs);
          false when P#rechoke_info.state =:= seeding ->
              split_preferred_peers(Next, Downs, [P | Leechs]);
          false when P#rechoke_info.snubbed =:= true ->
              split_preferred_peers(Next, Downs, Leechs);
          false ->
              split_preferred_peers(Next, [P | Downs], Leechs)
      end.
  
  %%====================================================================
  
negative.code:     etorrent_peer_control:choke(P#rechoke_info.pid),
      rechoke_choke(Next, Count, Optimistics);
  rechoke_choke([P | Next], Count, Optimistics) ->
      case P#rechoke_info.peer_state =:= seeding of
          true ->
              etorrent_peer_control:choke(P#rechoke_info.pid),
              rechoke_choke(Next, Count, Optimistics);
  