more generic make and init funcs