diff --git a/Data/Accessor/MonadLib.hs b/Data/Accessor/MonadLib.hs
new file mode 100644
--- /dev/null
+++ b/Data/Accessor/MonadLib.hs
@@ -0,0 +1,91 @@
+{- | Access helper functions in State and Reader monads -}
+module Data.Accessor.MonadLib 
+  (-- * accessors in the form of actions in the state monad
+  set, get, modify
+  ,getAndModify, modifyAndGet 
+  ,(%=), (%:)
+  -- * lift a state monadic accessor to an accessor of a parent record
+  ,lift, liftT
+  -- * accessors in the form of actions in the reader monad
+  ,ask
+  -- * lift a reader monadic accessor to an accessor of a parent record
+  ,focusingOn, focusingOnT
+  ) where
+
+import qualified MonadLib
+import qualified MonadLib.Monads as Monads
+import Control.Monad
+
+import qualified Data.Accessor.Basic as Accessor
+
+monadLibModify f = MonadLib.get >>= MonadLib.set . f
+
+set :: MonadLib.StateM m r => Accessor.T r a -> a -> m ()
+set f x = monadLibModify (Accessor.set f x)
+
+get :: MonadLib.StateM m r => Accessor.T r a -> m a
+get f = (Accessor.get f) `liftM` MonadLib.get
+
+modify :: MonadLib.StateM m r => Accessor.T r a -> (a -> a) -> m ()
+modify f g = monadLibModify (Accessor.modify f g)
+
+{- |
+Modify a record element and return its old value.
+-}
+getAndModify :: MonadLib.StateM m r => Accessor.T r a -> (a -> a) -> m a
+getAndModify f g =
+   do x <- get f
+      modify f g
+      return x
+
+{- |
+Modify a record element and return its new value.
+-}
+modifyAndGet :: MonadLib.StateM m r => Accessor.T r a -> (a -> a) -> m a
+modifyAndGet f g =
+   do modify f g
+      get f
+
+infix 1 %=, %:
+
+{- |
+Infix variant of 'set'.
+-}
+(%=) :: MonadLib.StateM m r => Accessor.T r a -> a -> m ()
+(%=) = set
+
+{- |
+Infix variant of 'modify'.
+-}
+(%:) :: MonadLib.StateM m r => Accessor.T r a -> (a -> a) -> m ()
+(%:) = modify
+
+lift :: MonadLib.StateM m r => Accessor.T r s -> Monads.State s a -> m a
+lift f m =
+   do s0 <- get f
+      let (a,s1) = Monads.runState s0 m
+      set f s1
+      return a
+
+liftT :: (Monad m ) =>
+  Accessor.T r s -> MonadLib.StateT s m a -> MonadLib.StateT r m a
+liftT f m =
+   do s0 <- get f
+      (a,s1) <- MonadLib.lift $ MonadLib.runStateT s0 m
+      set f s1
+      return a
+
+ask :: MonadLib.ReaderM m r => Accessor.T r a -> m a
+ask f = (Accessor.get f) `liftM` MonadLib.ask
+
+focusingOn :: MonadLib.ReaderM m r => Accessor.T r s -> Monads.Reader s a -> m a
+focusingOn f m =
+   do s <- ask f
+      return $ Monads.runReader s m
+
+
+focusingOnT :: (Monad m ) =>
+  Accessor.T r s -> MonadLib.ReaderT s m a -> MonadLib.ReaderT r m a
+focusingOnT f m =
+   do s <- ask f
+      MonadLib.lift $ Monads.runReaderT s m
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2009
+Russell O'Connor
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,4 @@
+#! /usr/bin/env runhaskell
+ 
+> import Distribution.Simple
+> main = defaultMain
diff --git a/data-accessor-monadLib.cabal b/data-accessor-monadLib.cabal
new file mode 100644
--- /dev/null
+++ b/data-accessor-monadLib.cabal
@@ -0,0 +1,18 @@
+Name:                data-accessor-monadLib
+Version:             0.0.0
+Cabal-Version:       >= 1.2
+License:             OtherLicense
+License-file:        LICENSE
+Author:              Russell O'Connor
+Maintainer:          Russell O'Connor <roconnor@theorem.ca>
+Build-Type:          Simple
+Category:            data, monad
+Synopsis:            Accessor functions for monadLib's monads
+Tested-with:         GHC == 6.8.2
+
+Library
+ Build-Depends:      base < 4.1,
+                     data-accessor >= 0.1 && < 0.3,
+                     monadLib >= 3.4 && < 3.6
+ Exposed-Modules:    Data.Accessor.MonadLib
+
