This paper presents ATL (ATLAS Transformation Language): a hybrid model transformation language that allows both declarative and imperative constructs to be used in transformation definitions. The paper describes the language syntax by using examples. Language semantics is described in pseudo-code and various optimizations of transformation executions are discussed. ATL is supported by a set of development tools such as an editor, a compiler, a virtual machine, and a debugger. A case study shows the applicability of the language constructs. Alternative ways for implementing the case study are outlined. ATL language features are classified according to a model that captures the commonalities and variabilities of the model transformations domain.