diff --git a/Network/HTTP2/RandomSkewHeap.hs b/Network/HTTP2/RandomSkewHeap.hs
--- a/Network/HTTP2/RandomSkewHeap.hs
+++ b/Network/HTTP2/RandomSkewHeap.hs
@@ -49,12 +49,13 @@
 insert :: a -> Weight -> Heap a -> Heap a
 insert a w t = merge (singleton a w) t
 
+-- if l is a singleton, w1 == tw1.
 merge :: Heap t -> Heap t -> Heap t
 merge t Leaf = t
 merge Leaf t = t
-merge l@(Node tw1 a1 w1 l1 r1) r@(Node tw2 a2 w2 l2 r2)
-  | g <= w1   = Node tw a1 w1 r1 $ merge l1 r
-  | otherwise = Node tw a2 w2 r2 $ merge l2 l
+merge l@(Node tw1 x1 w1 ll lr) r@(Node tw2 x2 w2 rl rr)
+  | g <= tw1  = Node tw x1 w1 lr $ merge ll r
+  | otherwise = Node tw x2 w2 rr $ merge rl l
   where
     tw = tw1 + tw2
     g = unsafePerformIO $ uniformR (1,tw) gen
@@ -69,3 +70,15 @@
 gen :: GenIO
 gen = unsafePerformIO createSystemRandom
 {-# NOINLINE gen #-}
+
+main = do
+    let q = insert "c" 1 $ insert "b" 101 $ insert "a" 201 empty
+    loop 1000 q
+  where
+    loop 0 _ = return ()
+    loop n q = do
+        case uncons q of
+            Nothing -> error "Nothing"
+            Just (x, w, q') -> do
+                putStrLn x
+                loop (n-1) (insert x w q')
diff --git a/http2.cabal b/http2.cabal
--- a/http2.cabal
+++ b/http2.cabal
@@ -1,5 +1,5 @@
 Name:                   http2
-Version:                1.0.3
+Version:                1.0.4
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
