diff --git a/eve.cpp b/eve.cpp
index e5248db..be5a80c 100644
--- a/eve.cpp
+++ b/eve.cpp
@@ -359,6 +359,9 @@ void hide_in_win(ClientState *cs)
       hide_win0();
       break;
 #endif
+    case method_type_CHEWING:
+      hide_win0 ();
+      break;
     case method_type_INT_CODE:
       hide_win_int();
       break;
@@ -408,6 +411,9 @@ void show_in_win(ClientState *cs)
       show_win0();
       break;
 #endif
+    case method_type_CHEWING:
+      show_win0();
+      break;
     case method_type_INT_CODE:
       show_win_int();
       break;
@@ -459,6 +465,9 @@ void move_in_win(ClientState *cs, int x, int y)
       move_win0(x, y);
       break;
 #endif
+    case method_type_CHEWING:
+      move_win0 (x, y);
+      break;
     case method_type_INT_CODE:
       move_win_int(x, y);
       break;
@@ -649,6 +658,10 @@ void disp_im_half_full()
       win_tsin_disp_half_full();
       break;
 #endif
+    case method_type_CHEWING:
+      // FIXME: change it to chewing.cpp
+      win_tsin_disp_half_full ();
+      break;
     default:
       win_gtab_disp_half_full();
       break;
@@ -699,6 +712,10 @@ void toggle_im_enabled()
         flush_tsin_buffer();
 #endif
       }
+      else if (current_method_type () == method_type_CHEWING) {
+          // FIXME: impl func
+          flush_chewing_buffer ();
+      }
       else {
         output_gbuf();
         reset_gtab_all();
@@ -755,6 +772,9 @@ void update_active_in_win_geom()
       get_win0_geom();
       break;
 #endif
+    case method_type_CHEWING:
+      get_win0_geom ();
+      break;
     case method_type_INT_CODE:
       get_win_int_geom();
       break;
@@ -780,6 +800,8 @@ gboolean win_is_visible()
     case method_type_TSIN:
       return gwin0 && GTK_WIDGET_VISIBLE(gwin0);
 #endif
+    case method_type_CHEWING:
+      return gwin0 && GTK_WIDGET_VISIBLE (gwin0);
     case method_type_INT_CODE:
 	  return gwin_int && GTK_WIDGET_VISIBLE(gwin_int);
     case method_type_MODULE:
@@ -820,6 +842,11 @@ void toggle_half_full_char()
   if (current_method_type() == method_type_TSIN && current_CS->im_state == GCIN_STATE_CHINESE) {
     tsin_toggle_half_full();
   }
+  else if (current_method_type () == method_type_CHEWING && 
+           current_CS->im_state == GCIN_STATE_CHINESE) {
+    // FIXME: impl func
+    chewing_toggle_half_full ();
+  }
   else {
     if (current_CS->im_state == GCIN_STATE_ENG_FULL) {
       current_CS->im_state = GCIN_STATE_DISABLED;
@@ -881,6 +908,10 @@ gboolean init_in_method(int in_no)
     if (!(inmd[in_no].flag & FLAG_GTAB_SYM_KBM)) {
       if (current_method_type() == method_type_TSIN) {
         flush_tsin_buffer();
+      }
+      else if (current_method_type () == method_type_CHEWING) {
+        // FIXME: func impl
+        flush_chewing_buffer ();
       } else
         output_gbuf();
 
@@ -904,6 +935,11 @@ gboolean init_in_method(int in_no)
       current_CS->in_method = in_no;
       init_tab_pho();
       break;
+    case method_type_CHEWING:
+      current_CS->in_method = in_no;
+      if (!chewing_initialize ())
+        return FALSE;
+      break;
     case method_type_TSIN:
       current_CS->in_method = in_no;
       init_tab_pp(init_im);
@@ -1109,6 +1145,10 @@ gboolean ProcessKeyPress(KeySym keysym, u_int kev_state)
         tsin_set_eng_ch(1);
       }
 
+      if (current_method_type () == method_type_CHEWING)
+        // FIXME: func impl
+        chewing_set_eng_ch (1);
+
       toggle_im_enabled();
 #if UNIX
       return TRUE;
@@ -1223,6 +1263,8 @@ gboolean ProcessKeyPress(KeySym keysym, u_int kev_state)
     case method_type_TSIN:
       return feedkey_pp(keysym, kev_state);
 #endif
+    case method_type_CHEWING:
+      return feedkey_chewing (keysym, kev_state); 
     case method_type_INT_CODE:
       return feedkey_intcode(keysym);
     case method_type_MODULE:
