diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+0.3.9
+---
+
+* GHC-8.6 support
+* Remove dependency on `uri-bytestring` and use functions from `http-types` instead
+  (see [#75](https://github.com/fizruk/http-api-data/pull/78))
+* Add support for `Cookie`
+  (see [#74](https://github.com/fizruk/http-api-data/pull/74))
+
 0.3.8.1
 ---
 
diff --git a/http-api-data.cabal b/http-api-data.cabal
--- a/http-api-data.cabal
+++ b/http-api-data.cabal
@@ -1,19 +1,22 @@
+cabal-version:   >= 1.10
 name:            http-api-data
-version:         0.3.8.1
-license:         BSD3
-license-file:    LICENSE
-author:          Nickolay Kudasov <nickolay.kudasov@gmail.com>
-maintainer:      Nickolay Kudasov <nickolay.kudasov@gmail.com>
+version:         0.3.9
+
 synopsis:        Converting to/from HTTP API data like URL pieces, headers and query parameters.
+category:        Web
 description:
   This package defines typeclasses used for converting Haskell data types to and from HTTP API data.
   .
   Please see README.md
+
+license:         BSD3
+license-file:    LICENSE
+author:          Nickolay Kudasov <nickolay.kudasov@gmail.com>
+maintainer:      Nickolay Kudasov <nickolay.kudasov@gmail.com>
 homepage:        http://github.com/fizruk/http-api-data
-category:        Web
 stability:       unstable
-cabal-version:   >= 1.10
 build-type:      Custom
+
 extra-source-files:
   include/overlapping-compat.h
   test/*.hs
@@ -24,12 +27,13 @@
   GHC==7.10.3,
   GHC==8.0.2,
   GHC==8.2.2,
-  GHC==8.4.1
+  GHC==8.4.3,
+  GHC==8.6.1
 
 custom-setup
   setup-depends:
-    base >= 4.7 && <4.12,
-    Cabal >= 1.18 && <2.3,
+    base,
+    Cabal,
     cabal-doctest >=1.0.6 && <1.1
 
 flag use-text-show
@@ -40,24 +44,32 @@
 library
     hs-source-dirs: src/
     include-dirs:   include/
-    build-depends:   base                  >= 4.7      && < 4.12
-                   , attoparsec            >= 0.13.0.1 && < 0.14
-                   , attoparsec-iso8601    >= 1.0.0.0  && < 1.1
+
+    -- GHC bundled
+    build-depends:   base                  >= 4.7      && < 4.13
                    , bytestring            >= 0.10.4.0 && < 0.11
-                   , containers            >= 0.5.5.1  && < 0.6
-                   , hashable              >= 1.1.2.4  && < 1.3
-                   , http-types            >= 0.8.6    && < 0.13
-                   , text                  >= 1.1.1.3  && < 1.3
+                   , containers            >= 0.5.5.1  && < 0.7
+                   , text                  >= 1.2.3.0  && < 1.3
                    , time                  >= 1.4.2    && < 1.9
-                   , time-locale-compat    >= 0.1.1.0  && < 0.2
-                   , unordered-containers  >= 0.2.6.0  && < 0.3
-                   , uri-bytestring        >= 0.1.7    && < 0.4
-                   , uuid-types            >= 1.0.2    && <1.1
+
+    -- other-dependencies
+    build-depends:
+                     attoparsec            >= 0.13.2.2 && < 0.14
+                   , attoparsec-iso8601    >= 1.0.0.0  && < 1.1
+                   , cookie                >= 0.4.3    && < 0.4.5
+                   , hashable              >= 1.2.7.0  && < 1.3
+                   , http-types            >= 0.12.1   && < 0.13
+                   , time-locale-compat    >= 0.1.1.5  && < 0.2
+                   , unordered-containers  >= 0.2.9.0  && < 0.3
+                   , uuid-types            >= 1.0.3    && <1.1
+
     if !impl(ghc >= 8.0)
-      build-depends: semigroups            >= 0.16     && < 0.19
+      build-depends: semigroups            >= 0.18.5   && < 0.19
+
     if flag(use-text-show)
       cpp-options: -DUSE_TEXT_SHOW
-      build-depends: text-show        >= 2
+      build-depends: text-show        >= 3.7.4 && <3.8
+
     exposed-modules:
       Web.HttpApiData
       Web.FormUrlEncoded
@@ -76,13 +88,11 @@
     hs-source-dirs: test
     ghc-options:   -Wall
     default-language: Haskell2010
-    build-tool-depends: hspec-discover:hspec-discover >= 2.4.7 && <2.5
-    build-depends:   HUnit
-                   , hspec >= 2.4.7
-                   , base
+    build-tool-depends: hspec-discover:hspec-discover >= 2.5.5 && <2.6
+    -- inherited  depndencies
+    build-depends:
+                     base
                    , bytestring
-                   , QuickCheck >=2.9
-                   , quickcheck-instances >= 0.3.12
                    , unordered-containers
                    , http-api-data
                    , text
@@ -90,12 +100,17 @@
                    , bytestring
                    , uuid-types
 
+    build-depends:   HUnit                >= 1.6.0.0 && <1.7
+                   , hspec                >= 2.5.5   && <2.6
+                   , QuickCheck           >= 2.11.3  && <2.13
+                   , quickcheck-instances >= 0.3.19  && <0.4
+
 test-suite doctests
   ghc-options:      -Wall
   build-depends:
     base,
     directory >= 1.0,
-    doctest >= 0.11 && <0.16,
+    doctest >= 0.16.0 && <0.17,
     filepath
   default-language: Haskell2010
   hs-source-dirs:   test
diff --git a/src/Web/FormUrlEncoded.hs b/src/Web/FormUrlEncoded.hs
--- a/src/Web/FormUrlEncoded.hs
+++ b/src/Web/FormUrlEncoded.hs
@@ -47,5 +47,5 @@
   urlDecodeParams,
 ) where
 
-import Web.Internal.FormUrlEncoded
+import           Web.Internal.FormUrlEncoded
 
diff --git a/src/Web/HttpApiData.hs b/src/Web/HttpApiData.hs
--- a/src/Web/HttpApiData.hs
+++ b/src/Web/HttpApiData.hs
@@ -43,7 +43,7 @@
   readTextData,
 ) where
 
-import Web.Internal.HttpApiData
+import           Web.Internal.HttpApiData
 
 -- $setup
 --
diff --git a/src/Web/Internal/FormUrlEncoded.hs b/src/Web/Internal/FormUrlEncoded.hs
--- a/src/Web/Internal/FormUrlEncoded.hs
+++ b/src/Web/Internal/FormUrlEncoded.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE ConstraintKinds            #-}
 {-# LANGUAGE CPP                        #-}
+{-# LANGUAGE ConstraintKinds            #-}
 {-# LANGUAGE DataKinds                  #-}
 {-# LANGUAGE DefaultSignatures          #-}
 {-# LANGUAGE DeriveGeneric              #-}
@@ -18,14 +18,14 @@
 module Web.Internal.FormUrlEncoded where
 
 #if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-import Data.Traversable
+import           Control.Applicative
+import           Data.Traversable
 #endif
 
 
 import           Control.Arrow              ((***))
 import           Control.Monad              ((<=<))
-import           Data.ByteString.Builder    (toLazyByteString, shortByteString)
+import           Data.ByteString.Builder    (shortByteString, toLazyByteString)
 import qualified Data.ByteString.Lazy       as BSL
 import qualified Data.ByteString.Lazy.Char8 as BSL8
 import qualified Data.Foldable              as F
@@ -39,30 +39,30 @@
 import           Data.Map                   (Map)
 import qualified Data.Map                   as Map
 import           Data.Monoid
-import qualified Data.Semigroup             as Semi
 import           Data.Ord                   (comparing)
+import qualified Data.Semigroup             as Semi
 
 import           Data.Text                  (Text)
 import qualified Data.Text                  as Text
-import qualified Data.Text.Lazy             as Lazy
 import           Data.Text.Encoding         as Text
 import           Data.Text.Encoding.Error   (lenientDecode)
+import qualified Data.Text.Lazy             as Lazy
 
-import           Data.Time
 import           Data.Proxy
+import           Data.Time
 import           Data.Word
 
 #if MIN_VERSION_base(4,8,0)
-import Data.Void
-import Numeric.Natural
+import           Data.Void
+import           Numeric.Natural
 #endif
 
-import           GHC.Exts                   (IsList (..), Constraint)
+import           GHC.Exts                   (Constraint, IsList (..))
 import           GHC.Generics
 import           GHC.TypeLits
-import           URI.ByteString             (urlEncodeQuery, urlDecodeQuery)
+import           Network.HTTP.Types.URI     (urlDecode, urlEncodeBuilder)
 
-import Web.Internal.HttpApiData
+import           Web.Internal.HttpApiData
 
 -- $setup
 -- >>> :set -XDeriveGeneric
@@ -543,10 +543,10 @@
 urlEncodeParams :: [(Text, Text)] -> BSL.ByteString
 urlEncodeParams = toLazyByteString . mconcat . intersperse (shortByteString "&") . map encodePair
   where
-    escape = urlEncodeQuery . Text.encodeUtf8
+    escape = urlEncodeBuilder True . Text.encodeUtf8
 
     encodePair (k, "") = escape k
-    encodePair (k, v) = escape k <> shortByteString "=" <> escape v
+    encodePair (k, v)  = escape k <> shortByteString "=" <> escape v
 
 -- | Decode an @application/x-www-form-urlencoded@ 'BSL.ByteString' to a 'Form'.
 --
@@ -590,7 +590,7 @@
   where
     pairs = map (BSL8.split '=') (BSL8.split '&' bs)
 
-    unescape = Text.decodeUtf8With lenientDecode . urlDecodeQuery . BSL.toStrict
+    unescape = Text.decodeUtf8With lenientDecode . urlDecode True . BSL.toStrict
 
     parsePair p =
       case map unescape p of
diff --git a/src/Web/Internal/HttpApiData.hs b/src/Web/Internal/HttpApiData.hs
--- a/src/Web/Internal/HttpApiData.hs
+++ b/src/Web/Internal/HttpApiData.hs
@@ -1,12 +1,12 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE DefaultSignatures #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveFunctor #-}
-{-# LANGUAGE DeriveFoldable #-}
-{-# LANGUAGE DeriveTraversable #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE CPP                  #-}
+{-# LANGUAGE DefaultSignatures    #-}
+{-# LANGUAGE DeriveDataTypeable   #-}
+{-# LANGUAGE DeriveFoldable       #-}
+{-# LANGUAGE DeriveFunctor        #-}
+{-# LANGUAGE DeriveTraversable    #-}
+{-# LANGUAGE FlexibleInstances    #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
 {-# LANGUAGE TypeSynonymInstances #-}
 -- |
 -- Convert Haskell values to and from HTTP API data
@@ -14,54 +14,58 @@
 module Web.Internal.HttpApiData where
 
 #if __GLASGOW_HASKELL__ < 710
-import Control.Applicative
-import Data.Foldable (Foldable)
-import Data.Traversable (Traversable(traverse))
+import           Control.Applicative
+import           Data.Foldable                (Foldable)
+import           Data.Traversable             (Traversable (traverse))
 #endif
 
-import Control.Arrow ((&&&), left)
-import Control.Monad ((<=<))
+import           Control.Arrow                (left, (&&&))
+import           Control.Monad                ((<=<))
 
-import Data.Monoid
-import Data.ByteString (ByteString)
-import qualified Data.ByteString as BS
+import           Data.ByteString              (ByteString)
+import qualified Data.ByteString              as BS
+import           Data.Monoid
 
-import Data.Int
-import Data.Word
+import           Data.Int
+import           Data.Word
 
-import Data.Text (Text)
-import Data.Text.Encoding (encodeUtf8, decodeUtf8')
-import Data.Text.Read (signed, decimal, rational, Reader)
-import qualified Data.Text as T
-import qualified Data.Text.Lazy as L
+import           Data.Text                    (Text)
+import qualified Data.Text                    as T
+import           Data.Text.Encoding           (decodeUtf8', encodeUtf8)
+import qualified Data.Text.Lazy               as L
+import           Data.Text.Read               (Reader, decimal, rational,
+                                               signed)
 
-import Data.Time.Locale.Compat
-import Data.Time
-import Data.Version
+import           Data.Time
+import           Data.Time.Locale.Compat
+import           Data.Version
 
 #if MIN_VERSION_base(4,8,0)
-import Data.Void
-import Numeric.Natural
+import           Data.Void
+import           Numeric.Natural
 #endif
 
-import Text.Read (readMaybe)
-import Text.ParserCombinators.ReadP (readP_to_S)
+import           Text.ParserCombinators.ReadP (readP_to_S)
+import           Text.Read                    (readMaybe)
 
 #if USE_TEXT_SHOW
-import TextShow (TextShow, showt)
+import           TextShow                     (TextShow, showt)
 #endif
 
-import qualified Data.UUID.Types as UUID
+import qualified Data.UUID.Types              as UUID
 
-import Data.Typeable (Typeable)
-import Data.Data (Data)
-import qualified Data.ByteString.Builder as BS
-import qualified Network.HTTP.Types as H
+import qualified Data.ByteString.Builder      as BS
+import           Data.Data                    (Data)
+import           Data.Typeable                (Typeable)
+import qualified Network.HTTP.Types           as H
 
-import qualified Data.Attoparsec.Text as Atto
-import qualified Data.Attoparsec.Time as Atto
+import qualified Data.Attoparsec.Text         as Atto
+import qualified Data.Attoparsec.Time         as Atto
 
+import           Web.Cookie                   (SetCookie, parseSetCookie,
+                                               renderSetCookie)
 
+
 -- $setup
 -- >>> data BasicAuthToken = BasicAuthToken Text deriving (Show)
 -- >>> instance FromHttpApiData BasicAuthToken where parseHeader h = BasicAuthToken <$> parseHeaderWithPrefix "Basic " h; parseQueryParam p = BasicAuthToken <$> parseQueryParam p
@@ -531,6 +535,14 @@
   toUrlPiece (Right x) = "right " <> toUrlPiece x
 
 -- |
+-- >>> let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
+-- >>> toUrlPiece c
+-- "\"SESSID=r2t5uvjq435r4q7ib3vtdjq120\""
+instance ToHttpApiData SetCookie where
+  toUrlPiece = showt . BS.toLazyByteString . renderSetCookie
+  toEncodedUrlPiece = renderSetCookie
+
+-- |
 -- >>> parseUrlPiece "_" :: Either Text ()
 -- Right ()
 instance FromHttpApiData () where
@@ -664,6 +676,12 @@
     parseHeader     = Right . LenientData . parseHeader
     parseQueryParam = Right . LenientData . parseQueryParam
 
+-- |
+-- >>> parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
+-- Right (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing})
+instance FromHttpApiData SetCookie where
+  parseUrlPiece = parseHeader  . encodeUtf8
+  parseHeader   = Right . parseSetCookie
 -------------------------------------------------------------------------------
 -- Attoparsec helpers
 -------------------------------------------------------------------------------
