anchor.diff:  %% @hidden
   rate1(Protocol, Service, Product, Buckets, Timestamp, Address, Direction,
   		#offer{specification = undefined, bundle = Bundle}, Flag,
  -		DebitAmounts, ReserveAmounts, ServiceType, State, ChargingKey, ServiceNetwork) ->
  +		DebitAmounts, ReserveAmounts, ServiceType, SessionId, ChargingKey, ServiceNetwork) ->
   	try
   		F = fun(#bundled_po{name = OfferId}, Acc) ->
   				case mnesia:read(offer, OfferId, read) of
  
positive.code: 							units = Units, product = [ProductId]} | Buckets2],
  					charge3(Service, Product, Buckets4, interim,
  							DebitAmount, {Units, UnitsCharged},
  							{Units, 0}, {Units, 0}, State, Rated, ChargingKey, Buckets)
  			end
  	end;
  charge2(#service{name = ServiceId} = Service, #product{id = ProductId} = Product, Buckets,
  		#price{units = Units, size = UnitSize, amount = UnitPrice},
  		interim, {Units, Damount} = DebitAmount, {Units, Ramount} = ReserveAmount,
  		#state{session_id = SessionId} = State, Rated, ChargingKey) ->
  	case update_session(Units, Damount, Ramount,
  			ServiceId, ChargingKey, SessionId, Buckets) of
  		{Damount, UnitsReserved, Buckets2} when UnitsReserved >= Ramount ->
  			charge3(Service, Product, Buckets2, interim, DebitAmount, DebitAmount,
  					ReserveAmount, {Units, UnitsReserved}, State, Rated, ChargingKey, Buckets);
  		{Damount, UnitsReserved, Buckets2} when UnitsReserved < Ramount ->
  			NewReserveUnits = Ramount - UnitsReserved,
  			{UnitReserve, PriceReserve} = price_units(NewReserveUnits,
  
negative.code: 		[#offer{name = OfferName} = Offer | _] = lists:foldl(F, [], Bundle),
  		rate2(Protocol, Product, Service, Buckets, Timestamp,
  				Address, Direction, Offer, Flag, DebitAmounts,
  				ReserveAmounts, SessionId, #rated{product = OfferName},
  				ChargingKey, ServiceNetwork)
  	catch
  		_:_ ->
  