diff --git a/lib/GEODE/Metadata/SplitContext.hs b/lib/GEODE/Metadata/SplitContext.hs
index 7ea4d6e7089929f1a82d86c9098accb8cc024995..432357889d3db549abbcdbc59c12ed6ebe30090e 100644
--- a/lib/GEODE/Metadata/SplitContext.hs
+++ b/lib/GEODE/Metadata/SplitContext.hs
@@ -12,6 +12,8 @@ module GEODE.Metadata.SplitContext
   , runSplitT ) where
 
 import Control.Monad.Identity (Identity(..))
+import Control.Monad.IO.Class (MonadIO(..))
+import Control.Monad.Trans (MonadTrans(..))
 import Data.Map as Map (Map, (!?), delete, empty, insert)
 import Data.Text (Text)
 
@@ -68,6 +70,12 @@ instance Monad m => SplitContext (SplitContextT m) where
   context = SplitContextT $ \current -> pure (current, current)
   update f = SplitContextT $ \current -> pure ((), f current)
 
+instance MonadTrans SplitContextT where
+  lift m = SplitContextT $ \current -> m >>= \a -> pure (a, current)
+
+instance MonadIO m => MonadIO (SplitContextT m) where
+  liftIO = lift . liftIO
+
 next :: SplitContext m => Field a -> m Int
 next f@(HeadWord _) = lookupEdit f (Just . maybe 1 (+1)) >>= pure . maybe 0 id
 next Page = lookupEdit Page (+1)