I worry that this may also involve multithreading