for user logic