anchor.diff:     * after this one.
      */
     void performRequest() {
  -    if (_isRunning || _requestQueue.isEmpty ||
  -        new DateTime.now().difference(_lastResponseTime) < _delayBetweenRequests) {
  +    if (!_shouldSendHttpRequest()) {
         return;
       }
   
  -    _isRunning = true;
  -    var request_list = new List();
  -    while (!_requestQueue.isEmpty) {
  -      var map = _requestQueue.removeFirst();
  -      var clientRequest = map['createRequest'](); // create the request
  -      request_list.add(new PackedRequest(requestCount, clientRequest));
  -      _responseMap[requestCount++] = map['completer'];
  -    }
  +    _openRequest();
   
  -    _factory(_url, method: 'POST',
  -      sendData: JSON.encode(request_list)).then((xhr) {
  -        var list = JSON.decode(xhr.responseText);
  -        for (var responseMap in list) {
  -          var id = responseMap['id'];
  -          var response = responseMap['response'];
  -          if (_responseMap.containsKey(id)) {
  -            _responseMap[id].complete(response);
  -            _responseMap.remove(id);
  -          }
  -        }
  -        _responseMap.forEach((id, request) {
  -          throw new Exception("Request $id was not answered!");
  -        });
  -        _isRunning = false;
  -        _lastResponseTime = new DateTime.now();
  -        new Timer(_delayBetweenRequests, performRequest);
  +    _sendHttpRequest(
  +        _url,
  +        method: 'POST',
  +        sendData: JSON.encode(_prepareRequest())
  +    ).then((xhr) {
  +        _handleResponse(JSON.decode(xhr.responseText));
  +        _closeRequest();
       });
     }
   }
  
positive.code:    * RequestFactory is a function like HttpRequest.request() that returns
     * [Future<HttpRequest>].
     */
    final HttpRequestFactory _factory;
  
    /**
     * The URL where to perform requests.
  
negative.code:    */
    final Queue<Map> _requestQueue = new Queue<Map>();
  
    /**
     * Maps [Request] names to their future responses.
     */
    final Map<int, Completer> _responseMap = new Map<int, Completer>();
  
    /**
     * Counts sent requests. Serves as unique ID for new requests.
     */
    int requestCount = 0;
  
    List<PackedRequest> _prepareRequest() {
      var request_list = [];
      while (!_requestQueue.isEmpty) {
        var map = _requestQueue.removeFirst();
        var clientRequest = map['createRequest'](); // create the request
        request_list.add(new PackedRequest(requestCount, clientRequest));
        _responseMap[requestCount++] = map['completer'];
      }
      return request_list;
    }
  
    void _handleResponse(List responses) {
      for (var responseMap in responses) {
        var id = responseMap['id'];
        var response = responseMap['response'];
        if (_responseMap.containsKey(id)) {
          _responseMap[id].complete(response);
          _responseMap.remove(id);
        }
      }
      _responseMap.forEach((id, request) {
        throw new Exception("Request $id was not answered!");
      });
    }
  
    void performRequest();
  
    /**
  