A typical approach to software maintenance is analyzing just the source code, applying some patches, releasing the new version, and then updating the documentation. This quick-fix approach usually leads to documentation not aligned with the current system and degrades the original system structure, thus rendering the evolution of the system costly and error-prone. Although there are alternative maintenance models which avoid these problems, by analyzing and updating the system documentation first, the quick-fix approach continues to be popular because of the time pressure for new releases and the resistance to change of maintenance programmers. In this paper, we propose an iterative reengineering model which can be run each time the maintainability and reliability of a software system degrade under a tolerance level. The reengineering process, applied after a number of modifications, can result in renovation of the current system or, simply, in realignment of the documentation. In thi...