Model-driven engineering advocates the separation of concerns through the use of models, each representing a different aspect of a system. Such models can be created using a variety of Domain-Specific Languages (DSLs), each engineered to enable the efficient definition of a specific aspect of a system. However, engineering a DSL implies the creation of a wide range of tools to allow the DSL user to define, analyze and use conforming models. To avoid building each of these tools manually, and hence to reduce the amount of DSL engineering effort, we will explore in this talk different strategies to create generic tools that can be reused from one DSL to another – ie. a “build once and reuse everywhere” strategy. We will focus on two kinds of tools each built with a different strategy: an execution trace constructor generated from the definition of the DSL, and an omniscient debugger that dynamically interprets the definition of the DSL. We will then discuss how useful it can be to enrich the definition of a DSL when applying such methods. We will finally discuss the limitations of such approaches, and how they could improve in the future.