diff --git a/ochintin-daicho.cabal b/ochintin-daicho.cabal
--- a/ochintin-daicho.cabal
+++ b/ochintin-daicho.cabal
@@ -1,5 +1,5 @@
 name:                ochintin-daicho
-version:             0.1.0.3
+version:             0.2.0.0
 synopsis:            A module to manage payroll books for Japanese companies.
 description:
     A module to manage payroll books for Japanese companies. This enable to export data to tax withholding book, etc...
@@ -18,8 +18,10 @@
   hs-source-dirs:      src
   exposed-modules:     Business.OchintinDaicho
   build-depends:       base >= 4.9 && < 5
-                     , bookkeeping >= 0.3.3 && < 0.5
+                     , bookkeeping >= 0.4 && < 0.5
+                     , mono-traversable >= 1.0.0.1 && < 1.1
                      , text >= 1.2 && < 1.3
+                     , transaction >= 0.1.1 && < 0.2
   default-language:    Haskell2010
   ghc-options:         -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates
   default-extensions:  OverloadedStrings
diff --git a/src/Business/OchintinDaicho.hs b/src/Business/OchintinDaicho.hs
--- a/src/Business/OchintinDaicho.hs
+++ b/src/Business/OchintinDaicho.hs
@@ -19,8 +19,10 @@
   -- * Usage examples
   -- $setup
 
+  -- * Constructors
+    datePayment
   -- * Types
-    Person(..)
+  , Person(..)
   , Payment(..)
   , Payments
   , Hours
@@ -46,26 +48,22 @@
   , DateTransactions
   , DebitCategory(..)
   , Month
-#if MIN_VERSION_bookkeeping(0,4,0)
   , Journal
-#else
-  , Transaction
-#endif
   , Transactions
   , Year
   , activity
   , dateTrans
   , month
-  , runTransactions
   , tAmount
   , year
   )
-import Control.Monad (forM_)
 import Data.Monoid ((<>))
 import Data.Text (Text)
 import qualified Data.Text as T
 import qualified Data.Text.IO as T
+import Data.MonoTraversable (oforM_, osum)
 import Data.String (IsString(..))
+import Data.Transaction (Transaction, action, tMap)
 
 
 {- $setup
@@ -77,9 +75,9 @@
     { name = "山田 太郎"
     , sex = "男"
     , payments = \y -> case y of
-      2017 ->
-        [ ( (1, 10)
-          , Payment
+      2017 -> do
+        datePayment 1 10 $
+          Payment
             { _賃金計算期間 = (2016, 12)
             , _労働日数 = 13
             , _労働時間数 = 13 * 5
@@ -125,9 +123,8 @@
                 "親睦会費"
                 5000
             }
-          )
-        , ( (2, 10)
-          , Payment
+        datePayment 2 10 $
+          Payment
             { _賃金計算期間 = (2017, 1)
             , _労働日数 = 12
             , _労働時間数 = 12 * 5
@@ -173,10 +170,8 @@
                 "親睦会費"
                 5000
             }
-          )
-        ]
       _ ->
-        []
+        pure ()
     }
 :}
 -}
@@ -188,7 +183,7 @@
 -}
 _年度内課税支給金額 :: Person -> Year -> Amount
 _年度内課税支給金額 Person {..} =
-  sum . map (_課税支給額 . snd) . payments
+  osum . tMap (_課税支給額 . snd) . payments
 
 {-| 対象年度内の社会保険料等控除額総計
 
@@ -197,7 +192,7 @@
 -}
 _年度内社会保険控除額 :: Person -> Year -> Amount
 _年度内社会保険控除額 Person {..} =
-  sum . map (_算出保険料 . snd) . payments
+  osum . tMap (_算出保険料 . snd) . payments
 
 {-| 対象年度内の所得税控除額総計
 
@@ -206,7 +201,7 @@
 -}
 _年度内所得税控除額 :: Person -> Year -> Amount
 _年度内所得税控除額 Person {..} =
-  sum . map (_算出所得税 . snd) . payments
+  osum . tMap (_算出所得税 . snd) . payments
 
 {-| A pretty printer for payroll books.
 
@@ -258,7 +253,7 @@
     , "年支給分 =="
     ]
   T.putStrLn ""
-  forM_ (payments y) $ \((m, d), payment@(Payment {..})) -> do
+  oforM_ (payments y) $ \((m, d), payment@(Payment {..})) -> do
     let
       (targetYear, targetMonth) = _賃金計算期間
       _算出保険料' = _算出保険料 payment
@@ -392,7 +387,7 @@
 toBookkeeping :: Person -> Year -> DebitCategory -> CreditCategory -> Transactions
 toBookkeeping Person {..} y debit credit =
   year y $
-    forM_ (payments y) $ \((m, d), payment@(Payment {..})) -> do
+    oforM_ (payments y) $ \((m, d), payment@(Payment {..})) -> do
       let
         (_, targetMonth) = _賃金計算期間
         _算出保険料' = _算出保険料 payment
@@ -408,6 +403,9 @@
           _その他控除 debit
           dateTrans debit credit "給与支払い" _実支払額'
 
+datePayment :: Month -> Date -> Payment -> Payments
+datePayment m d p =
+  action ((m, d), p)
 
 {- ==============
  -     Types
@@ -423,7 +421,7 @@
 
 {-| A type for handling `Payment` values.
  -}
-type Payments = [((Month, Date), Payment)]
+type Payments = Transaction ((Month, Date), Payment)
 
 data Payment = Payment
   { _賃金計算期間 :: (Year, Month)
@@ -459,23 +457,22 @@
 dummyCredit = CreditCategory $ Category "DUMMY!" Liabilities
 
 _算出保険料 :: Payment -> Amount
-_算出保険料 Payment {..} = sum . map tAmount . runDummyActivity $ _控除社会保険料 dummyDebit _課税支給額
+_算出保険料 Payment {..} = sumAmounts $ _控除社会保険料 dummyDebit _課税支給額
 
 _算出所得税 :: Payment -> Amount
-_算出所得税 payment@(Payment {..}) = sum . map tAmount . runDummyActivity $ _所得税額 dummyDebit (_課税支給額 - _算出保険料 payment)
+_算出所得税 payment@(Payment {..}) = sumAmounts $ _所得税額 dummyDebit (_課税支給額 - _算出保険料 payment)
 
 _非課税支給額総計 :: Payment -> Amount
-_非課税支給額総計 Payment {..} = sum . map tAmount . runDummyActivity $ _非課税支給額 dummyCredit
+_非課税支給額総計 Payment {..} = sumAmounts $ _非課税支給額 dummyCredit
 
 _その他控除総計 :: Payment -> Amount
-_その他控除総計 Payment {..} = sum . map tAmount . runDummyActivity $ _その他控除 dummyDebit
+_その他控除総計 Payment {..} = sumAmounts $ _その他控除 dummyDebit
 
 _実支払額 :: Payment -> Amount
 _実支払額 payment@(Payment {..}) = _課税支給額 - _算出保険料 payment - _算出所得税 payment - _その他控除総計 payment + _非課税支給額総計 payment
 
-#if MIN_VERSION_bookkeeping(0,4,0)
-runDummyActivity :: DateTransactions -> [Journal]
-#else
-runDummyActivity :: DateTransactions -> [Transaction]
-#endif
-runDummyActivity = runTransactions . year 1 . month 1 . activity 1 ""
+runDummyActivity :: DateTransactions -> Transaction Journal
+runDummyActivity = year 1 . month 1 . activity 1 ""
+
+sumAmounts :: DateTransactions -> Amount
+sumAmounts = osum . tMap tAmount . runDummyActivity
