The purpose of this project was to study the cognitive factors involved in the modification of software. It was hypothesized that a programmer generates a goal-based representation of code during an initial comprehension phase. The programmer then operates on this representation to make conceptual modifications in the program's function. Finally the programmer executes programming plans that are language-specific in order to make changes in code. This procedure will be repeated many times when major modifications are required. Several experiments were designed to uncover the structure and content of knowledge representations used in the software modification process. The information gained in this study will be useful in the development of theory about the execution of complex cognitive tasks. Practically, the study will provide guidelines for the design of cognitively-based software modification tools.