code: @Override
  	public void propagate(int evtmask) throws ContradictionException {
  		ISet nodes = g.getPotentialNodes();
  		for (int i : nodes) {
  			if (g.getMandSuccOrNeighOf(i).contains(i)) { // mandatory loop detected
  				loops.force(i, this);
  			} else if (!g.getPotSuccOrNeighOf(i).contains(i)) { // no potential loop
  				loops.remove(i, this);
  			} else if (loops.getLB().contains(i)) {
  				g.enforceArc(i, i, this);
  			} else if (!loops.getUB().contains(i)) {
  				g.removeArc(i, i, this);
  			}
  		}
  		for (int i : loops.getUB()) {
  			if (!nodes.contains(i)) {
  				loops.remove(i, this);
  			}
  		}
  	}
docs: ***********************************************************************************