       </table>
     </div>
 
-  playVideo: (playing) ->
-    player = @refs.videoPlayer
+  playVideo: (frame, playing) ->
+    player = @refs['videoPlayer'+frame]
     return unless player?
-    @setState {playing}
+    videoStates = @state.videoStates
+    videoStates[frame] = videoStates[frame] || {}
+    videoStates[frame].playing = playing
+    @setState {videoStates}
     if playing
       player.play()
     else
       player.pause()
 
-  setPlayRate: (e) ->
-    playbackRate = parseFloat e.currentTarget.value
-    @setState {playbackRate}
-
-  seekVideo: (e) ->
-    player = @refs.videoPlayer
-    scrubber = @refs.videoScrubber
+  setPlayRate: (e, frame) ->
+    # Yeah, updating arrays in @state is hard... this method is potentially open to race-conditions but currently in practice it's not a problem
+    videoStates = @state.videoStates
+    videoStates[frame] = videoStates[frame] || {}
+    videoStates[frame].playbackRate = parseFloat e.currentTarget.value
+    @setState {videoStates}
+
+  seekVideo: (frame) ->
+    player = @refs['videoPlayer'+frame]
+    scrubber = @refs['videoScrubber'+frame]
     time = scrubber.value
     player.currentTime = time
 
-  endVideo: (e) ->
-    playing = false
-    @setState {playing}
-
-  updateScrubber: (e) ->
-    player = @refs.videoPlayer
-    scrubber = @refs.videoScrubber
+  endVideo: (frame) ->
+    videoStates = @state.videoStates
+    videoStates[frame] = videoStates[frame] || {}
+    videoStates[frame].playing = false
+    @setState {videoStates}
+
+  updateScrubber: (frame) ->
+    player = @refs['videoPlayer'+frame]
+    scrubber = @refs['videoScrubber'+frame]
     scrubber.setAttribute 'max', player.duration unless scrubber.getAttribute 'max'
     scrubber.value = player.currentTime
 

    playbackRate: 1
    frameDimensions: {}
    inFlipbookMode: @props.allowFlipbook
    playbackRate: 1

  componentDidMount: ->
    @refs.videoScrubber?.value = 0

  componentDidUpdate: ->
    @refs.videoPlayer?.playbackRate = @state.playbackRate

  willReceiveProps: (nextProps) ->
    # The default state for subjects is flipbook if allowed

                  <button type="button" className="secret-button" onClick={@setPlaying.bind this, true}>
                    <i className="fa fa-play fa-fw"></i>
                  </button>}
              </span>}
          </span>
      when 'video'
        <span className="subject-video-controls">
          <span className="subject-frame-play-controls">
