     @_initializeLoopsButton()
 
     @_playerView.on 'Media:StateChange', @_togglePlayPauseControls
+    @_playerView.on 'Media:Progress', @_onMediaProgress
     @_controlsView.on 'PlayControl:Click', => @_playerView.play()
     @_controlsView.on 'PauseControl:Click', => @_playerView.pause()
     @_timeRangeInputView.on 'TimeRangeInputView:DidChangeTimes', @_onChangeTimes
+    @_timeRangeInputView.on 'TimeRangeInputView:DidChangeProgress',
+        @_onChangeProgress
     @_loopsButtonView.on 'CycleButtonView:ValueDidChange', @_onChangeLoops
 
 

      @_controlsView.$('.control-view.pause').addClass 'hidden'


  _onChangeTimes: (changed) =>
    changes = {}
    changes.timeStart = changed.start if _.isNumber changed?.start

    @eventhub.trigger 'change:shell', @model, @


  _onChangeProgress: (progress) =>
    # if slider progress differs from player progress, seek to new position
    unless progress.toFixed(5) == @_progress?.toFixed(5)
      @_progress = progress
      @_playerView.seek progress


  _onChangeLoops: (changed) =>
    loops = if changed.name == 'n' then changed.value else changed.name
    @model.loops(loops)
