We have introduced containers to provide segregation of objects while displaying forms. This is useful when your forms do manipulation of objects like set properties or create or delete objects and relationships. The client has a cache collection called MasterCollection that works in conjunction with the GUI so that any object being displayed is just a pointer to the item in the MasterCollection. The downside of this is that any changes made to the object before the form is committed to the server are visible in the GUI immediately.
So the recommendation for all forms is not to use IObject property but to make use of the two properties:
Me.ContainedIObject
Me.Container
So pass in ContainedIObject rather than IObject. It's the same class except the object is in its own container that can be referenced by the Container property.