Today, software engineers spend most of their time maintaining software systems. Appropriate (design) documentation is often missing or no longer consistent with the actual implementation. Especially in case of legacy systems which have not been developed using a model-driven approach, it is the system?s source code that has to be understood and changed eventually, which is a time consuming and expensive task.