     super(_.defaults(options, @default_options))
 
     # TODO(bryanv): there must be a cleaner way to do this
-    @x_range = Collections('Range1d').create({start: 0, end: 1})
-    @y_range = Collections('Range1d').create({start: 0, end: 1})
+    coll = Collections('Range1d')
+    m = Collections('Range1d').model
+    @x_range = new m({start: 0, end: 1})
+    coll.add(@x_range)
+    @y_range = new m({start: 0, end: 1})
+    coll.add(@y_range)
     @mset('x_range', @x_range, {silent: true})
     @mset('y_range', @y_range, {silent: true})
 

      domain_mapper: @xmapper
      codomain_mapper: @ymapper
    })

    pantool = Collections('PanTool').create(
      dataranges: [@x_range.ref(), @y_range.ref()]
      dimensions: ['width', 'height']
    )

    @mset('tools', [pantool])

    @requested_padding = {
      top: 0

    @$el.attr("width", ow).attr('height', oh)
    @gmap_div.attr("style", "top: #{top}px; left: #{left}px; position: absolute")
    @gmap_div.width("#{iw}px").height("#{ih}px")
    build_map = () =>
      mo = @mget('map_options')
      map_options =
        center: new google.maps.LatLng(mo.lat, mo.lng)
        zoom:mo.zoom
        disableDefaultUI: true
        mapTypeId: google.maps.MapTypeId.SATELLITE

      # Create the map with above options in div
      @map = new google.maps.Map(@gmap_div[0], map_options)
      google.maps.event.addListener(@map, 'bounds_changed', () =>
        bds = @map.getBounds()
        ne = bds.getNorthEast()
        sw = bds.getSouthWest()
        @x_range.set({start: sw.lng(), end: ne.lng(), silent:true})
        @y_range.set({start: sw.lat(), end: ne.lat()})
      )
    _.defer(build_map)
    @ctx = @canvas[0].getContext('2d')
    if full_render
      @render()
