Traditionally, a DBMS kernel has recovery, concurrency control and access method code tightly bound together. We factor the kernel into a transactional component (TC) that knows about transactions and their “logical” concurrency control and undo/redo recovery, and a data component (DC) that knows about the access methods and supports a record oriented interface with atomic operations. The interaction of the components is governed by a contract or covenant.