Java's remote method invocation mechanism provides a number of features that extend the functionality of traditional client server-based distributed systems. However, there are a number of characteristics of the language that in uence its utility as a vehicle in which to express lightweight mobile processes. Among these are its highly imperative sequential core, the close coupling of control and state as a consequence of its object model, and the fact remote method calls are not properly tail-recursive. These features impact the likelihood that Java can easily support process and object mobility for programs which exhibit complex communication and distribution patterns.