diff --git a/honoka/src/honoka_def.h b/honoka/src/honoka_def.h
index d77f8a2..e385a6c 100644
--- a/honoka/src/honoka_def.h
+++ b/honoka/src/honoka_def.h
@@ -80,6 +80,8 @@
 #define HONOKA_DEFAULT_KEY_AUTO_CONVERSION         "Alt+a"
 #define HONOKA_CONFIG_KEY_RECONVERSION             "/IMEngine/Honoka/ReConversion"
 #define HONOKA_DEFAULT_KEY_RECONVERSION            "Alt+space"
+#define HONOKA_CONFIG_KEY_RESULTTOPREEDIT          "/IMEngine/Honoka/SetResultToPreEditor"
+#define HONOKA_DEFAULT_KEY_RESULTTOPREEDIT         "Control+Return"
 
 
 #define HONOKA_CONFIG_ALP                          "/IMEngine/Honoka/AutoLookupPopup"
diff --git a/honoka/src/honoka_imengine.cpp b/honoka/src/honoka_imengine.cpp
index 5db23fd..6820b9d 100644
--- a/honoka/src/honoka_imengine.cpp
+++ b/honoka/src/honoka_imengine.cpp
@@ -253,6 +253,10 @@
     m_conversion = false;
     m_yosoku = false;
     m_lookup = false;
+    
+    while(preeditStack.size()) {
+        preeditStack.pop();
+    }
 
     // @todo if connected to jserver, should disconnect this.
 
@@ -356,6 +360,9 @@
     scim_string_to_key_list(k_reconversion,
         _scim_config->read(String(HONOKA_CONFIG_KEY_RECONVERSION),
             String(HONOKA_DEFAULT_KEY_RECONVERSION)));
+    scim_string_to_key_list(k_result_to_preedit,
+        _scim_config->read(String(HONOKA_CONFIG_KEY_RESULTTOPREEDIT),
+            String(HONOKA_DEFAULT_KEY_RESULTTOPREEDIT)));
 
     changePreEditor(defaultPreEditor);
 
@@ -560,6 +567,9 @@
                 m_convertor->reset();
             } else commit_string(m_preeditor->getText(true));
             m_preeditor->reset();
+            while(preeditStack.size()) {
+                preeditStack.pop();
+            }
             updatePreEditor();
             return true;
         } else
@@ -611,6 +621,12 @@
             updatePreEditor();
             return true;
         }
+        if (preeditStack.size()) {
+            m_preeditor->reset();
+            m_preeditor->setText(preeditStack.top());
+            m_preeditor->setPos(preeditStack.top().length());
+            preeditStack.pop();
+        } else 
         if (m_preeditor->getTextLength()) {
             m_preeditor->reset();
         }
@@ -697,6 +713,9 @@
     } else
     if (k_commit.comp(key)) {
         commit_string(m_convertor->getText());
+        while(preeditStack.size()) {
+            preeditStack.pop();
+        }
         m_convertor->updateFrequency();
         m_preeditor->reset();
         m_convertor->reset();
@@ -706,6 +725,19 @@
         alp_count = 1;
         return true;
     } else
+    if (k_result_to_preedit.comp(key)) {
+        preeditStack.push(m_preeditor->getText());
+        m_preeditor->reset();
+        m_preeditor->setText(m_convertor->getText());
+        m_preeditor->setPos(m_convertor->getText().length());
+        m_convertor->updateFrequency();
+        m_convertor->reset();
+        m_conversion = false;
+        m_lookup = false;
+        alp_count = 1;
+        updatePreEditor();
+        return true;
+    } else
     if (k_cancel.comp(key) || k_backspace.comp(key)) {
         m_convertor->reset();
         m_conversion = false;
@@ -1138,3 +1170,4 @@
 
 
 
+
diff --git a/honoka/src/honoka_imengine.h b/honoka/src/honoka_imengine.h
index 1200397..d110fa8 100644
--- a/honoka/src/honoka_imengine.h
+++ b/honoka/src/honoka_imengine.h
@@ -29,6 +29,7 @@
 #include <cstdio>
 #include <cstdlib>
 #include <vector>
+#include <stack>
 #include <convertor.h>
 #include <preeditor.h>
 #define Uses_SCIM_ICONV
@@ -111,6 +112,7 @@
     vector<Convertor *> convertors;
     String sType;
     WideString yomi;
+    stack<WideString> preeditStack;
 protected:
     bool process_preedit_key_event(const KeyEvent &key);
     bool process_conversion_key_event(const KeyEvent &key);
@@ -153,6 +155,7 @@
         k_next_convertor,       // �����Ѵ����󥸥��
         k_prev_convertor,       // �����Ѵ����󥸥��
         k_reconversion,         // ���Ѵ�
+        k_result_to_preedit,    // �Ѵ���̤�PreEditor��push
 
         // for Wnn7
         k_conversion_ikeiji,    // �۷����Ѵ�