diff --git a/Data/Generics/Alloy/EffectProxy.hs b/Data/Generics/Alloy/EffectProxy.hs
new file mode 100644
--- /dev/null
+++ b/Data/Generics/Alloy/EffectProxy.hs
@@ -0,0 +1,74 @@
+-- Alloy.
+-- Copyright (c) 2008-2009, University of Kent.
+-- 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 the University of Kent nor the names of its
+--    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.
+
+-- | A module providing an 'AlloyA' instance in terms of 'AlloyARoute'.
+--
+-- The contents of this module appear blank because it contains only class instances.
+--  The 'AlloyA' and 'AlloyARoute' class instances have nearly identical definitions
+-- for any given type, and running 'AlloyARoute' and ignoring the route has
+-- the same behaviour as the 'AlloyA' class.  Therefore, it is possible to define
+-- a single 'AlloyA' instance in terms of 'AlloyARoute'.  That is what this module does.
+--
+-- To use this module, you should generate only 'AlloyARoute' instances with the
+-- "Data.Generics.Alloy.GenInstances" module, and import this module.  If you
+-- import this alongside any other 'AlloyA' instances you'll have incoherent
+-- instances.
+module Data.Generics.Alloy.EffectProxy () where
+
+import Data.Generics.Alloy
+
+-- | A helper class to convert operations not expecting a route to those that ignore
+-- the route (which will have the unit type as its outer type).
+class ConvertOpsToIgnoreRoute (o :: (* -> *) -> *) o' | o -> o' where
+  convertOpsToIgnoreRoute :: o m -> o' m ()
+
+instance ConvertOpsToIgnoreRoute BaseOpA BaseOpARoute where
+  convertOpsToIgnoreRoute = const baseOpARoute
+
+instance ConvertOpsToIgnoreRoute r r' =>
+  ConvertOpsToIgnoreRoute (t :-* r) (t :-@ r') where
+  convertOpsToIgnoreRoute (f :-* r) = (f . fst) :-@ (convertOpsToIgnoreRoute r)
+
+
+instance (
+    AlloyARoute t o o'
+  , ConvertOpsToIgnoreRoute ro o
+  , ConvertOpsToIgnoreRoute ro' o') => AlloyA t ro ro' where
+  transformM o o' t = transformMRoute (convertOpsToIgnoreRoute o)
+                                      (convertOpsToIgnoreRoute o')
+                                      (t, fakeRoute t) 
+    where
+      fakeRoute :: t -> Route t ()
+      fakeRoute = const $ error "transformM"
+  transformA o o' t = transformARoute (convertOpsToIgnoreRoute o)
+                                      (convertOpsToIgnoreRoute o')
+                                      (t, fakeRoute t) 
+    where
+      fakeRoute :: t -> Route t ()
+      fakeRoute = const $ error "transformA"
diff --git a/Data/Generics/Alloy/PureProxy.hs b/Data/Generics/Alloy/PureProxy.hs
new file mode 100644
--- /dev/null
+++ b/Data/Generics/Alloy/PureProxy.hs
@@ -0,0 +1,66 @@
+-- Alloy.
+-- Copyright (c) 2008-2009, University of Kent.
+-- 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 the University of Kent nor the names of its
+--    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.
+
+-- | A module providing an 'Alloy' instance in terms of 'AlloyA'.
+--
+-- The contents of this module appear blank because it contains only class instances.
+--  The 'Alloy' and 'AlloyA' class instances have nearly identical definitions
+-- for any given type, and running 'AlloyA' with an identity functor\/monad has
+-- the same behaviour as the pure class.  Therefore, it is possible to define
+-- a single 'Alloy' instance in terms of 'AlloyA'.  That is what this module does.
+--
+-- To use this module, you should generate only 'AlloyA' instances with the
+-- "Data.Generics.Alloy.GenInstances" module, and import this module.  If you
+-- import this alongside any other 'Alloy' instances you'll have incoherent
+-- instances.  Alternatively, you can generate only 'AlloyARoute' instances and
+-- use this module along with "Data.Generics.Alloy.EffectProxy".
+module Data.Generics.Alloy.PureProxy () where
+
+import Control.Monad.Identity
+
+import Data.Generics.Alloy
+
+instance (AlloyA t mo mo', ConvertOpsToIdentity o mo, ConvertOpsToIdentity o' mo') => Alloy t o o' where
+  transform o o' t = runIdentity (transformM (convertOpsToIdentity o) (convertOpsToIdentity o') t)
+
+-- {{{ Various type-level programming ops conversions:
+
+-- | A helper class to convert non-monadic transformations into monadic ones in
+-- the Identity monad.
+class ConvertOpsToIdentity o o' | o -> o' where
+  convertOpsToIdentity :: o -> o' Identity
+
+instance ConvertOpsToIdentity BaseOp BaseOpA where
+  convertOpsToIdentity = const baseOpA
+
+instance ConvertOpsToIdentity r r' => ConvertOpsToIdentity (a :- r) (a :-* r') where
+  convertOpsToIdentity (f :- r) = (return . f) :-* (convertOpsToIdentity r)
+
+
+-- }}}
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2008-2009, University of Kent.
+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 the University of Kent nor the names of its
+      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.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,5 @@
+#! /usr/bin/env runhaskell
+
+> import Distribution.Simple
+> main = defaultMain
+
diff --git a/alloy-proxy-fd.cabal b/alloy-proxy-fd.cabal
new file mode 100644
--- /dev/null
+++ b/alloy-proxy-fd.cabal
@@ -0,0 +1,23 @@
+Name: alloy-proxy-fd
+Version: 1.0.0
+License: BSD3
+License-File: LICENSE
+Author: Neil Brown
+Copyright: Copyright 2008-2009, University of Kent
+Maintainer: neil@twistedsquare.com
+Cabal-Version: >= 1.2.3
+Build-type: Simple
+Synopsis: Some add-on instances for the Alloy library
+Description: Two modules supplying proxy instances that allow you to define pure and/or effectful
+             instances in terms of their more general
+	     effectful/route-including equivalents in Alloy.
+Category: Generics
+Tested-With: GHC==6.8.2, GHC == 6.10.3
+Library
+  Build-Depends: base >= 3 && < 5, alloy, mtl
+
+  Exposed-modules: Data.Generics.Alloy.EffectProxy
+                   Data.Generics.Alloy.PureProxy
+
+  Extensions: TypeOperators MultiParamTypeClasses FunctionalDependencies FlexibleInstances UndecidableInstances KindSignatures
+
