implement user logic