switched from mutexes to rwlocks - for normal update operations, now no thread locks