cleaned up decorable implementation