diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,5 @@
+# 0.2.0.7 (2017-05-20)
+    * Added `editorSelection`.
 # 0.2.0.6 (2017-05-15)
     * Fix the `Editable` instance for `Identity` and remove reexports.
 # 0.2.0.5 (2017-05-14)
diff --git a/src/Graphics/UI/Threepenny/Editors.hs b/src/Graphics/UI/Threepenny/Editors.hs
--- a/src/Graphics/UI/Threepenny/Editors.hs
+++ b/src/Graphics/UI/Threepenny/Editors.hs
@@ -16,6 +16,7 @@
   , editorIdentity
   , editorReadShow
   , editorEnumBounded
+  , editorSelection
   , editorSum
   , editorJust
     -- ** Generic editors
diff --git a/src/Graphics/UI/Threepenny/Editors/Base.hs b/src/Graphics/UI/Threepenny/Editors/Base.hs
--- a/src/Graphics/UI/Threepenny/Editors/Base.hs
+++ b/src/Graphics/UI/Threepenny/Editors/Base.hs
@@ -18,6 +18,7 @@
     -- ** Editor constructors
   , editorReadShow
   , editorEnumBounded
+  , editorSelection
   , editorSum
   , editorJust
   -- * Reexports
@@ -25,6 +26,7 @@
   )where
 
 import           Data.Functor.Compose
+import           Data.Tuple
 import           Graphics.UI.Threepenny.Attributes
 import           Graphics.UI.Threepenny.Core
 import           Graphics.UI.Threepenny.Elements
@@ -56,11 +58,11 @@
 vertical, horizontal :: Layout -> Layout -> Layout
 vertical (Vertical xx) y = Vertical (xx ++ [y])
 vertical x (Vertical yy) = Vertical (x:yy)
-vertical x y = Vertical [x,y]
+vertical x y             = Vertical [x,y]
 
 horizontal (Horizontal xx) y = Horizontal (xx ++ [y])
 horizontal x (Horizontal yy) = Horizontal (x : yy)
-horizontal x y = Horizontal [x,y]
+horizontal x y               = Horizontal [x,y]
 
 single :: Element -> Layout
 single = Single
@@ -169,6 +171,13 @@
 instance Eq  tag  => Eq   (SumWrapper tag a) where A a _ == A b _ = a == b
 instance Ord tag  => Ord  (SumWrapper tag a) where compare (A a _) (A b _) = compare a b
 instance Show tag => Show (SumWrapper tag a) where show = show . display
+
+-- | An editor that presents a dynamic list of options
+editorSelection :: Eq a => Behavior [(String,a)] -> Behavior a -> Compose UI EditorDef a
+editorSelection options selected = Compose $ do
+  l <- listBox (fmap fst <$> options) ((\s o -> lookup s (fmap swap o)) <$> selected <*> options) (pure string)
+  let e = filterJust $ flip lookup <$> options <@> filterJust (rumors (userSelection l))
+  return $ EditorDef (tidings selected e) (single $ getElement l)
 
 -- | An editor for union types, built from editors for its constructors.
 editorSum
diff --git a/src/Graphics/UI/Threepenny/Editors/Profunctor.hs b/src/Graphics/UI/Threepenny/Editors/Profunctor.hs
--- a/src/Graphics/UI/Threepenny/Editors/Profunctor.hs
+++ b/src/Graphics/UI/Threepenny/Editors/Profunctor.hs
@@ -31,6 +31,7 @@
   , editorIdentity
   , editorReadShow
   , editorEnumBounded
+  , editorSelection
   , editorSum
   , editorJust
     -- ** Generic editors
@@ -109,6 +110,11 @@
 editorJust :: EditorFactory (Maybe a) (Maybe a) -> EditorFactory a a
 editorJust e = EditorFactory $ Base.editorJust (run e)
 
+-- | An editor that presents a dynamic list of options
+editorSelection :: Eq a => Behavior [(String,a)] -> EditorFactory a a
+editorSelection sel = EditorFactory $ Base.editorSelection sel
+
+-- | An editor for union types, built from editors for its constructors.
 editorSum
   :: (Show tag, Ord tag)
   => [(tag, EditorFactory b b)] -> (b -> tag) -> EditorFactory b b
diff --git a/threepenny-editors.cabal b/threepenny-editors.cabal
--- a/threepenny-editors.cabal
+++ b/threepenny-editors.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           threepenny-editors
-version:        0.2.0.6
+version:        0.2.0.7
 synopsis:       Composable algebraic editors
 description:    This package provides a type class 'Editable' and combinators to
                 easily put together form-like editors for algebraic datatypes.
