Remove TransactionalObject and snapshots. Also, adapt lock usage to the standard if (lock.tryLock(txn)) { // do sync code} else {lock.lockAsync(txn, new LockListener() {// do sync code}"

Also: temporarily add lockSynchronously to TransactionalLock (to be used at points that need a blocking lock for correctness) and temporarily remove LockListener.deadlockDetected (to avoid verbosity at the if else block above). More elegant solutions should be found for these two issues.