(a) historical approach to CML processing. Software was expected to perform a wide variety of tasks including validation and transformations (processing). (b) the CMLLite approach: each module performs only one task i.e. validation, normalisation or transformation (processing). This makes each of the modules more straightforward to understand and produces cleaner code.