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
@@ -47,6 +47,7 @@
 	circle,
 	home,
 	undo,
+	silentundo,
 	sleep,
 	flush,
 
@@ -210,6 +211,9 @@
 
 undo :: Turtle -> IO ()
 undo t = info t undonum >>= flip replicateM_ (input t Undo)
+
+silentundo :: Turtle -> Int -> IO ()
+silentundo t n = input t $ SilentUndo n
 
 sleep :: Turtle -> Int -> IO ()
 sleep t = input t . Sleep
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
@@ -17,6 +17,7 @@
 	| PutImage FilePath Double Double
 	| Undo
 	| Undonum Int
+	| SilentUndo Int
 	| Clear
 	| Sleep Int
 	| Flush
@@ -42,6 +43,9 @@
 turtles [] ts0 (Undo : tis) = ts0 : turtles [] ts0 tis
 turtles (tsb : tsbs) _ (Undo : tis) =
 	let ts1 = tsb{undo = True} in ts1 : turtles tsbs ts1 tis
+turtles tsbs _ (SilentUndo n : tis) = let
+	ts1_ : tsbs' = drop (n - 1) tsbs
+	ts1 = ts1_{ silentundo = Just n } in ts1 : turtles tsbs' ts1 tis
 turtles tsbs ts0 (Forward len : tis) = case position ts0 of
 	Center x0 y0 -> let
 		x = x0 + len * cos (direction ts0)
@@ -60,8 +64,8 @@
 turtles _ _ [] = error "no more input"
 
 reset :: TurtleState -> TurtleState
-reset t = t{draw = Nothing, clear = False, undo = False, undonum = 1,
-	sleep = Nothing, flush = False}
+reset t = t{draw = Nothing, clear = False, undo = False, silentundo = Nothing,
+	undonum = 1, sleep = Nothing, flush = False}
 
 set :: TurtleState -> Maybe SVG -> TurtleState
 set t drw = t{draw = drw, drawed = maybe id (:) drw $ drawed t}
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
@@ -43,9 +43,9 @@
 import qualified Text.XML.YJSVG as S(topleft)
 
 import Control.Concurrent(threadDelay)
-import Control.Monad(when, unless, forM_)
+import Control.Monad(when, unless, forM_, replicateM_)
 import Control.Monad.Tools(unlessM)
-import Data.Maybe(isJust)
+import Data.Maybe(isJust, isNothing)
 
 --------------------------------------------------------------------------------
 
@@ -59,7 +59,10 @@
 		when (isJust $ draw t0) $ do
 			unlessM (undoLayer l) $ clearLayer l >> redraw
 			when (visible t1) $ drawTtl (direction t0) $ position t0
-	when (visible t1) $ do
+	case silentundo t1 of
+		Just n -> replicateM_ n (undoLayer l) >> clearLayer l >> redraw
+		_ -> return ()
+	when (visible t1 && isNothing (silentundo t1)) $ do
 		forM_ (directions t0 t1) $ \dir -> fl $
 			drawTtl dir (position t0) >> threadDelay (interval t0)
 		forM_ (positions w h t0 t1) $ \p -> fl $
@@ -67,7 +70,8 @@
 		fl $ drawTtl (direction t1) $ position t1
 	when (visible t0 && not (visible t1)) $ fl $ clearCharacter c
 	when (clear t1) $ fl $ clearLayer l
-	unless (undo t1) $ fl $ maybe (return ()) (drawSVG f l) (draw t1)
+	unless (undo t1 || isJust (silentundo t1)) $
+		fl $ maybe (return ()) (drawSVG f l) (draw t1)
 	where
 	fl = flushField f $ stepbystep t0
 	redraw = mapM_ (drawSVG f l) $ reverse $ drawed t1
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
@@ -22,6 +22,7 @@
 	clear :: Bool,
 	undo :: Bool,
 	undonum :: Int,
+	silentundo :: Maybe Int,
 	sleep :: Maybe Int,
 	flush :: Bool,
 	fill :: Bool,
@@ -51,6 +52,7 @@
 	clear = False,
 	undo = False,
 	undonum = 0,
+	silentundo = Nothing,
 	sleep = Nothing,
 	flush = False,
 	fill = False,
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.12
+version:	0.1.13
 stability:	experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
