anchor.diff:  							remain_amount = PriceCharged - PriceCharge,
   							reservations = [NewReservation],
   							units = cents, product = [ProductId]} | Buckets4],
  -					charge3(Service, Buckets5, final, DebitAmount, {Units, TotalUnits},
  +					charge3(Service, Product, Buckets5, final, DebitAmount, {Units, TotalUnits},
   							ReserveAmount, ReserveAmount, State#state{rated = Rated3})
   			end
   	end;
  -charge2(Service, Buckets1,
  +charge2(Service, #product{id = ProductId} = Product, Buckets1,
   		#price{units = Units, size = UnitSize, amount = UnitPrice,
   		type = PriceType, currency = Currency}, event,
   		{Units, Amount} = DebitAmount, {Units, 0} = ReserveAmount,
   		#state{rated = Rated1, session_id = SessionId,
  -		service_id = ServiceId, charging_key = ChargingKey,
  -		product = #product{id = ProductId}} = State) ->
  +		service_id = ServiceId, charging_key = ChargingKey} = State) ->
   	Rated2 = Rated1#rated{price_type = PriceType, currency = Currency},
   	case charge_event(Units, Amount, Buckets1) of
   		{Amount, Buckets2} ->
   			Rated3 = rated(#{Units => Amount}, Rated2),
  -			charge3(Service, Buckets2, event, DebitAmount, DebitAmount,
  +			charge3(Service, Product, Buckets2, event, DebitAmount, DebitAmount,
   					ReserveAmount, ReserveAmount, State#state{rated = Rated3});
   		{UnitsCharged, Buckets2} when UnitsCharged < Amount ->
   			{UnitCharge, PriceCharge} = price_units(Amount - UnitsCharged,
  
positive.code: 			{Debits, Buckets3} = get_final(ServiceId,
  					ChargingKey, SessionId, Buckets2),
  			Rated3 = rated(Debits, Rated2),
  			charge3(Service, Buckets3, final, DebitAmount, DebitAmount,
  					ReserveAmount, ReserveAmount, State#state{rated = Rated3});
  		{UnitsCharged, Buckets2} when UnitsCharged < Amount ->
  			{UnitCharge, PriceCharge} = price_units(Amount - UnitsCharged,
  
negative.code: 				{PriceCharge, Buckets3} ->
  					TotalUnits = UnitsCharged + UnitCharge,
  					Rated3 = rated(#{Units => Amount, cents => PriceCharge}, Rated2),
  					charge3(Service, Product, Buckets3, event, DebitAmount, {Units, TotalUnits},
  							ReserveAmount, ReserveAmount, State#state{rated = Rated3});
  				{PriceCharged, Buckets3}  when PriceCharged < PriceCharge ->
  					TotalUnits = UnitsCharged + (PriceCharged div UnitPrice),
  