splitting user handling into dedicated logic functions