diff --git a/servant-aeson-specs.cabal b/servant-aeson-specs.cabal
--- a/servant-aeson-specs.cabal
+++ b/servant-aeson-specs.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           servant-aeson-specs
-version:        0.5.0.0
+version:        0.5.1.0
 synopsis:       generic tests for aeson serialization in servant
 description:    tests for aeson serialization in servant
 category:       Web
diff --git a/src/Servant/Aeson/Internal.hs b/src/Servant/Aeson/Internal.hs
--- a/src/Servant/Aeson/Internal.hs
+++ b/src/Servant/Aeson/Internal.hs
@@ -86,8 +86,7 @@
 -- * http methods
 
 #if MIN_VERSION_servant(0, 5, 0)
--- | Servant >= 0.5.0, pattern match on 'StdMethod' and response with content,
--- make 'TypeSpec's.
+-- | Servant >= 0.5.0, pattern match on 'StdMethod' and response with content.
 instance {-# OVERLAPPABLE #-}
   (MkTypeSpecs response) =>
   HasGenericSpecs (Verb (method :: StdMethod) returnStatus contentTypes response) where
@@ -95,25 +94,45 @@
   collectRoundtripSpecs settings Proxy = do
     mkTypeSpecs settings (Proxy :: Proxy response)
 
--- | Servant >= 0.5.0, pattern match on 'StdMethod' and 'NoContent', make
--- 'TypeSpec's.
+-- | Servant >= 0.5.0, pattern match on 'StdMethod' and 'NoContent'.
 instance {-# OVERLAPPING #-}
   HasGenericSpecs (Verb (method :: StdMethod) returnStatus contentTypes NoContent) where
-
   collectRoundtripSpecs _ Proxy = []
-#else
--- | Servant < 0.5.0, match 'Get', make 'TypeSpec's.
+
+-- | Servant >= 0.5.0, pattern match on 'StdMethod' and 'Headers'.
 instance (MkTypeSpecs response) =>
+  HasGenericSpecs (Verb (method :: StdMethod) returnStatus contentTypes (Headers hs response)) where
+  collectRoundtripSpecs settings Proxy = mkTypeSpecs settings (Proxy :: Proxy response)
+
+#else
+-- | Servant < 0.5.0, match 'Get' with response.
+instance {-# OVERLAPPABLE #-}
+  (MkTypeSpecs response) =>
   HasGenericSpecs (Get contentTypes response) where
 
   collectRoundtripSpecs settings Proxy = do
     mkTypeSpecs settings (Proxy :: Proxy response)
 
--- | Servant < 0.5.0, match 'Post', make 'TypeSpec's.
-instance (MkTypeSpecs response) =>
+-- | Servant < 0.5.0, match 'Post' with response.
+instance {-# OVERLAPPABLE #-}
+  (MkTypeSpecs response) =>
   HasGenericSpecs (Post contentTypes response) where
 
   collectRoundtripSpecs settings Proxy = mkTypeSpecs settings (Proxy :: Proxy response)
+
+-- | Servant < 0.5.0, match 'Get' with 'Headers'.
+instance {-# OVERLAPPING #-}
+  (MkTypeSpecs response) =>
+  HasGenericSpecs (Get contentTypes (Headers hs response)) where
+
+  collectRoundtripSpecs settings Proxy = mkTypeSpecs settings (Proxy :: Proxy response)
+
+-- | Servant < 0.5.0, match 'Post' with 'Headers'.
+instance {-# OVERLAPPING #-}
+  (MkTypeSpecs response) =>
+  HasGenericSpecs (Post contentTypes (Headers hs response)) where
+
+  collectRoundtripSpecs settings Proxy = mkTypeSpecs settings (Proxy :: Proxy response)
 #endif
 
 -- * combinators
@@ -130,7 +149,23 @@
 instance HasGenericSpecs api => HasGenericSpecs ((path :: Symbol) :> api) where
   collectRoundtripSpecs settings Proxy = collectRoundtripSpecs settings (Proxy :: Proxy api)
 
-#if !MIN_VERSION_servant(0, 5, 0)
+-- | Match 'Capture' and ':>'.
+instance HasGenericSpecs api  => HasGenericSpecs (Capture (sym :: Symbol) x :> api) where
+  collectRoundtripSpecs settings Proxy = collectRoundtripSpecs settings (Proxy :: Proxy api)
+
+-- | Match 'QueryParam' and ':>'.
+instance HasGenericSpecs api  => HasGenericSpecs (QueryParam (sym :: Symbol) x :> api) where
+  collectRoundtripSpecs settings Proxy = collectRoundtripSpecs settings (Proxy :: Proxy api)
+
+-- | Match 'Header' and ':>'.
+instance HasGenericSpecs api  => HasGenericSpecs (Header (sym :: Symbol) x :> api) where
+  collectRoundtripSpecs settings Proxy = collectRoundtripSpecs settings (Proxy :: Proxy api)
+
+#if MIN_VERSION_servant(0, 5, 0)
+-- | Servant >= 0.5.0, match 'AuthProtect' and ':>'.
+instance HasGenericSpecs api => HasGenericSpecs (AuthProtect (sym :: Symbol) :> api) where
+  collectRoundtripSpecs settings Proxy = collectRoundtripSpecs settings (Proxy :: Proxy api)
+#else
 -- | Servant < 0.5.0, match 'MatrixParam' and ':>'.
 instance HasGenericSpecs api => HasGenericSpecs (MatrixParam name a :> api) where
   collectRoundtripSpecs settings Proxy = collectRoundtripSpecs settings (Proxy :: Proxy api)
diff --git a/test/Servant/Aeson/RoundtripSpecsSpec.hs b/test/Servant/Aeson/RoundtripSpecsSpec.hs
--- a/test/Servant/Aeson/RoundtripSpecsSpec.hs
+++ b/test/Servant/Aeson/RoundtripSpecsSpec.hs
@@ -91,10 +91,24 @@
     it "works for Post" $ do
       usedTypes postApi `shouldBe` [boolRep]
 
+    it "ignores response headers" $ do
+      usedTypes responseHeadersApi `shouldBe` [boolRep]
+
+    it "traverses Capture" $ do
+      usedTypes captureApi `shouldBe` [boolRep]
+
+    it "traverses request headers" $ do
+      usedTypes requestHeadersApi `shouldBe` [boolRep]
+
+    it "traverses query params" $ do
+      usedTypes queryParamsApi `shouldBe` [boolRep]
+
     matrixParamTest
 
     noContentTest
 
+    authProtectTest
+
 reqBodyFailApi :: Proxy (ReqBody '[JSON] FaultyRoundtrip :> Get '[JSON] Bool)
 reqBodyFailApi = Proxy
 
@@ -116,6 +130,18 @@
 boolRep :: TypeRep
 boolRep = typeRep (Proxy :: Proxy Bool)
 
+responseHeadersApi :: Proxy (Post '[JSON] (Headers '[Header "Cookie" Int] Bool))
+responseHeadersApi= Proxy
+
+captureApi :: Proxy (Capture "number" Int :> Post '[JSON] Bool)
+captureApi = Proxy
+
+requestHeadersApi  :: Proxy (Header "Cookie" Int :> Post '[JSON] Bool)
+requestHeadersApi = Proxy
+
+queryParamsApi :: Proxy (QueryParam "foo" Int :> Post '[JSON] Bool)
+queryParamsApi = Proxy
+
 matrixParamTest :: Spec
 #if !MIN_VERSION_servant(0, 5, 0)
 matrixParamTest = do
@@ -140,7 +166,6 @@
 noContentTest = return ()
 #endif
 
-
 -- | Type where roundtrips don't work.
 data FaultyRoundtrip
   = FaultyRoundtrip {
@@ -159,3 +184,16 @@
 
 instance Arbitrary FaultyRoundtrip where
   arbitrary = FaultyRoundtrip <$> arbitrary <*> arbitrary
+
+
+authProtectTest :: Spec
+#if MIN_VERSION_servant(0, 5, 0)
+authProtectTest =  do
+  it "traverses AuthProtect" $ do
+    usedTypes authProtectApi `shouldBe` [boolRep]
+
+authProtectApi :: Proxy (AuthProtect "scheme" :> Post '[JSON] Bool)
+authProtectApi = Proxy
+#else
+authProtectTest = return ()
+#endif
