diff --git a/Control/Comonad/Indexed.hs b/Control/Comonad/Indexed.hs
new file mode 100644
--- /dev/null
+++ b/Control/Comonad/Indexed.hs
@@ -0,0 +1,26 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Comonad.Indexed
+-- Copyright   :  (C) 2008 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Reiner Pope <reiner.pope@gmail.com
+-- Stability   :  experimental
+-- Portability :  portable 
+--
+----------------------------------------------------------------------------
+module Control.Comonad.Indexed 
+	( IxFunctor(..)
+	, IxCopointed(..)
+	, IxComonad(..)
+	, iduplicate
+	) where
+
+import Data.Functor.Indexed
+
+class IxCopointed w => IxComonad w where
+	iextend :: (w j k a -> b) -> w i k a -> w i j b
+
+iduplicate :: IxComonad w => w i k a -> w i j (w j k a)
+iduplicate = iextend id
+
diff --git a/Control/Monad/Indexed.hs b/Control/Monad/Indexed.hs
new file mode 100644
--- /dev/null
+++ b/Control/Monad/Indexed.hs
@@ -0,0 +1,47 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Monad.Indexed
+-- Copyright   :  (C) 2008 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Reiner Pope <reiner.pope@gmail.com>
+-- Stability   :  experimental
+-- Portability :  portable
+--
+----------------------------------------------------------------------------
+module Control.Monad.Indexed 
+	( IxFunctor(..)
+	, IxPointed(..)
+	, IxApplicative(..)
+	, IxMonad(..)
+	, IxMonadZero(..)
+	, IxMonadPlus(..)
+	, ijoin, (>>>=), (=<<<)
+	, iapIxMonad
+	) where
+
+import Data.Functor.Indexed
+
+class IxApplicative m => IxMonad m where
+	ibind :: (a -> m j k b) -> m i j a -> m i k b
+
+ijoin :: IxMonad m => m i j (m j k a) -> m i k a 
+ijoin = ibind id
+
+infixr 1 =<<<
+infixl 1 >>>=
+
+(>>>=) :: IxMonad m => m i j a -> (a -> m j k b) -> m i k b
+m >>>= k = ibind k m 
+
+(=<<<) :: IxMonad m => (a -> m j k b) -> m i j a -> m i k b
+(=<<<) = ibind
+
+iapIxMonad :: IxMonad m => m i j (a -> b) -> m j k a -> m i k b
+iapIxMonad f x = f >>>= \ f' -> x >>>= \x' -> ireturn (f' x')
+
+class IxMonad m => IxMonadZero m where
+	imzero :: m i j a
+
+class IxMonadZero m => IxMonadPlus m where
+	implus :: m i j a -> m i j a -> m i j a
diff --git a/Control/Monad/Indexed/Fix.hs b/Control/Monad/Indexed/Fix.hs
new file mode 100644
--- /dev/null
+++ b/Control/Monad/Indexed/Fix.hs
@@ -0,0 +1,20 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Monad.Indexed.Fix
+-- Copyright   :  (C) 2008 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Reiner Pope <reiner.pope@gmail.com>
+-- Stability   :  experimental
+-- Portability :  portable
+--
+----------------------------------------------------------------------------
+module Control.Monad.Indexed.Fix
+	( IxMonadFix(..)
+	) where
+
+import Control.Monad.Indexed
+
+class IxMonad m => IxMonadFix m where
+	imfix :: (a -> m i i a) -> m i i a
+
diff --git a/Control/Monad/Indexed/Trans.hs b/Control/Monad/Indexed/Trans.hs
new file mode 100644
--- /dev/null
+++ b/Control/Monad/Indexed/Trans.hs
@@ -0,0 +1,18 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Control.Monad.Indexed.Trans
+-- Copyright   :  (C) 2008 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Reiner Pope <reiner.pope@gmail.com>
+-- Stability   :  experimental 
+-- Portability :  portable
+--
+-- TODO: figure out a meaningful way for indexed monads to transform indexed 
+-- monads
+----------------------------------------------------------------------------
+module Control.Monad.Indexed.Trans where
+
+class IxMonadTrans t where
+	ilift :: Monad m => m a -> t m i i a 
+
diff --git a/Data/Functor/Indexed.hs b/Data/Functor/Indexed.hs
new file mode 100644
--- /dev/null
+++ b/Data/Functor/Indexed.hs
@@ -0,0 +1,33 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Functor.Indexed
+-- Copyright   :  (C) 2008 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Reiner Pope <reiner.pope@gmail.com>
+-- Stability   :  experimental
+-- Portability :  portable
+--
+----------------------------------------------------------------------------
+module Data.Functor.Indexed 
+	( IxFunctor(..)
+	, IxCopointed(..)
+	, IxPointed(..)
+	, IxApplicative(..)
+	) where
+
+class IxFunctor f where
+	imap :: (a -> b) -> f j k a -> f j k b
+
+class IxPointed m => IxApplicative m where
+	iap :: m i j (a -> b) -> m j k a -> m i k b
+
+class IxFunctor m => IxPointed m where
+        ireturn :: a -> m i i a
+
+class IxFunctor w => IxCopointed w where
+	iextract :: w i i a -> a
+
+{-# RULES
+"iextract/ireturn" iextract . ireturn = id
+ #-}
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c)2012, Edward A. 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:
+
+    * 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.
+
+    * Neither the name of Edward A. Kmett nor the names of other
+      contributors may 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.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/indexed.cabal b/indexed.cabal
new file mode 100644
--- /dev/null
+++ b/indexed.cabal
@@ -0,0 +1,35 @@
+Name:                indexed
+Version:             0.1
+Synopsis:            Haskell98 indexed functors, monads, comonads
+Description:         Haskell98 indexed functors, monads, comonads
+License:             BSD3
+License-file:        LICENSE
+Author:              Edward A. Kmett
+Maintainer:          Reiner Pope <reiner.pope@gmail.com>
+Copyright:           
+    Copyright (C) 2012 Reiner Pope,
+    Copyright (C) 2008 Edward A. Kmett, 
+    Copyright (C) 2004--2008 Dave Menendez, 
+    Copyright (C) 2007 Iavor Diatchki
+Category:            Control
+Build-type:          Simple
+Cabal-version:       >=1.6
+homepage:            https://github.com/reinerp/indexed
+bug-reports:         https://github.com/reinerp/indexed/issues
+
+source-repository head
+  type:                 git
+  location:             git://github.com/reinerp/indexed.git
+
+Library
+  Exposed-modules:     
+    Data.Functor.Indexed, 
+    Control.Monad.Indexed, 
+    Control.Monad.Indexed.Fix, 
+    Control.Monad.Indexed.Trans
+    Control.Comonad.Indexed
+ Build-depends:
+    base < 5
+ ghc-options:
+    -Wall
+
