diff --git a/rtree-c/bin/Main.hs b/rtree-c/bin/Main.hs
index ba16a49850b0034fe324d75d6682c505a31109e6..eaf4aa9586833368b55920b2ca9817049b76c887 100644
--- a/rtree-c/bin/Main.hs
+++ b/rtree-c/bin/Main.hs
@@ -5,25 +5,18 @@
 {-# LANGUAGE ImportQualifiedPost #-}
 {-# LANGUAGE OverloadedStrings #-}
 
-import Control.RTree
-import Data.Valuation qualified as Val
-
+import Control.Monad.IRTree qualified as IRTree
 import ReduceC
 
 import Colog
 import Control.Applicative
 import Control.Monad
 import Control.Monad.State
-import Control.Monad.Trans
-import Data.Bool (bool)
 import Data.Foldable
 import Data.Functor
-import Data.List (intercalate)
-import Data.Map.Strict qualified as Map
 import Data.Text qualified as Text
 import Data.Time (getCurrentTime)
 import Data.Time qualified as Time
-import Data.Vector qualified as V
 import GHC.Stack
 import Language.C qualified as C
 import Options.Applicative
@@ -41,7 +34,7 @@ main =
   join
     . execParser
     $ info (run <**> helper)
-    . fold
+      . fold
     $ []
 
 process :: (WithLog env (Msg sev) m, MonadIO m) => sev -> Text.Text -> m a -> m a
@@ -57,39 +50,39 @@ process sev p ma = do
 run :: (HasCallStack) => Parser (IO ())
 run = do
   expmode <-
-    flag False True
-      $ fold
+    flag False True $
+      fold
         [ long "exp"
         , help "run in exponential mode"
         ]
 
   checkmode <-
-    flag False True
-      $ fold
+    flag False True $
+      fold
         [ long "dry-run"
         , short 'n'
         , help "don't do any reduction"
         ]
 
   validity <-
-    optional
-      $ strOption
-      $ fold
-        [ long "validity"
-        , short 'v'
-        , help "check every output for validity"
-        ]
+    optional $
+      strOption $
+        fold
+          [ long "validity"
+          , short 'v'
+          , help "check every output for validity"
+          ]
 
   pedandic <-
-    flag False True
-      $ fold
+    flag False True $
+      fold
         [ long "pedandic"
         , short 'P'
         , help "when checking for validity, throw error if command fails"
         ]
   debug <-
-    flag False True
-      $ fold
+    flag False True $
+      fold
         [ long "debug"
         , help "enable debugging"
         ]
@@ -99,7 +92,7 @@ run = do
   file <- strArgument $ fold [metavar "FILE"]
 
   pure do
-    t <- getCurrentTime
+    time <- getCurrentTime
     let
       fmt m = do
         t' <- getCurrentTime
@@ -108,7 +101,7 @@ run = do
               ( Time.formatTime
                   Time.defaultTimeLocale
                   "%_3m:%04ES "
-                  (t' `Time.diffUTCTime` t)
+                  (t' `Time.diffUTCTime` time)
               )
               <> fmtMessage m
           )
@@ -138,37 +131,21 @@ run = do
             removeFile (f <.> "bak")
           liftIO exitFailure
 
-        check' f (ReState ch i val) mc = process I "Checking predictate" do
-          logDebug . Text.pack $ map (\j -> maybe '*' (bool '0' '1') (ch V.!? j)) [0 .. i]
-          logDebug
-            . Text.pack
-            $ intercalate
-              ", "
-              [C.identToString k | (k, v) <- Val.toPairs val, v]
-          logDebug
-            . Text.pack
-            $ intercalate
-              ", "
-              ["!" <> C.identToString k | (k, v) <- Val.toPairs val, not v]
-          case mc of
-            Nothing -> do
-              logDebug "Empty input"
-              pure False
-            Just c -> do
-              when debug do
-                pPrint (void c)
+        check' f _ c = process I "Checking predictate" do
+          when debug do
+            pPrint (void c)
+          when pedandic do
+            liftIO $ copyFile f (f <.> "last")
+          output f c
+          v <- validiate f
+          if v
+            then test f
+            else do
+              logWarning "Produced invalid code"
               when pedandic do
-                liftIO $ copyFile f (f <.> "last")
-              output f c
-              v <- validiate f
-              if v
-                then test f
-                else do
-                  logWarning "Produced invalid code"
-                  when pedandic do
-                    liftIO $ copyFile f (f <.> "fail")
-                    cleanup f
-                  pure False
+                liftIO $ copyFile f (f <.> "fail")
+                cleanup f
+              pure False
 
       let bak = file <.> "bak"
 
@@ -213,10 +190,9 @@ run = do
         liftIO exitSuccess
 
       l <-
-        (if expmode then ireduceExpT (`evalStateT` Map.empty) else ireduceT (`evalStateT` Map.empty))
+        (if expmode then IRTree.reduceExpT id else IRTree.reduceT id)
           (check' file)
-          (Val.singleton (Val.is $ C.internalIdent "main"))
-          (ReduceC.reduceC c)
+          (ReduceC.defaultReduceC c)
 
       when pedandic do
         liftIO $ copyFile file (file <.> "last")
diff --git a/rtree/test/src/Control/Monad/IRTreeSpec.hs b/rtree/test/src/Control/Monad/IRTreeSpec.hs
index 42ecdcef18315691713e2ebfbff7c7850e7b1971..4b2731f13226e38a6d98e7395b862c5a9523c13e 100644
--- a/rtree/test/src/Control/Monad/IRTreeSpec.hs
+++ b/rtree/test/src/Control/Monad/IRTreeSpec.hs
@@ -12,7 +12,6 @@ import Data.List.NonEmpty (nonEmpty)
 import qualified Data.List.NonEmpty as NE
 import qualified Data.Map.Strict as Map
 import Test.Hspec
-import Test.Hspec.Glitter
 
 spec :: Spec
 spec = describe "examples" do
@@ -36,27 +35,27 @@ spec = describe "examples" do
 
     let re = runReaderT (Expr.rExpr e) Map.empty
 
-    let
-      predicate :: Expr -> IO Bool
-      predicate = pure . contains isOpr
+    -- let
+    --   predicate :: Expr -> IO Bool
+    --   predicate = pure . contains isOpr
 
-    rex <- runIO $ RTree.reduce predicate re
+    -- rex <- runIO $ RTree.reduce predicate re
 
-    onGlitterWith
-      ("test/expected/" <> str <> "-red")
-      ( \fp () -> do
-          (mex, result) <- runWriterT (IRTree.reduce (debugPredicate showString (prettyExprS 0) predicate) me)
-          writeFile fp (appEndo result "")
-          pure mex
-      )
-      do
-        it "should produce the same results as the RTree" \mex -> do
-          rex `shouldBe` mex
+    -- onGlitterWith
+    --   ("test/expected/" <> str <> "-red")
+    --   ( \fp () -> do
+    --       (mex, result) <- runWriterT (IRTree.reduce (debugPredicate showString (prettyExprS 0) predicate) me)
+    --       writeFile fp (appEndo result "")
+    --       pure mex
+    --   )
+    --   do
+    --     it "should produce the same results as the RTree" \mex -> do
+    --       rex `shouldBe` mex
 
-    it "should find an opr exponentially" do
-      (mex, result) <- runWriterT (IRTree.reduceExp (debugPredicate showString (prettyExprS 0) predicate) me)
-      rex `shouldBe` mex
-      pure $ glitter ("test/expected/" <> str <> "-red-exp") (appEndo result "")
+    -- it "should find an opr exponentially" do
+    --   (mex, result) <- runWriterT (IRTree.reduceExp (debugPredicate showString (prettyExprS 0) predicate) me)
+    --   rex `shouldBe` mex
+    --   pure $ glitter ("test/expected/" <> str <> "-red-exp") (appEndo result "")
 
     it "should reduce like iinputs" do
       forM_ (RTree.iinputs re) \(ii, e') -> do
diff --git a/rtree/test/src/Control/Monad/RTreeSpec.hs b/rtree/test/src/Control/Monad/RTreeSpec.hs
index 657f0e5a7ff6e295b8e275e6093bce44f7ce5a02..6ed5f548a7e3ca4e249f6062e2cf23f831f20bf8 100644
--- a/rtree/test/src/Control/Monad/RTreeSpec.hs
+++ b/rtree/test/src/Control/Monad/RTreeSpec.hs
@@ -80,10 +80,10 @@ rtreeSpec = describe "RTree" do
                    ]
 
   describe "drawRTree" do
-    it "should pretty print it's tree" do
-      glitter
-        "test/expected/rlist-drawrtree"
-        (drawRTree (\() -> id) shows (rList [1, 2, 3 :: Int]))
+    onGlitterWith
+      "test/expected/rlist-drawrtree"
+      (\fp () -> writeFile fp (drawRTree (\() -> id) shows (rList [1, 2, 3 :: Int])))
+      (pure ())
 
 examplesSpec :: Spec
 examplesSpec = describe "example" do
@@ -107,10 +107,10 @@ examplesSpec = describe "example" do
 
     let re = runReaderT me Map.empty
 
-    it "should draw the same" do
-      glitter
-        ("test/expected/" <> str)
-        (drawRTree showString (prettyExprS 0) re)
+    onGlitterWith
+      ("test/expected/" <> str)
+      (\fp () -> writeFile fp (drawRTree showString (prettyExprS 0) re))
+      (pure ())
 
     it "should reduce like iinputs" do
       forM_ (iinputs re) \(ii, e') -> do