base implementation end