cleaned up decorator implementation