BigDecimal used for better precision