diff --git a/geek.cabal b/geek.cabal
--- a/geek.cabal
+++ b/geek.cabal
@@ -1,5 +1,5 @@
 Name:                 geek
-Version:              1.0.0.5
+Version:              1.0.0.6
 Build-type:           Simple
 Synopsis:             Geek blog engine
 Description:          A dynamic blog engine, customizable with standard web technology, i.e. HTML, CSS and Javascript (JSON)
diff --git a/src/Web/Geek/Post.hs b/src/Web/Geek/Post.hs
--- a/src/Web/Geek/Post.hs
+++ b/src/Web/Geek/Post.hs
@@ -20,10 +20,11 @@
 import Web.Geek.Config
 import Web.Geek.Type
 import qualified Data.Text as T
+import qualified Data.Map as Map
 
 post_tags :: Text -> Post -> [Text]
 post_tags _meta_tag_keyword post = 
-  case post.meta.lookup _meta_tag_keyword of
+  case post.meta.Map.lookup _meta_tag_keyword of
     Nothing -> []
     Just s -> s.T.splitOn ",".map T.strip
 
@@ -66,7 +67,7 @@
 
 parse_meta :: Text -> (Meta, Text)
 parse_meta str = 
-  let no_meta = ([], str)
+  let no_meta = (def, str)
   in
   
   case str.T.stripStart.T.splitOn "---\n" of
@@ -80,7 +81,7 @@
                 _ -> Nothing
           in
           
-          let _meta = y.T.lines.reject (T.all isSpace).map parse_line.catMaybes
+          let _meta = y.T.lines.reject (T.all isSpace).map parse_line.catMaybes .to_h
           in
           (_meta, zs.T.unlines.stripStart)
         else
@@ -106,7 +107,7 @@
 spec = do
   describe "Post" - do
     it "should parse meta data" - do
-      parse_meta test_meta === ([("layout", "post"), ("categories", "日常")], "some thing\n\n\n")
+      parse_meta test_meta === ([("layout", "post"), ("categories", "日常")].to_h, "some thing\n\n\n")
     
     it "should parse title" - do
       let _path = "blog/posts/2010-10-30-dummy title.md"
@@ -122,10 +123,10 @@
     -}
     
     it "should have tags" - do
-      let _post = def {meta = [("tags", "haskell, blog")]} :: Post
+      let _post = def {meta = [("tags", "haskell, blog")].to_h} :: Post
       post_tags "tags" _post === ["haskell", "blog"]
     
     it "should encode json" - do
-      let _post = def {meta = [("tags", "haskell, blog")]} :: Post
+      let _post = def {meta = [("tags", "haskell, blog")].to_h} :: Post
       
       _post.encode.decode === Just _post
diff --git a/src/Web/Geek/RSS.hs b/src/Web/Geek/RSS.hs
--- a/src/Web/Geek/RSS.hs
+++ b/src/Web/Geek/RSS.hs
@@ -101,10 +101,10 @@
             let pub_date_format_string = "%a, %d %b %Y %H:%M:%S %z"
             str - _post.Geek.date.fromMaybe def.formatTime defaultTimeLocale pub_date_format_string
             
-            let post_link = site_link + "/" +  _post.Geek.link.Geek.unURIEscapedText.T.unpack
-            element "link" - do
-              str - post_link
-            element "guid" ! [attr "isPermaLink" "true"] - do
-              str - post_link
+          let post_link = site_link + "/" +  _post.Geek.link.Geek.unURIEscapedText.T.unpack
+          element "link" - do
+            str - post_link
+          element "guid" ! [attr "isPermaLink" "true"] - do
+            str - post_link
           
       
diff --git a/src/Web/Geek/Type.hs b/src/Web/Geek/Type.hs
--- a/src/Web/Geek/Type.hs
+++ b/src/Web/Geek/Type.hs
@@ -23,7 +23,7 @@
 import Data.Aeson.Generic (toJSON)
 import Data.Text.Encoding (decodeUtf8)
 
-type Meta = [(Text, Text)]
+type Meta = Map Text Text
 
 newtype HTMLText = 
   HTMLText {unHTMLText :: Text}
