switched to ConcurrentSkipListSet to support multi-threaded manipulation of properties