anchor.diff:  			RoamingTable = roaming_table_prefix(Price),
   			rate3(Protocol, Service, Product, Buckets, Address,
   					Price, Flag, DebitAmounts, ReserveAmounts,
  -					State, RoamingTable,
  +					SessionId, RoamingTable,
   					Rated, ChargingKey, ServiceNetwork);
   		_ ->
   			throw(price_not_found)
   	end;
   rate2(Protocol, Service, Product, Buckets, Timestamp, _Address, _Direction,
   		#offer{price = Prices} = _Offer, Flag, DebitAmounts, ReserveAmounts,
  -		State, Rated, ChargingKey, ServiceNetwork) ->
  +		SessionId, Rated, ChargingKey, ServiceNetwork) ->
   	F = fun(#price{type = tariff, units = octets}) ->
   				true;
   			(#price{type = usage}) ->
  
positive.code: 	ok = mnesia:write(Service2),
  	{disabled, SessionList, DeletedBuckets,
  			accumulated_balance(NewBuckets, Product#product.id)};
  charge3(#service{session_attributes = SessionList} = Service1, Product, Buckets, _Flag,
  		{Units, Charge}, {Units, Charged}, {Units, Reserve}, {Units, Reserved},
  		#state{session_id = SessionId, service_id = ServiceId},
  		_Rated, ChargingKey, OldBuckets)
  		when Charged < Charge; Reserved <  Reserve ->
  	NewBuckets = refund(ServiceId, ChargingKey, SessionId, Buckets),
  	{NewBRefs, DeletedBuckets}
  
negative.code: 	end,
  	ReserveAmount = {Units, 0},
  	charge2(Service, Product, Buckets, Price, Flag, DebitAmount, ReserveAmount,
  			SessionId, Rated, ChargingKey);
  charge(_Protocol, Service, Product, Buckets, #price{units = Units} = Price,
  		Flag, DebitAmounts, ReserveAmounts, SessionId, Rated, ChargingKey)
  		when is_list(ReserveAmounts) ->
  	DebitAmount = case lists:keyfind(Units, 1, DebitAmounts) of
  		{Units, DebitUnits} ->
  