           formatDate(diffs[i].updated) + '\n' + diffs[i].updators.join ', '
         else
           i
-    slider.current.setValue index
-    #slider.current.off 'change'
-    slider.current.on 'change', (e) =>
+    slider.setValue index
+    messageHistory.set message._id, diffs[index]
+    slider.on 'change', (e) ->
       messageHistory.set message._id, diffs[e.newValue]
-    messageHistory.set message._id, diffs[index]
-  , [message._id, message.creator, message.created]
+    -> slider.destroy()
+  , [diffs, index]
 
   <div className="historySlider">
     <input type="text" ref={input}/>

          break
    unless 0 <= index < diffs.length
      index = diffs.length - 1
    previous = diffs[index]?.diffId
    ## Don't show a zero-length slider
    return unless diffs.length
    ## Draw slider
    slider.current = new Slider input.current,
      #min: 0                 ## min and max not needed when using ticks
      #max: diffs.length-1
      #value: diffs.length-1  ## doesn't update, unlike setValue method below

    .ready
  , [message._id]
  input = useRef()
  {diffs, index} = useTracker ->
    unless Slider?
      Session.set 'SliderLoading', true
      Session.get 'SliderLoading'  # rerun tracker once Slider loaded
      return `import('bootstrap-slider')`.then (imported) ->
        Slider = imported.default
        Session.set 'SliderLoading', false
    previous = messageHistory.get(message._id)?.diffId
    diffs = MessagesDiff.find
      id: message._id
    ,
