diff --git a/scim-wnn/src/scim_wnn_def.h b/scim-wnn/src/scim_wnn_def.h
index 56a5ee1..ee7e282 100644
--- a/scim-wnn/src/scim_wnn_def.h
+++ b/scim-wnn/src/scim_wnn_def.h
@@ -71,6 +71,5 @@
 #define SCIM_PROP_WNN_MODESTATUS                    "/IMEngine/Wnn/Property/ModeStatus"
 #define SCIM_PROP_WNN_INPUTMODE                     "/IMEngine/Wnn/InputMode"
 
-
 #endif
 
diff --git a/scim-wnn/src/scim_wnn_imengine.cpp b/scim-wnn/src/scim_wnn_imengine.cpp
index d5aa7b7..e1719e2 100644
--- a/scim-wnn/src/scim_wnn_imengine.cpp
+++ b/scim-wnn/src/scim_wnn_imengine.cpp
@@ -176,6 +176,7 @@
     : IMEngineInstanceBase (factory, encoding, id)
 {
     m_iconv.set_encoding ("EUC-JP");
+    m_connected = false;
     preeditors.push_back(new Romkan(_scim_config));
     preeditors.push_back(new KanaInput(_scim_config));
     m_preeditor = preeditors.at(0);
@@ -616,9 +617,7 @@
     m_conversion = false;
     m_lookup = false;
     wnn.reset();
-    //wnn.wnnDisconnect();
     m_preeditor->reset();
-    m_proplist.clear();
     updatePreEditor();
 }
 
@@ -664,12 +663,13 @@
 void WnnInstance::startConversion(WideString s)
 {
     hide_aux_string();
-    if (!wnn.isConnected()) {
-        if (!wnn.wnnConnect(String("scim-wnn"),host,rc,0)) {
-            update_aux_string(utf8_mbstowcs(String(_("could not connect to jserver."))));
-            show_aux_string();
-            return;
-        }
+    if (!m_connected) {
+        m_connected = wnn.wnnConnect(String("scim-wnn"),host,rc,0);
+    }
+    if (!m_connected) {
+        update_aux_string(utf8_mbstowcs(String(_("could not connect to jserver."))));
+        show_aux_string();
+        return;
     }
 
     wnn.setYomiText(s);
diff --git a/scim-wnn/src/scim_wnn_imengine.h b/scim-wnn/src/scim_wnn_imengine.h
index 344f911..47447ca 100644
--- a/scim-wnn/src/scim_wnn_imengine.h
+++ b/scim-wnn/src/scim_wnn_imengine.h
@@ -93,6 +93,7 @@
     bool mini_status;
     String host;
     String rc;
+    bool m_connected;
     IConvert m_iconv;
     vector<PreEditor *> preeditors;
 protected:
diff --git a/scim-wnn/src/wnnconversion.cpp b/scim-wnn/src/wnnconversion.cpp
index 69c7d24..fe24ae6 100644
--- a/scim-wnn/src/wnnconversion.cpp
+++ b/scim-wnn/src/wnnconversion.cpp
@@ -95,22 +95,11 @@
 
 
 /*!
-    \fn WnnConversion::wnnDisconnect()
- */
-void WnnConversion::wnnDisconnect()
-{
-    reset();
-    if (isConnected()) jl_close(wnn);
-    wnn = 0;
-}
-
-
-/*!
     \fn WnnConversion::isConnected()
  */
 bool WnnConversion::isConnected()
 {
-    if (wnn != NULL) return(true);
+    if (wnn) return(true);
     else (false);
 }
 
@@ -369,4 +358,3 @@
 {
     return(caretPos);
 }
-
diff --git a/scim-wnn/src/wnnconversion.h b/scim-wnn/src/wnnconversion.h
index 0745380..30eab17 100644
--- a/scim-wnn/src/wnnconversion.h
+++ b/scim-wnn/src/wnnconversion.h
@@ -63,7 +63,6 @@
     bool resizeRegion(int w);
     void updateFrequency();
     bool wnnConnect(String name,String host,String rc,int timeout);
-    void wnnDisconnect();
     int getCaretPos();
 
 protected:
diff --git a/scim-wnn/src/wnnproto.h b/scim-wnn/src/wnnproto.h
index fa8da9f..f054a23 100644
--- a/scim-wnn/src/wnnproto.h
+++ b/scim-wnn/src/wnnproto.h
@@ -32,7 +32,7 @@
     #define w_char unsigned short
     struct wnn_buf *jl_open_lang(char *,char *,char *,char *,int (*)(char *),int(*)(char *),int);
     #define jl_open(a,b,c,d,e,f) jl_open_lang(a,b,NULL,c,d,e,f)
-    void jl_close(struct wnn_buf*);
+
 
 
     /*