using concurrent hash map to avoid concurrent issues