Process migration requires that a process can access the same set of files from different machines. While this functionality is provided in many environments via a networked file system, it is often desirable to share computing resources between machines which don't have a common filesystem. For example, we have migrated processes between our site at the University of Wisconsin, and several sites in Europe and Russia. Since these sites certainly do not share a common file system, condor provides its own means of location independent file access. This is done by maintaining a process (called the ``shadow'') on the machine where the job was submitted which acts as an agent for file access by the migrated process. All calls to system routines that use file descriptors by the user's code are re-routed by RPCs to the shadow. We do this at the system call level, so that whether the user code uses write() directly, or calls printf() (or even some other routine we've never heard of which ultimately exercises the write() system call), correct action results.