I wonder if we should be using `MaybeFake` here instead of `Obj`. I noticed this change when I performed the merge and preserve the original PR semantics, but I'm not sure if it's right. `Obj` and `MaybeFake` come from the `mutate_get` call earlier in `perform_put`. `Obj` is the mutated object. The thing we're writing to disk. Clients never see this object. Likewise, we unmutate this object on the get/put path after reading from the backend (well, there's actually a bug where we don't in all code paths, but that's separate from this PR ). Thus, high level Riak only ever sees the unmutated object. The `MaybeFake` object here is basically that object -- hence why the `MaybeFake` object is the thing we return back to the put FSM. Does it follow that it's more correct to use the `MaybeFake` (the faked real object) object rather than `Obj` (the mutated obj)? I'm pretty sure mutators must preserve the vclock, but I'm not certain they must perserve the index specs. Anyone with more mutator knowledge than I have an opinion?