             has_unsaved_changes : rtypes.bool
             kernel_info         : rtypes.immutable.Map
             backend_kernel_info : rtypes.immutable.Map
+            cells               : rtypes.immutable.Map
+            cur_id              : rtypes.string
 
     shouldComponentUpdate: (next) ->
         return next.has_unsaved_changes != @props.has_unsaved_changes or \
             next.kernels != @props.kernels or \
             next.kernel != @props.kernel or \
-            next.backend_kernel_info != @props.backend_kernel_info
+            next.backend_kernel_info != @props.backend_kernel_info or \
+            next.cur_id != @props.cur_id or \
+            next.cells != @props.cells
 
     propTypes :
         actions : rtypes.object.isRequired

                 "cut cell", "copy cell", "paste cell above", "paste cell below", "paste cell and replace", "delete cell", "", \
                 "split cell at cursor", "merge cell with previous cell", "merge cell with next cell", "merge cells", "", \
                 "move cell up", "move cell down", "", \
                 "edit notebook metadata", "find and replace"]

    render_view: ->
        @render_menu

            if typeof(name) != 'string'
                return name  # it's already a MenuItem
            if name[0] == '<'
                disabled = true
                name = name.slice(1)
            else
                disabled = false

            if name[0] == '>'
                indent = <span style={marginLeft:'4ex'}/>
