diff --git a/Data/Aeson/TH.hs b/Data/Aeson/TH.hs
--- a/Data/Aeson/TH.hs
+++ b/Data/Aeson/TH.hs
@@ -159,22 +159,21 @@
 import Data.Aeson.Types ( Value(..), Parser )
 -- from base:
 import Control.Applicative ( pure, (<$>), (<*>) )
-import Control.Monad       ( return, mapM, liftM2, fail, (>>=) )
+import Control.Monad       ( return, mapM, liftM2, fail )
 import Data.Bool           ( otherwise )
 import Data.Eq             ( (==) )
-import Data.Function       ( ($), (.), id, fix )
+import Data.Function       ( ($), (.), id )
 import Data.Functor        ( fmap )
 import Data.List           ( (++), foldl, foldl', intercalate
                            , length, map, zip, genericLength
                            )
-import qualified Data.Set as Set
 import Data.Maybe          ( Maybe(Nothing, Just) )
-import Prelude             ( String, (-), Integer, fromIntegral, error, snd )
+import Prelude             ( String, (-), Integer, fromIntegral, error )
 import Text.Printf         ( printf )
 import Text.Show           ( show )
 #if __GLASGOW_HASKELL__ < 700
 import Control.Monad       ( (>>=) )
-import Prelude             ( fromInteger, snd )
+import Prelude             ( fromInteger )
 #endif
 -- from unordered-containers:
 import qualified Data.HashMap.Strict as H ( lookup, toList, size )
@@ -263,32 +262,9 @@
                   ]
       where
         classType = conT ''ToJSON
-        lhsTypNames = map tvbName tvbs
-        rhsTypNames = getTypVarNames cons
-        typeNames = Set.toList $ Set.intersection
-                    (Set.fromList lhsTypNames)
-                    (Set.fromList rhsTypNames)
-        instanceType = foldl' appT (conT name) $ map varT lhsTypNames
+        typeNames = map tvbName tvbs
+        instanceType = foldl' appT (conT name) $ map varT typeNames
 
--- gets all type variable names from the constructors
-getTypVarNames :: [Con] -> [Name]
-getTypVarNames cons
-    = types >>= fix (\f t -> case t of
-                          ForallT _ _ ty -> f ty
-                          VarT v         -> [v]
-                          AppT ty1 ty2   -> f ty1 ++ f ty2
-                          SigT ty _      -> f ty
-                          _              -> []
-                    )
-  where
-    types = cons >>= conTyps
-    conTyps :: Con -> [Type]
-    conTyps (NormalC _ stys) = map snd stys
-    conTyps (RecC _ vstys) = map (\(_, _, ty) -> ty) vstys
-    conTyps (InfixC (_, ty1) _ (_, ty2)) = [ty1, ty2]
-    conTyps (ForallC _ _ c) = conTyps c -- quantified typ vars will be taken care of by intersection with lhs type vars
-                                 
-                    
 -- | Generates a lambda expression which encodes the given data type as JSON.
 --
 -- Example:
@@ -459,12 +435,8 @@
                   ]
       where
         classType = conT ''FromJSON
-        lhsTypNames = map tvbName tvbs
-        rhsTypNames = getTypVarNames cons
-        typeNames = Set.toList $ Set.intersection
-                    (Set.fromList lhsTypNames)
-                    (Set.fromList rhsTypNames)
-        instanceType = foldl' appT (conT name) $ map varT lhsTypNames
+        typeNames = map tvbName tvbs
+        instanceType = foldl' appT (conT name) $ map varT typeNames
 
 -- | Generates a lambda expression which parses the JSON encoding of the given
 -- data type.
diff --git a/Data/Aeson/Types/Class.hs b/Data/Aeson/Types/Class.hs
--- a/Data/Aeson/Types/Class.hs
+++ b/Data/Aeson/Types/Class.hs
@@ -103,11 +103,11 @@
 -- Instead of manually writing your 'ToJSON' instance, there are three options
 -- to do it automatically:
 --
--- * 'Data.Aeson.TH' provides template-haskell functions which will derive an
+-- * "Data.Aeson.TH" provides template-haskell functions which will derive an
 -- instance at compile-time. The generated instance is optimized for your type
 -- so will probably be more efficient than the following two options:
 --
--- * 'Data.Aeson.Generic' provides a generic @toJSON@ function that accepts any
+-- * "Data.Aeson.Generic" provides a generic @toJSON@ function that accepts any
 -- type which is an instance of 'Data'.
 --
 -- * If your compiler has support for the @DeriveGeneric@ and
@@ -164,11 +164,11 @@
 -- Instead of manually writing your 'FromJSON' instance, there are three options
 -- to do it automatically:
 --
--- * 'Data.Aeson.TH' provides template-haskell functions which will derive an
+-- * "Data.Aeson.TH" provides template-haskell functions which will derive an
 -- instance at compile-time. The generated instance is optimized for your type
 -- so will probably be more efficient than the following two options:
 --
--- * 'Data.Aeson.Generic' provides a generic @fromJSON@ function that parses to
+-- * "Data.Aeson.Generic" provides a generic @fromJSON@ function that parses to
 -- any type which is an instance of 'Data'.
 --
 -- * If your compiler has support for the @DeriveGeneric@ and
diff --git a/Data/Aeson/Types/Generic.hs b/Data/Aeson/Types/Generic.hs
--- a/Data/Aeson/Types/Generic.hs
+++ b/Data/Aeson/Types/Generic.hs
@@ -1,20 +1,13 @@
-{-# LANGUAGE DefaultSignatures
-           , EmptyDataDecls
-           , FlexibleInstances
-           , FunctionalDependencies
-           , KindSignatures
-           , OverlappingInstances
-           , ScopedTypeVariables
-           , TypeOperators
-           , UndecidableInstances
-           , ViewPatterns
-  #-}
-
+{-# LANGUAGE DefaultSignatures, EmptyDataDecls, FlexibleInstances,
+    FunctionalDependencies, KindSignatures, OverlappingInstances,
+    ScopedTypeVariables, TypeOperators, UndecidableInstances, ViewPatterns #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 -- |
 -- Module:      Data.Aeson.Types.Generic
--- Copyright:   (c) 2011 MailRank, Inc.
+-- Copyright:   (c) 2012 Bryan O'Sullivan
+--              (c) 2011 Bas Van Dijk
+--              (c) 2011 MailRank, Inc.
 -- License:     Apache
 -- Maintainer:  Bryan O'Sullivan <bos@serpentine.com>
 -- Stability:   experimental
@@ -24,16 +17,15 @@
 
 module Data.Aeson.Types.Generic ( ) where
 
-import Control.Applicative
-import Control.Monad.State.Strict
-import Data.Bits (shiftR)
+import Control.Applicative ((<*>), (<$>), (<|>), pure)
+import Control.Monad.ST (ST)
 import Data.Aeson.Types.Class
 import Data.Aeson.Types.Internal
-import Data.Text (pack, unpack)
+import Data.Bits (shiftR)
 import Data.DList (DList, toList)
 import Data.Monoid (mappend)
+import Data.Text (pack, unpack)
 import GHC.Generics
-import Control.Monad.ST (ST)
 import qualified Data.HashMap.Strict as H
 import qualified Data.Text as T
 import qualified Data.Vector as V
diff --git a/aeson.cabal b/aeson.cabal
--- a/aeson.cabal
+++ b/aeson.cabal
@@ -1,5 +1,5 @@
 name:            aeson
-version:         0.6.0.1
+version:         0.6.0.2
 license:         BSD3
 license-file:    LICENSE
 category:        Text, Web, JSON
@@ -130,7 +130,7 @@
     old-locale,
     syb,
     template-haskell >= 2.4,
-    text >= 0.11.0.2,
+    text >= 0.11.1.0,
     time,
     unordered-containers >= 0.1.3.0,
     vector >= 0.7.1
diff --git a/release-notes.markdown b/release-notes.markdown
--- a/release-notes.markdown
+++ b/release-notes.markdown
@@ -1,6 +1,3 @@
-# 0.6.0.1
-No more constraints on phantom types
-
 # 0.5 to 0.6
 
 This release introduces a slightly obscure, but
