change singleton implementation