A <italic>future</italic> provides the basic primitive through which a user in an object-oriented distributed system can achieve concurrency. It is based on the notion of being able to translate what appears to be a remote procedure call into a request for computation to be scheduled by the system. The mechanism required to make this translation is discussed. Refinements to the future mechanism allow futures to be passed as arguments to other procedure calls. This provides the user with the added flexibility of implementing synchronization schemes suited to specific needs. Further, it simplifies the process of migrating an object which has outstanding futures at the time of migration.