Use TransactionHandler and Command pattern