diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,31 @@
+Copyright (c) 2009, Henning Thielemann
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * 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.
+
+    * The names of contributors may not be used to endorse or promote
+      products derived from this software without specific prior
+      written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"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 COPYRIGHT
+OWNER 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.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+#! /usr/bin/env runhaskell
+> import Distribution.Simple
+> main = defaultMain
diff --git a/monoid-transformer.cabal b/monoid-transformer.cabal
new file mode 100644
--- /dev/null
+++ b/monoid-transformer.cabal
@@ -0,0 +1,37 @@
+Name:             monoid-transformer
+Version:          0.0.1
+License:          BSD3
+License-File:     LICENSE
+Author:           Henning Thielemann <haskell@henning-thielemann.de>
+Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>
+-- Homepage:         http://www.haskell.org/haskellwiki/Monoid transformer
+Category:         Data
+Synopsis:         Monoid counterparts to some ubiquitous monad transformers
+-- Portability:      Haskell 98
+Description:
+  Monoid transformers: State, Reader
+  There is no Writer transformer.
+  It's vice versa: The Writer monad transforms a monoid to a monad.
+Tested-With:       GHC==6.8.2
+Cabal-Version:     >=1.6
+Build-Type:        Simple
+
+Source-Repository head
+  type:     darcs
+  location: http://code.haskell.org/~thielema/monoid/
+
+Source-Repository this
+  type:     darcs
+  location: http://code.haskell.org/~thielema/monoid/
+  tag:      0.0.1
+
+
+Library
+  Build-Depends: base
+
+  GHC-Options:      -Wall
+  Hs-Source-Dirs:   src
+  Exposed-Modules:
+    Data.Monoid.Reader
+    Data.Monoid.State
+    Data.Monoid.Transformer
diff --git a/src/Data/Monoid/Reader.hs b/src/Data/Monoid/Reader.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Monoid/Reader.hs
@@ -0,0 +1,15 @@
+module Data.Monoid.Reader where
+
+import qualified Data.Monoid.Transformer as MonoidTrans
+import Data.Monoid (Monoid, mempty, mappend, )
+
+
+newtype T r a = Cons {run :: r -> a}
+
+instance Monoid a => Monoid (T r a) where
+   mempty = MonoidTrans.lift mempty
+   mappend (Cons x) (Cons y) =
+      Cons $ \r -> mappend (x r) (y r)
+
+instance MonoidTrans.C (T r) where
+   lift = Cons . const
diff --git a/src/Data/Monoid/State.hs b/src/Data/Monoid/State.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Monoid/State.hs
@@ -0,0 +1,31 @@
+module Data.Monoid.State where
+
+import qualified Data.Monoid.Transformer as MonoidTrans
+import Data.Monoid (Monoid, mempty, mappend, )
+
+newtype T s a = Cons {run :: s -> (a,s)}
+
+evaluate :: s -> T s a -> a
+evaluate s m = fst $ run m s
+
+execute :: s -> T s a -> s
+execute s m = snd $ run m s
+
+
+put :: Monoid a => s -> T s a
+put s = Cons $ const (mempty, s)
+
+modify :: Monoid a => (s -> s) -> T s a
+modify f = Cons $ \s -> (mempty, f s)
+
+
+instance Monoid a => Monoid (T s a) where
+   mempty = MonoidTrans.lift mempty
+   mappend (Cons x) (Cons y) =
+      Cons $ \s0 ->
+         let (xr,s1) = x s0
+             (yr,s2) = y s1
+         in  (mappend xr yr, s2)
+
+instance MonoidTrans.C (T r) where
+   lift x = Cons $ (,) x
diff --git a/src/Data/Monoid/Transformer.hs b/src/Data/Monoid/Transformer.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Monoid/Transformer.hs
@@ -0,0 +1,6 @@
+module Data.Monoid.Transformer where
+
+import Data.Monoid (Monoid, )
+
+class C t where
+   lift :: (Monoid m) => m -> t m
