A new approach based on composition rather than extension. WIP