abstracting singleton