Very interesting feature. However i dont like the fact that every time you change data layout, you have to reimplement lost fields in upgrader with exactly same type and name without optional way to restore these infos inside Upgrade call. Well, disciplined programmers surely will change upgrader immediately after every layout change but would be nice if there was a safeguard. Could be possible to implement something like this? Code (CSharp): public void Upgrade(ref ProjectileLauncher launcher, int version, SerializedProperty lostFields) //or oldFields if hard/impossible to filter out not lost fields i believe this would enable querying lost fields' name and type and even get their value before layout change.