diff --git a/scim-wnn/src/wnnconversion.cpp b/scim-wnn/src/wnnconversion.cpp
index d569a16..4c1f15d 100644
--- a/scim-wnn/src/wnnconversion.cpp
+++ b/scim-wnn/src/wnnconversion.cpp
@@ -166,20 +166,18 @@
     String y;
     m_iconv.convert(y,yomiText);
     strtows(ws,(unsigned char*)y.data());
-    bunsetu = jl_fi_ren_conv(wnn,ws,0,-1,WNN_NO_USE);
+    bunsetu = jl_fi_ren_conv(wnn,ws,0,-1,WNN_USE_ZENGO);
     if (bunsetu == -1) return(-1);
-    bunList.resize(bunsetu);
-    yomiList.resize(bunsetu);
     for(unsigned int i = 0;i < bunsetu;i ++) {
         WideString w;
-        wnn_get_area(wnn,i,i + 1,ws,1);
+        jl_get_kanji(wnn,i,i + 1,ws);
         wstostr((unsigned char*)c,ws);
         m_iconv.convert(w,c,strlen(c));
-        bunList[i] = w;
-        wnn_get_area(wnn,i,i + 1,ws,0);
+        bunList.push_back(w);
+        jl_get_yomi(wnn,i,i + 1,ws);
         wstostr((unsigned char*)c,ws);
         m_iconv.convert(w,c,strlen(c));
-        yomiList[i] = w;
+        yomiList.push_back(w);
     }
     createText();
     return(bunsetu);
@@ -204,18 +202,17 @@
     bunsetu = jl_fi_nobi_conv(wnn,pos,yomiList[pos].length() + w,-1,h,WNN_SHO);
     convList.kouho.clear();
     bunList.clear();
-    bunList.resize(bunsetu);
-    yomiList.resize(bunsetu);
+    yomiList.clear();
     for(unsigned int i = 0;i < bunsetu;i ++) {
         WideString w;
-        wnn_get_area(wnn,i,i + 1,ws,1);
+        jl_get_kanji(wnn,i,i + 1,ws);
         wstostr((unsigned char*)c,ws);
         m_iconv.convert(w,c,strlen(c));
-        bunList[i] = w;
-        wnn_get_area(wnn,i,i + 1,ws,0);
+        bunList.push_back(w);
+        jl_get_yomi(wnn,i,i + 1,ws);
         wstostr((unsigned char*)c,ws);
         m_iconv.convert(w,c,strlen(c));
-        yomiList[i] = w;
+        yomiList.push_back(w);
     }
     createText();
     return(true);
@@ -297,20 +294,28 @@
     if (p == -1) p = pos;
     if ((p >= bunsetu) || (p < 0)) return(convList);
     pos = p;
-    wnn_get_area(wnn,pos,pos + 1,k,0);
+    jl_get_yomi(wnn,pos,pos + 1,k);
         wstostr((unsigned char*)buf,k);
         m_iconv.convert(u,buf,strlen(buf));
         convList.Yomi = u;
 
-    convList.pos = jl_zenkouho(wnn,pos,WNN_USE_ZENGO,WNN_UNIQ);
+    // bunsetu connection control
+    int conn = WNN_USE_ZENGO;
+    if (bunsetu == 1) conn = WNN_NO_USE;
+    else if (pos == 0) conn = WNN_USE_ATO;
+    else if (pos == (bunsetu - 1)) conn = WNN_USE_MAE;
+    // @todo be implement to ikeiji conversion using "jl_zenikeiji_dai()".
+    // @todo be implement to rensou conversion using "jl_zenassoc_dai()".
+    // @todo jl_zenkouho should change to jl_zenkouho_dai.
+    //convList.pos = jl_zenkouho_dai(wnn,pos,pos + 1,WNN_USE_ZENGO,WNN_UNIQ);
+    convList.pos = jl_zenkouho(wnn,pos,conn,WNN_UNIQ);
     convList.count = jl_zenkouho_suu(wnn);
-    convList.kouho.resize(convList.count);
 
     for (unsigned int i = 0;i < convList.count; i ++) {
         jl_get_zenkouho_kanji(wnn,i,k);
         wstostr((unsigned char*)buf,k);
         m_iconv.convert(u,buf,strlen(buf));
-        convList.kouho[i] = u;
+        convList.kouho.push_back(u);
     }
     select(convList.pos);
     createText();
diff --git a/scim-wnn/src/wnnproto.h b/scim-wnn/src/wnnproto.h
index 4dfc1a6..3b60af0 100644
--- a/scim-wnn/src/wnnproto.h
+++ b/scim-wnn/src/wnnproto.h
@@ -36,26 +36,35 @@
 
 
 
-    #ifdef HAVE_LIBWNN7
-        #define HAVE_LIBWNN6
-    #endif
 
+    /* conversion */
     int jl_fi_ren_conv(struct wnn_buf*,w_char*,int,int,int);
     int jl_optimize_fi(struct wnn_buf*,int,int);
     int jl_fi_nobi_conv(struct wnn_buf*,int,int,int,int,int);
     int jl_zenkouho_suu(struct wnn_buf*);
-
-    /* �Ѵ��˴ؤ��뤽�� */
-    int wnn_get_area(struct wnn_buf*,int,int,w_char*,int);
-    int jl_zenkouho(struct wnn_buf*,int,int,int);
-    void jl_get_zenkouho_kanji(struct wnn_buf*,int ,w_char *);
-    int jl_set_jikouho(struct wnn_buf*,int);
     int jl_kill(struct wnn_buf*,int,int);
+    int jl_zenkouho(struct wnn_buf*,int,int,int);
+    int jl_zenkouho_dai(struct wnn_buf*,int,int,int,int);
 
+    int jl_set_jikouho(struct wnn_buf*,int);
 
+    #ifdef HAVE_LIBWNN7
+        /* wnn6sdk is not having it.*/
+        int jl_zenikeiji_dai(struct wnn_buf*,int,int,int,int);
+        int jl_zenassoc_dai(struct wnn_buf*,int,int,int,int);
+        int wnn_get_area(struct wnn_buf*,int,int,w_char*,int,int);
+        void jl_get_zenkouho_kanji(struct wnn_buf*,int ,w_char *,int);
+        #define jl_get_zenkouho_kanji(a,b,c) jl_get_zenkouho_kanji(a,b,c,512)
+        #define jl_get_kanji(buf,bun1,bun2,area) wnn_get_area(buf,bun1,bun2,area,1,512)
+        #define jl_get_yomi(buf,bun1,bun2,area) wnn_get_area(buf,bun1,bun2,area,0,512)
 
+    #else
+        int wnn_get_area(struct wnn_buf*,int,int,w_char*,int);
+        void jl_get_zenkouho_kanji(struct wnn_buf*,int ,w_char *);
+        #define jl_get_kanji(buf,bun1,bun2,area) wnn_get_area(buf,bun1,bun2,area,1)
+        #define jl_get_yomi(buf,bun1,bun2,area) wnn_get_area(buf,bun1,bun2,area,0)
+    #endif
 
-    /* FreeWnn */
 
     #define WNN_NO_USE    0
     #define WNN_USE_MAE   1
@@ -72,8 +81,6 @@
     #define WNN_SHO 0
     #define WNN_DAI 1
 
-    #define jl_get_kanji(buf,bun1,bun2,area) wnn_get_area(buf,bun1,bun2,area,1)
-    #define jl_get_yomi(buf,bun1,bun2,area) wnn_get_area(buf,bun1,bun2,area,0)
 
 }