We present NRMI: a drop-in replacement for Java RMI that supports call-by-copy-restore semantics for arbitrary linked data structures, in addition to regular call-by-copy semantics. Call-by-copy-restore middleware is more natural to use than traditional call-by-copy RPC mechanisms, enabling distributed calls to behave much like local calls. We discuss in depth the effect of calling semantics for middleware, describe how call-by-copy-restore middleware can be implemented efficiently, and show examples of Java programs where NRMI is more convenient than regular Java RMI.