template methods & strategy