Optimistic discrete event simulation is a technique for improving simulation performance by allowing sequential events to be processed asynchronously. In order to maintain the sequential semantics of the simulation, the framework must be able to roll back events whenever it discovers they have been processed out of order. Retrofitting check-point and rollback semantics into existing code is a time consuming and error prone process. We present an automatic approach for supporting checkpoint and rollback using incremental state saving with an arbitrary number of checkpoints. Through the use of Java byte-code instrumentation, we show that this support can be added to existing software without modification to the source code, compiler, or virtual machine. We measure the steady-state performance of our approach in a statistically rigorous fashion. Our results show that our approach compares favorably with code that was manually engineered for state saving in terms of run-time overhead.