docs: public final void removeConstraints(Constraint[] c) throws ConstraintNotFound {
  		if (c != null && c.length != 0) {
  			Vector<Constraint> incomp = new Vector<Constraint>();
  			for (Constraint con : c) {
  				if (isCompatible(con) && !con.isSkippableSolver(this)) {
  					if (!this.theNetwork.containsConstraint(con)) {
  						logger.info("Gonna fail - the constraint type is " + con.getClass().getSimpleName());
  						throw new ConstraintNotFound(con);
  					}
  				}
  				else incomp.add(con);
  			}
  			
  			//now filter out the incompatible constraints (we don't wanna fail, just let them pass silently)
  			Vector<Constraint> toRemove = new Vector<Constraint>();
  			for (Constraint con : c) if (!incomp.contains(con)) toRemove.add(con);
  			Constraint[] toRemoveArray = toRemove.toArray(new Constraint[toRemove.size()]);
  			
  			removeConstraintsSub(toRemoveArray);
  			for (Constraint con : toRemove) this.theNetwork.removeConstraint(con);
  			if (!skipPropagation && autoprop && checkDomainsInstantiated()) this.propagate();
  			logger.finest("Removed constraints " + toRemove);
  		}
  	}