diff --git a/prototype.cabal b/prototype.cabal
--- a/prototype.cabal
+++ b/prototype.cabal
@@ -2,7 +2,7 @@
 cabal-version:	>= 1.2
 
 name:		prototype
-version:	0.5.0
+version:	0.5.3
 stability:	experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -25,7 +25,7 @@
 		> import Control.Prototype
 		>
 		> main :: IO ()
-		> main = fmap fst $ flip runProt initProtEnv $ do
+		> main = flip evalProt initProtEnv $ do
 		>	( dog, setName, sit ) <- package "dog" $ do
 		>		dog <- clone object
 		>		name	<- makeMember "name"
diff --git a/src/Control/Prototype.hs b/src/Control/Prototype.hs
--- a/src/Control/Prototype.hs
+++ b/src/Control/Prototype.hs
@@ -8,6 +8,8 @@
 	Method,
 
 	runProt,
+	evalProt,
+	execProt,
 	initProtEnv,
 	package,
 	object,
@@ -15,12 +17,15 @@
 	makeMember,
 	setMember,
 	member,
+	makeMethod,
 	setMethod,
 	method,
 
 	liftProt,
+	primBool,
 	primInt,
 	primStr,
+	fromPrimBool,
 	fromPrimInt,
 	fromPrimStr,
 
@@ -29,7 +34,8 @@
 
 import Prelude hiding ( head )
 import "monads-tf" Control.Monad.State (
-	StateT, runStateT, lift, MonadIO, liftIO, put, get, gets )
+	StateT, runStateT, evalStateT, execStateT,
+	lift, MonadIO, liftIO, put, get, gets )
 import Data.List ( (\\) )
 import Data.Maybe ( fromMaybe, listToMaybe )
 
@@ -46,6 +52,12 @@
 runProt :: Monad m => Prot m a -> ProtEnv m -> m ( a, ProtEnv m )
 runProt = runStateT
 
+evalProt :: Monad m => Prot m a -> ProtEnv m -> m a
+evalProt = evalStateT
+
+execProt :: Monad m => Prot m a -> ProtEnv m -> m ( ProtEnv m )
+execProt = execStateT
+
 liftProt :: Monad m => m a -> Prot m a
 liftProt = lift
 
@@ -62,10 +74,14 @@
 
 data Object =
 	ObjectId { fromObjId :: Int } |
+	PrimitiveBool { fromPrimBool :: Bool } |
 	PrimitiveInt { fromPrimInt :: Int } |
 	PrimitiveString { fromPrimStr :: String }
 	deriving ( Eq, Show )
 
+primBool :: Bool -> Object
+primBool = PrimitiveBool
+
 primInt :: Int -> Object
 primInt = PrimitiveInt
 
@@ -133,6 +149,12 @@
 setMember obj mn val = do
 	objBody@ObjectBody { objectMembers = mems } <- getObject obj
 	putObject objBody { objectMembers = ( mn, val ) : mems }
+
+makeMethod :: Monad m => Method m -> Prot m Object
+makeMethod met = do
+	newId <- getNewId
+	putObject $ Method newId met
+	return newId
 
 setMethod :: Monad m => Object -> Member -> Method m -> Prot m ()
 setMethod obj mem met = do
