anchor.diff:              send_piece(Index, Offset, Len, NS)
       end.
   
  +%% Read in a piece from the file system
  +%% TODO: Only read in blocks rather than while pieces. Caching is the O/S's area
  +%%  of expertise.
   load_piece(Index, S) ->
       {ok, Piece} = etorrent_fs:read_piece(S#state.file_system_pid, Index),
       S#state{piece_cache = {Index, Piece}}.
  
positive.code: %%% Internal functions
  %%--------------------------------------------------------------------
  
  %%--------------------------------------------------------------------
  %% Function: send_piece_message/2
  %% Description: Send the message Msg and handle an eventual connection
  %%   close gracefully.
  %%--------------------------------------------------------------------
  send_piece_message(Msg, S, Timeout) ->
      case etorrent_peer_communication:send_message(S#state.rate, S#state.socket, Msg) of
          {ok, R, Amount} ->
              ok = etorrent_rate_mgr:send_rate(S#state.torrent_id,
                                               S#state.parent,
                                               R#peer_rate.rate,
                                               Amount),
              {noreply, S#state { rate = R }, Timeout};
          {{error, closed}, R, _Amount} ->
              {stop, normal, S#state { rate = R}}
      end.
  
  send_piece(Index, Offset, Len, S) ->
      case S#state.piece_cache of
          {I, Binary} when I == Index ->
  
negative.code: send_message(Msg, S) ->
      send_message(Msg, S, 0).
  
  %% TODO: Think about the stop messages here. They are definitely wrong.
  send_message(Msg, S, Timeout) ->
      case send(Msg, S) of
          {ok, NS} -> {noreply, NS, Timeout};
  