           @animators = originialAnimators
 
       @scrollPosition = boundedScrollPosition
+
+  setFirstElementPosition: (fp)->
+    @scrollPosition = @boundSp @fp2sp fp
 
   _scrollPositionChanged: ->
     unless @_activelyScrolling

    {scrollPosition} = @
    @_validScrollPositionCheckScheduled = false
    boundedScrollPosition = @boundSp scrollPosition + desiredOffset
    global.scrollElement = @
    if boundedScrollPosition != scrollPosition && !@_animating
      @_animating = true
      @animators = merge originialAnimators = @animators,


  @getter "childrenOffset firstOnScreenChildIndex lastOnScreenChildIndex focusedChildIndex childrenSize windowSize inFlowChildren"


  @getter
    scrollRatio: -> -@childrenOffset / (@childrenSize - @windowSize)

  @setter
    scrollRatio: (r)->
      @setFirstElementPosition -r * (@childrenSize - @windowSize)

  overScrollTransformation = (scrollPosition, windowSize) ->
    maxBeyond = windowSize / 3
    Math.atan(scrollPosition / maxBeyond ) * (2 / Math.PI) * maxBeyond
