diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -11,3 +11,8 @@
 ## 0.1.0.2 -- 2018-06-26
 
 Minor changes to README and travis script
+
+## 0.2.0.0 -- 2018-07-04
+
+  - Use strict StateT for tests.
+  - Fix hpack escape for ghc-options
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -1,6 +1,6 @@
 module Main where
 
-import           Control.Monad.Trans.State (execStateT)
+import           Control.Monad.Trans.State.Strict (execStateT)
 import           Criterion.Main
 import qualified Data.Text.Lazy.IO         as TIO
 import           System.FilePath           (takeBaseName)
diff --git a/hbf.cabal b/hbf.cabal
--- a/hbf.cabal
+++ b/hbf.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d0a2bab316b8254089629b690ac242bffc13bc51cd5d53ff8037f99af9ce20ce
+-- hash: 56df657de174d194d56b8c72e4f4d3b87fce264c956fe1ac7899735a657145e7
 
 name:                hbf
-version:             0.1.0.2
+version:             0.2.0.0
 cabal-version:       >= 1.10
 build-type:          Simple
 license:             GPL-3
@@ -91,7 +91,7 @@
     , transformers >=0.5.2.0
     , vector >=0.12.0.1
   if flag(profile)
-    ghc-options: -fprof-auto -with-rtsopts='-p -s -h -i0.05'
+    ghc-options: -fprof-auto "-with-rtsopts=-p -s -h -i0.05"
   default-language: Haskell2010
 
 executable hbfc
diff --git a/src/HBF/Compiler.hs b/src/HBF/Compiler.hs
--- a/src/HBF/Compiler.hs
+++ b/src/HBF/Compiler.hs
@@ -19,7 +19,7 @@
   ) where
 
 import           Control.Monad             (when)
-import           Control.Monad.Trans.State (State, execState, get, modify, put)
+import           Control.Monad.Trans.State.Strict (State, execState, get, modify, put)
 import qualified Data.Binary               as B
 import           Data.ByteString.Lazy      (ByteString)
 import           Data.Coerce               (coerce)
diff --git a/src/HBF/Types.hs b/src/HBF/Types.hs
--- a/src/HBF/Types.hs
+++ b/src/HBF/Types.hs
@@ -18,7 +18,7 @@
 
 import           Control.DeepSeq                (NFData)
 import           Control.Exception              (catch)
-import           Control.Monad.Trans.State.Lazy (StateT, get, modify, put)
+import           Control.Monad.Trans.State.Strict (StateT, get, modify, put)
 import           Data.Binary                    (Binary)
 import           Data.Char                      (chr, ord)
 import           Data.Int                       (Int8)
diff --git a/tests/CompilerTest.hs b/tests/CompilerTest.hs
--- a/tests/CompilerTest.hs
+++ b/tests/CompilerTest.hs
@@ -1,13 +1,11 @@
 module CompilerTest where
 
-import           Control.Monad.Trans.State (execStateT)
 import qualified Data.Text.Lazy.IO         as TIO
 import           Hedgehog
 import qualified Hedgehog                  as H
 import           Test.HUnit
 
 import           HBF.Compiler
-import qualified HBF.Eval                  as E
 import           HBF.Types
 import           Helper
 
@@ -74,7 +72,7 @@
   b <- exec unoptimized
   a @?= b
   where
-    exec program = execStateT (E.eval program) (mkMockIOS "25454\n")
+    exec program = execProgram program (mkMockIOS "25454\n")
 
 fullyFused :: Program o -> Bool
 fullyFused p = all (uncurry fused) (zip ops (tail ops))
diff --git a/tests/EvalTest.hs b/tests/EvalTest.hs
--- a/tests/EvalTest.hs
+++ b/tests/EvalTest.hs
@@ -1,6 +1,5 @@
 module EvalTest where
 
-import           Control.Monad.Trans.State (runStateT)
 import           Data.Char                 (ord)
 import           Data.Int                  (Int8)
 import qualified Data.Text.Lazy.IO         as TIO
@@ -76,8 +75,9 @@
   code <- TIO.readFile "tests/allfeatures.bf"
   let (Right (program, _)) = C.inMemoryCompile C.defaultCompilerOptions code
   (finalMachine, finalState) <-
-    runStateT
-      (E.evalWith E.defaultVMOptions {E.vmOptsMemoryBytes = bytes} program)
+    execProgramWith
+      program
+      E.defaultVMOptions {E.vmOptsMemoryBytes = bytes}
       (mkMockIOS "0")
   mockOutputS finalState @?= expectedOutput
   memory finalMachine @?= expectedMemory
diff --git a/tests/Helper.hs b/tests/Helper.hs
--- a/tests/Helper.hs
+++ b/tests/Helper.hs
@@ -6,7 +6,7 @@
 -- needed for smallcheck
 module Helper where
 
-import           Control.Monad.Trans.State (runStateT)
+import           Control.Monad.Trans.State.Strict (runStateT)
 import           Data.Coerce               (coerce)
 import           Data.Int                  (Int8)
 import           Data.Semigroup            (Semigroup, (<>))
@@ -22,7 +22,7 @@
 import           HBF.Compiler              (CompilerOptions (..),
                                             defaultCompilerOptions,
                                             inMemoryCompile)
-import           HBF.Eval                  (MachineType, eval)
+import           HBF.Eval                  (MachineType, eval, evalWith, VMOptions, defaultVMOptions)
 import           HBF.Parser
 import           HBF.Types
 
@@ -123,8 +123,11 @@
   -> Series m a6
 cons5 f = decDepth $ f <$> series <~> series <~> series <~> series <~> series
 
+execProgramWith :: Program Optimized -> VMOptions -> MockIO -> IO (MachineType, MockIO)
+execProgramWith p options = runStateT (evalWith options p)
+
 execProgram :: Program Optimized -> MockIO -> IO (MachineType, MockIO)
-execProgram p = runStateT (eval p)
+execProgram p = execProgramWith p defaultVMOptions
 
 execProgramS :: Program Optimized -> String -> IO (MachineType, MockIO)
 execProgramS p input = runStateT (eval p) (mkMockIOS input)
diff --git a/tests/IntegrationTests.hs b/tests/IntegrationTests.hs
--- a/tests/IntegrationTests.hs
+++ b/tests/IntegrationTests.hs
@@ -2,14 +2,13 @@
 
 module IntegrationTests where
 
-import           Control.Monad.Trans.State (execStateT)
 import           System.IO                 (hClose)
 import           System.IO.Temp            (withSystemTempFile)
 import           Test.HUnit
 
 import qualified HBF.Compiler              as C
-import qualified HBF.Eval                  as E
 import           HBF.Types
+import           Helper
 
 squaresPath :: FilePath
 squaresPath = "tests/squares.bf"
@@ -31,5 +30,5 @@
 unit_compileAndEvalSquares :: Assertion
 unit_compileAndEvalSquares = do
   program <- compile squaresPath
-  mock <- execStateT (E.eval program) (mkMockIO [])
+  (_,mock) <- execProgram program (mkMockIO [])
   mockOutputS mock @?= squaresResult
