added enum-based singleton pattern.