better decorator structure