Hi, Eli, commit 61da72 is different from commit c6ecda. We don't need to get IME status before setting IME status. If IME is the same status when setting it in the same status, IME will ignore the status changing. Emacs can be a litttle bit faster if get_ime_open_status_fn() is not invoked. And IME somtimes doesn't fully comply with Microsoft IME api, RIME for example. RIME which is a open source chinese ime doesn't return the status as Microsoft pinyin IME. When Microsoft pinyin IME is activated, if Microsoft pinyin is in english mode, w32-get-ime-open-status() return nil. If Microsoft pinyin is in chinese mode, w32-get-ime-open-status() return t.  We can press