functional with keystroke entry