improve singleton structure