updated login()