code: private void mergeTwoOrderVariations(Predicate<RelationService> p1, Predicate<RelationService> p2) {
  		/*
  		 *  t1 --r1--> t2 --r2--> t3
  		 *  t1 --rtrans--> t3
  		 */
  
  		terminology.terms(TermProperty.FREQUENCY.getComparator(true))
  		.forEach(t1 -> {
  			final Map<Term, Relation> r1Set = new HashMap<>();
  
  			t1.variations().forEach(r1 -> {
  				if(p1.test(r1))
  					r1Set.put(r1.getTo().getTerm(), r1.getRelation());
  			});
  			
  			final Set<Relation> rem = new HashSet<>();
  			
  			r1Set.keySet().forEach(t2-> {
  				terminology
  					.outboundRelations(t2, RelationType.VARIATION)
  					.filter(p2)
  					.filter(r2 -> r1Set.containsKey(r2.getTo()))
  					.forEach(r2 -> {
  						Term t3 = r2.getTo().getTerm();
  						
  						Relation rtrans = r1Set.get(t3);
  						if(logger.isTraceEnabled()) {
  							logger.trace("Found order-2 relation in variation set {}-->{}-->{}", t1, t2, t3);
  							logger.trace("Removing {}", rtrans);
  						}
  						watchRemoval(t1.getTerm(), t2, t3, rtrans);
  						rem.add(rtrans);
  					})
  				;
  			});
  			
  			rem.forEach(rel -> {
  				terminology.removeRelation(rel);
  			});
  		});
  
  	}
docs: /*
  When
  
  baseTerm -r1-> v1
  baseTerm --rtrans--> v2
  and v1 -r2-> v2
  
  Then remove
  
  baseTerm --rtrans--> v2