diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,8 +1,15 @@
 # ChangeLog
 
+## 0.2.14
+
+* Supporting SSLKEYLOGFILE.
+* Supporting zer-length CID in the server side.
+  [#78](https://github.com/kazu-yamamoto/quic/pull/78)
+
 ## 0.2.13
 
 * Necessary transport parameters are now stored in ResumptionInfo.
+  [#76](https://github.com/kazu-yamamoto/quic/pull/76)
 
 ## 0.2.12
 
diff --git a/Network/QUIC/Config.hs b/Network/QUIC/Config.hs
--- a/Network/QUIC/Config.hs
+++ b/Network/QUIC/Config.hs
@@ -116,7 +116,7 @@
         , ccCiphers = supportedCiphers defaultSupported
         , ccGroups = supportedGroups defaultSupported
         , ccParameters = defaultParameters
-        , ccKeyLog = \_ -> return ()
+        , ccKeyLog = defaultKeyLogger
         , ccQLog = Nothing
         , ccCredentials = mempty
         , ccHooks = defaultHooks
@@ -176,7 +176,7 @@
         , scCiphers = supportedCiphers defaultSupported
         , scGroups = supportedGroups defaultSupported
         , scParameters = defaultParameters
-        , scKeyLog = \_ -> return ()
+        , scKeyLog = defaultKeyLogger
         , scQLog = Nothing
         , scCredentials = mempty
         , scHooks = defaultHooks
diff --git a/Network/QUIC/Server/Reader.hs b/Network/QUIC/Server/Reader.hs
--- a/Network/QUIC/Server/Reader.hs
+++ b/Network/QUIC/Server/Reader.hs
@@ -111,11 +111,12 @@
 newRecvQDict :: IO RecvQDict
 newRecvQDict = RecvQDict <$> LRUCache.newLRUCacheRef recvQDictSize
 
-lookupRecvQDict :: RecvQDict -> CID -> IO (RecvQ, Bool)
-lookupRecvQDict (RecvQDict ref) dcid = LRUCache.cached ref dcid newRecvQ
+-- Looking up and insert a new RecvQ if not exist.
+lookupInsertRecvQDict :: RecvQDict -> CID -> IO (RecvQ, Bool)
+lookupInsertRecvQDict (RecvQDict ref) dcid = LRUCache.cached ref dcid newRecvQ
 
-lookupRecvQDict' :: RecvQDict -> CID -> IO (Maybe RecvQ)
-lookupRecvQDict' (RecvQDict ref) dcid = LRUCache.cached' ref dcid
+lookupRecvQDict :: RecvQDict -> CID -> IO (Maybe RecvQ)
+lookupRecvQDict (RecvQDict ref) dcid = LRUCache.cached' ref dcid
 
 ----------------------------------------------------------------
 
@@ -262,7 +263,8 @@
       where
         myVersions = scVersions
         pushToAcceptQ myAuthCIDs peerAuthCIDs addrValid = do
-            (q, exist) <- lookupRecvQDict srcTable sCID
+            let key = nonZeroLengthCID sCID peersa
+            (q, exist) <- lookupInsertRecvQDict srcTable key
             writeRecvQ q $ mkReceivedPacket cpkt tim siz lvl
             unless exist $ do
                 let reg = registerConnectionDict dstTable
@@ -355,12 +357,13 @@
     _
     _
     _mysock
-    _peersa
+    peersa
     _
     _
     tim
     (cpkt@(CryptPacket (RTT0 _ _dCID sCID) _), lvl, siz) = do
-        mq <- lookupRecvQDict' srcTable sCID
+        let key = nonZeroLengthCID sCID peersa
+        mq <- lookupRecvQDict srcTable key
         case mq of
             Just q -> writeRecvQ q $ mkReceivedPacket cpkt tim siz lvl
             Nothing -> return ()
diff --git a/Network/QUIC/Types/CID.hs b/Network/QUIC/Types/CID.hs
--- a/Network/QUIC/Types/CID.hs
+++ b/Network/QUIC/Types/CID.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 module Network.QUIC.Types.CID (
     CID (..),
@@ -8,6 +9,7 @@
     toCID,
     makeCID,
     unpackCID,
+    nonZeroLengthCID,
     StatelessResetToken (..),
     fromStatelessResetToken,
     makeGenStatelessReset,
@@ -23,8 +25,10 @@
 import Codec.Serialise
 import Crypto.Hash
 import Crypto.KDF.HKDF
+import qualified Data.ByteString.Char8 as C8
 import qualified Data.ByteString.Short as Short
 import GHC.Generics
+import Network.Socket (SockAddr)
 import System.Random (getStdRandom, uniformByteString)
 
 import Network.QUIC.Imports
@@ -57,6 +61,10 @@
 unpackCID (CID sbs) = (sbs, len)
   where
     len = fromIntegral $ Short.length sbs
+
+nonZeroLengthCID :: CID -> SockAddr -> CID
+nonZeroLengthCID (CID "") sa = toCID $ C8.pack $ show sa
+nonZeroLengthCID x _ = x
 
 -- 16 bytes
 newtype StatelessResetToken = StatelessResetToken Bytes deriving (Eq, Ord)
diff --git a/quic.cabal b/quic.cabal
--- a/quic.cabal
+++ b/quic.cabal
@@ -1,6 +1,6 @@
 cabal-version:      >=1.10
 name:               quic
-version:            0.2.13
+version:            0.2.14
 license:            BSD3
 license-file:       LICENSE
 maintainer:         kazu@iij.ad.jp
@@ -148,7 +148,7 @@
         random >=1.3 && <1.4,
         serialise,
         stm >=2.5 && <2.6,
-        tls >=2.1.6 && <2.2,
+        tls >=2.1.10 && <2.2,
         unix-time >=0.4.12 && <0.5
 
     if os(linux)
diff --git a/util/Common.hs b/util/Common.hs
--- a/util/Common.hs
+++ b/util/Common.hs
@@ -41,7 +41,7 @@
     (s', r) -> s' : split c (drop 1 r)
 
 getLogger :: Maybe FilePath -> (String -> IO ())
-getLogger Nothing = \_ -> return ()
+getLogger Nothing = defaultKeyLogger
 getLogger (Just file) = \msg -> appendFile file (msg ++ "\n")
 
 makeProtos :: Version -> (ByteString, ByteString)
