Don't require a call to replace()

Currently just turn the put_back() into a virtual call until the corresponding
bug in Rust is fixed.