diff --git a/cakyrespa.cabal b/cakyrespa.cabal
--- a/cakyrespa.cabal
+++ b/cakyrespa.cabal
@@ -2,7 +2,7 @@
 cabal-version:	>= 1.6
 
 name:		cakyrespa
-version:	0.0.6
+version:	0.0.7
 stability:	Alpha
 license:	BSD3
 license-file:	LICENSE
@@ -17,10 +17,14 @@
 	.
 	This is alpha version.
 
+source-repository	head
+    type:	git
+    location:	git://github.com/YoshikuniJujo/cakyrespa.git
+
 executable	cakyrespa
     hs-source-dirs:	src
     main-is:		cakyrespa.hs
     other-modules:	Language.Lojban.Read
     build-depends:	base >3 && <5, lojbanParser >= 0.1.5,
-        gluturtle >= 0.0.9, GLUT
+        gluturtle >= 0.0.10, GLUT, yjsvg
     ghc-options:	-Wall
diff --git a/src/Language/Lojban/Read.hs b/src/Language/Lojban/Read.hs
--- a/src/Language/Lojban/Read.hs
+++ b/src/Language/Lojban/Read.hs
@@ -10,7 +10,7 @@
 
 import Language.Lojban.Parser hiding (
 	Tag, Sumti, Selbri, KOhA, FA, Brivla, BAI, Number, LI, RelativeClause,
-	Time, KU, Linkargs, FIhO, NU)
+	Time, KU, Linkargs, FIhO, NU, NA, LA, ZOI, ME)
 import qualified Language.Lojban.Parser as P
 import Data.Maybe
 import Data.Char
@@ -29,6 +29,8 @@
 	| Linkargs Selbri Sumti
 	| NU Lojban
 	| NotImplementedSelbri String
+	| NA Selbri
+	| ME Sumti
 	deriving (Show, Eq)
 
 data Sumti
@@ -39,6 +41,7 @@
 	| LI Mex
 	| KU
 	| SFIhO Selbri Sumti
+	| ZOI String
 	| NotImplementedSumti String
 	deriving (Show, Eq)
 
@@ -92,6 +95,8 @@
 		(process $ t)
 		(process $ u)
 process (P.Selbri selbri) = Bridi (readSelbri selbri) []
+process (P.SelbriTailTerms selbri ts _ _) =
+	Bridi (readSelbri selbri) $ processTagSumti [] ts
 process t = NotImplemented $ "process: " ++ show t
 
 processTagSumti :: [P.Sumti] -> [P.Sumti] -> [(Tag, Sumti)]
@@ -113,6 +118,8 @@
 readTag :: P.Tag -> (Maybe Int, Tag)
 readTag (P.FA (_, f, _) _) = let n = fromJust $ lookup f faList in (Just n, FA n)
 readTag (P.BAI _ _ (_, b, _) _ _) = (Nothing, BAI b)
+readTag (P.Time _ [((_, t, _), Nothing, Nothing)] _ _) =
+	(Nothing, Time [t])
 readTag (P.Time _ _ _ ts) = (Nothing, Time $ map readTime ts)
 readTag t = (Nothing, NotImplementedTag $ "readTag: " ++ show t)
 
@@ -133,12 +140,20 @@
 readSumti (P.KOhA (_, k, _) _) = KOhA k
 readSumti (LALE (_, "lo", _) _ st _ _) = LO selbri relative
 	where (selbri, relative) = readSumtiTail st
+readSumti (LALE (_, "la", _) _ st _ _) = LA $ Right selbri
+	where (selbri, _relative) = readSumtiTail st
+readSumti (P.LA (_, "la", _) _ _ [(_, n, _)] _) = LA $ Left n
 readSumti (P.LI _ _ m _ _) = LI $ readMex m
 readSumti (P.KU _ _) = KU
 readSumti (TagSumti (P.FIhO (_, "fi'o", _) _ selbri _ _) sumti) =
 	SFIhO (readSelbri selbri) (readSumti sumti)
+readSumti (P.ZOI _ "zoi" ws _ _) = ZOI $ processZOI $ concat ws
 readSumti s = NotImplementedSumti $ "readSumti: " ++ show s
 
+processZOI :: String -> String
+processZOI ('.' : str) = let ('.' : s) = reverse str in
+	dropWhile isSpace $ reverse $ dropWhile isSpace s
+
 readMex :: Operand -> Mex
 readMex (P.Number n _ _) = readNumber n
 readMex o = NotImplementedMex $ "readMex: " ++ show o
@@ -198,6 +213,8 @@
 readSelbri (P.Linkargs selbri (BE (_, "be", _) _ sumti _ _ _)) =
 	Linkargs (readSelbri selbri) (readSumti sumti)
 readSelbri (P.NU (_, "nu", _) _ _ _ bridi _ _) = NU $ process bridi
+readSelbri (P.NA (_, "na", _) _ s) = NA $ readSelbri s
+readSelbri (P.ME (_, "me", _) _ s _ _ _ _) = ME $ readSumti s
 readSelbri s = NotImplementedSelbri $ "readSelbri: " ++ show s
 	
 next :: Int -> [Int] -> Int
diff --git a/src/cakyrespa.hs b/src/cakyrespa.hs
--- a/src/cakyrespa.hs
+++ b/src/cakyrespa.hs
@@ -2,6 +2,7 @@
 
 import Graphics.UI.GLUT hiding (R, Repeat)
 import Graphics.UI.GLUT.Turtle
+import Text.XML.YJSVG
 
 import Language.Lojban.Read
 
@@ -28,15 +29,57 @@
 pcmd p = case p of
 	(Vocative "co'o") -> COhO
 	(TenseGI "ba" b c) -> Commands (pcmd b) (pcmd c)
+	b@(Bridi (Brivla "tcidu") s) -> fromMaybe (Unknown b) $ readTcidu s
+	b@(Bridi (Brivla "rejgau") s) -> fromMaybe (Unknown b) $ readRejgau s
+	b@(Bridi (Brivla "viska") s) -> fromMaybe (Unknown b) $ readViska s
+	b@(Bridi (NA (Brivla "viska")) s) -> fromMaybe (Unknown b) $ readNAViska s
+	b@(Bridi (Brivla "cisni") s) -> fromMaybe (Unknown b) $ readCisni s
 	b@(Bridi (Brivla "xruti") s) -> fromMaybe (Unknown b) $ readXruti s
 	b@(Bridi (Brivla "rapli") s) -> fromMaybe (Unknown b) $ readRapli s
 	b@(Bridi (Brivla "carna") s) -> fromMaybe (Unknown b) $ readCarna s
 	b@(Bridi (Brivla "crakla") s) -> fromMaybe (Unknown b) $ readCrakla s
 	b@(Bridi (Brivla "rixykla") s) -> fromMaybe (Unknown b) $ readRixykla s
-	b@(Bridi (Brivla "pilno") s) -> fromMaybe (Unknown b) $ readPilno s
+	b@(Bridi (Brivla "pilno") s) ->
+		fromMaybe (Unknown b) $ readBAPilno s
+	b@(Bridi (NA (Brivla "pilno")) s) -> fromMaybe (Unknown b) $ readNAPilno s
 	b@(Bridi (Brivla "clugau") s) -> fromMaybe (Unknown b) $ readClugau s
 	r -> Unknown r
 
+readTcidu s = do
+	KOhA "ko" <- lookup (FA 1) s
+	LA (Right (ME (ZOI fp))) <- lookup (FA 3) s
+	return $ READFILE fp
+
+readRejgau s = do
+	KOhA "ko" <- lookup (FA 1) s
+	ZOI fp <- lookup (BAI "me'e") s
+	tai <- lookup (BAI "tai") s
+	case tai of
+		LA (Right (Brivla "cakyrespa")) -> return $ SAVEASCAK fp
+		LA (Left "syvygyd") -> return $ SAVEASSVG fp
+		s -> error $ show s
+
+readViska :: [(Tag, Sumti)] -> Maybe Command
+readViska s = do
+	KOhA "ko" <- lookup (FA 2) s
+	return VISKA
+
+readNAViska :: [(Tag, Sumti)] -> Maybe Command
+readNAViska s = do
+	KOhA "ko" <- lookup (FA 2) s
+	return NAVISKA
+
+readNAPilno :: [(Tag, Sumti)] -> Maybe Command
+readNAPilno s = do
+	KOhA "ko" <- lookup (FA 1) s
+	return NAPILNOLOPENBI
+
+readCisni :: [(Tag, Sumti)] -> Maybe Command
+readCisni s = do
+	LI (Number n) <- lookup (FA 1) s
+	KOhA "ko" <- lookup (FA 2) s
+	return $ CISNI n
+
 readXruti :: [(Tag, Sumti)] -> Maybe Command
 readXruti s = do
 	KOhA "ko" <- lookup (FA 1) s
@@ -56,6 +99,12 @@
 		(False, True) -> return COhUCLUGAU
 		_ -> fail "bad"
 
+readBAPilno :: [(Tag, Sumti)] -> Maybe Command
+readBAPilno s = do
+	cm <- readPilno s
+	if (Time ["ba"], KU) `elem` s then return cm
+		else return $ Commands cm PILNOLOPENBI
+
 readPilno :: [(Tag, Sumti)] -> Maybe Command
 readPilno s = do
 	KOhA "ko" <- lookup (FA 1) s
@@ -78,6 +127,7 @@
 			(Brivla skari) _))) _ -> do
 			(r, g, b) <- lookup skari skaste
 			return $ BURSKA r g b
+		LO (Brivla "penbi") Nothing -> return PILNOLOPENBI
 		_ -> return $ UnknownSelpli selpli
 
 skaste :: [(String, (Int, Int, Int))]
@@ -147,6 +197,14 @@
 	| Commands Command Command
 	| Repeat Int Command
 	| XRUTI
+	| CISNI Double
+	| NAPILNOLOPENBI
+	| PILNOLOPENBI
+	| NAVISKA
+	| VISKA
+	| SAVEASSVG FilePath
+	| SAVEASCAK FilePath
+	| READFILE FilePath
 	| COhO | Unknown Lojban | ParseErrorC
 	| UnknownSelpli Sumti
 	deriving Show
@@ -164,10 +222,23 @@
 processInput _ t COhACLUGAU = beginfill t >> return True
 processInput _ t COhUCLUGAU = endfill t >> return True
 processInput _ t XRUTI = undo t >> return True
+processInput _ t (CISNI s) = shapesize t s s >> return True
+processInput _ t NAPILNOLOPENBI = penup t >> return True
+processInput _ t PILNOLOPENBI = pendown t >> return True
+processInput _ t NAVISKA = hideturtle t >> return True
+processInput _ t VISKA = showturtle t >> return True
 processInput _ _ COhO = return False
 processInput f t (Commands c d) = processInput f t c >> processInput f t d
 processInput f t (Repeat n c) = sequence_ (replicate n (processInput f t c)) >>
 	return True
+processInput _ t (SAVEASSVG fp) = do
+	w <- windowWidth t
+	h <- windowHeight t
+	svg <- getSVG t
+	writeFile fp $ showSVG w h svg
+	return True
+processInput _ t (SAVEASCAK fp) = inputs t >>= writeFile fp . show >> return True
+processInput _ t (READFILE fp) = readFile fp >>= runInputs t . read >> return True
 processInput f _ u@(Unknown _) = do
 	outputString f ".i mi na jimpe"
 	print u
