diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,32 @@
 
 Haskell Hall Symbols Library
 
+# Quickstart
+
+```shell
+% stack repl
+```
+
+```haskell
+-- prepare
+repl> :set -package matrix-as-xyz
+repl> :m Data.Matrix.AsXYZ
+repl> :l Crystallography.HallSymbols
+
+-- print general positions
+repl> fmap prettyXYZ $ fromHallSymbols' "C -2yc"
+
+ ["x,y,z","x+1/2,y+1/2,z","x,-y,z+1/2","x+1/2,-y+1/2,z+1/2"]
+
+-- print generators
+repl> fmap prettyXYZ $ fromHallSymbols'' "C -2yc"
+
+["x,y,z","x+1/2,y+1/2,z","x,-y,z+1/2"]
+```
+
+
+
 ## License
 
-See the [LICENSE](https://github.com/narumij/hall-symbols/LICENSE)
+See the [LICENSE](LICENSE)
 file in the repository.
diff --git a/hall-symbols.cabal b/hall-symbols.cabal
--- a/hall-symbols.cabal
+++ b/hall-symbols.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.33.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d12bbdc0541111541cff37cd9476b103519c83cb6f35480d7c6234e0e14cda37
+-- hash: 702da6b77b983eb8b29d4431755b69ea93d2ecadc33590f79090f8406752c85a
 
 name:           hall-symbols
-version:        0.1.0.2
+version:        0.1.0.3
 synopsis:       Symmetry operations generater of Hall Symbols
 description:    Please see the README on GitHub at <https://github.com/narumij/hall-symbols#readme>
 category:       Chemistry
@@ -17,10 +19,9 @@
 license:        BSD3
 license-file:   LICENSE
 build-type:     Simple
-cabal-version:  >= 1.10
 extra-source-files:
-    ChangeLog.md
     README.md
+    ChangeLog.md
 
 source-repository head
   type: git
diff --git a/src/Crystallography/HallSymbols.hs b/src/Crystallography/HallSymbols.hs
--- a/src/Crystallography/HallSymbols.hs
+++ b/src/Crystallography/HallSymbols.hs
@@ -23,7 +23,8 @@
   fromHallSymbols,
   fromHallSymbols',
   hallSymbols,
-  hallSymbols',
+--  hallSymbols',
+  parser,
   LatticeSymbol,
   MatrixSymbol,
   OriginShift,
@@ -110,8 +111,8 @@
 space' = oneOf " _"
 
 -- | Primitive parser
-hallSymbols' :: CharParser () ( LatticeSymbol, [MatrixSymbol], OriginShift )
-hallSymbols' = do
+parser :: CharParser () ( LatticeSymbol, [MatrixSymbol], OriginShift )
+parser = do
   l   <- latticeSymbol
   nat <- many1 (try ms)
   v   <- option (0,0,0) os
@@ -124,15 +125,21 @@
       space'
       originShift
 
--- | Parser with convert
+-- | Parse and make Generators.
+generators :: CharParser () [Matrix Rational]
+generators = do
+  raw <- parser
+  return $ decodeSymbols raw
+
+-- | Parse and make General Positions.
 hallSymbols :: CharParser () [Matrix Rational]
 hallSymbols = do
-  raw <- hallSymbols'
+  g <- generators
   -- Step 1: Decode space-group symbols
   -- decodeSymbols関数で省略された軸情報を復元し、seiz matrixを生成します
   -- Step 2: Generate symmetry operators
   -- generate関数で得られたseiz matrixをgeneratorとして、一般点を生成します
-  let equivalentPositions = generate . decodeSymbols $ raw
+  let equivalentPositions = generate g
   -- generate関数が計算に失敗すると空の配列を返すので、その場合パースエラーとして処理します
   if null equivalentPositions
     then
@@ -141,9 +148,29 @@
       -- 正常に終了すると、一般座標の行列を返します。
       return equivalentPositions
 
+-- | Parse and make General Positions.
+generateLikeITC :: CharParser () [Matrix Rational]
+generateLikeITC = do
+  raw <- parser
+  let equivalentPositions = likeITC raw
+  if null equivalentPositions
+    then
+      fail "something happen when decode or generate process."
+    else
+      -- 正常に終了すると、一般座標の行列を返します。
+      return equivalentPositions
+
+likeITC :: ( LatticeSymbol, [MatrixSymbol], OriginShift ) -> [Matrix Rational]
+likeITC raw = if null h then [] else r            
+  where
+    constructMatrices' (l,nat,v) = fmap (mapOriginShfit v) [lattice l, map matrix nat]
+    [a,b] = constructMatrices' . restoreDefaultAxis $ raw
+    h = generate $ [identity] ++ b
+    r = generate $ h ++ a
+
 -- | Generate general equivalent positions by 4x4 matrix
 fromHallSymbols :: String -> Either ParseError [Matrix Rational]
-fromHallSymbols s = parse hallSymbols ("while reading " ++ show s) s
+fromHallSymbols s = parse generateLikeITC ("while reading " ++ show s) s
 
 -- | Generate general equivalent positions by 4x4 matrix (unsafe version)
 fromHallSymbols' :: String -> [Matrix Rational]
@@ -151,7 +178,20 @@
   Left e -> error $ show e
   Right mm -> mm
 
--- パーズした簡約記号からseiz matrixを復元します
+-- | Generate Generators by 4x4 matrix (unsafe version)
+fromHallSymbols'' :: String -> [Matrix Rational]
+fromHallSymbols'' s = case gg s of
+  Left e -> error $ show e
+  Right mm -> mm
+  where
+    gg s = parse generators ("while reading " ++ show s) s
+
+-- | Generate general equivalent positions by 4x4 matrix
+-- same as old version fromHallSymbols
+fromHallSymbols''' :: String -> Either ParseError [Matrix Rational]
+fromHallSymbols''' s = parse hallSymbols ("while reading " ++ show s) s
+
+-- パースした簡約記号からseiz matrixを復元します
 decodeSymbols :: ( LatticeSymbol, [MatrixSymbol], OriginShift ) -> [Matrix Rational]
 decodeSymbols = constructMatrices . restoreDefaultAxis
 
@@ -223,11 +263,11 @@
 -- 注意点として、恒等操作が二つあるなどしただけで、計算結果が変化するようである。
 -- このため、計算に供する行列はジェネレーターの組み合わせとして正しいかどうか配慮する必要がある。
 gn :: Int -> [Matrix Rational] -> [Matrix Rational] -> [Matrix Rational]
-gn n s m | length m == length mm = m
+gn n s m | length (nub m) == length mm = mm
          -- 計算が収束しなかった場合、空の配列を返し終了する.
          -- 既存の空間群の対称操作の生成が最大4回の繰り返しで足りるので、なんとなくで10回にしています
          | n > 10 = []
-         | otherwise = gn (succ n) s mm
+         | otherwise = gn (succ n) (nub s) mm
   where
     mm = nub . map (modulus1 . foldl1 multStd) . sequenceA $ [s,m]
 
diff --git a/src/Crystallography/HallSymbols/SpacegroupSymbols.hs b/src/Crystallography/HallSymbols/SpacegroupSymbols.hs
--- a/src/Crystallography/HallSymbols/SpacegroupSymbols.hs
+++ b/src/Crystallography/HallSymbols/SpacegroupSymbols.hs
@@ -171,7 +171,7 @@
   (  "28:cab",  "P 2 m b",  "P -2b 2"  ),
   (  "28:-cba",  "P 2 c m",  "P -2c 2"  ),
   (  "28:bca",  "P c 2 m",  "P -2c -2c"  ),
-  (  "28:a-c",  "b   P m 2 a",  "P -2a -2a"  ),
+  (  "28:a-cb",  "P m 2 a",  "P -2a -2a"  ),
   (  "29",  "P c a 21",  "P 2c -2ac"  ),
   (  "29:ba-c",  "P b c 21",  "P 2c -2b"  ),
   (  "29:cab",  "P 21 a b",  "P -2b 2a"  ),
@@ -396,7 +396,7 @@
   (  "88:1",  "I 41/a:1",  "I 4bw -1bw"  ),
   (  "88:2",  "I 41/a:2",  "-I 4ad"  ),
   (  "89",  "P 4 2 2",  "P 4 2"  ),
-  (  "90",  "P 42 1 2",  "P 4ab 2ab"  ),
+  (  "90",  "P 4 21 2",  "P 4ab 2ab"  ),
   (  "91",  "P 41 2 2",  "P 4w 2c"  ),
   (  "92",  "P 41 21 2",  "P 4abw 2nw"  ),
   (  "93",  "P 42 2 2",  "P 4c 2"  ),
@@ -473,8 +473,8 @@
   (  "152",  "P 31 2 1",  "P 31 2\""  ),
   (  "153",  "P 32 1 2",  "P 32 2c (0 0 -1)"  ),
   (  "154",  "P 32 2 1",  "P 32 2\""  ),
-  (  "155:H",  "R 32:H",  "R 3 2\""  ),
-  (  "155:R",  "R 32:R",  "P 3* 2"  ),
+  (  "155:H",  "R 3 2:H",  "R 3 2\""  ),
+  (  "155:R",  "R 3 2:R",  "P 3* 2"  ),
   (  "156",  "P 3 m 1",  "P 3 -2\""  ),
   (  "157",  "P 3 1 m",  "P 3 -2"  ),
   (  "158",  "P 3 c 1",  "P 3 -2\"c"  ),
