Type-preserving compilation can improve software reliability by generating code that can be verified independently of the compiler. Practical type-preserving compilation does not exist for languages with multiple inheritance. This paper presents EMI , the first typed intermediate language to support practical compilation of a programming language with fully general multiple inheritance. The paper demonstrates the practicality of EMI by showing that EMI can be used to faithfully model standard implementation strategies of multiple inheritance for C++, the most widely-used programming language with general multiple inheritance. Categories and Subject Descriptors D.3.3 [Programming Languages]: Language Constructs and Features--Classes and Objects; D.3.1 [Programming Languages]: Formal Definitions and Theory General Terms Languages Keywords Typed intermediate language, class and object encoding, multiple inheritance