updated login function