@Override
	public boolean equals(Object obj) {
		FrozenCall<T> that = UtilFunctions.checkNullOrNotInstance(this, obj);
		if (that == null)  return false;
		else if (!this.proc.equals(that.proc))  return false;
		else if (this.args.length != that.args.length)  return false;

		for (int i = 0; i < args.length; i++) {
			if (this.args[i] == null && that.args[i] != null)  return false;
			else if (!this.args[i].equals(that.args[i]))  return false;
		}
		
		return true;
	}