diff --git a/lib/Hikaru/Form.hs b/lib/Hikaru/Form.hs
index 4ace1e3ed9d7feeb372185180b77798ab00c9861..5f2b4975557633472e9d17eacc45ceb3139605f9 100644
--- a/lib/Hikaru/Form.hs
+++ b/lib/Hikaru/Form.hs
@@ -31,10 +31,11 @@ module Hikaru.Form
   , multiSelectField'
   , opt
   , req
+  , whenChecking
+  , fieldShouldCheck
+  , fieldValue
   , addNote
   , addAttribute
-  , fieldCheck
-  , fieldValue
   , hasErrors
   )
 where
@@ -433,17 +434,11 @@ where
   --
   req :: (Monad m) => l -> FieldT l a m ()
   req label = do
-    shouldCheck <- fieldCheck
-
-    if shouldCheck
-       then do
-         value <- fieldValue
-         case value of
-           Nothing -> addNote $ NoteError label
-           Just _v -> return ()
-
-        else do
-          return ()
+    whenChecking do
+      value <- fieldValue
+      case value of
+        Nothing -> addNote $ NoteError label
+        Just _v -> return ()
 
 
   -- |
@@ -466,8 +461,20 @@ where
   -- |
   -- TODO
   --
-  fieldCheck :: (Monad m) => FieldT l a m Bool
-  fieldCheck = FieldT (fst <$> ask)
+  whenChecking :: (Monad m) => FieldT l a m b -> FieldT l a m ()
+  whenChecking checkField = do
+    check <- fieldShouldCheck
+
+    if check
+       then checkField >> return ()
+       else return ()
+
+
+  -- |
+  -- TODO
+  --
+  fieldShouldCheck :: (Monad m) => FieldT l a m Bool
+  fieldShouldCheck = FieldT (fst <$> ask)
 
 
   -- |