diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.3.1
+
+* Defining IllegalTableSizeUpdate.
+
 ## 1.3.0
 
 * APIs `Network.HTTP2.Priority` are changed again. `Precedence` is introduced.
diff --git a/Network/HPACK/HeaderBlock/From.hs b/Network/HPACK/HeaderBlock/From.hs
--- a/Network/HPACK/HeaderBlock/From.hs
+++ b/Network/HPACK/HeaderBlock/From.hs
@@ -17,14 +17,14 @@
 
 ----------------------------------------------------------------
 
-type Ctx = (DynamicTable, Builder Header)
+type Ctx = (DynamicTable, Builder Header, Bool)
 type Step = Ctx -> HeaderField -> IO Ctx
 
 -- | Decoding 'HeaderBlock' to 'HeaderList'.
 fromHeaderBlock :: DynamicTable
                 -> HeaderBlock
                 -> IO (DynamicTable, HeaderList)
-fromHeaderBlock !dyntbl rs = decodeLoop rs (dyntbl,empty)
+fromHeaderBlock !dyntbl rs = decodeLoop rs (dyntbl,empty,True)
 
 ----------------------------------------------------------------
 
@@ -37,37 +37,39 @@
 -- | Decoding step for one 'HeaderField'. Exporting for the
 --   test purpose.
 decodeStep :: Step
-decodeStep (!dyntbl,!builder) (ChangeTableSize siz) = do
+decodeStep (!dyntbl,!builder,beginning) (ChangeTableSize siz)
+  | beginning = do
     unless (isSuitableSize siz dyntbl) $ throwIO TooLargeTableSize
     dyntbl' <- renewDynamicTable siz dyntbl
-    return (dyntbl',builder)
-decodeStep (!dyntbl,!builder) (Indexed idx) = do
+    return (dyntbl',builder,True)
+  | otherwise = throwIO IllegalTableSizeUpdate
+decodeStep (!dyntbl,!builder,_) (Indexed idx) = do
       w <- which dyntbl idx
       case w of
           (InStaticTable, e) -> do
               let b = builder << fromEntry e
-              return (dyntbl,b)
+              return (dyntbl,b,False)
           (InDynamicTable, e) -> do
               let b = builder << fromEntry e
-              return (dyntbl,b)
-decodeStep (!dyntbl,!builder) (Literal NotAdd naming v) = do
+              return (dyntbl,b,False)
+decodeStep (!dyntbl,!builder,_) (Literal NotAdd naming v) = do
     k <- fromNaming naming dyntbl
     let b = builder << (k,v)
-    return (dyntbl, b)
-decodeStep (!dyntbl,!builder) (Literal Never naming v) = do
+    return (dyntbl, b, False)
+decodeStep (!dyntbl,!builder,_) (Literal Never naming v) = do
     k <- fromNaming naming dyntbl
     let b = builder << (k,v)
-    return (dyntbl, b)
-decodeStep (!dyntbl,!builder) (Literal Add naming v) = do
+    return (dyntbl, b, False)
+decodeStep (!dyntbl,!builder,_) (Literal Add naming v) = do
     k <- fromNaming naming dyntbl
     let h = (k,v)
         e = toEntry (k,v)
         b = builder << h
     dyntbl' <- insertEntry e dyntbl
-    return (dyntbl',b)
+    return (dyntbl',b,False)
 
 decodeFinal :: Ctx -> IO (DynamicTable, HeaderList)
-decodeFinal (!dyntbl, !builder) = return (dyntbl, run builder)
+decodeFinal (!dyntbl,!builder,_) = return (dyntbl, run builder)
 
 ----------------------------------------------------------------
 
diff --git a/Network/HPACK/Types.hs b/Network/HPACK/Types.hs
--- a/Network/HPACK/Types.hs
+++ b/Network/HPACK/Types.hs
@@ -71,6 +71,7 @@
                  | EmptyEncodedString -- ^ Encoded string has no length
                  | EmptyBlock -- ^ Header block is empty
                  | TooLargeTableSize -- ^ A peer tried to change the dynamic table size over the limit
+                 | IllegalTableSizeUpdate -- ^ Table size update at the non-beginning
                  deriving (Eq,Show,Typeable)
 
 instance Exception DecodeError
diff --git a/http2.cabal b/http2.cabal
--- a/http2.cabal
+++ b/http2.cabal
@@ -1,12 +1,11 @@
 Name:                   http2
-Version:                1.3.0
+Version:                1.3.1
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
 License-File:           LICENSE
 Synopsis:               HTTP/2.0 library including frames and HPACK
 Description:            HTTP/2.0 library including frames and HPACK.
-                        Currently HTTP/2 16 framing and HPACK 10 is supported.
 Category:               Network
 Cabal-Version:          >= 1.10
 Build-Type:             Simple
diff --git a/test/HTTP2/PrioritySpec.hs b/test/HTTP2/PrioritySpec.hs
--- a/test/HTTP2/PrioritySpec.hs
+++ b/test/HTTP2/PrioritySpec.hs
@@ -1,7 +1,10 @@
-{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE BangPatterns, CPP #-}
 
 module HTTP2.PrioritySpec where
 
+#if __GLASGOW_HASKELL__ < 709
+import Control.Applicative
+#endif
 import Data.List (group, sort)
 import Test.Hspec
 
