diff --git a/emgm.cabal b/emgm.cabal
--- a/emgm.cabal
+++ b/emgm.cabal
@@ -1,5 +1,5 @@
 name:                   emgm
-version:                0.3
+version:                0.3.1
 synopsis:               Extensible and Modular Generics for the Masses
 homepage:               http://www.cs.uu.nl/wiki/GenericProgramming/EMGM
 description:
diff --git a/src/Generics/EMGM/Derive.hs b/src/Generics/EMGM/Derive.hs
--- a/src/Generics/EMGM/Derive.hs
+++ b/src/Generics/EMGM/Derive.hs
@@ -68,6 +68,9 @@
   Modifier(..),
   Modifiers,
 
+  deriveMany,
+  deriveManyWith,
+
   deriveMono,
   deriveMonoWith,
 
diff --git a/src/Generics/EMGM/Derive/Internal.hs b/src/Generics/EMGM/Derive/Internal.hs
--- a/src/Generics/EMGM/Derive/Internal.hs
+++ b/src/Generics/EMGM/Derive/Internal.hs
@@ -22,6 +22,9 @@
   Modifier(..),
   Modifiers,
 
+  deriveMany,
+  deriveManyWith,
+
   deriveMono,
   deriveMonoWith,
 
@@ -387,6 +390,20 @@
 
 derive :: Name -> Q [Dec]
 derive = deriveWith []
+
+--------------------------------------------------------------------------------
+
+-- | Same as 'deriveWith' for a list of type names. It may be necessary to use
+-- @deriveMany@ for a collection of mutually recursive datatypes.
+deriveManyWith :: Modifiers -> [Name] -> Q [Dec]
+deriveManyWith mods names = do
+  decLists <- mapM (deriveWith mods) names
+  return (concat decLists)
+
+-- | Same as 'derive' for a list of type names. It may be necessary to use
+-- @deriveMany@ for a collection of mutually recursive datatypes.
+deriveMany :: [Name] -> Q [Dec]
+deriveMany = deriveManyWith []
 
 --------------------------------------------------------------------------------
 
