this code is copied/duplicated. This is why I think it is better to use decoration pattern