             cur_id              : rtypes.string          # id of currently selected cell
             sel_ids             : rtypes.immutable.Set   # set of selected cells
             has_unsaved_changes : rtypes.bool
+            kernel_state        : rtypes.string
 
     shouldComponentUpdate: (next) ->
         return next.cur_id != @props.cur_id or \
             next.cells?.getIn([@props.cur_id, 'cell_type']) != @props.cells?.getIn([@props.cur_id, 'cell_type']) or \
-            next.has_unsaved_changes != @props.has_unsaved_changes
+            next.has_unsaved_changes != @props.has_unsaved_changes or \
+            next.kernel_state != @props.kernel_state
 
     command: (name, focus) ->
         return =>

                @props.actions.blur()

    render_button: (key, name) ->
        obj = @props.actions._commands?[name]
        if not obj?
            return
        focus = not misc.endswith(obj.m, '...')
        <Button key={key} onClick={@command(name, focus)} title={obj.m} >
            <Icon name={obj.i}/>
        </Button>


        @render_button_group(['move cell up', 'move cell down'])

    render_group_run: ->
        @render_button_group(['run cell and select next', {name:'interrupt kernel', disabled:@props.kernel_state != 'busy'}])

    cell_select_type: (event) ->
        @props.actions.set_selected_cell_type(event.target.value)
