anchor.diff:    /**
      * Creates an icon instance with the given options.
      */
  -  external factory IconOptions(
  -     String iconUrl,
  -    {
  +  external factory IconOptions({
  +      String iconUrl,
         String iconRetinaUrl,
  -      LeafletPoint iconSize,
  -      LeafletPoint iconAnchor,
  +      Point iconSize,
  +      Point iconAnchor,
         String shadowUrl,
         String shadowRetinaUrl,
  -      LeafletPoint shadowSize,
  -      LeafletPoint shadowAnchor,
  -      LeafletPoint popupAnchor,
  +      Point shadowSize,
  +      Point shadowAnchor,
  +      Point popupAnchor,
         String className
       });
   }
   
   @JS("L.point")
  -class LeafletPoint {
  +class Point {
     /**
      * Creates a Point object with the given x and y coordinates. If optional round is set to true, rounds the x and y values.
      */
  -  external factory LeafletPoint(num x, num y, [bool round]);
  +  external factory Point(num x, num y, [bool round]);
  +}
  +
  +@JS("L.featureGroup")
  +class FeatureGroup {
  +
  +  /**
  +   * Create a layer group, optionally given an initial set of layers.
  +   */
  +  external factory FeatureGroup([List<ILayer> layers]);
  +
  +  /**
  +   * Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
  +   */
  +  external LatLngBounds getBounds();
  +
  +  /**
  +   * Sets the given path options to each layer of the group that has a setStyle method
  +   */
  +  external FeatureGroup setStyle(PathOptions style);
  +
  +  /**
  +   * Brings the layer group to the top of all other layers.
  +   */
  +  external FeatureGroup bringToFront();
  +
  +  /**
  +   * Brings the layer group to the bottom of all other layers.
  +   */
  +  external FeatureGroup bringToBack();
  +}
  +
  +@JS()
  +@anonymous
  +class PathOptions {
  +
  +  external factory PathOptions({
  +  bool stroke,
  +  String color,
  +  num weight,
  +  num opacity,
  +  bool fill,
  +  String fillColor,
  +  num fillOpacity,
  +  String fillRule,
  +  String dashArray,
  +  String lineCap,
  +  String lineJoin,
  +  bool clickable,
  +  String pointerEvents,
  +  String className
  +  });
  +}
  +
  +@JS()
  +@anonymous
  +class Path  extends ILayer {
  +
  +  /**
  +   * Adds the layer to the map.
  +   */
  +  external Path addTo(Map map);
  +
  +}
  +
  +@JS("L.polyline")
  +class Polyline extends Path {
  +
  +  external factory Polyline(List<LatLng> latlngs, [PolylineOptions options]);
  +
  +}
  +
  +@JS()
  +@anonymous
  +class PolylineOptions extends PathOptions {
  +
  +  external factory PolylineOptions({
  +    num smoothFactor,
  +    bool noClip,
  +    bool stroke,
  +    String color,
  +    num weight,
  +    num opacity,
  +    bool fill,
  +    String fillColor,
  +    num fillOpacity,
  +    String fillRule,
  +    String dashArray,
  +    String lineCap,
  +    String lineJoin,
  +    bool clickable,
  +    String pointerEvents,
  +    String className
  +  });
  +}
  +
  +@JS("L.layerGroup")
  +class LayerGroup extends ILayer {
  +  /**
  +   * Create a layer group, optionally given an initial set of layers.
  +   */
  +  external factory LayerGroup([List<ILayer> layers]);
  +
  +  /**
  +   * Adds the group of layers to the map.
  +   */
  +  external LayerGroup addTo(Map map);
  +
  +  /**
  +   * Adds a given layer to the group.
  +   */
  +  external LayerGroup addLayer(ILayer layer);
  +
  +  /**
  +   * Removes a given layer from the group.
  +   */
  +  external LayerGroup removeLayer(layerOrId);
  +
  +  /**
  +   * Returns true if the given layer is currently added to the group.
  +   */
  +  external bool hasLayer(ILayer layer);
  +
  +  /**
  +   * Returns the layer with the given id.
  +   */
  +  external ILayer getLayer(String id);
  +
  +  /**
  +   * Returns an array of all the layers added to the group.
  +   */
  +  external List<ILayer> getLayers();
  +
  +  /**
  +   * Removes all the layers from the group.
  +   */
  +  external LayerGroup clearLayers();
  +
  +  /**
  +   * Iterates over the layers of the group, optionally specifying context of the iterator function.
  +      group.eachLayer(function (layer) {
  +      layer.bindPopup('Hello');
  +      });
  +   */
  +  external LayerGroup eachLayer(Function fn, [Object context]);
  +
  +  /**
  +   * Returns a GeoJSON representation of the layer group (GeoJSON FeatureCollection).
  +   */
  +  external Object toGeoJSON();
   }
positive.code:                               num minZoom, num maxZoom, LatLngBounds maxBounds});
  }
  
  @JS("L.latLngBounds")
  class LatLngBounds {
    external LatLngBounds(LatLng southWest, LatLng northEast);
  }
  
  @JS("L.latLng")
  class LatLng {
    external LatLng(double latitude, double longitude);
    external double get lat;
    external double get lng;
  }
  
  @JS()
  class ILayer {
    external void onAdd(LeafletMap map);
    external void onRemove(LeafletMap map);
  }
  
  @JS("L.tileLayer")
  
negative.code: 
  
  @JS("L.Map")
  class Map {
    external Map(String id, [MapOptions options]);
  
    /**
     * Removes the given layer from the map.
     */
    external Map removeLayer(ILayer layer);
  
    /**
     * Sets a map view that contains the given geographical bounds with the maximum zoom level possible.
     */
    external Map fitBounds(LatLngBounds bounds, [FitBoundsOptions options]);
  
    /**
     * Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.
     */
    external Map panInsideBounds(LatLngBounds bounds, [PanOptions options]);
  }
  
  @JS()
  @anonymous
  