diff --git a/MoeDict.cabal b/MoeDict.cabal
--- a/MoeDict.cabal
+++ b/MoeDict.cabal
@@ -1,5 +1,5 @@
 name: MoeDict
-version: 0.0.2
+version: 0.0.3
 license: PublicDomain
 cabal-version: >= 1.6
 author: Audrey Tang
diff --git a/Text/MoeDict.hs b/Text/MoeDict.hs
--- a/Text/MoeDict.hs
+++ b/Text/MoeDict.hs
@@ -17,20 +17,29 @@
 import Data.Function (on)
 
 type Str = Text
-data Pronounciation = Pronounciation { bopomofo :: Str, bopomofo2 :: Str, pinyin :: Str } deriving (Show, Eq, Ord)
-$(deriveJSON defaultOptions ''Pronounciation)
+data Pronunciation = Pronunciation { bopomofo :: Str, bopomofo2 :: Str, pinyin :: Str } deriving (Show, Eq, Ord)
+$(deriveJSON defaultOptions ''Pronunciation)
 newtype Quote = Quote Str deriving (Show, IsString, FromJSON, ToJSON, Eq, Ord)
 data Radical = Radical
     { letter :: Char
     , strokeCount :: Count
     , nonRadicalStrokeCount :: Count
+    , shapeDescription :: Maybe Text -- "解形"
     } deriving (Show, Ord, Eq)
 newtype Example = Example Str deriving (Show, IsString, FromJSON, ToJSON, Eq, Ord)
 newtype Title = Title { titleText :: Str } deriving (Show, IsString, FromJSON, ToJSON, Ord, Eq)
 newtype Link = Link Str deriving (Show, IsString, FromJSON, ToJSON, Eq, Ord)
 newtype Count = Count Int deriving (Show, Ord, Eq, FromJSON, ToJSON, Enum)
-data Part = Preposition | Pronoun | Adverb | Particle | Verb | Noun | Adjective | Exclamation | Onomatopoeia | Affix | Conjunction | Note deriving (Show, Eq, Ord)
+data Part = Preposition | Pronoun | Adverb | Particle | Verb | Noun | Adjective | Exclamation | Onomatopoeia | Affix | Conjunction | Note
+    | Slang | Loanword | Derivative
+    | Composition | Synonym | Antonym
+    | Cantonese | PuTongHua | None
+    deriving (Show, Eq, Ord)
 data POS = POS { label :: Text, part :: Part } deriving (Show, Eq, Ord)
+data Reference = Reference
+    { refType  :: Maybe POS
+    , refText  :: Text
+    } deriving (Show, Eq, Ord)
 
 instance FromJSON POS where
     parseJSON (String s) = maybe (fail $ show s) (pure . POS s) $ lookup s
@@ -38,6 +47,10 @@
         , ("助", Particle), ("動", Verb), ("名", Noun)
         , ("形", Adjective), ("歎", Exclamation), ("狀", Onomatopoeia)
         , ("綴", Affix), ("連", Conjunction), ("辨似", Note)
+        , ("俚", Slang), ("外", Loanword), ("衍", Derivative)
+        , ("孳", Composition), ("同", Synonym), ("反", Antonym)
+        , ("廣東話", Cantonese), ("普通話", PuTongHua)
+	, ("", None)
         ]
     parseJSON x = fail $ show x
 
@@ -45,10 +58,12 @@
     { title      :: Title
     , radical    :: Maybe Radical
     , heteronyms :: [Heteronym]
+    , references :: [Reference]
+    -- TODO: Translations?
     } deriving (Show, Eq, Ord)
 data Heteronym = Heteronym
-    { pronounciation  :: Pronounciation
-    , definitions     :: [Definition]
+    { pronunciation :: Pronunciation
+    , definitions   :: [Definition]
     } deriving (Show, Eq, Ord)
 data Definition = Definition
     { definition  :: Text
@@ -66,6 +81,7 @@
 instance FromJSON Entry where
     parseJSON (Object o) = do
         title       <- o .: "title"
+        references  <- maybeList <$> o .:? "references"
         heteronyms  <- catMaybes <$> o .: "heteronyms"
         rv          <- o .:? "radical"
         radical     <- case rv of
@@ -73,8 +89,15 @@
             Just letter -> Just <$> do
                 strokeCount             <- o .: "stroke_count"
                 nonRadicalStrokeCount   <- o .: "non_radical_stroke_count"
+                shapeDescription        <- o .:? "shape_description"
                 return Radical{..}
         return Entry{..}
+instance FromJSON Reference where
+    parseJSON (Object o) = do
+        pos <- o .:? "type"
+        txt <- o .: "text"
+        return $ Reference pos txt
+
 instance FromJSON Definition where
     parseJSON (Object o) = do
         definition <- o .: "def"
@@ -86,22 +109,24 @@
         synonyms  <- maybeTitles <$> o .:? "synonyms"
         return Definition {..}
         where
-        maybeList Nothing = []
-        maybeList (Just xs) = xs
         maybeTitles Nothing = []
         maybeTitles (Just xs) = Title <$> (T.splitOn "," xs)
+
+maybeList Nothing = []
+maybeList (Just xs) = xs
+
 instance ToJSON Definition where
     toJSON Definition {..} = error "NYI"
     
 instance FromJSON Heteronym where
     parseJSON json@(Object o) = do
-        pronounciation <- parseJSON json
-        definitions    <- o .: "definitions"
-        return $ Heteronym { pronounciation, definitions }
+        pronunciation <- parseJSON json
+        definitions   <- o .: "definitions"
+        return $ Heteronym { pronunciation, definitions }
 instance ToJSON Heteronym where
     toJSON Heteronym {..} = object
-        [ ("pronounciation" .= pronounciation)
-        , ("definitions" .= definitions)
+        [ ("pronunciation" .= pronunciation)
+        , ("definitions"   .= definitions)
         ]
 
 parseMoeDictFile :: FilePath -> IO [Entry]
@@ -143,7 +168,7 @@
         es' = sortBy (compare `on` title) es
 
 splitHeteronym :: Entry -> [Entry]
-splitHeteronym Entry{..} = [ Entry{title, radical, heteronyms=[h]} | h <- heteronyms ]
+splitHeteronym Entry{..} = [ Entry{title, radical, references, heteronyms=[h]} | h <- heteronyms ]
 
 entryHead :: Entry -> HeadWord
 entryHead Entry{..} = HeadWord {..}
@@ -153,4 +178,4 @@
         T.dropWhileEnd (== 'r') $ -- 兒化韻
         T.takeWhile (/= ' ') $
         T.dropWhile (> '\255') $
-        pinyin (pronounciation (head heteronyms))
+        pinyin (pronunciation (head heteronyms))
