At the moment all OSEM referenced components are eagerly-loaded at unmarshall time.
This is fine, but some performance could be gained for large detach sizes by deferring the load until property access time, as per the Hibernate collection lazy load.
An initial implementation using Javassist could be 'borrowed' from hibernate

. I can help out with this if required.
I guess the main question is around the transactional semantics of this; should/must the lazy unmarshalling happen in the same session?
If so it would probably need an Open Session In View equivalent.
This should also be configurable on a by-property basis (as per hibernate), with a global override like compass.engine.lazyLoading.enabled=false
I am not sure about the proxy stuff for non collection based reference mapped properties. Having both Compass and usually another ORM tool generating code over a domain model give me the creeps
.