anchor.diff:  		[#offer{name = OfferName} = Offer | _] = lists:foldl(F, [], Bundle),
   		rate2(Protocol, Product, Service, Buckets, Timestamp,
   				Address, Direction, Offer, Flag, DebitAmounts,
  -				ReserveAmounts, State#state{rated = #rated{product = OfferName}}, ChargingKey)
  +				ReserveAmounts, State#state{rated = #rated{product = OfferName}},
  +				ChargingKey, ServiceNetwork)
   	catch
   		_:_ ->
   			throw(invalid_bundle_product)
   	end;
   rate1(Protocol, Service, Product, Buckets, Timestamp, Address,
   		Direction, #offer{name = OfferName} = Offer,
  -		Flag, DebitAmounts, ReserveAmounts, ServiceType, State, ChargingKey) ->
  +		Flag, DebitAmounts, ReserveAmounts, ServiceType, State,
  +		ChargingKey, ServiceNetwork) ->
   	case mnesia:read(offer, OfferName, read) of
   		[#offer{specification = Spec, status = Status} = _P] when
   				((Status == active) orelse (Status == undefined))
  
positive.code: 			RoamingTable = roaming_table_prefix(Price),
  			rate4(Protocol, Service, Product, Buckets, Price,
  					Flag, DebitAmounts, ReserveAmounts,
  					State#state{roaming_tb_prefix = RoamingTable}, ChargingKey);
  		_ ->
  			throw(price_not_found)
  	end.
  
negative.code: 			throw(undefined_tariff)
  	end;
  rate3(Protocol, Service, Product, Buckets, _Address,
  		Price, Flag, DebitAmounts, ReserveAmounts, State, ChargingKey, _ServiceNetwork) ->
  	charge(Protocol, Product, Service, Buckets, Price,
  			Flag, DebitAmounts, ReserveAmounts, State, ChargingKey).
  %% @hidden
  rate4(Protocol, Service, Product, Buckets,
  		#price{type = tariff} = Price, Flag, DebitAmounts, ReserveAmounts,
  		#state{roaming_tb_prefix = RoamingTable, 
  		rated = Rated} = State, ChargingKey, ServiceNetwork)
  		when is_list(RoamingTable), is_list(ServiceNetwork) ->
  	Table = list_to_existing_atom(RoamingTable),
  	case catch ocs_gtt:lookup_last(Table, ServiceNetwork) of
  