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.1.6.9
+version:	0.1.6.10
 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.1.6.9
+    tag:	peyotls-0.1.6.10
 
 library
     hs-source-dirs:	src
@@ -306,7 +306,7 @@
         crypto-pubkey == 0.2.*, crypto-pubkey-types == 0.4.*,
         cipher-aes == 0.2.*,
         bytable == 0.1.*, handle-like == 0.1.*, peyotls-codec == 0.3.*,
-        stm == 2.4.*, transformers-base == 0.4.*, monad-control == 0.3.*
+        stm == 2.4.*, transformers-base == 0.4.*, monad-control == 1.0.*
     ghc-options:	-Wall
     extensions:		PatternGuards, DoAndIfThenElse
 
diff --git a/src/Network/PeyoTLS/Run/Crypto.hs b/src/Network/PeyoTLS/Run/Crypto.hs
--- a/src/Network/PeyoTLS/Run/Crypto.hs
+++ b/src/Network/PeyoTLS/Run/Crypto.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings, TupleSections, PackageImports #-}
 
 module Network.PeyoTLS.Run.Crypto (
-	makeKeys, decrypt, encrypt, sha1, sha256,
+	makeKeys, decrypt, encrypt, sha1, sha256, prf,
 	Hash, Side(..), finishedHash ) where
 
 import Prelude hiding (splitAt, take)
diff --git a/src/Network/PeyoTLS/Run/Monad.hs b/src/Network/PeyoTLS/Run/Monad.hs
--- a/src/Network/PeyoTLS/Run/Monad.hs
+++ b/src/Network/PeyoTLS/Run/Monad.hs
@@ -22,8 +22,7 @@
 import "monads-tf" Control.Monad.State
 	(lift, StateT, runStateT, evalStateT, gets, modify)
 import "monads-tf" Control.Monad.Error (ErrorT, runErrorT, throwError)
-import "monads-tf" Control.Monad.Error.Class (Error(..))
-import Data.Word (Word8, Word64)
+import Data.Word (Word64)
 import Data.HandleLike (HandleLike(..))
 import "crypto-random" Crypto.Random (CPRG)
 
@@ -31,6 +30,7 @@
 import qualified Data.X509 as X509
 import qualified Codec.Bytable.BigEndian as B
 
+import Network.PeyoTLS.Codec.Alert (Alert(..), AlertLevel(..), AlertDesc(..))
 import qualified Network.PeyoTLS.Run.State as S (State1(..), Keys(..),
 	TlsState(..), initState, PartnerId, newPartner,
 		getGen, setGen, getNames, setNames, getCertificate, setCertificate,
@@ -71,22 +71,6 @@
 
 throw :: HandleLike h => AlertLevel -> AlertDesc -> String -> TlsM h g a
 throw = ((throwError .) .) . Alert
-
-data Alert
-	= Alert AlertLevel AlertDesc String
-	| ExternalAlert String
-	| NotDetected String deriving Show
-
-data AlertLevel = ALWarning | ALFtl | ALRaw Word8 deriving Show
-
-data AlertDesc
-	= ADCloseNotify | ADUnexMsg   | ADBadRecMac  | ADRecOverflow | ADDecFail
-	| ADHsFailure   | ADUnsCert   | ADCertEx     | ADCertUnk     | ADIllParam
-	| ADUnkCa       | ADDecodeErr | ADDecryptErr | ADProtoVer    | ADInsSec
-	| ADInternalErr | ADUnk       | ADRaw Word8
-	deriving Show
-
-instance Error Alert where strMsg = NotDetected
 
 withRandom :: HandleLike h => (gen -> (a, gen)) -> TlsM h gen a
 withRandom p = p `liftM` gets S.getGen >>=
