The use of abstractions enhances several aspects of a software system, especially its maintainability, reusability, and comprehensibility. However, it decreases the performance of the software. Context dependent transformations can effectively remove the performance loss of abstractions while preserving all their advantages. We state the conditions which the transformations should satisfy and develop four general transformation rules. Language mechanisms are proposed which permit the transformation directives to be embedded in the source code. This can be used to automate the transformations. It also facilitates an approach to incremental performance improvement.