template_method_pattern added