diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+- 0.8.3.0 (2017-12-26)
+    * Fix input element values for choice forms
+    * Bump `time` to 1.8
+    * Bump `HUnit` to 1.6
+    * Bump `QuickCheck` to 2.10
+
 - 0.8.2.0
     * Update `QuickCheck` version bound
     * Updated CHoice type to allow for multiple choices
diff --git a/digestive-functors.cabal b/digestive-functors.cabal
--- a/digestive-functors.cabal
+++ b/digestive-functors.cabal
@@ -1,5 +1,5 @@
 Name:     digestive-functors
-Version:  0.8.2.0
+Version:  0.8.3.0
 Synopsis: A practical formlet library
 
 Description:
@@ -67,7 +67,7 @@
     mtl        >= 1.1.0.0 && < 3,
     old-locale >= 1.0     && < 1.1,
     text       >= 0.10    && < 1.3,
-    time       >= 1.4     && < 1.7
+    time       >= 1.4     && < 1.9
   Extensions: CPP
 
 Test-suite digestive-functors-tests
@@ -77,19 +77,28 @@
   Ghc-options:    -Wall
 
   Other-modules:
-      Text.Digestive.Field.Tests
-      Text.Digestive.Field.QTests
-      Text.Digestive.Form.Encoding.Tests
-      Text.Digestive.Form.Encoding.QTests
-      Text.Digestive.Form.List.QTests
-      Text.Digestive.Form.QTests
-      Text.Digestive.Tests.Fixtures
-      Text.Digestive.View.Tests
-      Text.Digestive.Types.QTests
+    Text.Digestive.Field.QTests
+    Text.Digestive.Field.Tests
+    Text.Digestive.Form
+    Text.Digestive.Form.Encoding
+    Text.Digestive.Form.Encoding.QTests
+    Text.Digestive.Form.Encoding.Tests
+    Text.Digestive.Form.Internal
+    Text.Digestive.Form.Internal.Field
+    Text.Digestive.Form.List
+    Text.Digestive.Form.List.QTests
+    Text.Digestive.Form.QTests
+    Text.Digestive.Ref
+    Text.Digestive.Tests.Fixtures
+    Text.Digestive.Types
+    Text.Digestive.Types.QTests
+    Text.Digestive.Util
+    Text.Digestive.View
+    Text.Digestive.View.Tests
 
   Build-depends:
-    HUnit                      >= 1.2 && < 1.6,
-    QuickCheck                 >= 2.5 && < 2.10,
+    HUnit                      >= 1.2 && < 1.7,
+    QuickCheck                 >= 2.5 && < 2.11,
     test-framework             >= 0.4 && < 0.9,
     test-framework-hunit       >= 0.3 && < 0.4,
     test-framework-quickcheck2 >= 0.3 && < 0.4,
@@ -100,7 +109,7 @@
     mtl        >= 1.1.0.0 && < 3,
     old-locale >= 1.0     && < 1.1,
     text       >= 0.10    && < 1.3,
-    time       >= 1.4     && < 1.7
+    time       >= 1.4     && < 1.9
 
 Source-repository head
   Type:     git
diff --git a/src/Text/Digestive/Form.hs b/src/Text/Digestive/Form.hs
--- a/src/Text/Digestive/Form.hs
+++ b/src/Text/Digestive/Form.hs
@@ -146,12 +146,10 @@
 choiceWith'
     :: (Monad m, Monoid v) => [(Text, (a, v))] -> Maybe Int -> Form v m a
 choiceWith' []    _   = error "choice expects a list with at least one item in it"
-choiceWith' items def = fromMaybe defaultItem . listToMaybe . map fst <$> (Pure $ Choice [("", items)] def')
+choiceWith' items def = fromMaybe defaultItem . listToMaybe . map fst <$> (Pure $ Choice [("", items)] [def'])
   where
-    defaultItem = fst $ snd $ head items
-    def' = case def of
-      Just x  -> [x]
-      Nothing -> [0]
+    defaultItem = fst $ snd $ items !! def'
+    def' = fromMaybe 0 def
 
 
 --------------------------------------------------------------------------------
@@ -187,9 +185,7 @@
     :: (Monad m, Monoid v) => [(Text, (a, v))] -> Maybe [Int] -> Form v m [a]
 choiceWithMultiple' items def = map fst <$> (Pure $ Choice [("", items)] def')
   where
-    def' = case def of
-      Just x  -> x
-      Nothing -> []
+    def' = fromMaybe [] def
 
 
 --------------------------------------------------------------------------------
diff --git a/src/Text/Digestive/Form/Internal/Field.hs b/src/Text/Digestive/Form/Internal/Field.hs
--- a/src/Text/Digestive/Form/Internal/Field.hs
+++ b/src/Text/Digestive/Form/Internal/Field.hs
@@ -15,6 +15,8 @@
 --------------------------------------------------------------------------------
 import           Control.Arrow        (second)
 import           Data.Maybe           (listToMaybe, mapMaybe, catMaybes)
+import           Data.Functor         ((<$>))
+import           Data.List            (findIndex)
 import           Data.Text            (Text)
 
 
@@ -62,12 +64,8 @@
 evalField _ ts@(TextInput _ : _) (Choice ls _) =
   let ls' = concat (map snd ls) in
     catMaybes $
-      map (\(TextInput x) -> do
-        -- Expects input in the form of "foo.bar.2". This is not needed for
-        -- <select> fields, but we need it for labels for radio buttons.
-        t <- listToMaybe . reverse $ toPath x
-        (c, i) <- lookupIdx t ls'
-        return (fst c, i)) ts
+      map (\(TextInput x) ->
+        (\i -> (fst $ snd $ ls' !! i, i)) <$> findIndex (isSelectedChoice x . fst) ls') ts
 evalField Get  _                 (Choice ls x) =
   -- this populates the default values when displaying a view
   let ls' = concat (map snd ls) in
@@ -95,12 +93,15 @@
 
 
 --------------------------------------------------------------------------------
--- | Retrieve the value and position of the value referenced to by the given
--- key in an association list, if the key is in the list.
-lookupIdx :: Eq k => k -> [(k, v)] -> Maybe (v, Int)
-lookupIdx key = go 0
-  where
-    go _  []        = Nothing
-    go !i ((k, v) : xs)
-        | key == k  = Just (v, i)
-        | otherwise = go (i + 1) xs
+-- | Determines if the choiceVal is equal to the selectedVal.  Works with older
+-- versions that submit "foo.bar.2" rather than "2" for Choice fields.
+-- > isSelectedChoice "0" "0" == True
+-- > isSelectedChoice "foo.bar.0" "0" == True
+-- > isSelectedChoice "foo.bar.10" "0" == False
+isSelectedChoice :: Text -> Text -> Bool
+isSelectedChoice selectedVal choiceVal
+  | selectedVal == choiceVal = True
+  | otherwise =
+    case listToMaybe (reverse $ toPath selectedVal) of
+      Just x -> x == choiceVal
+      _      -> False
diff --git a/tests/Text/Digestive/View/Tests.hs b/tests/Text/Digestive/View/Tests.hs
--- a/tests/Text/Digestive/View/Tests.hs
+++ b/tests/Text/Digestive/View/Tests.hs
@@ -38,8 +38,8 @@
             [ ("f.name",     "charmander")
             , ("f.level",    "5")
             , ("f.type",     "type.1")
-            , ("f.weakness", "weakness.0")
-            , ("f.weakness", "weakness.3")
+            , ("f.weakness", "0") -- NOTE: this is the newer style of Choice values
+            , ("f.weakness", "3")
             ]
 
     , testCase "optional unspecified" $ (@=?)
@@ -47,7 +47,7 @@
         snd $ runTrainerM $ postForm "f" pokemonForm $ testEnv
             [ ("f.name",     "magmar")
             , ("f.type",     "type.1")
-            , ("f.weakness", "weakness.0")
+            , ("f.weakness", "weakness.0") -- NOTE: this is the older style of Choice values
             , ("f.weakness", "weakness.3")
             ]
 
