impl template method