                 KernelManager.startKernel(command.kernelInfo, config, filepath)
 
 
-    createResultBubble: (andMoveDown = false, runAll = false, runAllAbove = false) ->
-        language = @editor.getGrammar().name.toLowerCase()
-
-        codeBlock = @findCodeBlock(runAll, runAllAbove)
-        if codeBlock?
-            [code, row] = codeBlock
-
-        if andMoveDown
-            @moveDown row
-
-        if code?
-            @clearBubblesOnRow(row)
-
-            view = @insertResultBubble(row)
-
-            KernelManager.execute language, code, (result) ->
-                view.spin(false)
-                view.addResult(result)
-
-
-    moveDown: (row) ->
-        lastRow = @editor.getLastBufferRow()
-
-        if row >= lastRow
-            @editor.moveToBottom()
-            @editor.insertNewline()
-            return
-
-        while row < lastRow
-            row++
-            break if not @blank(row)
-
-        @editor.setCursorBufferPosition
-            row: row
-            column: 0
+    createResultBubble: (code, row) ->
+        language = @editor.getGrammar()?.name.toLowerCase()
+        unless language? and KernelManager.languageHasKernel(language)
+            atom.notifications.addError(
+                "No kernel for language `#{language}` found",
+                    detail: "Check that the language for this file is set in Atom
+                             and that you have a Jupyter kernel installed for it."
+            )
+            return
+
+        @startKernelIfNeeded language, (kernel) =>
+            if @watchSidebar?.element.contains(document.activeElement)
+                @watchSidebar.run()
+            else
+                @setStatusBarElement(kernel.statusView.getElement())
+                @setWatchSidebar(kernel.watchSidebar) unless @watchSidebar?
+                @clearBubblesOnRow row
+                view = @insertResultBubble row
+                KernelManager.execute language, code, (result) ->
+                    view.spin false
+                    view.addResult result
 
 
     insertResultBubble: (row) ->

        _.forEach @markerBubbleMap, (bubble) -> bubble.destroy()
        @markerBubbleMap = {}

    clearBubblesOnRow: (row) ->
        buffer = @editor.getBuffer()
        _.forEach buffer.findMarkers({endRow: row}), (marker) =>

        @subscriptions = new CompositeDisposable

        @subscriptions.add atom.commands.add 'atom-text-editor',
            'hydrogen:run': => @run()
            'hydrogen:run-all': => @runAll()
            'hydrogen:run-all-above': => @runAllAbove()
            'hydrogen:run-and-move-down': => @runAndMoveDown()
            'hydrogen:show-kernel-commands': => @showKernelCommands()
            'hydrogen:toggle-watches': => @toggleWatchSidebar()
            'hydrogen:select-watch-kernel': => @showWatchLanguagePicker()
