tried a decorator pattern but I dont think its better