redesign singleton