     @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)

    @_initializeLoopsButton()

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



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


  _onMediaProgress: (view, elapsed, total) =>
    # keep progress bar in sync
    @_progress = @model.timeStart() + elapsed
    @_timeRangeInputView.progress @_progress


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