diff --git a/honoka/src/honoka_imengine.cpp b/honoka/src/honoka_imengine.cpp
index 51396a6..5ecd0ea 100644
--- a/honoka/src/honoka_imengine.cpp
+++ b/honoka/src/honoka_imengine.cpp
@@ -462,12 +462,19 @@
     //segments = seglist;
     WideString t;
     for(unsigned int i = 0;i < seglist.size();i ++) {
-        if (i < m_convertor->getPos()) {
-            if (seglist[i].getKanji() != segments[i].getKanji())
+        if ((i < m_convertor->getPos()) && (segments.size() > i))  {
+            if ((seglist[i].getKanji() != segments[i].getKanji()) && (seglist[i].getYomi().length() == segments[i].getYomi().length()))
                 newsegs.push_back(segments[i]);
             else newsegs.push_back(seglist[i]);
-        } else newsegs.push_back(seglist[i]);
+        } else if (i == m_convertor->getPos())
+            newsegs.push_back(Segment(m_convList.kouho[m_convList.pos].kanji,seglist[i].getYomi()));
+        else newsegs.push_back(seglist[i]);
+/*
+        if (i == m_convertor->getPos()) newsegs.push_back(Segment(m_convList.kouho[m_convList.pos].kanji,seglist[i].getYomi()));
+        else newsegs.push_back(seglist[i]);
+*/
     }
+    //if (m_convList.kouho[m_convList.pos] != newsegs[m_convertor->getPos()])
     segments = newsegs;
     for(unsigned int i = 0;i < segments.size();i ++) {
         t += segments[i].getKanji();
@@ -954,11 +961,12 @@
         else if (m_convList.pos < 0) m_convList.pos = m_convList.count() - 1;
         alp_count ++;
 
-        m_convertor->select(m_convList.pos);
+        if (!m_no_update) m_convertor->select(m_convList.pos);
         updateConversion();
         return true;
     } else
     if (k_conversion_expand.comp(key) || k_conversion_shrink.comp(key)) {
+        m_no_update = false;
         bool r;
         k_conversion_shrink.comp(key) ? r = m_convertor->resizeRegion(-1) : r = m_convertor->resizeRegion(1);
         if (!r) return true;
@@ -971,6 +979,7 @@
         return true;
     } else
     if (k_conversion_rensou.comp(key)) {
+        m_no_update = false;
         m_convList = m_convertor->getResultList(m_convertor->getPos(),SPECIAL1);
         if (m_convList.count() == 0) return true;
         startLookup();
@@ -979,6 +988,7 @@
         return true;
     } else
     if (k_conversion_ikeiji.comp(key)) {
+        m_no_update = false;
         m_convList = m_convertor->getResultList(m_convertor->getPos(),SPECIAL2);
         if (m_convList.count() == 0) return true;
         startLookup();
@@ -987,6 +997,7 @@
         return true;
     } else
     if (k_conversion_forward.comp(key) || k_conversion_backward.comp(key)) {
+        m_no_update = false;
         k_conversion_backward.comp(key) ? m_convertor->setPos(m_convertor->getPos() - 1) : m_convertor->setPos(m_convertor->getPos() + 1);
         m_convList = m_convertor->getResultList();
         if (alp == -1) {
@@ -1002,7 +1013,7 @@
         for(unsigned int i = 0;i < m_convList.count();i ++) {
             if (res == m_convList.kouho[i].kanji) {
                 m_convList.pos = i;
-                m_convertor->select(m_convList.pos);
+                if (!m_no_update) m_convertor->select(m_convList.pos);
                 updateConversion();
                 break;
             }
@@ -1035,7 +1046,8 @@
                 if (numc < 0) numc = 9;
                 if (m_lookup_table.get_current_page_size() <= numc) return true;
                 m_convList.pos = numc + m_lookup_table.get_current_page_start();
-                m_convertor->select(m_convList.pos);
+                if (!m_no_update) m_convertor->select(m_convList.pos);
+                m_no_update = false;
                 m_convertor->setPos(m_convertor->getPos() + 1);
                 m_convList = m_convertor->getResultList();
                 updateConversion();
@@ -1044,6 +1056,22 @@
             }
         }
     }
+    if (m_convertor != m_multi) {
+        for(unsigned int i = 0;i < k_convertor.size();i ++) {
+            if (k_convertor[i].comp(key) && (convertors[i] != m_convertor)) {
+                m_no_update = true;
+                convertors[i]->setYomiText(m_preeditor->getText(true));
+                convertors[i]->ren_conversion();
+                MultiConvertor::aline(m_convertor,convertors[i]);
+                m_convList = convertors[i]->getResultList(m_convertor->getPos());
+                m_convList.Title = utf8_mbstowcs(String("(") + convertors[i]->getPropertyName() + String(")"));
+                convertors[i]->reset();
+                startLookup();
+                updateConversion();
+                return(true);
+            }
+        }
+    }
     
     if (key.get_ascii_code()) {
         /*
@@ -1190,7 +1218,7 @@
 
     int p = m_lookup_table.get_current_page_start() + item;
     m_convList.pos = p;
-    m_convertor->select(m_convList.pos);
+    if (!m_no_update) m_convertor->select(m_convList.pos);
     if (m_convList.kType != PREDICTION) {
         updateConvertedString();
     } else {
@@ -1221,7 +1249,7 @@
     int p = m_convList.pos - m_lookup_table.get_current_page_size();
     if (p < 0) p = 0;
     m_convList.pos = p;
-    m_convertor->select(m_convList.pos);
+    if (!m_no_update) m_convertor->select(m_convList.pos);
     updateConvertedString();
     m_lookup_table.set_cursor_pos(m_convList.pos);
     update_aux_string(m_convList.Title + getPosPerCount(m_convList.pos,m_convList.count()));
@@ -1239,7 +1267,7 @@
     int p = m_convList.pos + m_lookup_table.get_current_page_size();
     if (p >= m_convList.count()) p = m_convList.count() - 1;
     m_convList.pos = p;
-    m_convertor->select(m_convList.pos);
+    if (!m_no_update) m_convertor->select(m_convList.pos);
     updateConvertedString();
     m_lookup_table.set_cursor_pos(m_convList.pos);
     update_aux_string(m_convList.Title + getPosPerCount(m_convList.pos,m_convList.count()));
@@ -1358,9 +1386,11 @@
         m_convertor = m_def_convertor;
         return;
     }
+    m_no_update = false;
     m_convList.kouho.clear();
     m_convList = m_convertor->getResultList();
     m_conversion = true;
+    segments = m_convertor->getSegmentList();
 
     alp_count = 1;
 
diff --git a/honoka/src/honoka_imengine.h b/honoka/src/honoka_imengine.h
index 05ea9c6..c47dfa0 100644
--- a/honoka/src/honoka_imengine.h
+++ b/honoka/src/honoka_imengine.h
@@ -118,7 +118,9 @@
     bool m_prediction;
     bool m_lookup;
     ResultList m_convList;
+    ResultList m_convListOrig;
     PropertyList m_proplist;
+    bool m_no_update;
     int alp;
     int alp_count;
     bool numkeyselect;