decorator pattern wip