anchor.diff:  instance([], _ProductInstance, Acc) ->
   	lists:reverse(Acc).
   
  --spec characteristics(Characteristics) -> Characteristics
  +-spec instance_chars(Characteristics) -> Characteristics
   	when
   		Characteristics :: {array, list()} | [tuple()].
   %% @doc CODEC for Product Inventory characteristics.
  -characteristics({array, Characteristics}) ->
  -	characteristics(Characteristics, []);
  -characteristics(Characteristics) ->
  -	{array, characteristics(Characteristics, [])}.
  -%% @hidden
  -characteristics([{struct, [{"subscriberIdentity", Identity}]} | T], Acc) ->
  -	characteristics(T, [{"subscriberIdentity", Identity} | Acc]);
  -characteristics([{struct, [{"subscriberPassword", Password}]} | T], Acc) ->
  -	characteristics(T, [{"subscriberPassword", Password} | Acc]);
  -characteristics([{struct, [{"balanceTopUpDuration", BalanceTopUpDuration}]} | T], Acc) ->
  -	characteristics(T, [{"balanceTopUpDuration", topup_duration(BalanceTopUpDuration)} | Acc]);
  -characteristics([{struct, [{"radiusReserveTime", RadiusReserveTime}]} | T], Acc) ->
  -	characteristics(T, [{"radiusReserveTime", radius_reserve_time(RadiusReserveTime)} | Acc]);
  -characteristics([{struct, [{"radiusReserveOctets", RadiusReserveOctets}]} | T], Acc) ->
  -	characteristics(T, [{"radiusReserveOctets", radius_reserve_octets(RadiusReserveOctets)} | Acc]);
  -characteristics([{"subscriberIdentity", Identity} | T], Acc) ->
  -	characteristics(T, [{struct, [{"subscriberIdentity", Identity}]} | Acc]);
  -characteristics([{"subscriberPassword", Password} | T], Acc) ->
  -	characteristics(T, [{struct, [{"subscriberPassword", Password}]} | Acc]);
  -characteristics([{"radiusReserveTime", RadiusReserveTime} | T], Acc) ->
  -	characteristics(T, [{struct, [{"radiusReserveTime", radius_reserve_time(RadiusReserveTime)}]} | Acc]);
  -characteristics([{"radiusReserveOctets", RadiusReserveOctets} | T], Acc) ->
  -	characteristics(T, [{struct, [{"radiusReserveOctets", radius_reserve_octets(RadiusReserveOctets)}]} | Acc]);
  -characteristics([{"balanceTopUpDuration", Chars} | T], Acc) ->
  -	characteristics(T, [{struct, [{"balanceTopUpDuration", topup_duration(Chars)}]} | Acc]);
  -characteristics([], Acc) ->
  +instance_chars({array, Characteristics}) ->
  +	instance_chars(Characteristics, []);
  +instance_chars(Characteristics) ->
  +	{array, instance_chars(Characteristics, [])}.
  +%% @hidden
  +instance_chars([{struct, [{"subscriberIdentity", Identity}]} | T], Acc) ->
  +	instance_chars(T, [{"subscriberIdentity", Identity} | Acc]);
  +instance_chars([{struct, [{"subscriberPassword", Password}]} | T], Acc) ->
  +	instance_chars(T, [{"subscriberPassword", Password} | Acc]);
  +instance_chars([{struct, [{"balanceTopUpDuration", BalanceTopUpDuration}]} | T], Acc) ->
  +	instance_chars(T, [{"balanceTopUpDuration", topup_duration(BalanceTopUpDuration)} | Acc]);
  +instance_chars([{struct, [{"radiusReserveTime", RadiusReserveTime}]} | T], Acc) ->
  +	instance_chars(T, [{"radiusReserveTime", radius_reserve_time(RadiusReserveTime)} | Acc]);
  +instance_chars([{struct, [{"radiusReserveOctets", RadiusReserveOctets}]} | T], Acc) ->
  +	instance_chars(T, [{"radiusReserveOctets", radius_reserve_octets(RadiusReserveOctets)} | Acc]);
  +instance_chars([{"subscriberIdentity", Identity} | T], Acc) ->
  +	instance_chars(T, [{struct, [{"subscriberIdentity", Identity}]} | Acc]);
  +instance_chars([{"subscriberPassword", Password} | T], Acc) ->
  +	instance_chars(T, [{struct, [{"subscriberPassword", Password}]} | Acc]);
  +instance_chars([{"radiusReserveTime", RadiusReserveTime} | T], Acc) ->
  +	instance_chars(T, [{struct, [{"radiusReserveTime", radius_reserve_time(RadiusReserveTime)}]} | Acc]);
  +instance_chars([{"radiusReserveOctets", RadiusReserveOctets} | T], Acc) ->
  +	instance_chars(T, [{struct, [{"radiusReserveOctets", radius_reserve_octets(RadiusReserveOctets)}]} | Acc]);
  +instance_chars([{"balanceTopUpDuration", Chars} | T], Acc) ->
  +	instance_chars(T, [{struct, [{"balanceTopUpDuration", topup_duration(Chars)}]} | Acc]);
  +instance_chars([], Acc) ->
   	lists:reverse(Acc).
   
   -spec topup_duration(BalanceTopUpDuration) -> BalanceTopUpDuration
  
positive.code: 	pla(T, Acc2);
  pla([{"plaSpecId", Spec} | T], Acc) when is_list(Spec) ->
  	pla(T, Acc#pla{specification = Spec});
  pla([{"plaSpecCharacteristicValue", Chars} | T], Acc) when is_list(Chars)->
  	Characteristics = {"characteristics", characteristics(Chars)},
  	pla(T, Acc#pla{characteristics = Characteristics});
  pla([{"lastUpdate", LastUpdate} | T], Acc) when is_list(LastUpdate) ->
  	pla(T, Acc);
  pla([_ | T], Acc) ->
  
negative.code: 	Offer = {"productOffering", product(ProdID)},
  	instance(T, ProductInstance, [Offer | Acc]);
  instance([characteristics | T], #product_instance{characteristics = Chars} = ProductInstance, Acc) ->
  	Characteristics = {"characteristics", instance_chars(Chars)},
  	instance(T, ProductInstance, [Characteristics | Acc]);
  instance([status | T], #product_instance{status = undefined} = ProductInstance, Acc) ->
  	instance(T, ProductInstance,  Acc);
  