public void intersect(FollowRestrictions f) {
		fr1 = fr1.intersect(f.fr1);
		
		ShareableHashSet<LinkedList<CharacterClass>> newLonger = new ShareableHashSet<LinkedList<CharacterClass>>();;
		
		for (LinkedList<CharacterClass> l1 : frLonger) {
			for (LinkedList<CharacterClass> l2 : f.frLonger) {
				if (l1.size() == l2.size()){
					// intersect
					LinkedList<CharacterClass> l3 = null;
					while (l1 != null) {
						CharacterClass i = l1.elem.intersect(l2.elem);
						if (i.isEmpty()) {
							l3 = null;
							break;
						}
						
						if (l3 == null) {
							l3 = new LinkedList<CharacterClass>(i);
						} else {
							l3.append(i);
						}
						l1 = l1.next;
						l2 = l2.next;
					}
					
					if (l3 != null) {
						newLonger.add(l3);
					}
				}
			}
		}
		
		frLonger = newLonger;
	}