 
     # Return list of all cells that are touched by the current selection
     # or contain any cursors.
-    get_current_cells: =>
+    get_current_cells: (create=true) =>
         cm = @focused_codemirror()
         cells = []
         top = undefined
         process_line = (n) =>
             if not top? or n < top
-                cell = @cell(n)
-                cells.push(cell)
-                top = cell.start_line()
-        for sel in cm.listSelections().reverse()   # "These will always be sorted, and never overlap (overlapping selections are merged)."
+                cell = @cell(n, create)
+                if cell?
+                    cells.push(cell)
+                    top = cell.start_line()
+        # "These [selections] will always be sorted, and never overlap (overlapping selections are merged)."
+        for sel in cm.listSelections().reverse()
             n = sel.anchor.line; m = sel.head.line
             if n == m
                 process_line(n)

            if opts.pos?
                cells = [@cell(opts.pos.line)]
            else
                cells = @get_current_cells()
            for cell in cells
                cell.action
                    execute       : opts.execute

                        @_update_queue_stop = stop
                    @process_sage_update_queue()

    close: =>
        @execution_queue?.close()
        super()
