new overridable template method