While dynamic linking has become an integral part of the run-time
execution of modern programming languages, there is increasing
recognition of the need for support for hot swapping of running
modules, particularly in long-lived server applications. The
interesting challenge for such a facility is to allow the new module
to change the types exported by the original module, while preserving
type safety. This paper describes a type-based approach to hot
swapping running modules. The approach is based on a reflective
mechanism for dynamically adding type sharing constraints to the type
system, realized by programmer-defined {\em version adapters} in the
run-time.