anchor.diff:  		false ->
   			get_reserve(Price)
   	end,
  -	charge2(Service, Product, Buckets, Price, interim, DebitAmount, ReserveAmount, State);
  +	charge2(Service, Product, Buckets, Price, interim, DebitAmount, ReserveAmount, State, ChargingKey);
   charge(_Protocol, Product, Service, Buckets,
   		#price{units = Units, size = Size} = Price,
  -		Flag, DebitAmounts, [], State)
  +		Flag, DebitAmounts, [], State, ChargingKey)
   		when ((Flag == initial) or (Flag == interim)) ->
   	DebitAmount = case lists:keyfind(Units, 1, DebitAmounts) of
   		{Units, DebitUnits} ->
  
positive.code: 			throw(undefined_tariff)
  	end;
  rate3(Protocol, Service, Product, Buckets, _Address,
  		Price, Flag, DebitAmounts, ReserveAmounts, State) ->
  	charge(Protocol, Product, Service, Buckets, Price,
  			Flag, DebitAmounts, ReserveAmounts, State).
  %% @hidden
  rate4(Protocol, Service, Product, Buckets,
  		#price{type = tariff} = Price, Flag, DebitAmounts, ReserveAmounts,
  		#state{roaming_tb_prefix = RoamingTable, service_network = ServiceNetwork,
  		rated = Rated} = State)
  		when is_list(RoamingTable), is_list(ServiceNetwork) ->
  	Table = list_to_existing_atom(RoamingTable),
  	case catch ocs_gtt:lookup_last(Table, ServiceNetwork) of
  
negative.code: 										charge(Protocol, Service, Product, Buckets,
  												Price#price{amount = N}, Flag, DebitAmounts, ReserveAmounts,
  												State#state{rated = Rated#rated{price_type = tariff,
  												description = Description1}}, ChargingKey);
  									_N ->
  										throw(negative_amount)
  								end;
  