Enormous resources are invested in the construction of software. As needs change we would like to be able to preserve these investments. In this paper we outline a unified model for addressing the problem of change in software systems for which the original specifications are not available. Our approach is derived from a much broader paradigm for software construction. The approach is based on recovery of abstractions and design decisions made during implementation of the current version of a system. The paper consists of two major parts. We begin with a discussion of the Draco paradigm for software construction and how it can be applied to maintenance and porting problems. We follow with a discussion of our experience with a porting project using prototype implementation of these ideas