anchor.diff:  		when is_binary(Password), is_list(Product), Product /= [], is_list(Buckets), is_list(Attributes),
   		is_boolean(EnabledStatus), is_boolean(MultiSession) ->
   	F2 = fun() ->
  -				case mnesia:read(product, Product, read) of
  +				ProdId = case Product of
  +					[] ->
  +						case mnesia:first(product) of
  +							'$end_of_table' ->
  +								throw(product_not_found);
  +							ProId ->
  +								ProId
  +						end;
  +					Product ->
  +						Product
  +				end,
  +				case mnesia:read(product, ProdId, read) of
   					[#product{start_date = SD, end_date = TD, status = Status }] ->
   						F1 = fun(_, _, 0) ->
   									mnesia:abort(retries);
  
positive.code: 	when
  		Identity :: string() | binary(),
  		Password :: string() | binary(),
  		Product :: string(),
  		Result :: {ok, #subscriber{}} | {error, Reason},
  		Reason :: term().
  %% @equiv add_subscriber(Identity, Password, Product, [], [], [], true, false)
  
negative.code: 		when is_binary(Identity), is_binary(Password), is_list(Product), Product /= [],
  		is_list(Buckets), is_list(Attributes), is_boolean(EnabledStatus), is_boolean(MultiSession) ->
  	F1 = fun() ->
  				ProdId = case Product of
  					[] ->
  						case mnesia:first(product) of
  							'$end_of_table' ->
  								throw(product_not_found);
  							ProId ->
  								ProId
  						end;
  					Product ->
  						Product
  				end,
  				case mnesia:read(product, ProdId, read) of
  					[#product{start_date = SD, end_date = TD, status = Status }] ->
  						TS = erlang:system_time(?MILLISECOND),
  						N = erlang:unique_integer([positive]),
  