diff --git a/Language/Haskell/Tools/AST/Helpers.hs b/Language/Haskell/Tools/AST/Helpers.hs
--- a/Language/Haskell/Tools/AST/Helpers.hs
+++ b/Language/Haskell/Tools/AST/Helpers.hs
@@ -126,7 +126,7 @@
                   &+& localFixity&fixityOperators&annList&operatorName
 
 inScope :: GHC.Name -> Scope -> Bool
-inScope n sc = any ((n `elem`) . map fst) sc
+inScope n sc = any ((n `elem`) . map (^. _1)) sc
 
 -- * Pattern synonyms for annotated lists and maybes
 
diff --git a/Language/Haskell/Tools/AST/Instances/SemanticTraversal.hs b/Language/Haskell/Tools/AST/Instances/SemanticTraversal.hs
--- a/Language/Haskell/Tools/AST/Instances/SemanticTraversal.hs
+++ b/Language/Haskell/Tools/AST/Instances/SemanticTraversal.hs
@@ -1,6 +1,7 @@
+-- don't show warnings, Template Haskell generated code contains unused variables
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+{-# LANGUAGE TemplateHaskell #-}
 -- | Generating instances for traversing the semantic information of the Haskell Representation
-{-# LANGUAGE TemplateHaskell
-           #-}
 module Language.Haskell.Tools.AST.Instances.SemanticTraversal where
 
 import Control.Applicative
diff --git a/Language/Haskell/Tools/AST/Instances/SourceInfoTraversal.hs b/Language/Haskell/Tools/AST/Instances/SourceInfoTraversal.hs
--- a/Language/Haskell/Tools/AST/Instances/SourceInfoTraversal.hs
+++ b/Language/Haskell/Tools/AST/Instances/SourceInfoTraversal.hs
@@ -1,6 +1,7 @@
+-- don't show warnings, Template Haskell generated code contains unused variables
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+{-# LANGUAGE TemplateHaskell #-}
 -- | Generating instances for traversing the semantic information of the Haskell Representation
-{-# LANGUAGE TemplateHaskell
-           #-}
 module Language.Haskell.Tools.AST.Instances.SourceInfoTraversal where
 
 import Control.Applicative
diff --git a/Language/Haskell/Tools/AST/References.hs b/Language/Haskell/Tools/AST/References.hs
--- a/Language/Haskell/Tools/AST/References.hs
+++ b/Language/Haskell/Tools/AST/References.hs
@@ -1,3 +1,5 @@
+-- don't show warnings, Template Haskell generated code contains unused variables
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 {-# LANGUAGE FlexibleContexts, TemplateHaskell #-}
 -- | Generated references for AST elements.
 module Language.Haskell.Tools.AST.References where
@@ -5,7 +7,6 @@
 import Control.Reference hiding (element)
 import Language.Haskell.Tools.AST.MakeASTReferences
 
-import Language.Haskell.Tools.AST.Ann
 import Language.Haskell.Tools.AST.Representation.Binds
 import Language.Haskell.Tools.AST.Representation.Decls
 import Language.Haskell.Tools.AST.Representation.Exprs
diff --git a/Language/Haskell/Tools/AST/Representation/Decls.hs b/Language/Haskell/Tools/AST/Representation/Decls.hs
--- a/Language/Haskell/Tools/AST/Representation/Decls.hs
+++ b/Language/Haskell/Tools/AST/Representation/Decls.hs
@@ -217,6 +217,8 @@
 data UTypeFamilySpec dom stage
   = UTypeFamilyKind { _tfSpecKind :: Ann UKindConstraint dom stage
                     } -- ^ Specifies the kind of a type family (@ :: * -> * @)
+  | UTypeFamilyTyVar { _tfTypeVar :: Ann UTyVar dom stage
+                     } -- ^ Specifies the kind of a type family (@ = t :: * -> * @)
   | UTypeFamilyInjectivity { _tfInjectivity :: Ann UInjectivityAnn dom stage
                            } -- ^ Specifies the injectivity of a type family (@ = r | r -> a @)
 
diff --git a/Language/Haskell/Tools/AST/SemaInfoClasses.hs b/Language/Haskell/Tools/AST/SemaInfoClasses.hs
--- a/Language/Haskell/Tools/AST/SemaInfoClasses.hs
+++ b/Language/Haskell/Tools/AST/SemaInfoClasses.hs
@@ -9,7 +9,7 @@
 import GHC
 import Id as GHC (Id, idName)
 
-import Control.Reference ((^?), (^.), (&))
+import Control.Reference
 
 import Language.Haskell.Tools.AST.Ann as AST
 import Language.Haskell.Tools.AST.Representation.Exprs as AST (UFieldWildcard, UExpr)
@@ -127,7 +127,7 @@
   semanticsModule = (^. defModuleName)
   semanticsDynFlags = (^. defDynFlags)
   isBootModule = (^. defIsBootModule)
-  semanticsImplicitImports = (^. implicitNames)
+  semanticsImplicitImports = (^? implicitNames&traversal&pName)
   semanticsPrelOrphanInsts = (^. prelOrphanInsts)
   semanticsPrelFamInsts = (^. prelFamInsts)
 
@@ -135,7 +135,7 @@
   semanticsModule = (^. defModuleName)
   semanticsDynFlags = (^. defDynFlags)
   isBootModule = (^. defIsBootModule)
-  semanticsImplicitImports = map idName . (^. implicitNames)
+  semanticsImplicitImports = map idName . (^? implicitNames&traversal&pName)
   semanticsPrelOrphanInsts = (^. prelOrphanInsts)
   semanticsPrelFamInsts = (^. prelFamInsts)
 
@@ -161,14 +161,14 @@
 instance HasImportInfo' (AST.ImportInfo GHC.Name) where
   semanticsImportedModule = (^. importedModule)
   semanticsAvailable = (^. availableNames)
-  semanticsImported = (^. importedNames)
+  semanticsImported = (^? importedNames&traversal&pName)
   semanticsOrphanInsts = (^. importedOrphanInsts)
   semanticsFamInsts = (^. importedFamInsts)
 
 instance HasImportInfo' (AST.ImportInfo GHC.Id) where
   semanticsImportedModule = (^. importedModule)
   semanticsAvailable = map idName . (^. availableNames)
-  semanticsImported = map idName . (^. importedNames)
+  semanticsImported = map idName . (^? importedNames&traversal&pName)
   semanticsOrphanInsts = (^. importedOrphanInsts)
   semanticsFamInsts = (^. importedFamInsts)
 
diff --git a/Language/Haskell/Tools/AST/SemaInfoTypes.hs b/Language/Haskell/Tools/AST/SemaInfoTypes.hs
--- a/Language/Haskell/Tools/AST/SemaInfoTypes.hs
+++ b/Language/Haskell/Tools/AST/SemaInfoTypes.hs
@@ -12,11 +12,14 @@
     -- references
   , exprScopedLocals, nameScopedLocals, nameIsDefined, nameInfo, ambiguousName, nameLocation
   , implicitName, cnameScopedLocals, cnameIsDefined, cnameInfo, cnameFixity
-  , defModuleName, defDynFlags, defIsBootModule, implicitNames, importedModule, availableNames, importedNames
-  , implicitFieldBindings, importedOrphanInsts, importedFamInsts, prelOrphanInsts, prelFamInsts
+  , defModuleName, defDynFlags, defIsBootModule, implicitNames, importedModule, availableNames
+  , importedNames, implicitFieldBindings, importedOrphanInsts, importedFamInsts, prelOrphanInsts
+  , prelFamInsts
     -- creator functions
   , mkNoSemanticInfo, mkScopeInfo, mkNameInfo, mkAmbiguousNameInfo, mkImplicitNameInfo, mkCNameInfo
   , mkModuleInfo, mkImportInfo, mkImplicitFieldInfo
+  -- utils
+  , PName(..), pName, pNameParent
   ) where
 
 import BasicTypes as GHC
@@ -35,7 +38,7 @@
 
 import Control.Reference
 
-type Scope = [[(Name, Maybe [UsageSpec])]]
+type Scope = [[(Name, Maybe [UsageSpec], Maybe Name)]]
 
 data UsageSpec = UsageSpec { usageQualified :: Bool
                            , usageQualifier :: String
@@ -45,9 +48,11 @@
 
 instance Outputable UsageSpec where
   ppr (UsageSpec q useQ asQ)
-    = GHC.text $ (if q then "qualified " else "") ++ "as " ++ (if useQ == asQ || q then asQ else asQ ++ " or " ++ useQ)
+    = GHC.text $ (if q then "qualified " else "") ++ "as "
+        ++ (if useQ == asQ || q then asQ else asQ ++ " or " ++ useQ)
   pprPrec _ (UsageSpec q useQ asQ)
-    = GHC.text $ (if q then "qualified " else "") ++ "as " ++ (if useQ == asQ || q then asQ else asQ ++ " or " ++ useQ)
+    = GHC.text $ (if q then "qualified " else "") ++ "as "
+        ++ (if useQ == asQ || q then asQ else asQ ++ " or " ++ useQ)
 
 -- | Semantic info type for any node not
 -- carrying additional semantic information
@@ -108,18 +113,24 @@
 mkCNameInfo :: Scope -> Bool -> Id -> Maybe GHC.Fixity -> CNameInfo
 mkCNameInfo = CNameInfo
 
+data PName n
+  = PName { _pName :: n
+          , _pNameParent :: Maybe n
+          }
+  deriving Data
+
 -- | Info for the module element
 data ModuleInfo n = ModuleInfo { _defModuleName :: GHC.Module
                                , _defDynFlags :: DynFlags -- ^ The compilation flags that are set up when the module was compiled
                                , _defIsBootModule :: Bool -- ^ True if this module is created from a hs-boot file
-                               , _implicitNames :: [n] -- ^ implicitly imported names
+                               , _implicitNames :: [PName n] -- ^ implicitly imported names
                                , _prelOrphanInsts :: [ClsInst] -- ^ Class instances implicitly passed from Prelude.
                                , _prelFamInsts :: [FamInst] -- ^ Family instances implicitly passed from Prelude.
                                }
   deriving Data
 
 instance Data DynFlags where
-  gunfold k z c = error "Cannot construct dyn flags"
+  gunfold _ _ _ = error "Cannot construct dyn flags"
   toConstr _ = dynFlagsCon
   dataTypeOf _ = dynFlagsType
 
@@ -127,13 +138,13 @@
 dynFlagsCon = mkConstr dynFlagsType "DynFlags" [] Prefix
 
 -- | Creates semantic information for the module element
-mkModuleInfo :: GHC.Module -> DynFlags -> Bool -> [n] -> [ClsInst] -> [FamInst] -> ModuleInfo n
+mkModuleInfo :: GHC.Module -> DynFlags -> Bool -> [PName n] -> [ClsInst] -> [FamInst] -> ModuleInfo n
 mkModuleInfo = ModuleInfo
 
 -- | Info corresponding to an import declaration
 data ImportInfo n = ImportInfo { _importedModule :: GHC.Module -- ^ The name and package of the imported module
                                , _availableNames :: [n] -- ^ Names available from the imported module
-                               , _importedNames :: [n] -- ^ Names actually imported from the module.
+                               , _importedNames :: [PName n] -- ^ Names actually imported from the module.
                                , _importedOrphanInsts :: [ClsInst] -- ^ Class instances implicitly passed.
                                , _importedFamInsts :: [FamInst] -- ^ Family instances implicitly passed.
                                }
@@ -143,7 +154,7 @@
 deriving instance Data FamFlavor
 
 -- | Creates semantic information for an import declaration
-mkImportInfo :: GHC.Module -> [n] -> [n] -> [ClsInst] -> [FamInst] -> ImportInfo n
+mkImportInfo :: GHC.Module -> [n] -> [PName n] -> [ClsInst] -> [FamInst] -> ImportInfo n
 mkImportInfo = ImportInfo
 
 -- | Info corresponding to an record-wildcard
@@ -159,29 +170,46 @@
   show (ScopeInfo locals) = "(ScopeInfo " ++ showSDocUnsafe (ppr locals) ++ ")"
 
 instance Outputable n => Show (NameInfo n) where
-  show (NameInfo locals defined nameInfo) = "(NameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ ")"
-  show (AmbiguousNameInfo locals defined nameInfo span) = "(AmbiguousNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ " " ++ show span ++ ")"
-  show (ImplicitNameInfo locals defined nameInfo span) = "(ImplicitNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ " " ++ show span ++ ")"
+  show (NameInfo locals defined nameInfo)
+    = "(NameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " "
+        ++ showSDocUnsafe (ppr nameInfo) ++ ")"
+  show (AmbiguousNameInfo locals defined nameInfo span)
+    = "(AmbiguousNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " "
+        ++ showSDocUnsafe (ppr nameInfo) ++ " " ++ show span ++ ")"
+  show (ImplicitNameInfo locals defined nameInfo span)
+    = "(ImplicitNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " "
+        ++ showSDocUnsafe (ppr nameInfo) ++ " " ++ show span ++ ")"
 
 instance Show CNameInfo where
-  show (CNameInfo locals defined nameInfo fixity) = "(CNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ showSDocUnsafe (ppr fixity) ++ ")"
+  show (CNameInfo locals defined nameInfo fixity)
+    = "(CNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " "
+        ++ showSDocUnsafe (ppr nameInfo) ++ showSDocUnsafe (ppr fixity) ++ ")"
 
+instance Outputable n => Show (PName n) where
+  show (PName n (Just parent))
+    = showSDocUnsafe (ppr n) ++ "[in " ++ showSDocUnsafe (ppr parent) ++ "]"
+  show (PName n Nothing) = showSDocUnsafe (ppr n)
+
 instance Outputable n => Show (ModuleInfo n) where
   show (ModuleInfo mod _ isboot imp clsInsts famInsts)
-    = "(ModuleInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ show isboot ++ " " ++ showSDocUnsafe (ppr imp) ++ " "
+    = "(ModuleInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ show isboot ++ " " ++ show imp ++ " "
           ++ showSDocUnsafe (ppr clsInsts) ++ " " ++ showSDocUnsafe (ppr famInsts) ++ ")"
 
 instance Outputable n => Show (ImportInfo n) where
   show (ImportInfo mod avail imported clsInsts famInsts)
-    = "(ImportInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ showSDocUnsafe (ppr avail) ++ " " ++ showSDocUnsafe (ppr imported) ++ " "
-          ++ showSDocUnsafe (ppr clsInsts) ++ " " ++ showSDocUnsafe (ppr famInsts) ++ ")"
+    = "(ImportInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ showSDocUnsafe (ppr avail) ++ " "
+        ++ show imported ++ " " ++ showSDocUnsafe (ppr clsInsts) ++ " "
+        ++ showSDocUnsafe (ppr famInsts) ++ ")"
 
 instance Show ImplicitFieldInfo where
-  show (ImplicitFieldInfo bnds) = "(ImplicitFieldInfo [" ++ concat (intersperse "," (map (\(from,to) -> showSDocUnsafe (ppr from) ++ "->" ++ showSDocUnsafe (ppr to)) bnds)) ++ "])"
+  show (ImplicitFieldInfo bnds)
+    = "(ImplicitFieldInfo [" ++ concat (intersperse "," (map showImplicitFld bnds)) ++ "])"
+    where showImplicitFld (from, to) = showSDocUnsafe (ppr from) ++ "->" ++ showSDocUnsafe (ppr to)
 
 instance Show NoSemanticInfo where
   show NoSemanticInfo = "NoSemanticInfo"
 
+makeReferences ''PName
 makeReferences ''NoSemanticInfo
 makeReferences ''ScopeInfo
 makeReferences ''NameInfo
@@ -193,30 +221,44 @@
 instance Functor NameInfo where
   fmap f = nameInfo .- f
 
+instance Functor PName where
+  fmap f (PName n p) = PName (f n) (fmap f p)
+
 instance Functor ModuleInfo where
-  fmap f = implicitNames .- map f
+  fmap f = implicitNames .- fmap (fmap f)
 
 instance Functor ImportInfo where
-  fmap f (ImportInfo mod avail imps clsInsts famInsts) = ImportInfo mod (map f avail) (map f imps) clsInsts famInsts
+  fmap f (ImportInfo mod avail imps clsInsts famInsts)
+    = ImportInfo mod (fmap f avail) (fmap (fmap f) imps) clsInsts famInsts
 
 instance Foldable NameInfo where
   foldMap f si = maybe mempty f (si ^? nameInfo)
 
 instance Foldable ModuleInfo where
-  foldMap f si = foldMap f (si ^. implicitNames)
+  foldMap f si = foldMap (foldMap f) (si ^. implicitNames)
 
 instance Foldable ImportInfo where
-  foldMap f si = foldMap f ((si ^. availableNames) ++ (si ^. importedNames))
+  foldMap f si = foldMap f (((si ^. availableNames)
+                   ++ (si ^? importedNames & traversal & (pName &+& pNameParent & just) )))
 
+instance Foldable PName where
+  foldMap f (PName n p) = f n `mappend` foldMap f p
+
+instance Traversable PName where
+  traverse f (PName n p) = PName <$> f n <*> traverse f p
+
 instance Traversable NameInfo where
   traverse f (NameInfo locals defined nameInfo) = NameInfo locals defined <$> f nameInfo
-  traverse _ (AmbiguousNameInfo locals defined nameInfo span) = pure $ AmbiguousNameInfo locals defined nameInfo span
-  traverse _ (ImplicitNameInfo locals defined nameInfo span) = pure $ ImplicitNameInfo locals defined nameInfo span
+  traverse _ (AmbiguousNameInfo locals defined nameInfo span)
+    = pure $ AmbiguousNameInfo locals defined nameInfo span
+  traverse _ (ImplicitNameInfo locals defined nameInfo span)
+    = pure $ ImplicitNameInfo locals defined nameInfo span
 
 instance Traversable ModuleInfo where
   traverse f (ModuleInfo mod dfs isboot imp clsInsts famInsts)
-    = ModuleInfo mod dfs isboot <$> traverse f imp <*> pure clsInsts <*> pure famInsts
+    = ModuleInfo mod dfs isboot <$> traverse (traverse f) imp <*> pure clsInsts <*> pure famInsts
 
 instance Traversable ImportInfo where
   traverse f (ImportInfo mod avail imps clsInsts famInsts)
-    = ImportInfo mod <$> traverse f avail <*> traverse f imps <*> pure clsInsts <*> pure famInsts
+    = ImportInfo mod <$> traverse f avail <*> traverse (traverse f) imps <*> pure clsInsts
+                     <*> pure famInsts
diff --git a/Language/Haskell/Tools/AST/TH/SemanticTraversal.hs b/Language/Haskell/Tools/AST/TH/SemanticTraversal.hs
--- a/Language/Haskell/Tools/AST/TH/SemanticTraversal.hs
+++ b/Language/Haskell/Tools/AST/TH/SemanticTraversal.hs
@@ -13,15 +13,15 @@
 deriveSemanticTraversal :: Name -> Q [Dec]
 deriveSemanticTraversal nm = reify nm >>= \case
   TyConI dt -> case dt of
-    DataD _ tyConName typArgs _ dataCons _ -> 
-      createInstance tyConName typArgs dataCons  
-    NewtypeD _ tyConName typArgs _ dataCon _ -> 
-      createInstance tyConName typArgs [dataCon]  
+    DataD _ tyConName typArgs _ dataCons _ ->
+      createInstance tyConName typArgs dataCons
+    NewtypeD _ tyConName typArgs _ dataCon _ ->
+      createInstance tyConName typArgs [dataCon]
     _ -> fail "Unsupported data type"
   _ -> fail "Expected the name of a data type or newtype"
-  
+
 createInstance :: Name -> [TyVarBndr] -> [Con] -> Q [Dec]
-createInstance tyConName typArgs dataCons   
+createInstance tyConName typArgs dataCons
     = do clauses <- mapM createClause dataCons
          return [InstanceD Nothing (map (AppT (ConT className) . VarT) astParams)
                            (AppT (ConT className) (foldl AppT (ConT tyConName) (map VarT astParams)))
@@ -32,11 +32,11 @@
         createClause (NormalC conName conArgs) = createClause' conName (map snd conArgs)
         createClause (InfixC conArg1 conName conArg2) = createClause' conName [snd conArg1, snd conArg2]
         createClause _ = error "createClause: forall and GADT constructors are not supported"
-        
+
         createClause' :: Name -> [Type] -> Q Clause
         createClause' conName args
           = do bindedNames <- replicateM (length args) (newName "p")
-               return $ Clause [ VarP trf, ConP conName (map VarP bindedNames) ] 
+               return $ Clause [ VarP trf, ConP conName (map VarP bindedNames) ]
                                (NormalB (createExpr conName (zipWith processParam bindedNames args))) []
 
         (tstage:tdom:_) = map getTyVar $ reverse typArgs
@@ -48,21 +48,21 @@
         createExpr ctrName []
           = AppE applPure $ ConE ctrName
         createExpr ctrName (param1:params)
-          = foldl (\coll new -> InfixE (Just coll) applStar (Just new)) 
+          = foldl (\coll new -> InfixE (Just coll) applStar (Just new))
                   (InfixE (Just $ ConE ctrName) applDollar (Just param1))
                   params
-        
+
         applStar = VarE (mkName "Control.Applicative.<*>")
         applDollar = VarE (mkName "Control.Applicative.<$>")
         applPure = VarE (mkName "Control.Applicative.pure")
-        
+
         className = ''SemanticTraversal
         funName = 'semaTraverse
         trf = mkName "f"
-       
+
         -- | Creates the expression and the predicate for a parameter
         processParam :: Name -> Type -> Exp
-        processParam arg (AppT (AppT t (VarT dom)) (VarT stage)) | dom == tdom && stage == tstage
+        processParam arg (AppT (AppT _ (VarT dom)) (VarT stage)) | dom == tdom && stage == tstage
           = AppE (AppE (VarE funName) (VarE trf)) (VarE arg)
         processParam arg _ = AppE applPure (VarE arg)
 
@@ -73,4 +73,4 @@
 thExamine :: Q [Dec] -> Q [Dec]
 thExamine decl = do d <- decl
                     runIO (putStrLn (pprint d))
-                    return d
+                    return d
diff --git a/Language/Haskell/Tools/AST/TH/SourceInfoTraversal.hs b/Language/Haskell/Tools/AST/TH/SourceInfoTraversal.hs
--- a/Language/Haskell/Tools/AST/TH/SourceInfoTraversal.hs
+++ b/Language/Haskell/Tools/AST/TH/SourceInfoTraversal.hs
@@ -13,15 +13,15 @@
 deriveSourceInfoTraversal :: Name -> Q [Dec]
 deriveSourceInfoTraversal nm = reify nm >>= \case
   TyConI dt -> case dt of
-    DataD _ tyConName typArgs _ dataCons _ -> 
-      createInstance tyConName typArgs dataCons  
-    NewtypeD _ tyConName typArgs _ dataCon _ -> 
-      createInstance tyConName typArgs [dataCon]  
+    DataD _ tyConName typArgs _ dataCons _ ->
+      createInstance tyConName typArgs dataCons
+    NewtypeD _ tyConName typArgs _ dataCon _ ->
+      createInstance tyConName typArgs [dataCon]
     _ -> fail "Unsupported data type"
   _ -> fail "Expected the name of a data type or newtype"
-  
+
 createInstance :: Name -> [TyVarBndr] -> [Con] -> Q [Dec]
-createInstance tyConName typArgs dataCons   
+createInstance tyConName typArgs dataCons
     = do simpleClauses <- mapM (createClause simpleFunName False) dataCons
          upClauses <- mapM (createClause upFunName True) dataCons
          downClauses <- mapM (createClause downFunName True) dataCons
@@ -48,14 +48,14 @@
         createExpr ctrName []
           = AppE applPure $ ConE ctrName
         createExpr ctrName (param1:params)
-          = foldl (\coll new -> InfixE (Just coll) applStar (Just new)) 
+          = foldl (\coll new -> InfixE (Just coll) applStar (Just new))
                   (InfixE (Just $ ConE ctrName) applDollar (Just param1))
                   params
-        
+
         applStar = VarE (mkName "Control.Applicative.<*>")
         applDollar = VarE (mkName "Control.Applicative.<$>")
         applPure = VarE (mkName "Control.Applicative.pure")
-        
+
         className = ''SourceInfoTraversal
         simpleFunName = 'sourceInfoTraverse
         upFunName = 'sourceInfoTraverseUp
@@ -63,7 +63,7 @@
         trf = mkName "trf"
         desc = mkName "desc"
         asc = mkName "asc"
-       
+
         -- | Creates the expression and the predicate for a parameter
         processParam :: Name -> Bool -> Name -> Type -> Exp
         processParam funName updown arg (AppT (AppT _ (VarT dom)) (VarT stage)) | dom == tdom && stage == tstage
@@ -79,4 +79,4 @@
 thExamine :: Q [Dec] -> Q [Dec]
 thExamine decl = do d <- decl
                     runIO (putStrLn (pprint d))
-                    return d
+                    return d
diff --git a/haskell-tools-ast.cabal b/haskell-tools-ast.cabal
--- a/haskell-tools-ast.cabal
+++ b/haskell-tools-ast.cabal
@@ -1,5 +1,5 @@
 name:                haskell-tools-ast
-version:             0.8.1.0
+version:             0.9.0.0
 synopsis:            Haskell AST for efficient tooling
 description:         A representation of a Haskell Syntax tree that contain source-related and semantic annotations. These annotations help developer tools to work with the defined program. The source information enables refactoring and program transformation tools to change the source code without losing the original format (layout, comments) of the source. Semantic information helps analyzing the program. The representation is different from the GHC's syntax tree. It contains information from all representations in GHC (different version of syntax trees, lexical and module-level information). The module is split up to put the representation of different language elements into different modules. Additionally, it contains the representation of semantic and source annotations, helper functions and generated instances for the representation of language elements. Because langauge elements may refer each other (there can be a pattern inside an expression in case of a pattern match and an expression inside a pattern if view patterns are enabled), we use hs-boot files to break up dependency cycles.
 
@@ -47,9 +47,9 @@
                      , Language.Haskell.Tools.AST.TH.SourceInfoTraversal
 
   build-depends:       base             >= 4.9  && < 4.10
-                     , ghc              >= 8.0  && < 8.3
+                     , ghc              >= 8.0  && < 8.1
                      , references       >= 0.3  && < 0.4
                      , uniplate         >= 1.6  && < 1.7
                      , mtl              >= 2.2  && < 2.3
-                     , template-haskell >= 2.11 && < 2.13
+                     , template-haskell >= 2.11 && < 2.12
   default-language:    Haskell2010
