refactor DatasetManager into singleton