anchor.diff:  import 'common.dart';
   export 'common.dart';
   
  -class _ServerRoute{
  -  final String routeName;
  -  final String method;
  +class RequestHandlerParameters{
  +  HttpRequest req;
  +  Map<String, String> url_params;
   
  -  _ServerRoute(this.routeName, this.method);
  -
  -  bool operator ==(_ServerRoute other) => (this.routeName == other.routeName &&
  -      this.method == other.method);
  -
  -  String toString() => routeName + ":" + method;
  -
  -  int get hashCode => toString.hashCode;
  +  RequestHandlerParameters(this.req, this.url_params);
   }
   
   /**
  - * [RequestNavigator] wires together [Route] matching, [Filter]ing of [HttpRequests]
  + * [RequestNavigator] wires together [Route] matching, [Filter]ing of [HttpRequest]s
    * and [Handler] calling. It manages url addresses and bind them handlers.
    */
   class RequestNavigator {
     final Stream<HttpRequest> _incoming;
     final Router _router;
  -  final Map<_ServerRoute, StreamController<HttpRequest>> _streams = {};
   
     /**
  -   * Contains [Route], [Filter], [Stream] triples where [Stream] has at least one handler.
  +   * Maps route names to [Stream]
      */
  -  final List _filters = [];
  -
  -  final _ServerRoute _defaultServerRouteId = new _ServerRoute('default', '');
  +  final Map<String, StreamController<RequestHandlerParameters>> _streams = {};
   
     /**
  -   * Creates new RequestNavigator listening on [_incoming].
  +   * If no route is matched.
  +   */
  +  StreamController<RequestHandlerParameters> _defaultStreamController = null;
  +
  +  /**
  +   * Creates new RequestNavigator listening on [_incoming] and routing via [_router].
      */
     RequestNavigator(this._incoming, this._router){
       this._incoming.listen(navigate);
     }
   
     StreamController _createStreamControllerWithHandler(dynamic handler){
  -    StreamController<HttpRequest> streamController = new StreamController<HttpRequest>();
  +    var streamController = new StreamController<RequestHandlerParameters>();
       streamController.stream.listen(handler);
       return streamController;
     }
  
positive.code:    * whole [HttpRequest] is filtered through [Filter] and if passes all then
     * [HttpRequest] is inserted to the correspondig [Stream].
     */
    Stream<HttpRequest> navigate(HttpRequest req){
      var routeInfo = _router.match(req.uri.path);
      if(routeInfo != null){
        return _navigateToServerRoute(req, new _ServerRoute(routeInfo[0], req.method)
          , routeInfo[1]);
      }
      else{
        return _navigateToServerRoute(req, _defaultServerRouteId, {});
      }
    }
  
    Stream<HttpRequest> _navigateToServerRoute(HttpRequest req,
        _ServerRoute serverRoute, Map params){
  
      if(!_streams.containsKey(serverRoute)){
        throw new ArgumentError("Stream not found for '$serverRoute'");
      }
  
      var streamController = _streams[serverRoute];
      streamController.add(req);
      return streamController.stream;
    }
  }
  
  abstract class Filter{
    /**
     * Should work as a WHERE condition.
     */
    bool filter(HttpRequest req);
  }
  
negative.code: 
  library clean_router.server;
  
  //TODO Filters
  
  import "dart:core";
  