Implementing transparent interaction between objects located in separate virtual machines was made easy by the introduction of pseudo-objects. An approach similar to that taken for persistence may be used to locate remote objects. There are differences: (i) instead of locating objects in a database, they will be searched for in a distributed name server (what might be viewed as a database, after all); and (ii) instead of reincarnating the object, a proxy of the remote object is created, as a pseudo-object.
Whenever an operation is requested to the proxy, its distribution meta-object marshals the operation and sends a message through a network channel to a meta-object located in the actual target object's address space. This meta-object just creates an operation equivalent to the requested one and delivers it for meta-level interception. As soon as a result for the operation is available, it is marshaled and returned to the proxy's meta-object, that unmarshals the result and returns it as the result of the operation.
This facility may be used as a basis for having distributed replicas. Instead of implementing inter-meta-object communication in the replication meta-objects themselves, now we just have to keep proxies to remote replica's meta-objects in every address space so that they can communicate. This is not an overkill, since group communication protocols usually require every member of the group to know every other member.