anchor.diff:  			NewAcc = [B#bucket{remain_amount = Remain + (ReservedAmount - Charge),
   					reservations = [NewReservation | NewReservations]} | Acc],
   			charge_session(Type, 0, Now, SessionId, T, Charged + Charge, NewAcc);
  -		{value, {_, DebitedAmount, ReservedAmount, _}, []} 
  +		{value, {_, DebitedAmount, ReservedAmount, _}, []}
   				when ReservedAmount >= Charge,
   				Expires /= undefined, Expires =< Now ->
   			NewDebitedAmount = DebitedAmount + Charge,
  
positive.code: 			case update_session(cents,
  					PriceCharge, PriceReserve, SessionId, Buckets2) of
  				{PriceCharge, PriceReserve, Buckets3} ->
  					rate6(Subscriber#service{buckets = Buckets3}, interim,
  							DebitAmount, UnitsCharged + UnitCharge, ReserveAmount,
  							UnitReserve, SessionId, Rated);
  				{PriceCharge, PriceReserved, Buckets3} ->
  					rate6(Subscriber#service{buckets = Buckets3}, interim,
  							DebitAmount, UnitsCharged + UnitCharge, ReserveAmount,
  							PriceReserved div UnitPrice, SessionId, Rated);
  				{PriceCharged, 0, Buckets3} ->
  					Buckets4 = [#bucket{remain_amount = PriceCharged - PriceCharge,
  							units = cents} | Buckets3],
  					rate6(Subscriber#service{buckets = Buckets4}, interim,
  							DebitAmount, UnitsCharged + (PriceCharged div UnitPrice),
  							ReserveAmount, 0, SessionId, Rated)
  			end
  	end;
  rate5(#service{buckets = Buckets1} = Subscriber,
  		#price{units = Units, size = UnitSize, amount = UnitPrice,
  		type = PriceType, currency = Currency},
  		_Validity, final, DebitAmount, 0, SessionAttributes, Rated1) ->
  	Rated2 = Rated1#rated{bucket_type = Units,
  			price_type = PriceType, currency = Currency},
  	SessionId = get_session_id(SessionAttributes),
  	case charge_session(Units, DebitAmount, SessionId, Buckets1) of
  		{DebitAmount, Buckets2} ->
  			Rated3 = Rated2#rated{usage_rating_tag = included},
  			rate6(Subscriber#service{buckets = Buckets2}, final,
  					DebitAmount, DebitAmount, 0, 0, SessionId, Rated3);
  		{UnitsCharged, Buckets2} ->
  			PriceChargeUnits = DebitAmount - UnitsCharged,
  			{UnitCharge, PriceCharge} = price_units(PriceChargeUnits,
  
negative.code: 						Acc
  				end
  		end,
  		[#offer{name = OfferName} = Offer | _] = lists:foldl(F, [], Bundle),
  		rate2(Protocol, Service, Buckets, Timestamp,
  				Address, Direction, Offer, Flag, DebitAmounts,
  				ReserveAmounts, State#{rated => #rated{product = OfferName}})
  	catch
  		_:_ ->
  			throw(invalid_bundle_product)
  	end;
  rate1(Protocol, Service, Buckets, Timestamp, Address,
  		Direction, #offer{name = OfferName} = Offer,
  		Flag, DebitAmounts, ReserveAmounts, State) ->
  	rate2(Protocol, Service, Buckets, Timestamp, Address,
  		Direction, Offer, Flag, DebitAmounts, ReserveAmounts,
  		State#{rated => #rated{product = OfferName}}).
  %% @hidden
  rate2(Protocol, Service, Buckets, Timestamp, Address,
  		Direction, #offer{specification = ProdSpec, price = Prices},
  		Flag, DebitAmounts, ReserveAmounts, State)
  		when ProdSpec == "10"; ProdSpec == "11" ->
  	F = fun(#price{type = usage, units = messages}) ->
  				true;
  			(#price{type = usage, units = cents}) ->
  