implement macro