Implementing more complex decorators