diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
 Brick changelog
 ---------------
 
+0.19
+----
+
+API changes:
+ * The editor content drawing function is now passed to renderEditor,
+   not the constructor, to improve separation of presentation and
+   representation concerns. The corresponding Editor drawing function
+   lens and accessor were removed.
+
 0.18
 ----
 
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.18
+version:             0.19
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
diff --git a/programs/EditDemo.hs b/programs/EditDemo.hs
--- a/programs/EditDemo.hs
+++ b/programs/EditDemo.hs
@@ -37,8 +37,8 @@
 drawUI :: St -> [T.Widget Name]
 drawUI st = [ui]
     where
-        e1 = F.withFocusRing (st^.focusRing) E.renderEditor (st^.edit1)
-        e2 = F.withFocusRing (st^.focusRing) E.renderEditor (st^.edit2)
+        e1 = F.withFocusRing (st^.focusRing) (E.renderEditor (str . unlines)) (st^.edit1)
+        e2 = F.withFocusRing (st^.focusRing) (E.renderEditor (str . unlines)) (st^.edit2)
 
         ui = C.center $
             (str "Input 1 (unlimited): " <+> (hLimit 30 $ vLimit 5 e1)) <=>
@@ -63,8 +63,8 @@
 initialState :: St
 initialState =
     St (F.focusRing [Edit1, Edit2])
-       (E.editor Edit1 (str . unlines) Nothing "")
-       (E.editor Edit2 (str . unlines) (Just 2) "")
+       (E.editor Edit1 Nothing "")
+       (E.editor Edit2 (Just 2) "")
 
 theMap :: A.AttrMap
 theMap = A.attrMap V.defAttr
diff --git a/programs/MouseDemo.hs b/programs/MouseDemo.hs
--- a/programs/MouseDemo.hs
+++ b/programs/MouseDemo.hs
@@ -46,7 +46,7 @@
       C.hCenterLayer (padBottom (T.Pad 1) $ str "Click a button:") <=>
       C.hCenterLayer (hBox $ padLeftRight 1 <$> buttons) <=>
       C.hCenterLayer (padTopBottom 1 $ str "Or enter text and then click in this editor:") <=>
-      C.hCenterLayer (vLimit 3 $ hLimit 50 $ E.renderEditor True (st^.edit))
+      C.hCenterLayer (vLimit 3 $ hLimit 50 $ E.renderEditor (str . unlines) True (st^.edit))
     where
         buttons = mkButton <$> buttonData
         buttonData = [ (Button1, "Button 1", "button1")
@@ -143,4 +143,4 @@
            \Excepteur sint occaecat cupidatat not proident,\n\
            \sunt in culpa qui officia deserunt mollit\n\
            \anim id est laborum.\n"
-           (E.editor TextBox (str . unlines) Nothing "")
+           (E.editor TextBox Nothing "")
diff --git a/src/Brick/Focus.hs b/src/Brick/Focus.hs
--- a/src/Brick/Focus.hs
+++ b/src/Brick/Focus.hs
@@ -1,7 +1,5 @@
 -- | This module provides a type and functions for handling focus rings
--- of widgets. Note that this interface is merely provided for managing
--- the focus state for a sequence of resource names; it does not do
--- anything beyond keep track of that.
+-- of values.
 --
 -- This interface is experimental.
 module Brick.Focus
@@ -31,13 +29,13 @@
 focusRing :: [n] -> FocusRing n
 focusRing = FocusRing . C.fromList
 
--- | Advance focus to the next widget in the ring.
+-- | Advance focus to the next value in the ring.
 focusNext :: FocusRing n -> FocusRing n
 focusNext r@(FocusRing l)
     | C.isEmpty l = r
     | otherwise = FocusRing $ C.rotR l
 
--- | Advance focus to the previous widget in the ring.
+-- | Advance focus to the previous value in the ring.
 focusPrev :: FocusRing n -> FocusRing n
 focusPrev r@(FocusRing l)
     | C.isEmpty l = r
diff --git a/src/Brick/Widgets/Edit.hs b/src/Brick/Widgets/Edit.hs
--- a/src/Brick/Widgets/Edit.hs
+++ b/src/Brick/Widgets/Edit.hs
@@ -18,7 +18,7 @@
 -- Emacs. It is also not suitable for building sophisticated editors. If
 -- you want to build your own editor, I suggest starting from scratch.
 module Brick.Widgets.Edit
-  ( Editor(editContents, editorName, editDrawContents)
+  ( Editor(editContents, editorName)
   -- * Constructing an editor
   , editor
   , editorText
@@ -30,7 +30,6 @@
   , applyEdit
   -- * Lenses for working with editors
   , editContentsL
-  , editDrawContentsL
   -- * Rendering editors
   , renderEditor
   -- * Attributes
@@ -64,8 +63,6 @@
 data Editor t n =
     Editor { editContents :: Z.TextZipper t
            -- ^ The contents of the editor
-           , editDrawContents :: [t] -> Widget n
-           -- ^ The function the editor uses to draw its contents
            , editorName :: n
            -- ^ The name of the editor
            }
@@ -105,8 +102,6 @@
 -- | Construct an editor over 'Text' values
 editorText :: n
        -- ^ The editor's name (must be unique)
-       -> ([T.Text] -> Widget n)
-       -- ^ The content rendering function
        -> Maybe Int
        -- ^ The limit on the number of lines in the editor ('Nothing'
        -- means no limit)
@@ -119,15 +114,13 @@
 editor :: Z.GenericTextZipper a
        => n
        -- ^ The editor's name (must be unique)
-       -> ([a] -> Widget n)
-       -- ^ The content rendering function
        -> Maybe Int
        -- ^ The limit on the number of lines in the editor ('Nothing'
        -- means no limit)
        -> a
        -- ^ The initial content
        -> Editor a n
-editor name draw limit s = Editor (Z.textZipper (Z.lines s) limit) draw name
+editor name limit s = Editor (Z.textZipper (Z.lines s) limit) name
 
 -- | Apply an editing operation to the editor's contents. Bear in mind
 -- that you should only apply zipper operations that operate on the
@@ -156,13 +149,15 @@
 -- name for its scrollable viewport handle and the name is also used to
 -- report mouse events.
 renderEditor :: (Ord n, Show n, Monoid t, TextWidth t, Z.GenericTextZipper t)
-             => Bool
+             => ([t] -> Widget n)
+             -- ^ The content drawing function
+             -> Bool
              -- ^ Whether the editor has focus. It will report a cursor
              -- position if and only if it has focus.
              -> Editor t n
              -- ^ The editor.
              -> Widget n
-renderEditor foc e =
+renderEditor draw foc e =
     let cp = Z.cursorPosition z
         z = e^.editContentsL
         toLeft = Z.take (cp^._2) (Z.currentLine z)
@@ -178,7 +173,7 @@
        clickable (e^.editorNameL) $
        (if foc then showCursor (e^.editorNameL) cursorLoc else id) $
        visibleRegion cursorLoc (atCharWidth, 1) $
-       e^.editDrawContentsL $
+       draw $
        getEditContents e
 
 charAtCursor :: (Z.GenericTextZipper t) => Z.TextZipper t -> Maybe t
