Unfortunately, the generation of software from conceptual models will usually create a challenge. In many cases, models are not sufficient to generate a complete system. Therefore, the generated code has to be extended manually. If the model gets changed afterwards, the re-generation of code is likely to corrupt the existing manual extensions. There are sophisticated approaches to synchronize code and models. However, in most cases they are not entirely satisfactory. Instead of focusing on more advanced synchronization, it makes sense to ask why there is need to generate code from models. The need to synchronize code and models is mainly caused by the fact that current programming language allow only for objects on M1 to have a state. Therefore, model editors need to represent classes (or meta-classes) respectively as objects on M1, which cannot be further instantiated. Multi-level language engineering allows for representing models in a tool at the level where they conceptually belong. For example, a class on M1 is represented as a class (which is an object at the same time) on M1. Hence, there is no need to separate the representation of code from the representation of models. Therefore, it is possible to either modify a system on the preferred level of abstraction, code or model, and the corresponding counterpart will be updated implicitly.