changed the manual newing of IDataStore to factory pattern, so the code could stay as close to programming-to-an-interface principle