add singleton to rework getXXX