diff --git a/src/Graphics/X11/Turtle.hs b/src/Graphics/X11/Turtle.hs
--- a/src/Graphics/X11/Turtle.hs
+++ b/src/Graphics/X11/Turtle.hs
@@ -35,6 +35,7 @@
 	runInputs,
 	getSVG,
 	field,
+	waitTurtle,
 
 	-- ** move turtle
 	forward,
@@ -107,7 +108,8 @@
 import Text.XML.YJSVG(SVG(..), Position(..), Color(..))
 import qualified Text.XML.YJSVG as S(center, topleft)
 
-import Control.Concurrent(killThread, newChan, writeChan, getChanContents)
+import Control.Concurrent(
+	killThread, newChan, writeChan, readChan, getChanContents)
 import Control.Monad(replicateM_, zipWithM_)
 import Control.Arrow((&&&))
 import Data.IORef(IORef, newIORef, readIORef)
@@ -221,6 +223,12 @@
 
 flush :: Turtle -> IO ()
 flush = (`input` Flush)
+
+waitTurtle :: Turtle -> IO ()
+waitTurtle t = do
+	c <- newChan
+	input t $ FinishSign c
+	readChan c
 
 --------------------------------------------------------------------------------
 
diff --git a/src/Graphics/X11/Turtle/Input.hs b/src/Graphics/X11/Turtle/Input.hs
--- a/src/Graphics/X11/Turtle/Input.hs
+++ b/src/Graphics/X11/Turtle/Input.hs
@@ -2,6 +2,7 @@
 
 import Graphics.X11.Turtle.State(TurtleState(..), initTurtleState, makeShape)
 import Text.XML.YJSVG(SVG(..), Color(..), Position(..))
+import Control.Concurrent.Chan (Chan)
 
 --------------------------------------------------------------------------------
 
@@ -34,7 +35,7 @@
 	| PositionStep (Maybe Double)
 	| DirectionStep (Maybe Double)
 	| Degrees Double
-	deriving (Show, Read)
+	| FinishSign (Chan ())
 
 turtleSeries :: [TurtleInput] -> [TurtleState]
 turtleSeries tis = let ts0 = initTurtleState in ts0 : ts0 : turtles [] ts0 tis
@@ -65,7 +66,7 @@
 
 reset :: TurtleState -> TurtleState
 reset t = t{draw = Nothing, clear = False, undo = False, silentundo = Nothing,
-	undonum = 1, sleep = Nothing, flush = False}
+	undonum = 1, sleep = Nothing, flush = False, finishSign = Nothing}
 
 set :: TurtleState -> Maybe SVG -> TurtleState
 set t drw = t{draw = drw, drawed = maybe id (:) drw $ drawed t}
@@ -105,4 +106,5 @@
 nextTurtle t (PositionStep ps) = (reset t){positionStep = ps}
 nextTurtle t (DirectionStep ds) = (reset t){directionStep = ds}
 nextTurtle t (Degrees ds) = (reset t){degrees = ds}
+nextTurtle t (FinishSign c) = (reset t){finishSign = Just c}
 nextTurtle _ _ = error "not defined"
diff --git a/src/Graphics/X11/Turtle/Move.hs b/src/Graphics/X11/Turtle/Move.hs
--- a/src/Graphics/X11/Turtle/Move.hs
+++ b/src/Graphics/X11/Turtle/Move.hs
@@ -47,9 +47,12 @@
 import Control.Monad.Tools(unlessM)
 import Data.Maybe(isJust, isNothing)
 
+import Control.Concurrent.Chan(writeChan)
+
 --------------------------------------------------------------------------------
 
 moveTurtle :: Field -> Character -> Layer -> TurtleState -> TurtleState -> IO ()
+moveTurtle _ _ _ _ TurtleState{finishSign = Just c} = writeChan c ()
 moveTurtle _ _ _ _ TurtleState{sleep = Just t} = threadDelay $ 1000 * t
 moveTurtle f _ _ _ TurtleState{flush = True} = flushField f True $ return ()
 moveTurtle f c l t0 t1 = do
diff --git a/src/Graphics/X11/Turtle/State.hs b/src/Graphics/X11/Turtle/State.hs
--- a/src/Graphics/X11/Turtle/State.hs
+++ b/src/Graphics/X11/Turtle/State.hs
@@ -4,6 +4,7 @@
 import Text.XML.YJSVG(Position(..), SVG(Fill), Color(RGB))
 import Data.Tuple.Tools(rotate)
 import Control.Arrow((***))
+import Control.Concurrent.Chan (Chan)
 
 data TurtleState = TurtleState {
 	position :: Position,
@@ -32,8 +33,11 @@
 
 	positionStep :: Maybe Double,
 	directionStep :: Maybe Double,
-	interval :: Int}
+	interval :: Int,
 
+	finishSign :: Maybe (Chan ())
+ }
+
 initTurtleState :: TurtleState
 initTurtleState = TurtleState {
 	position = Center 0 0,
@@ -62,7 +66,10 @@
 
 	positionStep = Just 10,
 	directionStep = Just $ pi / 18,
-	interval = 10000}
+	interval = 10000,
+
+	finishSign = Nothing
+ }
 
 makeShape :: TurtleState -> Double -> Position -> [Position]
 makeShape ts dir_ pos = (mkPos . move . rotate dir . resize) `map` shape ts
diff --git a/xturtle.cabal b/xturtle.cabal
--- a/xturtle.cabal
+++ b/xturtle.cabal
@@ -2,7 +2,7 @@
 cabal-version:	>= 1.6
 
 name:		xturtle
-version:	0.1.23
+version:	0.1.24
 stability:	experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
