replacing wonky init() with factory behavior