diff --git a/chell.cabal b/chell.cabal
--- a/chell.cabal
+++ b/chell.cabal
@@ -1,5 +1,5 @@
 name: chell
-version: 0.3.2
+version: 0.3.3
 license: MIT
 license-file: license.txt
 author: John Millikin <jmillikin@gmail.com>
@@ -55,7 +55,7 @@
 source-repository this
   type: git
   location: https://john-millikin.com/code/chell/
-  tag: chell_0.3.2
+  tag: chell_0.3.3
 
 flag color-output
   description: Enable colored output in test results
@@ -68,7 +68,7 @@
   build-depends:
       base >= 4.1 && < 5.0
     , bytestring >= 0.9
-    , options >= 0.1 && < 0.2
+    , options >= 1.0 && < 2.0
     , patience >= 0.1 && < 0.2
     , random >= 1.0
     , template-haskell >= 2.3
diff --git a/lib/Test/Chell/Main.hs b/lib/Test/Chell/Main.hs
--- a/lib/Test/Chell/Main.hs
+++ b/lib/Test/Chell/Main.hs
@@ -1,9 +1,8 @@
-{-# LANGUAGE TemplateHaskell #-}
-
 module Test.Chell.Main
 	( defaultMain
 	) where
 
+import           Control.Applicative
 import           Control.Monad (forM, forM_, when)
 import           Control.Monad.Trans.Class (lift)
 import qualified Control.Monad.Trans.State as State
@@ -20,47 +19,55 @@
 import           Test.Chell.Output
 import           Test.Chell.Types
 
-$(defineOptions "MainOptions" $ do
-	option "optVerbose" (\o -> o
-		{ optionShortFlags = ['v']
-		, optionLongFlags = ["verbose"]
-		, optionType = optionTypeBool
-		, optionDefault = "false"
-		, optionDescription = "Print more output"
-		})
-	
-	stringOption "optXmlReport" "xml-report" ""
-		"Write a parsable report to a given path, in XML."
-	stringOption "optJsonReport" "json-report" ""
-		"Write a parsable report to a given path, in JSON."
-	stringOption "optTextReport" "text-report" ""
-		"Write a human-readable report to a given path."
-	
-	option "optSeed" (\o -> o
-		{ optionLongFlags = ["seed"]
-		, optionType = optionTypeMaybe optionTypeInt
-		, optionDefault = ""
-		, optionDescription = "The seed used for random numbers in (for example) quickcheck."
-		})
-	
-	option "optTimeout" (\o -> o
-		{ optionLongFlags = ["timeout"]
-		, optionType = optionTypeMaybe optionTypeInt
-		, optionDefault = ""
-		, optionDescription = "The maximum duration of a test, in milliseconds."
-		})
-	
-	option "optColor" (\o -> o
-		{ optionLongFlags = ["color"]
-		, optionType = optionTypeEnum ''ColorMode
-			[ ("always", ColorModeAlways)
-			, ("never", ColorModeNever)
-			, ("auto", ColorModeAuto)
-			]
-		, optionDefault = "auto"
-		, optionDescription = "Whether to enable color ('always', 'auto', or 'never')."
-		})
-	)
+data MainOptions = MainOptions
+	{ optVerbose :: Bool
+	, optXmlReport :: String
+	, optJsonReport :: String
+	, optTextReport :: String
+	, optSeed :: Maybe Int
+	, optTimeout :: Maybe Int
+	, optColor :: ColorMode
+	}
+
+optionType_ColorMode :: OptionType ColorMode
+optionType_ColorMode = optionType "ColorMode" ColorModeAuto parseMode showMode where
+	parseMode s = case s of
+		"always" -> Right ColorModeAlways
+		"never" -> Right ColorModeNever
+		"auto" -> Right ColorModeAuto
+		_ -> Left (show s ++ " is not in {\"always\", \"never\", \"auto\"}.")
+	showMode mode = case mode of
+		ColorModeAlways -> "always"
+		ColorModeNever -> "never"
+		ColorModeAuto -> "auto"
+
+instance Options MainOptions where
+	defineOptions = pure MainOptions
+		<*> defineOption optionType_bool (\o -> o
+			{ optionShortFlags = ['v']
+			, optionLongFlags = ["verbose"]
+			, optionDefault = False
+			, optionDescription = "Print more output."
+			})
+		
+		<*> simpleOption "xml-report" ""
+		    "Write a parsable report to a given path, in XML."
+		<*> simpleOption "json-report" ""
+		    "Write a parsable report to a given path, in JSON."
+		<*> simpleOption "text-report" ""
+		    "Write a human-readable report to a given path."
+		
+		<*> simpleOption "seed" Nothing
+		    "The seed used for random numbers in (for example) quickcheck."
+		
+		<*> simpleOption "timeout" Nothing
+		    "The maximum duration of a test, in milliseconds."
+		
+		<*> defineOption optionType_ColorMode (\o -> o
+			{ optionLongFlags = ["color"]
+			, optionDefault = ColorModeAuto
+			, optionDescription = "Whether to enable color ('always', 'auto', or 'never')."
+			})
 
 -- | A simple default main function, which runs a list of tests and logs
 -- statistics to stdout.
