             )
 
         # create the zoom behavior
+        minScale = (@options.display.start - @options.display.end) / (@options.domain.start - @options.domain.end)
+
         @options.zoom = d3.behavior.zoom()
             .x(@scales.x)
             .size([@options.width, @options.height])
-            .scaleExtent([1, Infinity])
-            .on('zoom', => @redraw())
+            .scaleExtent([minScale, Infinity])
+            .on('zoom', =>
+                if @brushing
+                    @options.zoom.scale(@prevScale)
+                    @options.zoom.translate(@prevTranslate)
+                else
+                    [start, end] = @scales.x.domain();
+                    @center(start, end)
+            )
         @svg.call(@options.zoom)
 
         # initialize all datasets

                    })
                )

                if (@brushTooltip)
                    @tooltipBrushMin.transition()
                        .duration(100)
                        .style("opacity", 0)

                    @tooltipBrushMax.transition()
                        .duration(100)
                        .style("opacity", 0)

            )
            .on('brush', =>
                # Check for selection limit, warn in red if selection is to big
                if @options.selectionLimit > 0
                    s = @brush.extent()
                    if (s[1]-s[0]) / 1000 > @options.selectionLimit
                        @svg.selectAll('.brush')
                            .attr({fill: "red"})

                    else
                        @svg.selectAll('.brush')
                            .attr({fill: "#333"})

                if @brushTooltip
                    offheight = 0
                    if @svg[0][0].parentElement?
                        offheight = @svg[0][0].parentElement.offsetHeight
                    else
                        offheight = @svg[0][0].parentNode.offsetHeight
                    @options.zoom
                        .scale(@options.lastZoom.scale)
                        .translate(@options.lastZoom.translate)

                    @tooltipBrushMin.transition()
                        .duration(100)
                        .style("opacity", .9)
                    @tooltipBrushMin.html(@simplifyDate(@brush.extent()[0]))
                        .style("left", (@scales.x(@brush.extent()[0])+@brushTooltipOffset[0]) + "px")
                        .style("top", (offheight + @brushTooltipOffset[1]) + "px")


                    @tooltipBrushMax.transition()
                        .duration(100)
                        .style("opacity", .9)
                    @tooltipBrushMax.html(@simplifyDate(@brush.extent()[1]))
                        .style("left", (@scales.x(@brush.extent()[1])+@brushTooltipOffset[0]) + "px")
                        .style("top", (offheight + @brushTooltipOffset[1] + 20) + "px")

            )
            .extent([@options.brush.start, @options.brush.end])


                    else if not (record[1] instanceof Date)
                        record = [ record[0], record[0] ].concat(record[1..])

                    finalRecords.push(record)
            else
                # TODO: perform check of records
                finalPaths = records
