change singleton approach to not require delete