refactored singleton to a python3 version. something about the previous implementation wasn't ensuring only 1 instance