>TBH, this seems like bad design. Would it not be simpler, more efficient and less error prone for a hit to retrieve a current reference to the required oApp objects rather than hold a potentially out-of-date version ?
This is a good design. And, BTW, if I get oApp as is, if another hit changes something in it, which happens very rarely, because I am not the only one doing it, like maintaining the data dictionary, this might cut off the oApp of another hit in progress. So, this is why I take a copy of it at first and use it during the hit, so it oApp, a Shared object, is changed in another hit, it will not affect the current hit in progress.
So, basically, cloning is not good as is clones only the properties but preserved the object references as is, thus to the same memory location. That is why I am looking at a deep copy. However, .NET doesn't support a deep copy. This is why it gets complicated.