Corrective: Repair any kind of defect. Adaptive: Porting to new hardware or a different OS, without affecting functionality. Perfective: New requirements, and performance improvements. Preventive: Improve maintainability itself, refactor awkward designs and comments.