Experience on a large banking application has highlighted expressive weaknesses in the standard (concrete) syntax of UML, resulting in models that are under-constrained. It es, however, that the abstract syntax meta-model underlying UML is inherently more expressive that the concrete syntax layered on top of it. By directly reaching into, exploiting and, where necessary extending the meta-model we are able to constrain fully our domain models. Furthermore, since different fragments of a given model require different levels of ve power, we are able to utilize a blend of concrete and extended abstract syntaxes to achieve a compact yet rich form of modeling. Finally, enhancing the concrete syntax of the modeling language, allowing the association of new concrete graphical icons with our syntax extensions, facilitates the expression of models in an even more compact, readable, and intuitive form.