introduce factory and good one.