decorator design pattern :)