         .append("svg:g")
         .attr("transform", "translate(#{margins.left}, #{margins.top})")
 
-      @y = d3.scale.linear().range([0, @series_height]).domain([0, 1])
-      @inverted_y = d3.scale.linear().range([@series_height, 0]).domain([0, 1])
+      @y = d3.scale.linear().range([@series_height, 0]).domain([-10, 10])
 
       @y_axis = d3.svg.axis()
-        .scale(@inverted_y)
+        .scale(@y)
         .ticks(4)
         .tickSize(-@series_width, 10, 0)
         .orient("right")

D3.waterfall =
  View: class extends D3ChartView
    el: 'body'
    initialize: ->
      @key = @model.get 'key'
      @initialize_defaults()


    prepare_data: =>
      out = []
      previous_top = 0

      for s in @series
        # serious ugliness here
        #
        g = s.get('group')
        value = if g == 'future'
          s.safe_future_value()
        else if g == 'value' # ?! TODO: rename!
          s.safe_present_value()
        else
          s.safe_future_value() - s.safe_present_value()

        if value >= 0
          bottom = previous_top
          top = previous_top + value
        else
          top = previous_top
          bottom = top + value

        out.push
          key: s.get 'label'
          value: value
          top: top
          bottom: bottom
          color: s.get 'color'

        previous_top = if value < 0 then bottom else top
        previous_bottom = bottom

      # The last item is calculated using the other columns
      out.push
        key: @last_column()
        color: out[0].color
        top: if previous_top > 0 then previous_top else 0
        bottom: if previous_top > 0 then 0 else previous_top
        value: if previous_top >= 0 then previous_top else previous_bottom
      out
