Intermediate solution using Decorators - far too complex!
Reworked solution to use local methods