coerce_or_init should be private