more refactoring stuffs, delegator the bookkeeper logic to a helper class, needs a name