diff --git a/Data/Generics/SYB/WithClass/Derive.hs b/Data/Generics/SYB/WithClass/Derive.hs
--- a/Data/Generics/SYB/WithClass/Derive.hs
+++ b/Data/Generics/SYB/WithClass/Derive.hs
@@ -69,6 +69,11 @@
                     Maybe [Name], -- Name of the field selector, if any
                     [Type])       -- Type of the constructor argument
 
+escape :: String -> String
+escape "" = ""
+escape ('.' : more) = '_' : escape more
+escape (c : more) = c : escape more
+
 -- | Takes a name of a algebraic data type, the number of parameters it
 --   has and a list of constructor pairs.  Each one of these constructor
 --   pairs consists of a constructor name and the number of type
@@ -81,8 +86,8 @@
 #ifdef __HADDOCK__
  undefined
 #else
- do theDataTypeName <- newName $ "dataType_sybwc_" ++ show name
-    constrNames <- mapM (\(conName,_,_,_) -> newName $ "constr_sybwc_" ++ show conName) cons
+ do theDataTypeName <- newName $ "dataType_sybwc_" ++ escape (show name)
+    constrNames <- mapM (\(conName,_,_,_) -> newName $ "constr_sybwc_" ++ escape (show conName)) cons
     let constrExps = map varE constrNames
 
     let mkConstrDec :: Name -> Constructor -> Q [Dec]
@@ -186,8 +191,13 @@
 
        myType = foldl AppT (ConT name) typeParams
        dataCxt typ = conT ''Data `appT` varT (mkName "ctx") `appT` return typ
+#if MIN_VERSION_template_haskell(2,10,0)
+       dataCxt' typ = (conT ''Data `appT` varT (mkName "ctx")) `appT` return typ
+       satCxt typ = conT ''Sat `appT` (varT (mkName "ctx") `appT` return typ)
+#else
        dataCxt' typ = return $ ClassP ''Data [VarT (mkName "ctx"), typ]
        satCxt typ = return $ ClassP ''Sat [VarT (mkName "ctx") `AppT` typ]
+#endif
        dataCxtTypes = filter (\x -> applied x /= ConT name) $ nub (typeParams ++ types)
        satCxtTypes = nub (myType : types)
        context = cxt (map dataCxt' dataCxtTypes ++ map satCxt satCxtTypes)
@@ -201,7 +211,11 @@
     decs <- qOfDecs
     params <- replicateM nParam (newName "a")
     let typeQParams = map varT params
+#if MIN_VERSION_template_haskell(2,10,0)
+        context = cxt (map (appT (conT ''Data)) typeQParams)
+#else
         context = cxt (map (\typ -> classP ''Data [typ]) typeQParams)
+#endif
         instanceType = foldl appT (conT name) typeQParams
     inst <-instanceD context
                      (conT ''Data `appT` instanceType)
diff --git a/syb-with-class.cabal b/syb-with-class.cabal
--- a/syb-with-class.cabal
+++ b/syb-with-class.cabal
@@ -1,5 +1,5 @@
 Name:               syb-with-class
-Version:            0.6.1.5
+Version:            0.6.1.6
 License:            BSD3
 License-file:       LICENSE
 Copyright:          2004 - 2008 The University of Glasgow, CWI,
@@ -25,7 +25,7 @@
   location: http://patch-tag.com/r/Saizan/syb-with-class/
 
 Library 
-    Build-Depends:      base >= 3 && < 5, template-haskell >= 2.4 && < 2.10, bytestring, array, containers
+    Build-Depends:      base >= 3 && < 5, template-haskell >= 2.4 && < 2.11, bytestring, array, containers
     Exposed-modules:
         Data.Generics.SYB.WithClass.Basics
         Data.Generics.SYB.WithClass.Context
