diff --git a/Config/Default.hs b/Config/Default.hs
new file mode 100644
--- /dev/null
+++ b/Config/Default.hs
@@ -0,0 +1,47 @@
+-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
+-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+-- Copyright (C) 2010 Andy Stewart, all rights reserved.
+-- 
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+-- 
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+-- 
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Config.Default where
+
+import Manatee.Extension.Reader.Types
+
+import qualified Data.Map as M
+
+-- | Temp feed information, instead with user customize option after customize system complete. 
+feedInfos :: FeedDB
+feedInfos = 
+  M.fromList [("Planet Haskell"
+              ,FeedInfo "http://planet.haskell.org/rss20.xml" 
+                        [Minute 30])
+             ,("HackageDB recent additions"
+              ,FeedInfo "http://hackage.haskell.org/packages/archive/recent.rss"
+                        [Minute 20])
+             ,("Planet Emacsen"
+              ,FeedInfo "http://planet.emacsen.org/atom.xml"
+                        [Minute 20])
+             ,("Aqee.net"
+              ,FeedInfo "http://feed.feedsky.com/aqee-net"
+                        [Minute 30]
+              )
+             ,("Yeeyan-Science"
+              ,FeedInfo "http://feed.feedsky.com/yeeyan-science"
+                        [Minute 20])
+             ,("Yeeyan-Tech"
+              ,FeedInfo "http://feed.feedsky.com/yeeyan-tech"
+                        [Minute 20])
+             ]
diff --git a/Config/Import.hs b/Config/Import.hs
new file mode 100644
--- /dev/null
+++ b/Config/Import.hs
@@ -0,0 +1,21 @@
+-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
+-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+-- Copyright (C) 2010 Andy Stewart, all rights reserved.
+-- 
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+-- 
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+-- 
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Config.Import (feedInfos) where 
+
+import Config.Default
diff --git a/Config/Reader.hs b/Config/Reader.hs
new file mode 100644
--- /dev/null
+++ b/Config/Reader.hs
@@ -0,0 +1,47 @@
+-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
+-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+-- Copyright (C) 2010 Andy Stewart, all rights reserved.
+-- 
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+-- 
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+-- 
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Config.User where
+
+import Manatee.Extension.Reader.Types
+
+import qualified Data.Map as M
+
+-- | Temp feed information, instead with user customize option after customize system complete. 
+feedInfos :: FeedDB
+feedInfos = 
+  M.fromList [("Planet Haskell"
+              ,FeedInfo "http://planet.haskell.org/rss20.xml" 
+                        [Minute 30])
+             ,("HackageDB recent additions"
+              ,FeedInfo "http://hackage.haskell.org/packages/archive/recent.rss"
+                        [Minute 20])
+             ,("Planet Emacsen"
+              ,FeedInfo "http://planet.emacsen.org/atom.xml"
+                        [Minute 20])
+             ,("Aqee.net"
+              ,FeedInfo "http://feed.feedsky.com/aqee-net"
+                        [Minute 30]
+              )
+             ,("Yeeyan-Science"
+              ,FeedInfo "http://feed.feedsky.com/yeeyan-science"
+                        [Minute 20])
+             ,("Yeeyan-Tech"
+              ,FeedInfo "http://feed.feedsky.com/yeeyan-tech"
+                        [Minute 20])
+             ]
diff --git a/Config/User.hs b/Config/User.hs
new file mode 100644
--- /dev/null
+++ b/Config/User.hs
@@ -0,0 +1,19 @@
+-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
+-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+-- Copyright (C) 2010 Andy Stewart, all rights reserved.
+-- 
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+-- 
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+-- 
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Config.User where
diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -21,12 +21,16 @@
 module Main where
 
 import Control.Applicative hiding (empty)
+import Manatee.Core.Dynload
 import Manatee.Core.Render
 import Manatee.Core.Types
 import Manatee.Extension.Reader
+import Manatee.Extension.Reader.Types
 
 -- | Irc client render process.
 main :: IO ()
 main = 
-    startupRender (\ pagePath options client pageId -> 
-                       PageBufferWrap <$> readerBufferNew pagePath options client pageId)
+    startupRender 
+    (\ pagePath options client pageId customize -> 
+         PageBufferWrap <$> readerBufferNew pagePath options client pageId customize)
+    readerCustomizeNew
diff --git a/Manatee/Extension/Reader/ReaderBuffer.hs b/Manatee/Extension/Reader/ReaderBuffer.hs
--- a/Manatee/Extension/Reader/ReaderBuffer.hs
+++ b/Manatee/Extension/Reader/ReaderBuffer.hs
@@ -20,6 +20,7 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 module Manatee.Extension.Reader.ReaderBuffer where
 
+import Config.Import
 import Codec.Binary.UTF8.String
 import Control.Applicative
 import Control.Concurrent
@@ -32,8 +33,10 @@
 import Data.Typeable
 import Graphics.UI.Gtk.General.General
 import Graphics.UI.Gtk.ModelView.TreeSortable
+import Manatee.Core.Dynload
 import Manatee.Core.Types
 import Manatee.Extension.Reader.PageMode
+import Manatee.Extension.Reader.Types
 import Manatee.Toolkit.General.List
 import Manatee.Toolkit.General.Map
 import Manatee.Toolkit.General.Maybe
@@ -55,22 +58,13 @@
                  ,readerBufferFeedNavItems      :: TVar (Map FeedName [FeedNavItem])
                  ,readerBufferFeedNavOptions    :: [(NavItemOption, SortColumnId)]
                  ,readerBufferBroadcastChannel  :: TChan ReaderTChanSignal
+                 ,readerBufferCustomize         :: ReaderCustomize
                  }
     deriving Typeable
 
 data ReaderTChanSignal = FeedUpdated FeedName
                          deriving (Show, Eq, Ord)
 
-data Interval = Second Int
-              | Minute Int
-              | Hour   Int
-              | Day    Int
-                deriving (Show, Eq, Ord)
-
-type FetchNumber = Int
-type FeedUrl     = String
-type FeedName    = String
-
 data FeedTreeItem = 
     FeedTreeItem {ftiName         :: String
                  ,ftiUnreadNumber :: Int
@@ -128,15 +122,12 @@
   niCompareRow NTitle   item1 item2 = return $ comparing fniTitle item1 item2
   niCompareRow NTime    item1 item2 = return $ comparing fniTime item1 item2 
 
-data FeedInfo =
-    FeedInfo {feedUrl         :: FeedUrl           -- feed url
-             ,feedInterval    :: [Interval]        -- interval time between retrievals
-             }
-    deriving Show
-
 -- | Create reader buffer.
-readerBufferNew :: String -> [String] -> Client -> PageId -> IO ReaderBuffer
-readerBufferNew path _ client pageId = do
+readerBufferNew :: String -> [String] -> Client -> PageId -> CustomizeWrap -> IO ReaderBuffer
+readerBufferNew path _ client pageId c = do
+  let customize = castCustomize c
+  feedInfos <- readTVarIO (readerCustomizeFeedInfos customize)
+
   buffer <- ReaderBuffer <$> pure path
                          <*> pure client
                          <*> pure pageId
@@ -147,6 +138,7 @@
                          <*> newTVarIO M.empty
                          <*> pure (pairPred [NTitle, NTime])
                          <*> (newTChanIO :: IO (TChan ReaderTChanSignal))
+                         <*> pure customize
 
   -- Fetch feed.
   readerBufferFetchFeed buffer
@@ -161,7 +153,7 @@
 
 -- | Update feed.
 readerBufferUpdateFeed :: ReaderBuffer -> FeedName -> IO ()
-readerBufferUpdateFeed buffer@(ReaderBuffer {readerBufferFeedInfos = infos} )
+readerBufferUpdateFeed buffer@(ReaderBuffer {readerBufferFeedInfos = infos})
                        feedName = do
   forkIO $ 
     findMinMatch infos (\ name _ -> name == feedName) 
@@ -214,27 +206,9 @@
                  Hour   t -> t * 60 * 60
                  Day    t -> t * 60 * 60 * 24
 
--- | Temp feed information, instead with user customize option after customize system complete. 
-feedInfos :: Map FeedName FeedInfo 
-feedInfos = 
-  M.fromList [("Planet Haskell"
-              ,FeedInfo "http://planet.haskell.org/rss20.xml" 
-                        [Minute 30])
-             ,("HackageDB recent additions"
-              ,FeedInfo "http://hackage.haskell.org/packages/archive/recent.rss"
-                        [Minute 20])
-             ,("Planet Emacsen"
-              ,FeedInfo "http://planet.emacsen.org/atom.xml"
-                        [Minute 20])
-             ,("Yeeyan-Science"
-              ,FeedInfo "http://feed.feedsky.com/yeeyan-science"
-                        [Minute 20])
-             ,("Yeeyan-Tech"
-              ,FeedInfo "http://feed.feedsky.com/yeeyan-tech"
-                        [Minute 20])
-             -- ,("Google Arcanum"
-             --  ,FeedInfo "http://rss.guao.cc/aggregator/rss"
-             --            [Minute 20])
-             ]
-
+-- | Reader customize new.
+readerCustomizeNew :: IO CustomizeWrap
+readerCustomizeNew =
+  fmap CustomizeWrap
+       ReaderCustomize <$> newTVarIO feedInfos
 
diff --git a/Manatee/Extension/Reader/ReaderView.hs b/Manatee/Extension/Reader/ReaderView.hs
--- a/Manatee/Extension/Reader/ReaderView.hs
+++ b/Manatee/Extension/Reader/ReaderView.hs
@@ -34,12 +34,15 @@
 import Manatee.Core.PageView
 import Manatee.Core.Types
 import Manatee.Extension.Reader.ReaderBuffer
+import Manatee.Extension.Reader.Types
 import Manatee.Toolkit.General.Map
 import Manatee.Toolkit.General.Maybe
 import Manatee.Toolkit.Gtk.Concurrent
 import Manatee.Toolkit.Gtk.Gtk
 import Manatee.Toolkit.Gtk.ModelView
 import Manatee.Toolkit.Gtk.ScrolledWindow
+import Paths_manatee_reader
+import System.FilePath
 
 import qualified Data.Map as M
 
@@ -72,6 +75,7 @@
   pageBufferClient              = readerBufferClient
   pageBufferCreateView a pId    = PageViewWrap <$> readerViewNew a pId
   pageBufferMode                = readerBufferMode
+  pageBufferPackageName _       = fmap takeFileName getDataDir
 
 instance PageView ReaderView where
     pageViewBuffer              = PageBufferWrap . readerViewBuffer
diff --git a/Manatee/Extension/Reader/Types.hs b/Manatee/Extension/Reader/Types.hs
new file mode 100644
--- /dev/null
+++ b/Manatee/Extension/Reader/Types.hs
@@ -0,0 +1,57 @@
+-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
+-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+-- Copyright (C) 2010 Andy Stewart, all rights reserved.
+-- 
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+-- 
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+-- 
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+{-# LANGUAGE DeriveDataTypeable #-}
+module Manatee.Extension.Reader.Types where
+
+import Control.Concurrent.STM 
+import Data.Map (Map)
+import Data.Typeable
+import Manatee.Core.Types
+import Manatee.Toolkit.General.STM
+import Unsafe.Coerce
+
+data ReaderCustomize = 
+    ReaderCustomize {readerCustomizeFeedInfos   :: TVar FeedDB
+                    }
+    deriving Typeable
+
+instance Customize ReaderCustomize where 
+  customizeConfigFile _ = "Reader.hs"
+  customizeLoad a       =
+    [("feedInfos"
+     ,\v -> writeTVarIO (readerCustomizeFeedInfos a) (unsafeCoerce v :: FeedDB))]
+
+type FeedDB = Map FeedName FeedInfo
+
+data Interval = Second Int
+              | Minute Int
+              | Hour   Int
+              | Day    Int
+                deriving (Show, Eq, Ord)
+
+type FetchNumber = Int
+type FeedUrl     = String
+type FeedName    = String
+
+data FeedInfo =
+    FeedInfo {feedUrl         :: FeedUrl           -- feed url
+             ,feedInterval    :: [Interval]        -- interval time between retrievals
+             }
+    deriving Show
+
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -16,8 +16,10 @@
 -- You should have received a copy of the GNU General Public License
 -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import Distribution.PackageDescription
 import Distribution.Simple
 import Manatee.Core.Config
+import Manatee.Core.Dynload
 import Manatee.Core.Types
 import Manatee.Extension.Reader.PageMode
 
@@ -25,8 +27,13 @@
 
 main = defaultMainWithHooks 
        simpleUserHooks {
+         -- Generate User.hs and Import.hs before configure.
+         preConf = \ _ _ -> do
+             generateConfig "Reader.hs"
+                                ["feedInfos"]
+             return emptyHookedBuildInfo
          -- Update PageTypeRule after install successful.
-         postInst = \ _ _ _ _ -> do
+        ,postInst = \ _ _ _ _ -> do
              (PageTypeRule rule) <- readConfig pageTypeRulePath (PageTypeRule M.empty)
              writeConfig pageTypeRulePath (PageTypeRule (M.insert "PageReader" "manatee-reader" rule))
              -- Update PageModeRule.
diff --git a/manatee-reader.cabal b/manatee-reader.cabal
--- a/manatee-reader.cabal
+++ b/manatee-reader.cabal
@@ -1,5 +1,5 @@
 name:			manatee-reader
-version:		0.0.6
+version:		0.0.7
 Cabal-Version:	>= 1.6
 license:		GPL-3
 license-file:	LICENSE
@@ -7,8 +7,12 @@
 synopsis:		Feed reader extension for Manatee.
 description:    manatee-reader is feed reader extension for Manatee (Haskell/Gtk+ Integrated Live Environment)
  .
- Video at (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>
+ Default configuration template at Config\/Reader.hs, copy to directory `HOME/.manatee/config/`.
  .
+ Note, you need re-install package to start the configuration file take effect the next time,
+ .
+ Video at (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>
+ .
  Screenshots at : <http://goo.gl/MkVw>
  .
  Manual at : <http://haskell.org/haskellwiki/Manatee>
@@ -25,21 +29,29 @@
 tested-with:	GHC==6.12.3
 build-type:		Custom
 
+data-dir: ""
+data-files: Config/Reader.hs            
+
 Source-Repository head
   type:         darcs
   location:     http://patch-tag.com/r/AndyStewart/manatee-reader
   
 Library
-     build-depends: base >= 4 && < 5, manatee-core >= 0.0.6, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,
+     build-depends: base >= 4 && < 5, manatee-core >= 0.0.7, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,
                     containers >= 0.3.0.0, gtk-serialized-event >= 0.12.0, gtk >= 0.12.0,
                     text >= 0.7.1.0, webkit >= 0.12.0, feed >= 0.3.7, download-curl >= 0.1.2,
-                    utf8-string >= 0.3.4
+                    utf8-string >= 0.3.4, filepath
      exposed-modules:
          Manatee.Extension.Reader
          Manatee.Extension.Reader.ReaderBuffer
          Manatee.Extension.Reader.ReaderView
          Manatee.Extension.Reader.PageMode
+         Manatee.Extension.Reader.Types
      other-modules:							
+         Paths_manatee_reader
+         Config.Default
+         Config.User
+         Config.Import
      extensions:  
      ghc-options: -fwarn-unused-matches -fwarn-unused-binds -fwarn-unused-imports -fwarn-overlapping-patterns -fwarn-duplicate-exports -fwarn-unrecognised-pragmas -fwarn-hi-shadowing 
      
