Metamodeling is playing an increasingly important role in object-oriented software engineering. However, most approaches use metamodels in a very pragmatic way and important conceptual questions are left open. In this paper, an object-oriented metamodeling methodology based on a formal metalanguage is introduced. The methodology allows for the description of all relevant properties of a metamodel, i. e. abstract syntax, static and dynamic semantics. Different kinds of instantiation relations are identified and a dichotomy for the classiffcation of metaentities is developed. The reflection of the instantiation relations by the metalanguage is shown.