Now fully uses BigInteger!