more flexible initialization