anchor.diff:  	NewBuckets = charge(SubscriptionAmount + AllowanceAmount,
   			[#bucket{units = Units, remain_amount = Size, name = Name,
   			termination_date = end_period(Now, Period)} | Buckets]),
  -	subscription(Subscriber#service{buckets = NewBuckets},
  +	subscription(Service#service{buckets = NewBuckets},
   			Characteristics, Now, InitialFlag, T);
  -subscription(#service{buckets = Buckets} = Subscriber,
  +subscription(#service{buckets = Buckets} = Service,
   		Characteristics, Now, InitialFlag, [#price{type = usage,
   		name = Name, alteration = #alteration{type = recurring,
   		period = Period, units = Units, size = Size,
  
positive.code: 				end
  	end,
  	case mnesia:transaction(F1) of
  		{atomic, Subscriber} ->
  			{ok, Subscriber};
  		{aborted, Reason} ->
  			{error, Reason}
  	end.
  
negative.code: 						throw(product_not_found)
  				end
  	end,
  	Service1 = lists:foldl(F, Service, Bundled),
  	Service2 = subscription(Service1,
  			Characteristics, Now, InitialFlag, Prices),
  	ProductInstance = #product_instance{start_date = Now,
  			product = BundleName, characteristics = Characteristics,
  			last_modified = {Now, erlang:unique_integer([positive])}},
  	Service2#service{product = ProductInstance}.
  %% @hidden
  subscription(#service{buckets = Buckets} = Service,
  		Characteristics, Now, true, [#price{type = one_time,
  		amount = Amount, alteration = undefined} | T]) ->
  	NewBuckets = charge(Amount, Buckets),
  	subscription(Service#service{buckets = NewBuckets},
  			Characteristics, Now, true, T);
  subscription(#service{buckets = Buckets} = Service,
  		Characteristics, Now, true, [#price{type = one_time,
  		amount = PriceAmount, name = Name,
  		alteration = #alteration{units = Units, size = Size,
  		amount = AlterationAmount}} | T]) ->
  	NewBuckets = charge(PriceAmount + AlterationAmount,
  		[#bucket{units = Units, remain_amount = Size, prices = [Name]} | Buckets]),
  	subscription(Service#service{buckets = NewBuckets},
  			Characteristics, Now, true, T);
  subscription(#service{buckets = Buckets} = Service,
  		Characteristics, Now, true, [#price{type = usage,
  		name = Name, alteration = #alteration{type = one_time,
  		units = Units, size = Size, amount = AlterationAmount}} | T]) ->
  	NewBuckets = charge(AlterationAmount, [#bucket{units = Units,
  		remain_amount = Size, prices = [Name]} | Buckets]),
  	subscription(Service#service{buckets = NewBuckets},
  			Characteristics, Now, true, T);
  subscription(#service{buckets = Buckets} = Service,
  		Characteristics, Now, InitialFlag, [#price{type = recurring,
  		period = Period, amount = SubscriptionAmount,
  		alteration = undefined} | T]) when Period /= undefined ->
  	NewBuckets = charge(SubscriptionAmount, Buckets),
  	subscription(Service#service{buckets = NewBuckets},
  			Characteristics, Now, InitialFlag, T);
  subscription(#service{buckets = Buckets} = Service,
  		Characteristics, Now, InitialFlag,
  		[#price{type = recurring, name = Name,
  		period = Period, amount = SubscriptionAmount,
  