Refactoring denotes the functionality of varous IDEs to ease complex modifications to the source code. For example, renaming a method causes all its invocations to be renamed as well - the source code remains self-consistent.

In conjunction with code generation or regular Round-Trip-Enginneering, refactorings can only be used to a very limited extend. By overwriting the refactored code, refactorings are partially reverted - the source code hence becomes inconsistent. Round-Trip-EngineeringNGsolves this problem by continuously aligning source code and diagrams such that no changes get lost. Furthermore, refactorings can be carried out not only on the source code level but also in the diagram, e.g. simply by dragging and dropping elements from one class to another. UML Lab is the first tool ever to support refactorings on both levels and without constraining developers.