More work, lots of precondition checking