public AlgebraicParticle cloneWithNewSignAndExponent(Boolean sign, Integer exponent){
		//checks for null necessary otherwise auto unboxing will cause NullPointerException
		if((sign == null || this.sign == sign) && (exponent  == null || this.exponent == exponent)) return this;
		try {
			AlgebraicParticle copy = (AlgebraicParticle) this.clone();
			copy.sign = sign == null ? this.sign : sign;
			copy.exponent = exponent == null ? this.exponent : exponent;
			return copy;
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}