re-factore template