diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,1 +1,1 @@
-# salak-yaml
+# salak-toml
diff --git a/salak-toml.cabal b/salak-toml.cabal
--- a/salak-toml.cabal
+++ b/salak-toml.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name: salak-toml
-version: 0.2.8
+version: 0.2.9
 license: BSD3
 license-file: LICENSE
 copyright: (c) 2018 Daniel YU
@@ -16,15 +16,16 @@
 
 library
     exposed-modules:
-        Salak.Load.Toml
+        Salak.Toml
     hs-source-dirs: src
     other-modules:
         Paths_salak_toml
     default-language: Haskell2010
+    ghc-options: -Wall -fno-warn-orphans -fno-warn-missing-signatures
     build-depends:
         base >=4.10 && <5,
         mtl >=2.2.2 && <2.3,
-        salak ==0.2.8,
+        salak ==0.2.9,
         text >=1.2.3.1 && <1.3,
         time >=1.8.0.2 && <1.9,
         tomland ==1.0.*,
@@ -35,15 +36,16 @@
     main-is: Spec.hs
     hs-source-dirs: test src
     other-modules:
-        Salak.Load.Toml
+        Salak.Toml
         Paths_salak_toml
     default-language: Haskell2010
+    ghc-options: -Wall -fno-warn-orphans -fno-warn-missing-signatures
     build-depends:
         QuickCheck >=2.12.6.1 && <2.14,
         base >=4.10 && <5,
         hspec ==2.*,
         mtl >=2.2.2 && <2.3,
-        salak ==0.2.8,
+        salak ==0.2.9,
         text >=1.2.3.1 && <1.3,
         time >=1.8.0.2 && <1.9,
         tomland ==1.0.*,
diff --git a/src/Salak/Load/Toml.hs b/src/Salak/Load/Toml.hs
deleted file mode 100644
--- a/src/Salak/Load/Toml.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-# LANGUAGE GADTs           #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TupleSections   #-}
-module Salak.Load.Toml where
-
-import           Control.Monad          (foldM, (>=>))
-import           Control.Monad.IO.Class (MonadIO, liftIO)
-import           Control.Monad.State
-import qualified Data.HashMap.Strict    as HM
-import qualified Data.List.NonEmpty     as N
-import qualified Data.Text.IO           as IO
-import           Data.Time
-import           Salak
-import           Salak.Load
-import           Toml                   hiding (TOML)
-import qualified Toml                   as T
-
-data TOML = TOML
-
-instance HasLoad TOML where
-  loaders _ = (, loadToml) <$> ["toml", "tml"]
-
-toSs :: Key -> [Selector]
-toSs (Key ps) = toS <$> N.toList ps
-
-toS :: Piece -> Selector
-toS = SStr . unPiece
-
-loadTOML :: Reload -> T.TOML -> SourcePack -> SourcePack
-loadTOML name v sp = loadFile name sp $ go v
-  where
-    go T.TOML{..} i s = HM.foldlWithKey' (g1 i) (return s) tomlPairs
-                  >>= h2 i tomlTables
-    g1 i ms k v' = ms >>= updateSources (toSs k) (f1 i v')
-    g2 i ms _ v' = ms >>= f2 i v'
-    f1 :: Monad m => Priority -> AnyValue -> Source -> m Source
-    f1 i (AnyValue (Array   b)) = \s -> foldM (\s' (ix,x) -> updateSource (SNum ix) (f1 i $ AnyValue x) s') s $ zip [0..] b
-    f1 i (AnyValue (Bool    b)) = return . insertSource (VBool  i b)
-    f1 i (AnyValue (Integer b)) = return . insertSource (VNum   i $ fromIntegral b)
-    f1 i (AnyValue (Double  b)) = return . insertSource (VNum   i $ realToFrac b)
-    f1 i (AnyValue (Text    b)) = return . insertSource (VStr   i b)
-    f1 i (AnyValue (Local   b)) = return . insertSource (VLTime i b)
-    f1 i (AnyValue (Day     b)) = return . insertSource (VDay   i b)
-    f1 i (AnyValue (Hours   b)) = return . insertSource (VHour  i b)
-    f1 i (AnyValue (Zoned (ZonedTime a b))) = return . insertSource (VZTime i b a)
-    -- f1 i _ = return
-    f2 :: Monad m => Priority -> PrefixTree T.TOML -> Source -> m Source
-    f2 i (Leaf   k     toml) = updateSources (toSs k) (go toml i)
-    f2 i (Branch k v' tomap) = updateSources (toSs k) (h1 i v' >=> h2 i tomap)
-    h1 :: Monad m => Priority -> Maybe T.TOML -> Source -> m Source
-    h1 i (Just t) = go t i
-    h1 _ _        = return
-    h2 :: Monad m => Priority -> PrefixMap T.TOML -> Source -> m Source
-    h2 i m s = HM.foldlWithKey' (g2 i) (return s) m
-
-loadToml :: MonadIO m => FilePath -> SourcePackT m ()
-loadToml file = do
-    re <- liftIO $ parse <$> IO.readFile file
-    modify $ \sp ->case re of
-        Left  e -> addErr' (show e) sp
-        Right a -> loadTOML (defReload file $ loadToml file) a sp
diff --git a/src/Salak/Toml.hs b/src/Salak/Toml.hs
new file mode 100644
--- /dev/null
+++ b/src/Salak/Toml.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE GADTs           #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TupleSections   #-}
+module Salak.Toml(
+    TOML(..)
+  , loadToml
+  ) where
+
+import           Control.Monad          (foldM, (>=>))
+import           Control.Monad.IO.Class (MonadIO, liftIO)
+import           Control.Monad.Writer
+import qualified Data.HashMap.Strict    as HM
+import qualified Data.List.NonEmpty     as N
+import qualified Data.Text.IO           as IO
+import           Data.Time
+import           Salak
+import           Salak.Load
+import           Toml                   hiding (TOML)
+import qualified Toml                   as T
+
+data TOML = TOML
+
+instance HasLoad TOML where
+  loaders _ = (, loadToml) <$> ["toml", "tml"]
+
+toSs :: Key -> [Selector]
+toSs (Key ps) = toS <$> N.toList ps
+
+toS :: Piece -> Selector
+toS = SStr . unPiece
+
+loadTOML :: Monad m => T.TOML -> Priority -> Source -> WriterT [String] m Source
+loadTOML T.TOML{..} i = foldPairs       i tomlPairs
+                    >=> foldTables      i tomlTables
+                    >=> foldTableArrays i tomlTableArrays
+foldToml go m s = HM.foldlWithKey' (\ms k v -> ms >>= go k v) (return s) m
+foldPairs  i      = foldToml (\k -> updateSources (toSs k) . insertAnyValue i)
+foldTables i      = foldToml (const go)
+  where
+    go (Leaf   k     toml) = updateSources (toSs k) (loadTOML toml i)
+    go (Branch k v' tomap) = updateSources (toSs k) (maybe return (`loadTOML` i) v' >=> foldTables i tomap)
+foldTableArrays i = foldToml (\k v -> updateSources (toSs k) (foldArray (N.toList v) (`loadTOML` i)))
+
+insertAnyValue :: Monad m => Priority -> AnyValue -> Source -> m Source
+insertAnyValue i (AnyValue (Array   b))             = foldArray b (insertAnyValue i . AnyValue)
+insertAnyValue i (AnyValue (Bool    b))             = return . insertSource (VBool  i b)
+insertAnyValue i (AnyValue (Integer b))             = return . insertSource (VNum   i $ fromIntegral b)
+insertAnyValue i (AnyValue (Double  b))             = return . insertSource (VNum   i $ realToFrac b)
+insertAnyValue i (AnyValue (Text    b))             = return . insertSource (newVStr  b i)
+insertAnyValue i (AnyValue (Local   b))             = return . insertSource (VLTime i b)
+insertAnyValue i (AnyValue (Day     b))             = return . insertSource (VDay   i b)
+insertAnyValue i (AnyValue (Hours   b))             = return . insertSource (VHour  i b)
+insertAnyValue i (AnyValue (Zoned (ZonedTime a b))) = return . insertSource (VZTime i b a)
+
+foldArray :: Monad m => [a] -> (a -> Source -> m Source) -> Source -> m Source
+foldArray a g s = foldM (\s' (ix,x) -> updateSource (SNum ix) (g x) s') s $ zip [0..] a
+
+loadToml :: MonadIO m => FilePath -> LoadSalakT m ()
+loadToml file = loadFile file $ \i s -> do
+  re <- liftIO (parse <$> IO.readFile file)
+  case re of
+      Left  e -> tell [show e] >> return s
+      Right a -> loadTOML a i s
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -7,13 +7,11 @@
 module Main where
 
 import           Control.Monad.Reader
-import           Control.Monad.Writer
-import           Data.Either
 import           Data.List            (intercalate)
-import           Data.Text            (Text, pack, unpack)
+import           Data.Text            (Text, pack)
 import           GHC.Generics
 import           Salak
-import           Salak.Load.Toml
+import           Salak.Toml
 import           Test.Hspec
 import           Test.QuickCheck
 
@@ -21,7 +19,7 @@
 
 spec :: Spec
 spec = do
-  describe "Salak.Load.Toml"  tomlProperty
+  describe "Salak.Toml"  tomlProperty
 
 newtype SKey = SKey { unKey :: Text } deriving Show
 
