diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for http3
 
+## 0.1.4
+
+* adding ecUseHuffman to defaultQEncoderConfig
+
 ## 0.1.3
 
 * Using quic v0.3.
diff --git a/Network/HTTP3/Send.hs b/Network/HTTP3/Send.hs
--- a/Network/HTTP3/Send.hs
+++ b/Network/HTTP3/Send.hs
@@ -61,7 +61,10 @@
     T.tickle th
     case mnext of
         Nothing -> do
-            Trailers trailers <- tlrmkr Nothing
+            tm <- tlrmkr Nothing
+            let trailers = case tm of
+                    Trailers t -> t
+                    _ -> []
             unless (null trailers) $ sendHeader ctx strm th trailers
         Just next -> sendNext ctx strm th next tlrmkr
 
@@ -90,7 +93,10 @@
         then return (signal, tlrmkr0)
         else do
             let bs = PS fp 0 len
-            NextTrailersMaker tlrmkr1 <- tlrmkr0 $ Just bs
+            tm <- tlrmkr0 $ Just bs
+            let tlrmkr1 = case tm of
+                    NextTrailersMaker t -> t
+                    _ -> defaultTrailersMaker
             encodeH3Frame (H3Frame H3FrameData bs) >>= sendStream strm
             T.tickle th
             return (signal, tlrmkr1)
@@ -131,6 +137,9 @@
             newByteStringAndSend strm th tlrmkr1 writer >>= loop
         loop (B.Chunk bs writer, tlrmkr1) = do
             encodeH3Frame (H3Frame H3FrameData bs) >>= sendStream strm
-            NextTrailersMaker tlrmkr2 <- tlrmkr1 $ Just bs
+            tm2 <- tlrmkr1 $ Just bs
+            let tlrmkr2 = case tm2 of
+                    NextTrailersMaker t -> t
+                    _ -> defaultTrailersMaker
             T.tickle th
             newByteStringAndSend strm th tlrmkr2 writer >>= loop
diff --git a/Network/QPACK.hs b/Network/QPACK.hs
--- a/Network/QPACK.hs
+++ b/Network/QPACK.hs
@@ -113,6 +113,7 @@
     { ecMaxTableCapacity :: Size
     , ecHeaderBlockBufferSize :: Size
     , ecInstructionBufferSize :: Size
+    , ecUseHuffman :: Bool
     }
     deriving (Show)
 
@@ -126,6 +127,7 @@
         { ecMaxTableCapacity = 4096
         , ecHeaderBlockBufferSize = 4096
         , ecInstructionBufferSize = 4096
+        , ecUseHuffman = True
         }
 
 -- | Creating a new QPACK encoder.
@@ -146,6 +148,7 @@
                 bufsiz1
                 gcbuf2
                 bufsiz2
+                ecUseHuffman
                 dyntbl
                 lock
         handler = decoderInstructionHandler dyntbl
@@ -192,10 +195,11 @@
     -> Int
     -> GCBuffer
     -> Int
+    -> Bool
     -> DynamicTable
     -> MVar ()
     -> QEncoder
-qpackEncoder gcbuf1 bufsiz1 gcbuf2 bufsiz2 dyntbl lock sid ts =
+qpackEncoder gcbuf1 bufsiz1 gcbuf2 bufsiz2 huff dyntbl lock sid ts =
     withMVar lock $ \_ ->
         withForeignPtr gcbuf1 $ \buf1 ->
             withForeignPtr gcbuf2 $ \buf2 -> do
@@ -206,7 +210,7 @@
                 setBasePointToInsersionPoint dyntbl
                 clearRequiredInsertCount dyntbl
                 let tss = splitThrough bufsiz1 ts
-                his <- mapM (qpackEncodeHeader buf1 bufsiz1 buf2 bufsiz2 dyntbl) tss
+                his <- mapM (qpackEncodeHeader buf1 bufsiz1 buf2 bufsiz2 huff dyntbl) tss
                 let (hbs, daiss) = unzip his
                 prefix <- qpackEncodePrefix buf1 bufsiz1 dyntbl
                 let section = BS.concat (prefix : hbs)
@@ -224,10 +228,11 @@
     -> Int
     -> GCBuffer
     -> Int
+    -> Bool
     -> DynamicTable
     -> MVar ()
     -> QEncoderS
-qpackEncoderS gcbuf1 bufsiz1 gcbuf2 bufsiz2 dyntbl lock sid hs =
+qpackEncoderS gcbuf1 bufsiz1 gcbuf2 bufsiz2 huff dyntbl lock sid hs =
     withMVar lock $ \_ ->
         withForeignPtr gcbuf1 $ \buf1 ->
             withForeignPtr gcbuf2 $ \buf2 -> do
@@ -238,7 +243,7 @@
                 setBasePointToInsersionPoint dyntbl
                 clearRequiredInsertCount dyntbl
                 let tss = splitThrough bufsiz1 ts
-                his <- mapM (qpackEncodeHeader buf1 bufsiz1 buf2 bufsiz2 dyntbl) tss
+                his <- mapM (qpackEncodeHeader buf1 bufsiz1 buf2 bufsiz2 huff dyntbl) tss
                 let (hbs, daiss) = unzip his
                 prefix <- qpackEncodePrefix buf1 bufsiz1 dyntbl
                 let section = BS.concat (prefix : hbs)
@@ -272,13 +277,14 @@
     -> BufferSize
     -> Buffer
     -> BufferSize
+    -> Bool
     -> DynamicTable
     -> TokenHeaderList
     -> IO (ByteString, [AbsoluteIndex])
-qpackEncodeHeader buf1 bufsiz1 buf2 bufsiz2 dyntbl ts = do
+qpackEncodeHeader buf1 bufsiz1 buf2 bufsiz2 huff dyntbl ts = do
     wbuf1 <- newWriteBuffer buf1 bufsiz1
     wbuf2 <- newWriteBuffer buf2 bufsiz2
-    dais <- encodeTokenHeader wbuf1 wbuf2 dyntbl ts
+    dais <- encodeTokenHeader wbuf1 wbuf2 huff dyntbl ts
     hb <- toByteString wbuf1
     ins <- toByteString wbuf2
     when (ins /= "") $ sendIns dyntbl ins
@@ -343,6 +349,7 @@
                 bufsiz1
                 gcbuf2
                 bufsiz2
+                ecUseHuffman
                 dyntbl
                 lock
     return enc
diff --git a/Network/QPACK/Error.hs b/Network/QPACK/Error.hs
--- a/Network/QPACK/Error.hs
+++ b/Network/QPACK/Error.hs
@@ -12,7 +12,7 @@
     DecoderInstructionError (..),
 ) where
 
-import Control.Exception
+import qualified Control.Exception as E
 
 import Network.QUIC
 
@@ -38,6 +38,6 @@
 data DecoderInstructionError = DecoderInstructionError
     deriving (Eq, Show)
 
-instance Exception DecodeError
-instance Exception EncoderInstructionError
-instance Exception DecoderInstructionError
+instance E.Exception DecodeError
+instance E.Exception EncoderInstructionError
+instance E.Exception DecoderInstructionError
diff --git a/Network/QPACK/HeaderBlock/Encode.hs b/Network/QPACK/HeaderBlock/Encode.hs
--- a/Network/QPACK/HeaderBlock/Encode.hs
+++ b/Network/QPACK/HeaderBlock/Encode.hs
@@ -39,15 +39,16 @@
 --   temporally allocated for header block, prefix and encoder instructions.
 --   If headers are too large, 'BufferOverrun' is thrown.
 encodeHeader
-    :: DynamicTable
+    :: Bool
+    -> DynamicTable
     -> [Header]
     -> IO (EncodedFieldSection, EncodedEncoderInstruction)
-encodeHeader dyntbl hs = do
+encodeHeader huff dyntbl hs = do
     setBasePointToInsersionPoint dyntbl
     clearRequiredInsertCount dyntbl
     (hb0, insb) <- withWriteBuffer' 2048 $ \wbuf1 ->
         withWriteBuffer 2048 $ \wbuf2 -> do
-            hs1 <- encodeTokenHeader wbuf1 wbuf2 dyntbl ts
+            hs1 <- encodeTokenHeader wbuf1 wbuf2 huff dyntbl ts
             unless (null hs1) $ E.throwIO BufferOverrun
     prefix <- withWriteBuffer 32 $ \wbuf -> encodePrefix wbuf dyntbl
     let hb = prefix `B.append` hb0
@@ -63,17 +64,19 @@
     -- ^ Workspace for the body of header block
     -> WriteBuffer
     -- ^ Workspace for encoder instructions
+    -> Bool
+    -- ^ Use Huffman encoding or not
     -> DynamicTable
     -> TokenHeaderList
     -> IO [AbsoluteIndex]
-encodeTokenHeader wbuf1 wbuf2 dyntbl ts0 = do
+encodeTokenHeader wbuf1 wbuf2 huff dyntbl ts0 = do
     clearWriteBuffer wbuf1
     clearWriteBuffer wbuf2
     let revidx = getRevIndex dyntbl
     ready <- isTableReady dyntbl
     if ready
-        then encodeLinear wbuf1 wbuf2 dyntbl revidx True ts0
-        else encodeStatic wbuf1 wbuf2 dyntbl revidx True ts0
+        then encodeLinear wbuf1 wbuf2 dyntbl revidx huff ts0
+        else encodeStatic wbuf1 wbuf2 dyntbl revidx huff ts0
 
 encodeStatic
     :: WriteBuffer
diff --git a/http3.cabal b/http3.cabal
--- a/http3.cabal
+++ b/http3.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               http3
-version:            0.1.3
+version:            0.1.4
 license:            BSD-3-Clause
 license-file:       LICENSE
 maintainer:         Kazu Yamamoto <kazu@iij.ad.jp>
@@ -115,7 +115,7 @@
         http2,
         http3,
         quic,
-        tls >=2.1.10 && <2.3,
+        tls >=2.3.0 && <2.5,
         tls-session-manager
 
     if flag(devel)
@@ -142,7 +142,7 @@
         http-types,
         http3,
         quic,
-        tls >=2.1.10 && <2.3,
+        tls >=2.3.0 && <2.5,
         unix-time
 
     if flag(devel)
diff --git a/test/HTTP3/Error.hs b/test/HTTP3/Error.hs
--- a/test/HTTP3/Error.hs
+++ b/test/HTTP3/Error.hs
@@ -201,7 +201,7 @@
 
 -- [(":method","GET")
 -- ,(":scheme","https")
--- ,(":autority","127.0.0.1")
+-- ,(":authority","127.0.0.1")
 -- ,(":path","/")
 -- ,(":foo","bar") -- the presence of prohibited fields or pseudo-header fields,
 -- ]
@@ -209,12 +209,12 @@
 illegalHeader1 _ =
     [ H3Frame
         H3FrameHeaders
-        "\x00\x00\xd1\xd7\x27\x02\x3a\x61\x75\x74\x6f\x72\x69\x74\x79\x09\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\xc1\x24\x3a\x66\x6f\x6f\x03\x62\x61\x72"
+        "\x00\x00\xd1\xd7\x50\x09\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\xc1\x24\x3a\x66\x6f\x6f\x03\x62\x61\x72"
     ]
 
 -- [(":method","GET")
 -- ,(":scheme","https")
--- ,(":autority","127.0.0.1")
+-- ,(":authority","127.0.0.1")
 -- ,("foo","bar")
 -- ,(":path","/") -- pseudo-header fields after fields
 -- ]
@@ -222,7 +222,7 @@
 illegalHeader2 _ =
     [ H3Frame
         H3FrameHeaders
-        "\x00\x00\xd1\xd7\x27\x02\x3a\x61\x75\x74\x6f\x72\x69\x74\x79\x09\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\x23\x66\x6f\x6f\x03\x62\x61\x72\xc1"
+        "\x00\x00\xd1\xd7\x50\x09\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\x23\x66\x6f\x6f\x03\x62\x61\x72\xc1"
     ]
 
 -- [(":method","GET")
