diff --git a/peyotls.cabal b/peyotls.cabal
--- a/peyotls.cabal
+++ b/peyotls.cabal
@@ -2,7 +2,7 @@
 cabal-version:	>= 1.8
 
 name:		peyotls
-version:	0.0.0.10
+version:	0.0.0.11
 stability:	Experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -272,7 +272,7 @@
 source-repository	this
     type:	git
     location:	git://github.com/YoshikuniJujo/peyotls.git
-    tag:	peyotls-0.0.0.10
+    tag:	peyotls-0.0.0.11
 
 library
     hs-source-dirs:	src
diff --git a/src/Network/PeyoTLS/Extension.hs b/src/Network/PeyoTLS/Extension.hs
--- a/src/Network/PeyoTLS/Extension.hs
+++ b/src/Network/PeyoTLS/Extension.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
-module Network.PeyoTLS.Extension (Extension, SignAlg(..), HashAlg(..)) where
+module Network.PeyoTLS.Extension (Extension(..), SignAlg(..), HashAlg(..)) where
 
 import Control.Applicative ((<$>), (<*>))
 import Data.Bits (shiftL, (.|.))
@@ -21,7 +21,7 @@
 	| ENextProtoNego BS.ByteString
 	| ERenegoInfo BS.ByteString
 	| ERaw EType BS.ByteString
-	deriving Show
+	deriving (Show, Eq)
 
 instance B.Bytable Extension where
 	encode = encodeE; decode = B.evalBytableM B.parse
@@ -52,7 +52,7 @@
 
 data EType
 	= TSName         | TECurve     | TEcPFrt     | TSsnTicketTls
-	| TNextProtoNego | TRenegoInfo | TRaw Word16 deriving Show
+	| TNextProtoNego | TRenegoInfo | TRaw Word16 deriving (Show, Eq)
 
 instance B.Bytable EType where
 	encode TSName = B.encode (0 :: Word16)
@@ -75,7 +75,7 @@
 		_ -> Left "Extension: EType.decode"
 
 data ServerName = SNHostName BS.ByteString | SNRaw NameType BS.ByteString
-	deriving Show
+	deriving (Show, Eq)
 
 instance B.Bytable ServerName where
 	encode (SNHostName nm) = B.encode $ SNRaw NTHostName nm
@@ -88,7 +88,7 @@
 		return $ case t of
 			NTHostName -> SNHostName n; _ -> SNRaw t n
 
-data NameType = NTHostName | NTRaw Word8 deriving Show
+data NameType = NTHostName | NTRaw Word8 deriving (Show, Eq)
 
 instance B.Bytable NameType where
 	encode NTHostName = BS.pack [0]
@@ -162,7 +162,7 @@
 		NamedCurve <- B.parse
 		B.parse
 
-data EcPointFormat = EPFUncompressed | EPFRaw Word8 deriving Show
+data EcPointFormat = EPFUncompressed | EPFRaw Word8 deriving (Show, Eq)
 
 instance B.Bytable EcPointFormat where
 	encode EPFUncompressed = BS.pack [0]
diff --git a/src/Network/PeyoTLS/HandshakeBase.hs b/src/Network/PeyoTLS/HandshakeBase.hs
--- a/src/Network/PeyoTLS/HandshakeBase.hs
+++ b/src/Network/PeyoTLS/HandshakeBase.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings, TypeFamilies, PackageImports,
 	TupleSections #-}
 
-module Network.PeyoTLS.HandshakeBase (
+module Network.PeyoTLS.HandshakeBase ( Extension(..),
 	PeyotlsM, PeyotlsHandle,
 	debug, generateKs, blindSign, CertSecretKey(..),
 	HM.TlsM, HM.run, HM.HandshakeM, HM.execHandshakeM,
@@ -51,7 +51,7 @@
 import qualified Crypto.PubKey.ECC.Prim as ECC
 import qualified Crypto.Types.PubKey.ECDSA as ECDSA
 
-import Network.PeyoTLS.HandshakeType (
+import Network.PeyoTLS.HandshakeType ( Extension(..),
 	Handshake, HandshakeItem(..),
 	ClientHello(..), ServerHello(..), SessionId(..),
 		CipherSuite(..), KeyExchange(..), BulkEncryption(..),
@@ -81,7 +81,7 @@
 debug :: (HandleLike h, Show a) => a -> HM.HandshakeM h g ()
 debug x = do
 	h <- gets $ HM.tlsHandle . fst
-	lift . lift . lift . hlDebug h "moderate" . BSC.pack . (++ "\n") $ show x
+	lift . lift . lift . hlDebug h "critical" . BSC.pack . (++ "\n") $ show x
 
 readHandshake :: (HandleLike h, CPRG g, HandshakeItem hi) => HM.HandshakeM h g hi
 readHandshake = do
diff --git a/src/Network/PeyoTLS/HandshakeType.hs b/src/Network/PeyoTLS/HandshakeType.hs
--- a/src/Network/PeyoTLS/HandshakeType.hs
+++ b/src/Network/PeyoTLS/HandshakeType.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
-module Network.PeyoTLS.HandshakeType (
+module Network.PeyoTLS.HandshakeType ( Extension(..),
 	Handshake, HandshakeItem(..),
 	ClientHello(..), ServerHello(..), SessionId(..),
 		CipherSuite(..), KeyExchange(..), BulkEncryption(..),
@@ -22,7 +22,7 @@
 import qualified Crypto.PubKey.DH as DH
 import qualified Crypto.Types.PubKey.ECC as ECC
 
-import Network.PeyoTLS.Hello (
+import Network.PeyoTLS.Hello ( Extension(..),
 	ClientHello(..), ServerHello(..), SessionId(..),
 	CipherSuite(..), KeyExchange(..), BulkEncryption(..),
 	CompressionMethod(..), HashAlg(..), SignAlg(..) )
diff --git a/src/Network/PeyoTLS/Hello.hs b/src/Network/PeyoTLS/Hello.hs
--- a/src/Network/PeyoTLS/Hello.hs
+++ b/src/Network/PeyoTLS/Hello.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 
-module Network.PeyoTLS.Hello (
+module Network.PeyoTLS.Hello ( Extension(..),
 	ClientHello(..), ServerHello(..), SessionId(..),
 		CipherSuite(..), KeyExchange(..), BulkEncryption(..),
 		CompressionMethod(..),
@@ -13,7 +13,7 @@
 import qualified Data.ByteString as BS
 import qualified Codec.Bytable.BigEndian as B
 
-import Network.PeyoTLS.Extension (Extension, SignAlg(..), HashAlg(..))
+import Network.PeyoTLS.Extension (Extension(..), SignAlg(..), HashAlg(..))
 import Network.PeyoTLS.CipherSuite (
 	CipherSuite(..), KeyExchange(..), BulkEncryption(..))
 
diff --git a/src/Network/PeyoTLS/Server.hs b/src/Network/PeyoTLS/Server.hs
--- a/src/Network/PeyoTLS/Server.hs
+++ b/src/Network/PeyoTLS/Server.hs
@@ -30,7 +30,7 @@
 import qualified Crypto.Types.PubKey.ECDSA as ECDSA
 import qualified Crypto.PubKey.ECC.ECDSA as ECDSA
 
-import Network.PeyoTLS.HandshakeBase (
+import Network.PeyoTLS.HandshakeBase ( debug, Extension(..),
 	PeyotlsM, PeyotlsHandle,
 	TlsM, run, HandshakeM, execHandshakeM, withRandom, randomByteString,
 	TlsHandle, names,
@@ -79,8 +79,8 @@
 	[(CertSecretKey, X509.CertificateChain)] ->
 	Maybe X509.CertificateStore -> TlsM h g (TlsHandle h g)
 open h cssv crts mcs = execHandshakeM h $ do
-	(cs@(CipherSuite ke be), cr, cv) <- clientHello $ filterCS crts cssv
-	sr <- serverHello cs rcc ecc
+	(cs@(CipherSuite ke be), cr, cv, rn) <- clientHello $ filterCS crts cssv
+	sr <- serverHello cs rcc ecc rn
 	setCipherSuite cs
 	ha <- case be of
 		AES_128_CBC_SHA -> return Sha1
@@ -128,10 +128,13 @@
 		`ap` dhClientKeyExchange dp sv rs
 
 clientHello :: (HandleLike h, CPRG g) =>
-	[CipherSuite] -> HandshakeM h g (CipherSuite, BS.ByteString, Version)
+	[CipherSuite] -> HandshakeM h g (CipherSuite, BS.ByteString, Version, Bool)
 clientHello cssv = do
-	ClientHello cv cr _sid cscl cms _ <- readHandshake
-	chk cv cscl cms >> return (merge cssv cscl, cr, cv)
+	ClientHello cv cr _sid cscl cms e <- readHandshake
+	debug e
+	let rn = maybe False (ERenegoInfo "" `elem`) e
+	debug rn
+	chk cv cscl cms >> return (merge cssv cscl, cr, cv, rn)
 	where
 	merge sv cl = case find (`elem` cl) sv of
 		Just cs -> cs; _ -> CipherSuite RSA AES_128_CBC_SHA
@@ -150,15 +153,17 @@
 		where pmsg = "TlsServer.clientHello: "
 
 serverHello :: (HandleLike h, CPRG g) => CipherSuite ->
-	X509.CertificateChain -> X509.CertificateChain ->
+	X509.CertificateChain -> X509.CertificateChain -> Bool ->
 	HandshakeM h g BS.ByteString
-serverHello cs@(CipherSuite ke _) rcc ecc = do
+serverHello cs@(CipherSuite ke _) rcc ecc rn = do
 	sr <- randomByteString 32
-	writeHandshake $ ServerHello
-		version sr (SessionId "") cs CompressionMethodNull Nothing
+	writeHandshake . ServerHello
+		version sr (SessionId "") cs CompressionMethodNull $ if rn
+			then Just [ERenegoInfo ""]
+			else Nothing
 	writeHandshake $ case ke of ECDHE_ECDSA -> ecc; _ -> rcc
 	return sr
-serverHello _ _ _ = E.throwError "TlsServer.serverHello: never occur"
+serverHello _ _ _ _ = E.throwError "TlsServer.serverHello: never occur"
 
 serverKeyExchange :: (HandleLike h, CPRG g, SecretKey sk,
 		DhParam dp, B.Bytable dp, B.Bytable (Public dp)) =>
