use RWMutex to allow simulatnous reads