       $a.text url
       $pre = $ '<pre>'
       $pre.append $a
-      @output $pre
+      @add_rendered $pre
 
     fn 'img', 'Renders a Graphite graph image', (args...) ->
       params = args_to_params @, args
       url = graphite.render_url params
       @async ->
         $img = $ "<img src='#{url}'/>"
-        @output $img
-        deferred = $.Deferred()
+        @div $img
+        deferred = Q.defer()
         $img.on 'load', deferred.resolve
         $img.on 'error', deferred.reject
 
-        promise = deferred.promise()
+        promise = deferred.promise
         promise.fail (args...) =>
           @error 'Failed to load image'
-
-    fn 'data', 'Fetches Graphite graph data', (args...) ->
+        promise
+
+    fn 'table', 'Displays Graphite data in a table', (args...) ->
       params = args_to_params @, args
-      @value @async ->
+      @async ->
+        $result = @div()
         promise = graphite.get_data params
-        @renderable promise, ->
-          $result = @output()
-          promise.done (response) =>
-            for series in response
-              $header = $ '<h3>'
-              $header.text series.target
-              $result.append $header
-              $table = $ '<table>'
-              for [value, timestamp] in series.datapoints
-                time = moment(timestamp * 1000)
-                $table.append "<tr><th>#{time.format('MMMM Do YYYY, h:mm:ss a')}</th><td class='cm-number number'>#{value?.toFixed(3) or '(none)'}</td></tr>"
-              $result.append $table
-          promise.fail (error) =>
-            @error error
+        promise.done (response) =>
+          for series in response
+            $header = $ '<h3>'
+            $header.text series.target
+            $result.append $header
+            $table = $ '<table>'
+            for [value, timestamp] in series.datapoints
+              time = moment(timestamp * 1000)
+              $table.append "<tr><th>#{time.format('MMMM Do YYYY, h:mm:ss a')}</th><td class='cm-number number'>#{value?.toFixed(3) or '(none)'}</td></tr>"
+            $result.append $table
+        promise.fail @keeping_context (error) =>
+          @error error
+        promise
 
     fn 'graph', 'Graphs Graphite data', (args...) ->
       params = Bacon.constant(args).map(args_to_params, @)

            href = $(this).attr 'href'
            if href[0] is '#'
              context.run "docs '#{decodeURI href[1..]}'"
          $result.append $docs
        unless function_docs? or parameter_docs?
          @text 'Documentation not found'
      else

        name = name._lead_context_fn?.name if name._lead_op?
        function_docs = docs.function_docs[name]
        if function_docs?
          @div function_docs.docs
          for example in function_docs.examples
            @example "#{default_target_command} #{JSON.stringify example}", run: false
        name = docs.parameter_doc_ids[name] ? name
        parameter_docs = docs.parameter_docs[name]
        if parameter_docs?
          $docs = $(parameter_docs)
          context = @
          $docs.find('a').on 'click', (e) ->
