diff --git a/cakyrespa.cabal b/cakyrespa.cabal
--- a/cakyrespa.cabal
+++ b/cakyrespa.cabal
@@ -2,11 +2,14 @@
 cabal-version:	>= 1.6
 
 name:		cakyrespa
-version:	0.0.1
+version:	0.0.3
 stability:	Alpha
 license:	BSD3
 license-file:	LICENSE
 
+author:		iocikun juj <PAF01143@nifty.ne.jp>
+maintainer:	iocikun juj <PAF01143@nifty.ne.jp>
+
 category:	Teaching
 synopsis:	run turtle like LOGO with lojban
 description:	run turtle like LOGO with lojban
@@ -17,6 +20,6 @@
     hs-source-dirs:	src
     main-is:		cakyrespa.hs
     other-modules:	Language.Lojban.Read
-    build-depends:	base >3 && <5, lojbanParser >= 0.1.4,
-        gluturtle >= 0.0.7, GLUT
+    build-depends:	base >3 && <5, lojbanParser >= 0.1.5,
+        gluturtle >= 0.0.8, GLUT
     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
@@ -13,21 +13,20 @@
 	Time, KU, Linkargs, FIhO)
 import qualified Language.Lojban.Parser as P
 import Data.Maybe
-
-main = do
-	let	ret = readLojban ".i ko carna fi lo zunle la'u li panono"
-	print ret
+import Data.Char
 
 data Lojban
 	= Bridi Selbri [(Tag, Sumti)]
 	| Vocative String
 	| Free [Free]
 	| ParseError String
+	| NotImplemented String
 	deriving (Show, Eq)
 
 data Selbri
 	= Brivla String
 	| Linkargs Selbri Sumti
+	| NotImplementedSelbri String
 	deriving (Show, Eq)
 
 data Sumti
@@ -38,15 +37,18 @@
 	| LI Mex
 	| KU
 	| SFIhO Selbri Sumti
+	| NotImplementedSumti String
 	deriving (Show, Eq)
 
 data RelativeClause
 	= POI Lojban
 	| Debug String
+	| NotImplementedRelativeClause String
 	deriving (Show, Eq)
 
 data Mex
 	= Number Double
+	| NotImplementedMex String
 	deriving (Show, Eq)
 
 data Tag
@@ -54,6 +56,7 @@
 	| FIhO Selbri
 	| BAI String
 	| Time [String]
+	| NotImplementedTag String
 	deriving (Show, Eq)
 
 readLojban :: String -> Lojban
@@ -70,7 +73,7 @@
 process (TermsBridiTail ss _ _ (P.Selbri selbri)) =
 	Bridi (readSelbri selbri) $ processTagSumti ss []
 process (P.Selbri selbri) = Bridi (readSelbri selbri) []
-process t = error $ "process: " ++ show t
+process t = NotImplemented $ "process: " ++ show t
 
 processTagSumti :: [P.Sumti] -> [P.Sumti] -> [(Tag, Sumti)]
 processTagSumti s t = let
@@ -92,10 +95,11 @@
 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 _ _ _ ts) = (Nothing, Time $ map readTime ts)
-readTag t = error $ "readTag: " ++ show t
+readTag t = (Nothing, NotImplementedTag $ "readTag: " ++ show t)
 
 readTime ::  IntervalProperty -> String
 readTime (ZAhO (_, z, _) _) = z
+readTime ip = "readTime: " ++ show ip
 
 faList :: [(String, Int)]
 faList = [
@@ -114,31 +118,48 @@
 readSumti (P.KU _ _) = KU
 readSumti (TagSumti (P.FIhO (_, "fi'o", _) _ selbri _ _) sumti) =
 	SFIhO (readSelbri selbri) (readSumti sumti)
-readSumti s = error $ "readSumti: " ++ show s
+readSumti s = NotImplementedSumti $ "readSumti: " ++ show s
 
 readMex :: Operand -> Mex
 readMex (P.Number n _ _) = readNumber n
+readMex o = NotImplementedMex $ "readMex: " ++ show o
 
--- readNumber :: P.Number -> Mex
+readNumber :: [Clause] -> Mex
 readNumber = Number . paToInt . map (\(_, p, _) -> p)
 
+processKIhO :: [String] -> [String]
+processKIhO = reverse . pk 3 . reverse
+	where
+	pk _ [] = []
+	pk n ("ki'o" : rest) = replicate n "no" ++ pk 3 rest
+	pk n (pa : rest)
+		| n > 0 = pa : pk (n - 1) rest
+		| otherwise = pa : pk 2 rest
+
 paToInt :: [String] -> Double
-paToInt = pti . reverse
+paToInt = pti . reverse . processKIhO
 	where
 	pti [] = 0
-	pti (p : rest) = fromJust (lookup p paList) + 10 * pti rest
+	pti (p : rest) = fromJust (lookup' p paList) + 10 * pti rest
 
+lookup' :: Eq a => a -> [([a], b)] -> Maybe b
+lookup' _ [] = Nothing
+lookup' x ((xs, y) : ys)
+	| x `elem` xs = Just y
+	| otherwise = lookup' x ys
+
+paList :: [([String], Double)]
 paList = [
-	("no", 0),
-	("pa", 1),
-	("re", 2),
-	("ci", 3),
-	("vo", 4),
-	("mu", 5),
-	("xa", 6),
-	("ze", 7),
-	("bi", 8),
-	("so", 9)
+	(["no", "0"], 0),
+	(["pa", "1"], 1),
+	(["re", "2"], 2),
+	(["ci", "3"], 3),
+	(["vo", "4"], 4),
+	(["mu", "5"], 5),
+	(["xa", "6"], 6),
+	(["ze", "7"], 7),
+	(["bi", "8"], 8),
+	(["so", "9"], 9)
  ]
 
 readSumtiTail :: SumtiTail -> (Selbri, Maybe RelativeClause)
@@ -146,6 +167,7 @@
 	(readSelbri s, Nothing)
 readSumtiTail (SelbriRelativeClauses s (Just r)) =
 	(readSelbri s, Just $ readRelativeClauses r)
+readSumtiTail st = (NotImplementedSelbri $ "readSumtiTail: " ++ show st, Nothing)
 
 readRelativeClauses :: P.RelativeClause -> RelativeClause
 readRelativeClauses (NOI (_, "poi", _) _ bridi _ _) =
@@ -153,10 +175,10 @@
 readRelativeClauses r = Debug $  show r
 
 readSelbri :: P.Selbri -> Selbri
-readSelbri (P.Brivla (_, b, _) _) = Brivla b
+readSelbri (P.Brivla (_, b, _) _) = Brivla $ map toLower b
 readSelbri (P.Linkargs selbri (BE (_, "be", _) _ sumti _ _ _)) =
 	Linkargs (readSelbri selbri) (readSumti sumti)
-readSelbri s = error $ "readSelbri: " ++ show s
+readSelbri s = NotImplementedSelbri $ "readSelbri: " ++ show s
 	
 next :: Int -> [Int] -> Int
 next n e
diff --git a/src/cakyrespa.hs b/src/cakyrespa.hs
--- a/src/cakyrespa.hs
+++ b/src/cakyrespa.hs
@@ -147,11 +147,11 @@
 processInput _ _ COhO = return False
 processInput f _ u@(Unknown _) = do
 	outputString f ".i mi na jimpe"
-	putStrLn $ show u
+	print u
 	return True
 processInput f _ u@(UnknownSelpli _) = do
 	outputString f ".i mi na djuno lo bi'unai selpli"
-	putStrLn $ show u
+	print u
 	return True
 processInput f _ ParseErrorC = do
 	outputString f ".i di'u na drani fo lo gerna"
