diff --git a/Data/Lens.hs b/Data/Lens.hs
new file mode 100644
--- /dev/null
+++ b/Data/Lens.hs
@@ -0,0 +1,93 @@
+module Data.Lens
+  ( module Data.Lens.Common
+  -- * State API
+  , access         -- getter -- :: MonadState a m => Lens a b -> m b
+  , (~=), (!=)     -- setter -- :: MonadState a m => Lens a b -> b -> m b
+  , (%=), (!%=)    -- modify -- :: MonadState a m => Lens a b -> (b -> b) -> m b
+  , (%%=), (!%%=)  -- modify -- :: MonadState a m => Lens a b -> (b -> (c, b)) -> m c
+  , (+=), (!+=)    -- modify -- :: (MonadState a m, Num b) => Lens a b -> b -> m b
+  , (-=), (!-=)    -- modify -- :: (MonadState a m, Num b) => Lens a b -> b -> m b
+  , (*=), (!*=)    -- modify -- :: (MonadState a m, Num b) => Lens a b -> b -> m b
+  , (//=), (!/=)   -- modify -- :: (MonadState a m, Fractional b) => Lens a b -> b -> m b
+  , (&&=), (!&&=)  -- modify -- :: MonadState a m => Lens a Bool -> Bool -> m Bool
+  , (||=), (!||=)  -- modify -- :: MonadState a m => Lens a Bool -> Bool -> m Bool
+  ) where
+
+import Control.Comonad.Trans.Store
+import Control.Monad.State
+import Data.Functor.Identity
+import Data.Lens.Common
+
+-- * State actions
+
+-- | get the value of a lens into state
+access :: MonadState a m => Lens a b -> m b
+access (Lens f) = gets (pos . f)
+{-# INLINE access #-}
+
+infixr 4 ~=, !=
+
+-- | set a value using a lens into state
+(~=), (!=) :: MonadState a m => Lens a b -> b -> m b
+Lens f ~= b = do
+  modify (peek b . f)
+  return b
+Lens f != b = do
+  StoreT (Identity h) _ <- gets f
+  put (h $! b)
+  return b
+
+infixr 4 %=, !%=
+    
+-- | infix modification a value through a lens into state
+(%=), (!%=) :: MonadState a m => Lens a b -> (b -> b) -> m b
+Lens f %= g = do
+  StoreT (Identity h) b <- gets f
+  let b' = g b
+  put (h b')
+  return b'
+Lens f !%= g = do
+  StoreT (Identity h) b <- gets f
+  let b' = g b
+  b' `seq` put (h b')
+  return b'
+
+infixr 4 %%=, !%%=
+
+-- | infix modification of a value through a lens into state
+-- with a supplemental response
+(%%=), (!%%=) :: MonadState a m => Lens a b -> (b -> (c, b)) -> m c
+Lens f %%= g = do
+  StoreT (Identity h) b <- gets f
+  let (c, b') = g b
+  put (h b')
+  return c
+Lens f !%%= g = do
+  StoreT (Identity h) b <- gets f
+  let (c, b') = g b
+  b' `seq` put (h b')
+  return c
+
+infixr 4 +=, !+=, -=, !-=, *=, !*=
+
+(+=), (!+=), (-=), (!-=), (*=), (!*=) :: (MonadState a m, Num b) => Lens a b -> b -> m b
+f += b = f %= (+ b)
+f -= b = f %= subtract b
+f *= b = f %= (* b)
+f !+= b = f !%= (+ b)
+f !-= b = f !%= subtract b
+f !*= b = f !%= (* b)
+
+infixr 4 //=, !/=
+
+(//=), (!/=) :: (MonadState a m, Fractional b) => Lens a b -> b -> m b
+f //= b = f %= (/ b)
+f !/= b = f !%= (/ b)
+
+infixr 4 &&=, !&&=, ||=, !||=
+
+(&&=), (||=), (!&&=), (!||=) :: MonadState a m => Lens a Bool -> Bool -> m Bool
+f &&= b = f %= (&& b)
+f ||= b = f %= (|| b)
+f !&&= b = f !%= (&& b)
+f !||= b = f !%= (|| b)
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright 2008-2011 Edward Kmett
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the author nor the names of his contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/data-lens-fd.cabal b/data-lens-fd.cabal
new file mode 100644
--- /dev/null
+++ b/data-lens-fd.cabal
@@ -0,0 +1,38 @@
+name:          data-lens-fd
+category:      Control, Comonads
+version:       1.8.0
+license:       BSD3
+cabal-version: >= 1.6
+license-file:  LICENSE
+author:        Edward A. Kmett
+maintainer:    Edward A. Kmett <ekmett@gmail.com>
+stability:     provisional
+homepage:      git://github.com/ekmett/data-lens-fd/
+copyright:     Copyright (C) 2011 Edward A. Kmett
+synopsis:      Lenses
+description:   Lenses
+build-type:    Simple
+
+source-repository head
+  type: git
+  location: git://github.com/ekmett/data-lens-fd.git
+
+flag DeriveDataTypeable
+  manual: False
+  default: True
+
+library
+  build-depends: 
+    base >= 4 && < 4.4,
+    transformers >= 0.2 && < 0.3,
+    mtl >= 2.0.1.0 && <= 2.1,
+    semigroups >= 0.5 && < 0.6,
+    comonad >= 1.1 && < 1.2,
+    data-lens >= 1.8 && < 1.9,
+    comonad-transformers >= 1.8 && < 1.9
+
+  exposed-modules:
+    Data.Lens
+
+  ghc-options:      -Wall 
+
