flexible initialization