diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,23 @@
+# Revision history for transformers-eff
+
+## 0.2.0.0  -- 2017-02-07
+
+### Breaking Changes
+
+* The type of `gets` was changed to actually be the `gets` operation.
+* `Control.Effect.Nondeterminism` now uses `list-transformer` instead of lists.
+* `Control.Effect.Nondeterminism.choose` now chooses from any `Foldable` 
+  structure.
+
+### Non-breaking Changes
+
+* A `MonadIO` instance was added to `Eff`.
+* New function: `Control.Effect.Nondeterminism.runNondeterminismM`.
+
+### Other changes
+
+* The upper bound of `base` was increased.
+
+## 0.1.0.0  -- 2017-02-02
+
+* First version. Released on an unsuspecting world. Mwahaha.
diff --git a/Control/Effect.hs b/Control/Effect.hs
--- a/Control/Effect.hs
+++ b/Control/Effect.hs
@@ -1,15 +1,22 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE TypeFamilies #-}
 
+#if __GLASGOW_HASKELL__ >=800
+{-# LANGUAGE UndecidableSuperClasses #-}
+#endif
+
 module Control.Effect
        ( -- * Core API
          Eff(..), translate, Interprets, interpret, IsEff) where
 
 import Control.Monad
+import Control.Monad.IO.Class (MonadIO(..))
 import Control.Monad.Morph
+import Control.Monad.Trans.Class(MonadTrans(lift))
 import Control.Monad.Trans.Cont (ContT(..))
 import Data.Functor.Sum
 import GHC.Exts (Constraint)
@@ -87,6 +94,10 @@
 instance MonadTrans (Eff f) where
   lift m = Eff (\l -> l (InR m))
   {-# INLINE lift #-}
+
+instance MonadIO m => MonadIO (Eff effect m) where
+  liftIO = lift . liftIO
+  {-# INLINE liftIO #-}
 
 {-
 
diff --git a/Control/Effect/Nondeterminism.hs b/Control/Effect/Nondeterminism.hs
--- a/Control/Effect/Nondeterminism.hs
+++ b/Control/Effect/Nondeterminism.hs
@@ -5,12 +5,9 @@
 
 import Control.Monad (join)
 import Control.Monad.Trans.Class (lift)
-import Control.Monad.Trans.Cont (shiftT)
 import Control.Effect
-import qualified Pipes as P
-import qualified Pipes.Prelude as P
-
--- TODO Can probably generalize over any foldable.
+import Data.Foldable (Foldable, toList)
+import List.Transformer (fold, foldM, select)
 
 class Monad m => Nondeterministic m where
   liftNondeterminism :: [a] -> m a
@@ -23,17 +20,17 @@
   liftNondeterminism = lift . liftNondeterminism
   {-# INLINE liftNondeterminism #-}
 
-choose :: Nondeterministic m => [a] -> m a
-choose = liftNondeterminism
+choose :: (Nondeterministic m, Foldable f) => f a -> m a
+choose = liftNondeterminism . toList
 {-# INLINE choose #-}
 
-runNondeterminism :: Monad m => Eff [] m a -> m [a]
-runNondeterminism eff = P.toListM (P.enumerate (translate makeChoice eff))
-  where makeChoice choices =
-          shiftT (\k ->
-                    lift (P.Select (P.for (P.each choices)
-                                          (P.enumerate . k))))
+runNondeterminism :: (Monad m, Foldable f) => (b -> a -> b) -> b -> Eff f m a -> m b
+runNondeterminism f z = fold f z id . translate (lift . select)
 {-# INLINE runNondeterminism #-}
+
+runNondeterminismM :: (Monad m, Foldable f) => (b -> a -> m b) -> m b -> Eff f m a -> m b
+runNondeterminismM f z = foldM f z return . translate (lift . select)
+{-# INLINE runNondeterminismM #-}
 
 -- TODO Non-conflicting names?
 
diff --git a/Control/Effect/State.hs b/Control/Effect/State.hs
--- a/Control/Effect/State.hs
+++ b/Control/Effect/State.hs
@@ -37,6 +37,6 @@
 modify' f = interpret (State.modify' f)
 {-# INLINE modify' #-}
 
-gets :: (Interprets (State state) m) => (state -> state) -> m state
+gets :: (Interprets (State state) m) => (state -> a) -> m a
 gets f = interpret (State.gets f)
 {-# INLINE gets #-}
diff --git a/transformers-eff.cabal b/transformers-eff.cabal
--- a/transformers-eff.cabal
+++ b/transformers-eff.cabal
@@ -1,23 +1,28 @@
 name:                transformers-eff
 synopsis:            An approach to managing composable effects, ala mtl/transformers/extensible-effects/Eff
-version:             0.1.0.0
+version:             0.2.0.0
 homepage:            https://github.com/ocharles/transformers-eff
 license:             BSD3
 license-file:        LICENSE
 author:              Ollie Charles
 maintainer:          ollie@ocharles.org.uk
--- copyright:           
+-- copyright:
 category:            Control
 build-type:          Simple
--- extra-source-files:  
+extra-source-files:
+  ChangeLog.md
 cabal-version:       >=1.10
 
 library
   exposed-modules:     Control.Effect, Control.Effect.Environment, Control.Effect.Nondeterminism, Control.Effect.Exception, Control.Effect.IO, Control.Effect.State, Control.Effect.Identity
-  -- other-modules:       
+  -- other-modules:
   other-extensions:    TypeOperators, DeriveDataTypeable, DefaultSignatures, DeriveFunctor, StandaloneDeriving, ExistentialQuantification, FlexibleContexts, FlexibleInstances, FunctionalDependencies, KindSignatures, RankNTypes, UndecidableInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving
-  build-depends:       base >=4.8 && <4.9, transformers >=0.4 && <0.5, pipes, free, mmorph
-  -- hs-source-dirs:      
+  build-depends:       base >=4.8 && <5
+                     , transformers >=0.4 && <0.6
+                     , list-transformer >= 1.0.1 && < 1.1
+                     , free >= 4.12.4 && < 4.13
+                     , mmorph >= 1.0.9 && < 1.1
+  -- hs-source-dirs:
   default-language:    Haskell2010
   ghc-options: -Wall
 
