     else
       {value: undefined, done: true}
 
-  seek: (position, clip) ->
-    calculateOvershoot = (position, lastPosition, lastSourcePosition) =>
-      overshoot = position.traversalFrom(lastPosition)
-      lastSourcePosition = lastSourcePosition.traverse(overshoot)
-      @position = position
-      @sourcePosition = lastSourcePosition
-
-    @_seek (=> @position), position, calculateOvershoot, clip
-
-  seekToSourcePosition: (position, clip) ->
-    calculateOvershoot = (position, lastPosition, lastSourcePosition) =>
-      overshoot = position.traversalFrom(lastSourcePosition)
-      lastPosition = lastPosition.traverse(overshoot)
-      @position = lastPosition
-      @sourcePosition = position
-
-    @_seek (=> @sourcePosition), position, calculateOvershoot, clip
-
-  _seek: (seekPropertyFn, position, calculateOvershoot, clip = CLIP_BACKWARD) ->
+  seek: (position, clip=CLIP_BACKWARD) ->
     @position = Point.zero()
     @sourcePosition = Point.zero()
     @transformBuffer.reset(@position, @sourcePosition)

          @sourcePosition = lastSourcePosition
          return

    unless seekPropertyFn().compare(position) is 0
      calculateOvershoot(position, lastPosition, lastSourcePosition)

    @transformBuffer.reset(@position, @sourcePosition)



    return if position.isZero()

    until @position.compare(position) >= 0
      lastPosition = @position
      lastSourcePosition = @sourcePosition
      {done} = @next()
      return if done

    if @clipping? and @position.compare(position) > 0
      switch clip
        when CLIP_FORWARD
          return
