doesn't need to be a concurrent map since we're using a lock...