diff -Nuar xc/lib/X11/imThaiFlt.c xc.thaiximgroup/lib/X11/imThaiFlt.c
--- xc/lib/X11/imThaiFlt.c	2002-07-28 20:20:26.000000000 +0700
+++ xc.thaiximgroup/lib/X11/imThaiFlt.c	2002-07-28 20:25:52.000000000 +0700
@@ -1241,7 +1241,8 @@
 
     count = XmbLookupString((XIC)ic, &ev->xkey, buf, sizeof(buf), &symbol, NULL);
 
-    if (((symbol >> 8 == 0xFF) &&
+    if ((ev->xkey.state & (AllMods & ~ShiftMask)) ||
+         ((symbol >> 8 == 0xFF) &&
          ((XK_BackSpace <= symbol && symbol <= XK_Clear) ||
            (symbol == XK_Return) ||
            (symbol == XK_Pause) ||
@@ -1249,23 +1250,20 @@
            (symbol == XK_Sys_Req) ||
            (symbol == XK_Escape) ||
            (symbol == XK_Delete) ||
-           (XK_Home <= symbol && symbol <= XK_Begin) ||
-           (XK_Select <= symbol && symbol <= XK_Insert) ||
-           (XK_Undo <= symbol && symbol <= XK_Break) ||
-           (symbol == XK_Num_Lock) ||
-           (symbol == XK_KP_Space) ||
-           (symbol == XK_KP_Tab) ||
-           (symbol == XK_KP_Enter) ||
-           (XK_KP_F1 <= symbol && symbol <= XK_KP_Delete) ||
-           (XK_KP_Multiply <= symbol && symbol <= XK_KP_9) ||
-           (XK_F1 <= symbol && symbol <= XK_F35) ||
-           (symbol == XK_KP_Equal))))
+           IsCursorKey(symbol) ||
+           IsKeypadKey(symbol) ||
+           IsMiscFunctionKey(symbol) ||
+           IsFunctionKey(symbol))))
         {
             IC_ClearPreviousChar(ic); 
             return False;
         }
     if (((symbol >> 8 == 0xFF) &&
-         (XK_Shift_L <= symbol && symbol <= XK_Hyper_R)) ||
+         IsModifierKey(symbol)) ||
+#ifdef XK_XKB_KEYS
+        ((symbol >> 8 == 0xFE) &&
+         (XK_ISO_Lock <= symbol && symbol <= XK_ISO_Last_Group_Lock)) ||
+#endif
         (symbol == NoSymbol))
     {
         return False;
