some abstracty template stuff