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.14
+version:	0.0.0.15
 stability:	Experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -281,7 +281,7 @@
 source-repository	this
     type:	git
     location:	git://github.com/YoshikuniJujo/peyotls.git
-    tag:	peyotls-0.0.0.14
+    tag:	peyotls-0.0.0.15
 
 library
     hs-source-dirs:	src
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
@@ -34,6 +34,8 @@
 	HM.tGetContent_,
 	HM.tlsGet_,
 	HM.tGetLine_,
+
+	HM.getInitSet, HM.setInitSet,
 	) where
 
 import Control.Applicative
@@ -91,6 +93,8 @@
 	getClientFinished, setClientFinished,
 	getServerFinished, setServerFinished,
 	resetSequenceNumber,
+
+	getInitSet, setInitSet,
 	)
 import Network.PeyoTLS.Ecdsa (blindSign, generateKs)
 
diff --git a/src/Network/PeyoTLS/HandshakeMonad.hs b/src/Network/PeyoTLS/HandshakeMonad.hs
--- a/src/Network/PeyoTLS/HandshakeMonad.hs
+++ b/src/Network/PeyoTLS/HandshakeMonad.hs
@@ -19,6 +19,8 @@
 	getServerFinished, setServerFinished,
 
 	resetSequenceNumber,
+
+	getInitSet, setInitSet,
 	) where
 
 import Prelude hiding (read)
@@ -57,6 +59,8 @@
 	getServerFinishedT, setServerFinishedT,
 
 	resetSequenceNumber,
+
+	getInitSetT, setInitSetT, InitialSettings,
 	)
 
 resetSequenceNumber :: HandleLike h => TH.RW -> HandshakeM h g ()
@@ -211,3 +215,9 @@
 	HandleLike h => BS.ByteString -> HandshakeM h g ()
 setClientFinished cf = gets fst >>= lift . flip TH.setClientFinishedT cf
 setServerFinished cf = gets fst >>= lift . flip TH.setServerFinishedT cf
+
+getInitSet :: HandleLike h => HandshakeM h g TH.InitialSettings
+getInitSet = gets fst >>= lift . TH.getInitSetT
+
+setInitSet :: HandleLike h => TH.InitialSettings -> HandshakeM h g ()
+setInitSet is = gets fst >>= lift . flip TH.setInitSetT is
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
@@ -107,6 +107,7 @@
 	[(CertSecretKey, X509.CertificateChain)] ->
 	Maybe X509.CertificateStore -> TlsM h g (TlsHandleS h g)
 open h cssv crts mcs = (TlsHandleS `liftM`) . execHandshakeM h $ do
+	HB.setInitSet (cssv, crts, mcs)
 	(cs, cr, cv, rn) <- clientHello $ filterCS crts cssv
 	succeed cs cr cv crts mcs rn
 
@@ -362,13 +363,14 @@
 handshake :: (ValidateHandle h, CPRG g) =>
 	[CipherSuite] -> [(CertSecretKey, X509.CertificateChain)] ->
 	Maybe X509.CertificateStore -> HandshakeM h g ()
-handshake cssv crts mcs = do
+handshake _cssv _crts _mcs = do
+	(cssv, crts, mcs) <- HB.getInitSet
 	(cs, cr, cv, rn) <- clientHello $ filterCS crts cssv
 	succeed cs cr cv crts mcs rn
 
 rehandshake :: (ValidateHandle h, CPRG g) => TlsHandle h g -> TlsM h g ()
 rehandshake t = do
-	oldHandshakeM t "" $ handshake cipherSuites certificateSets Nothing
+	oldHandshakeM t "" $ handshake undefined undefined undefined
 	return ()
 
 renegotiation ::
diff --git a/src/Network/PeyoTLS/State.hs b/src/Network/PeyoTLS/State.hs
--- a/src/Network/PeyoTLS/State.hs
+++ b/src/Network/PeyoTLS/State.hs
@@ -9,8 +9,11 @@
 	getReadSN, getWriteSN, succReadSN, succWriteSN, resetReadSN, resetWriteSN,
 	getCipherSuite, setCipherSuite, flushCipherSuiteRead, flushCipherSuiteWrite,
 	getKeys, setKeys,
+	getInitSet, setInitSet,
 	getClientFinished, setClientFinished,
 	getServerFinished, setServerFinished,
+
+	InitialSettings,
 ) where
 
 import "monads-tf" Control.Monad.Error.Class (Error(strMsg))
@@ -21,6 +24,10 @@
 import qualified Data.ByteString as BS
 import qualified Codec.Bytable.BigEndian as B
 
+import Network.PeyoTLS.CertSecretKey
+import qualified Data.X509 as X509
+import qualified Data.X509.CertificateStore as X509
+
 import Network.PeyoTLS.CipherSuite (
 	CipherSuite(..), KeyExchange(..), BulkEncryption(..))
 
@@ -43,10 +50,15 @@
 		sKeys = nullKeys,
 		rBuffer = (CTNull, ""), wBuffer = (CTNull, ""),
 		readSN = 0, writeSN = 0,
-		rnClientFinished = "", rnServerFinished = ""
+		rnClientFinished = "", rnServerFinished = "",
+		initialSettings = ([], [], Nothing)
 		}
 	sos = states s
 
+type InitialSettings = (
+	[CipherSuite], [(CertSecretKey, X509.CertificateChain)],
+	Maybe X509.CertificateStore)
+
 data StateOne g = StateOne {
 	sKeys :: Keys,
 	rBuffer :: (ContentType, BS.ByteString),
@@ -54,7 +66,10 @@
 	readSN :: Word64,
 	writeSN :: Word64,
 	rnClientFinished :: BS.ByteString,
-	rnServerFinished :: BS.ByteString
+	rnServerFinished :: BS.ByteString,
+	initialSettings :: (
+		[CipherSuite], [(CertSecretKey, X509.CertificateChain)],
+		Maybe X509.CertificateStore)
 	}
 
 getState :: PartnerId -> HandshakeState h g -> StateOne g
@@ -147,6 +162,12 @@
 
 setKeys :: PartnerId -> Keys -> Modify (HandshakeState h g)
 setKeys i = modifyState i . \k st -> st { sKeys = k }
+
+getInitSet :: PartnerId -> HandshakeState h g -> InitialSettings
+getInitSet i = initialSettings . fromJust' "getInitSet" . lookup i . states
+
+setInitSet :: PartnerId -> InitialSettings -> Modify (HandshakeState h g)
+setInitSet i = modifyState i . \is st -> st { initialSettings = is }
 
 getClientFinished, getServerFinished ::
 	PartnerId -> HandshakeState h g -> BS.ByteString
diff --git a/src/Network/PeyoTLS/TlsHandle.hs b/src/Network/PeyoTLS/TlsHandle.hs
--- a/src/Network/PeyoTLS/TlsHandle.hs
+++ b/src/Network/PeyoTLS/TlsHandle.hs
@@ -13,6 +13,9 @@
 	getClientFinishedT, setClientFinishedT,
 	getServerFinishedT, setServerFinishedT,
 
+	getInitSetT, setInitSetT,
+	InitialSettings,
+
 	resetSequenceNumber,
 	) where
 
@@ -44,6 +47,8 @@
 	PartnerId, newPartnerId, Keys(..),
 	getClientFinished, setClientFinished,
 	getServerFinished, setServerFinished,
+	InitialSettings,
+	getInitSet, setInitSet,
 	)
 import qualified Network.PeyoTLS.CryptoTools as CT (
 	makeKeys, encrypt, decrypt, hashSha1, hashSha256, finishedHash )
@@ -309,3 +314,9 @@
 	HandleLike h => TlsHandle h g -> BS.ByteString -> TlsM h g ()
 setClientFinishedT = setClientFinished . clientId
 setServerFinishedT = setServerFinished . clientId
+
+getInitSetT :: HandleLike h => TlsHandle h g -> TlsM h g InitialSettings
+getInitSetT = getInitSet . clientId
+
+setInitSetT :: HandleLike h => TlsHandle h g -> InitialSettings -> TlsM h g ()
+setInitSetT = setInitSet . clientId
diff --git a/src/Network/PeyoTLS/TlsMonad.hs b/src/Network/PeyoTLS/TlsMonad.hs
--- a/src/Network/PeyoTLS/TlsMonad.hs
+++ b/src/Network/PeyoTLS/TlsMonad.hs
@@ -8,6 +8,7 @@
 		resetReadSn, resetWriteSn,
 		getCipherSuiteSt, setCipherSuiteSt,
 		flushCipherSuiteRead, flushCipherSuiteWrite, setKeys, getKeys,
+		getInitSet, setInitSet, S.InitialSettings,
 	S.Alert(..), S.AlertLevel(..), S.AlertDesc(..),
 	S.ContentType(..),
 	S.CipherSuite(..), S.KeyExchange(..), S.BulkEncryption(..),
@@ -36,8 +37,11 @@
 	getReadSN, getWriteSN, succReadSN, succWriteSN, resetReadSN, resetWriteSN,
 	getCipherSuite, setCipherSuite,
 	flushCipherSuiteRead, flushCipherSuiteWrite, setKeys, getKeys,
+	getInitSet, setInitSet,
 	getClientFinished, setClientFinished,
 	getServerFinished, setServerFinished,
+
+	InitialSettings,
 	)
 
 type TlsM h g = ErrorT S.Alert (StateT (S.HandshakeState h g) (HandleMonad h))
@@ -74,6 +78,12 @@
 
 getKeys :: HandleLike h => S.PartnerId -> TlsM h g S.Keys
 getKeys = gets . S.getKeys
+
+getInitSet :: HandleLike h => S.PartnerId -> TlsM h g S.InitialSettings
+getInitSet = gets . S.getInitSet
+
+setInitSet :: HandleLike h => S.PartnerId -> S.InitialSettings -> TlsM h g ()
+setInitSet = (modify .) . S.setInitSet
 
 getClientFinished, getServerFinished ::
 	HandleLike h => S.PartnerId -> TlsM h g BS.ByteString
