use templates instead