This project is developing and evaluating new techniques for tool-assisted restructuring of large systems. The excessive cost of software evolution is due in large part to inappropriate structure of a system, relative to the changes taking place. Tool-assisted program restructuring is studied for changing a system's structure at lower cost and risk than making changes by hand. In this approach, a tool user selects transformations to apply to chosen program components. The tool checks to make sure that each transformation will preserve the functional behavior of the program. If so, it performs the transformation to the chosen component and updates any related components to preserve consistency. Tool-assisted restructuring has not been demonstrated to be practical in industrial-scale applications. For example, exhaustive interprocedural data flow analysis is required by some tools, but is costly to perform on large programs. Previous restructuring research has not addressed common complicating constructs such as pointer arithmetic, function pointers, comments, textual macros, and conditional compilation. To make the restructuring of large programs practical, this project is developing and adapting techniques to address these problems. Demand-driven data flow is being investigated to overcome many performance problems of exhaustive data flow analysis. Query prioritization and caching of replies are studied to minimize burdensome and potentially incorrect user queries. Testing and semantic differencing may also provide checks of correctness after restructuring. A case study is intended to evaluate the techniques developed and the benefits of large-scale restructuring.