public Money CalculatePriceReduction(IBasketLine basketLine) {
			
			/*
			 * Buy N, get one free
			 * i.e. Buy 4, pay for 3
			 */
			try {
				int quantity = basketLine.Quantity / (PromotionBase.AuxData + 1);

				//See how many multiples we have
				if (quantity * (PromotionBase.AuxData + 1) > basketLine.Quantity) {
					quantity--;
				}

				if (quantity > 0) {

					Money discount = new Money(basketLine.LinePrice);
					discount.RoundingMode = RoundingMode.AlwaysRoundUp;

					discount.Divide(basketLine.Quantity);
					discount.Multiply(quantity);

					return discount;

				} else {

					return new Money(0);

				}

			} catch (Exception e) {
				LogManager.GetLogger(GetType()).Error(e);
				return new Money(0);
			}
		}
		public void TestDivide() {

			Money money1 = new Money(1.23M);
			money1.Divide(1.5M);

			Assert.IsTrue(money1.Amount == 0.82M, "Addition failed (" + money1.ToString() + " != 0.82");
		}