diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,34 +1,21 @@
 [![Build Status](https://secure.travis-ci.org/HaskellCNOrg/snaplet-i18n.png?branch=master)](http://travis-ci.org/HaskellCNOrg/snaplet-i18n)
 
-## snaplet-i18n
-
-  1. create config below into `data/message_en.cfg`
-
-~~~
-hello = "Hello"
-shanghai = "ShangHai"
-~~~
+# snaplet-i18n
 
-  2. use tag in heist template
+Snaplet for localize messages
 
-~~~
-<i18n name="shanghai"></i18n>
-<i18nSpan name="shanghai"></i18n>
-<i18n name="shanghai">
-  <a><i18nValue /></a>
-</i18n>
-~~~
+# Samples
 
-**see example at example dir**
+  - Check usage at `snaplets/heist/templates/index.tpl`
+  - Sample message files `snaplets/i18n/*.cfg`
 
-## Snaplet
+# Snaplet
 
 - [what is snaplet]
 
 [what is snaplet]: http://snapframework.com/docs/tutorials/snaplets-tutorial
 
-## TODO
+# TODO
 
 - maybe multiple locale support at run time.
 - use getDataDir to retrieve locale msg. [snaplet tutorial](http://snapframework.com/docs/tutorials/snaplets-tutorial)
-  
diff --git a/example/snap.hs b/example/snap.hs
--- a/example/snap.hs
+++ b/example/snap.hs
@@ -7,30 +7,18 @@
 module Main where
 
 ------------------------------------------------------------------------------
-import           Control.Category
 import           Control.Monad
 import           Control.Exception (SomeException, try)
 import           Data.ByteString (ByteString)
 import           Data.Maybe
 import           Prelude hiding ((.))
 import           Snap
-import qualified Data.Configurator as CF
-import qualified Data.Configurator.Types as CF
-import           Snap.Core
-import           Snap.Http.Server
 import           Snap.Snaplet.Heist
 import           Snap.Snaplet.Config
-import           Snap.Util.FileServe
 import           System.IO
-import qualified Data.ByteString.Char8 as BS
-import qualified Data.ByteString.Lazy as LBS
 import qualified Data.Text as T
-import qualified Data.Text.Encoding as T
-import qualified Text.XmlHtml as X
-import Heist
 import qualified Heist.Interpreted as I
-import Control.Lens
-import           Text.XmlHtml hiding (render)
+import Control.Lens hiding (value)
 
 import Snap.Snaplet.I18N
 
@@ -65,7 +53,7 @@
 testSplice :: I.Splice AppHandler
 testSplice = do
     locale <- liftIO $ getDefaultLocale
-    --liftIO $ print locale
+    liftIO $ print locale
     I.textSplice $ T.pack "test"
 
 index :: AppHandler ()
@@ -87,7 +75,7 @@
 app :: SnapletInit App App
 app = makeSnaplet "app" "An snaplet example application." Nothing $ do
     h <- nestSnaplet "heist" heist $ heistInit "templates"
-    locale <- liftIO $ getDefaultLocale
+    --locale <- liftIO $ getDefaultLocale
     i <- nestSnaplet "i18n" i18n $ initI18N (Just "zh_CN")
     addRoutes routes
     return $ App h i
diff --git a/example/snaplets/heist/templates/index.tpl b/example/snaplets/heist/templates/index.tpl
deleted file mode 100644
--- a/example/snaplets/heist/templates/index.tpl
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>    
-<html>
-    <head>
-    </head>
-    
-    <body>
-        
-        <h2>Test I18N</h2>
-        
-        <label><testSplice /></label>
-        
-        <label><i18n name="shanghai"></i18n></label>
-        <p>
-            <i18nSpan name="hello" class="test"></i18nSpan>
-        </p>
-        <p><i18n name="invalidekey"></i18n></p>
-        
-        <p>
-            <i18n name="shanghai">
-                <input type="submit" value="${i18nValue}" />
-            </i18n>
-        </p>
-        
-    </body>
-</html>
diff --git a/example/snaplets/i18n/message-en_US.cfg b/example/snaplets/i18n/message-en_US.cfg
deleted file mode 100644
--- a/example/snaplets/i18n/message-en_US.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-hello = "Hello"
-shanghai = "ShangHai"
diff --git a/example/snaplets/i18n/message-zh_CN.cfg b/example/snaplets/i18n/message-zh_CN.cfg
deleted file mode 100644
--- a/example/snaplets/i18n/message-zh_CN.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-hello = "你好"
-shanghai = "上海"
diff --git a/snaplet-i18n.cabal b/snaplet-i18n.cabal
--- a/snaplet-i18n.cabal
+++ b/snaplet-i18n.cabal
@@ -3,7 +3,7 @@
 -- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.
 -- The name of the package.
 Name:                snaplet-i18n
-Version:             0.0.4
+Version:             0.0.5
 Description:         A light weight i18n snaplet.
 Synopsis:            snaplet-i18n
 Homepage:            https://github.com/HaskellCNOrg/snaplet-i18n
@@ -15,13 +15,13 @@
 Category:            Web
 Build-type:          Simple
 Stability:           Experience
-Cabal-version:       >=1.6
+Cabal-version:       >=1.10
 
 Extra-source-files:  
   README.md
   example/snap.hs
-  example/snaplets/heist/templates/*.tpl
-  example/snaplets/i18n/*.cfg
+  snaplets/heist/templates/*.tpl
+  snaplets/i18n/*.cfg
 
 Source-Repository head
   Type:     git
@@ -30,6 +30,7 @@
 
 Library
   Hs-Source-Dirs:   src
+  default-language:    Haskell2010
   Exposed-modules:     
       Snap.Snaplet.I18N
 
@@ -39,11 +40,11 @@
       base         >= 4       && < 5,
       configurator >= 0.2     && < 0.3,
       filepath     >= 1.2     && < 1.4,
-      heist        >= 0.10    && < 0.11,
+      heist        >= 0.10    && < 0.14,
       lens         >= 3.7.0.1 && < 3.8,
-      snap         >= 0.10    && < 0.11,
+      snap         >= 0.10    && < 0.14,
       snap-loader-static >= 0.9 && < 0.11,
-      text         >= 0.11    && < 0.12,
+      text         >= 0.11    && < 1.2,
       xmlhtml      >= 0.2
 
   if impl(ghc >= 6.12.0)
@@ -52,17 +53,28 @@
   else
       ghc-options: -Wall -fwarn-tabs -funbox-strict-fields
                    -fno-warn-orphans     
-    
-  -- Modules not exported by this package.
-  -- Other-modules:       
-  
-  -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
-  -- Build-tools:         
-  
 
-
-
-
+Executable demo
+  Hs-Source-Dirs:   example
+  default-language:    Haskell2010
+  main-is: snap.hs
 
+  Build-Depends:    
+      base         >= 4       && < 5,
+      configurator >= 0.2     && < 0.3,
+      filepath     >= 1.2     && < 1.4,
+      heist        >= 0.10    && < 0.14,
+      lens         >= 3.7.0.1 && < 3.8,
+      snap         >= 0.10    && < 0.14,
+      snap-loader-static >= 0.9 && < 0.11,
+      text         >= 0.11    && < 1.2,
+      xmlhtml      >= 0.2,
 
+      bytestring   >= 0.9 && < 1.0,
+      snaplet-i18n
 
+  if impl(ghc >= 6.12.0)
+      ghc-options: -Wall -fwarn-tabs -funbox-strict-fields
+                   -fno-warn-unused-do-bind
+  else
+      ghc-options: -Wall -fwarn-tabs -funbox-strict-fields
diff --git a/snaplets/heist/templates/index.tpl b/snaplets/heist/templates/index.tpl
new file mode 100644
--- /dev/null
+++ b/snaplets/heist/templates/index.tpl
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Snaplet-i18n example</title>
+    </head>
+
+    <body>
+
+        <h2>Test I18N</h2>
+
+        <label><testSplice /></label>
+
+        <label><i18n name="shanghai"></i18n></label>
+
+        <p>
+            <i18nSpan name="hello" class="test"></i18nSpan>
+        </p>
+
+        <p><i18n name="invalidekey"></i18n></p>
+
+        <p>
+            <i18n name="shanghai">
+                <input type="submit" value="${i18nValue}" />
+            </i18n>
+        </p>
+
+    </body>
+</html>
diff --git a/snaplets/i18n/message-en_US.cfg b/snaplets/i18n/message-en_US.cfg
new file mode 100644
--- /dev/null
+++ b/snaplets/i18n/message-en_US.cfg
@@ -0,0 +1,2 @@
+hello = "Hello"
+shanghai = "ShangHai"
diff --git a/snaplets/i18n/message-zh_CN.cfg b/snaplets/i18n/message-zh_CN.cfg
new file mode 100644
--- /dev/null
+++ b/snaplets/i18n/message-zh_CN.cfg
@@ -0,0 +1,2 @@
+hello = "你好"
+shanghai = "上海"
diff --git a/src/Snap/Snaplet/I18N.hs b/src/Snap/Snaplet/I18N.hs
--- a/src/Snap/Snaplet/I18N.hs
+++ b/src/Snap/Snaplet/I18N.hs
@@ -93,11 +93,12 @@
     let i18nConfig = I18NConfig (fromMaybe defaultLocale l) defaultMessageFilePrefix
     fp <- getSnapletFilePath
     msg <- liftIO $ readMessageFile fp i18nConfig
-    addDefaultSplices
+    modifyHeistState addDefaultSplices
     return $ I18N i18nConfig msg
-  where addDefaultSplices = addSplices [ ("i18n", i18nSplice)
-                                       , ("i18nSpan", i18nSpanSplice)
-                                       ]
+  where addDefaultSplices = I.bindSplices splices
+        splices = do
+                  "i18n" ## i18nSplice
+                  "i18nSpan" ## i18nSpanSplice
         -- config dir for current snaplet
         datadir = Just $ liftM (++ "/resources") getDataDir
         description = "light weight i18n snaplet"
@@ -142,7 +143,7 @@
     value <- lift . lookupI18NValue $ getNameAttr input
     case childElements input of
       [] -> return [X.TextNode value]
-      _  -> I.runChildrenWithText [("i18nValue", value)]
+      _  -> I.runChildrenWithText ("i18nValue" ## value)
 
 -- | Splices. use 'span' html element wrap result.
 --
