template method.