maybe PatternCollection doesn't need to be concurrent?