diff --git a/default.nix b/default.nix
--- a/default.nix
+++ b/default.nix
@@ -4,7 +4,7 @@
 }:
 mkDerivation {
   pname = "madlang";
-  version = "2.1.1.2";
+  version = "2.2.0.0";
   src = ./.;
   isLibrary = true;
   isExecutable = true;
diff --git a/madlang.cabal b/madlang.cabal
--- a/madlang.cabal
+++ b/madlang.cabal
@@ -1,5 +1,5 @@
 name:                madlang
-version:             2.1.2.0
+version:             2.2.0.1
 synopsis:            Randomized templating language DSL
 description:         Please see README.md
 homepage:            https://github.com/vmchale/madlang#readme
@@ -41,10 +41,10 @@
   build-depends:       base >= 4.7 && < 5
                      , megaparsec
                      , text
-                     , optparse-applicative 
+                     , optparse-applicative
+                     , MonadRandom
                      , composition
                      , directory
-                     , mwc-random
                      , random-shuffle
                      , microlens
                      , mtl
diff --git a/src/Text/Madlibs/Ana/Resolve.hs b/src/Text/Madlibs/Ana/Resolve.hs
--- a/src/Text/Madlibs/Ana/Resolve.hs
+++ b/src/Text/Madlibs/Ana/Resolve.hs
@@ -17,6 +17,7 @@
 import Data.Monoid
 import Control.Applicative
 import Control.Monad
+import Control.Monad.Random.Class
 
 -- | Parse a template file into the `RandTok` data type
 parseFile :: [T.Text] -- ^ variables to substitute into the template
@@ -47,7 +48,7 @@
 runInFolder = ((either (pure . parseErrorPretty') (>>= (pure . show'))) =<<) .** (fmap (fmap run) .** parseFile)
 
 -- | Run based on text input, with nothing linked.
-runText :: [T.Text] -> String -> T.Text -> IO T.Text
+runText :: (MonadRandom m) => [T.Text] -> String -> T.Text -> m T.Text
 runText vars name = (either (pure . parseErrorPretty') id) . (fmap run) . (parseTok name [] vars)
 
 -- | Get file as context
diff --git a/src/Text/Madlibs/Cata/Run.hs b/src/Text/Madlibs/Cata/Run.hs
--- a/src/Text/Madlibs/Cata/Run.hs
+++ b/src/Text/Madlibs/Cata/Run.hs
@@ -4,12 +4,12 @@
 import Text.Madlibs.Internal.Types
 import Text.Madlibs.Internal.Utils
 import qualified Data.Text as T
-import System.Random.MWC
+import Control.Monad.Random.Class
 
 -- | Generate randomized text from a `RandTok`
-run :: RandTok -> IO T.Text
+run :: (MonadRandom m) => RandTok -> m T.Text
 run tok@(List rs) = do
-    value <-(withSystemRandom . asGenST $ \gen -> uniform gen)
+    value <- getRandomR (0,1) --(withSystemRandom . asGenST $ \gen -> uniform gen)
     let ret = ((snd . head) . filter ((>=value) . fst)) $ mkCdf tok
     case ret of
         (Value txt) -> pure txt
diff --git a/src/Text/Madlibs/Cata/SemErr.hs b/src/Text/Madlibs/Cata/SemErr.hs
--- a/src/Text/Madlibs/Cata/SemErr.hs
+++ b/src/Text/Madlibs/Cata/SemErr.hs
@@ -70,9 +70,8 @@
 --do we need this all in a monad??
 -- | big semantics checker that sequences stuff
 checkSemantics :: [(Key, [(Prob, [PreTok])])] -> Parser [(Key, [(Prob, [PreTok])])]
-checkSemantics keys = foldr (<=<) pure ((checkKey "Return"):[checkKey key | key <- allKeys keys ])
-                                       $ keys
-    where allKeys = fmap name . (concatMap snd) . (concatMap snd) -- TODO use a traversal here!!
+checkSemantics keys = foldr (<=<) pure ((checkKey "Return"):[checkKey key | key <- allKeys keys ]) $ keys
+    where allKeys = fmap name . (concatMap snd) . (concatMap snd)--traversal?
           name (Name str _) = str
           name (PreTok _) = "Return"
 
