diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+[The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-foreign/CHANGELOG.md)
+[Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
+
+0.10.2
+------
+
+### Changes
+
+* Add instances for `Description` and `Summary` combinators
+  ([#767](https://github.com/haskell-servant/servant/pull/767))
+* Derive Data for all types
+  ([#809](https://github.com/haskell-servant/servant/pull/809))
+
 0.10.1
 ------
 
diff --git a/servant-foreign.cabal b/servant-foreign.cabal
--- a/servant-foreign.cabal
+++ b/servant-foreign.cabal
@@ -1,5 +1,5 @@
 name:                servant-foreign
-version:             0.10.1
+version:             0.10.2
 synopsis:            Helpers for generating clients for servant APIs in any programming language
 description:
   Helper types and functions for generating client functions for servant APIs in any programming language
@@ -14,7 +14,7 @@
 author:              Servant Contributors
 maintainer:          haskell-servant-maintainers@googlegroups.com
 copyright:           2015-2016 Servant Contributors
-category:            Servant Web
+category:            Servant, Web
 build-type:          Simple
 cabal-version:       >=1.10
 extra-source-files:
@@ -22,6 +22,12 @@
   CHANGELOG.md
   README.md
 bug-reports:         http://github.com/haskell-servant/servant/issues
+tested-with:
+  GHC==7.8.4
+  GHC==7.10.3
+  GHC==8.0.2
+  GHC==8.2.1
+
 source-repository head
   type: git
   location: http://github.com/haskell-servant/servant.git
@@ -32,7 +38,7 @@
                      , Servant.Foreign.Inflections
   build-depends:       base       == 4.*
                      , lens       == 4.*
-                     , servant    == 0.11.*
+                     , servant    == 0.12.*
                      , text       >= 1.2  && < 1.3
                      , http-types
   hs-source-dirs:      src
@@ -41,21 +47,21 @@
   if impl(ghc >= 8.0)
     ghc-options: -Wno-redundant-constraints
   include-dirs: include
-  default-extensions:  CPP
-                     , ConstraintKinds
+  default-extensions:  ConstraintKinds
+                     , CPP
                      , DataKinds
+                     , DeriveDataTypeable
                      , FlexibleContexts
                      , FlexibleInstances
                      , GeneralizedNewtypeDeriving
                      , MultiParamTypeClasses
+                     , OverloadedStrings
+                     , PolyKinds
                      , ScopedTypeVariables
-                     , StandaloneDeriving
                      , TemplateHaskell
                      , TypeFamilies
                      , TypeOperators
                      , UndecidableInstances
-                     , OverloadedStrings
-                     , PolyKinds
 
 
 test-suite spec
@@ -65,6 +71,8 @@
   include-dirs:      include
   main-is:           Spec.hs
   other-modules:     Servant.ForeignSpec
+  build-tool-depends:
+    hspec-discover:hspec-discover
   build-depends:     base
                    , hspec >= 2.1.8
                    , servant
diff --git a/src/Servant/Foreign/Internal.hs b/src/Servant/Foreign/Internal.hs
--- a/src/Servant/Foreign/Internal.hs
+++ b/src/Servant/Foreign/Internal.hs
@@ -9,12 +9,14 @@
 
 import           Control.Lens (makePrisms, makeLenses, Getter, (&), (<>~), (%~),
                                (.~))
+import           Data.Data (Data)
 #if !MIN_VERSION_base(4,8,0)
 import           Data.Monoid
 #endif
 import           Data.Proxy
 import           Data.String
 import           Data.Text
+import           Data.Typeable (Typeable)
 import           Data.Text.Encoding (decodeUtf8)
 import           GHC.TypeLits
 import qualified Network.HTTP.Types as HTTP
@@ -24,21 +26,19 @@
 
 
 newtype FunctionName = FunctionName { unFunctionName :: [Text] }
-  deriving (Show, Eq, Monoid)
+  deriving (Data, Show, Eq, Monoid, Typeable)
 
 makePrisms ''FunctionName
 
 newtype PathSegment = PathSegment { unPathSegment :: Text }
-  deriving (Show, Eq, IsString, Monoid)
+  deriving (Data, Show, Eq, IsString, Monoid, Typeable)
 
 makePrisms ''PathSegment
 
 data Arg f = Arg
   { _argName :: PathSegment
   , _argType :: f }
-
-deriving instance Eq f => Eq (Arg f)
-deriving instance Show f => Show (Arg f)
+  deriving (Data, Eq, Show, Typeable)
 
 makeLenses ''Arg
 
@@ -50,16 +50,12 @@
     -- ^ a static path segment. like "/foo"
   | Cap (Arg f)
     -- ^ a capture. like "/:userid"
-
-deriving instance Eq f => Eq (SegmentType f)
-deriving instance Show f => Show (SegmentType f)
+  deriving (Data, Eq, Show, Typeable)
 
 makePrisms ''SegmentType
 
 newtype Segment f = Segment { unSegment :: SegmentType f }
-
-deriving instance Eq f => Eq (Segment f)
-deriving instance Show f => Show (Segment f)
+  deriving (Data, Eq, Show, Typeable)
 
 makePrisms ''Segment
 
@@ -77,7 +73,7 @@
   = Normal
   | Flag
   | List
-  deriving (Eq, Show)
+  deriving (Data, Eq, Show, Typeable)
 
 makePrisms ''ArgType
 
@@ -85,9 +81,7 @@
   { _queryArgName :: Arg f
   , _queryArgType :: ArgType
   }
-
-deriving instance Eq f => Eq (QueryArg f)
-deriving instance Show f => Show (QueryArg f)
+  deriving (Data, Eq, Show, Typeable)
 
 makeLenses ''QueryArg
 
@@ -97,9 +91,7 @@
   { _headerArg     :: Arg f
   , _headerPattern :: Text
   }
-
-deriving instance Eq f => Eq (HeaderArg f)
-deriving instance Show f => Show (HeaderArg f)
+  deriving (Data, Eq, Show, Typeable)
 
 makeLenses ''HeaderArg
 
@@ -109,9 +101,7 @@
   { _path     :: Path f
   , _queryStr :: [QueryArg f]
   }
-
-deriving instance Eq f => Eq (Url f)
-deriving instance Show f => Show (Url f)
+  deriving (Data, Eq, Show, Typeable)
 
 defUrl :: Url f
 defUrl = Url [] []
@@ -126,9 +116,7 @@
   , _reqReturnType :: Maybe f
   , _reqFuncName   :: FunctionName
   }
-
-deriving instance Eq f => Eq (Req f)
-deriving instance Show f => Show (Req f)
+  deriving (Data, Eq, Show, Typeable)
 
 makeLenses ''Req
 
@@ -346,6 +334,20 @@
 instance HasForeign lang ftype api
   => HasForeign lang ftype (HttpVersion :> api) where
   type Foreign ftype (HttpVersion :> api) = Foreign ftype api
+
+  foreignFor lang ftype Proxy req =
+    foreignFor lang ftype (Proxy :: Proxy api) req
+
+instance HasForeign lang ftype api
+  => HasForeign lang ftype (Summary desc :> api) where
+  type Foreign ftype (Summary desc :> api) = Foreign ftype api
+
+  foreignFor lang ftype Proxy req =
+    foreignFor lang ftype (Proxy :: Proxy api) req
+
+instance HasForeign lang ftype api
+  => HasForeign lang ftype (Description desc :> api) where
+  type Foreign ftype (Description desc :> api) = Foreign ftype api
 
   foreignFor lang ftype Proxy req =
     foreignFor lang ftype (Proxy :: Proxy api) req
