changed design with singleton implementations