template implemented