diff --git a/src/feature.h b/src/feature.h
index 01f611e..c499d9d 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -677,9 +677,6 @@
 # define ESC_CHG_TO_ENG_MODE		/* if defined, when ESC pressed,
 					 * turn to english mode
 					 */
-# if !defined(FEAT_XFONTSET) && defined(HAVE_X11) && !defined(FEAT_GUI_GTK)
-#  define FEAT_XFONTSET			/* Hangul input requires xfontset */
-# endif
 # if defined(FEAT_XIM) && !defined(LINT)
 	Error: You should select only ONE of XIM and HANGUL INPUT
 # endif
@@ -687,7 +684,6 @@
 #if defined(FEAT_HANGULIN) || defined(FEAT_XIM)
 /* # define X_LOCALE */			/* for OS with incomplete locale
 					   support, like old linux versions. */
-/* # define SLOW_XSERVER */		/* for extremely slow X server */
 #endif
 
 /*
diff --git a/src/gui.c b/src/gui.c
index fc2981c..0736522 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1223,8 +1223,19 @@
 	    gui.highlight_mask = (cattr | attr);
 #ifdef FEAT_HANGULIN
 	    if (composing_hangul)
-		(void)gui_outstr_nowrap(composing_hangul_buffer, 2,
-			GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0);
+	    {
+		char_u *comp_buf;
+		int comp_len;
+
+		comp_buf = hangul_composing_buffer_get(&comp_len);
+		if (comp_buf)
+		{
+		    (void)gui_outstr_nowrap(comp_buf, comp_len,
+					    GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
+					    cfg, cbg, 0);
+		    vim_free(comp_buf);
+		}
+	    }
 	    else
 #endif
 		(void)gui_screenchar(LineOffset[gui.row] + gui.col,
@@ -2572,9 +2583,19 @@
 #ifdef FEAT_HANGULIN
 	if (composing_hangul
 		    && gui.col == gui.cursor_col && gui.row == gui.cursor_row)
-	    (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
-		    GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
-		    gui.norm_pixel, gui.back_pixel, 0);
+	{
+	    char_u *comp_buf;
+	    int comp_len;
+
+	    comp_buf = hangul_composing_buffer_get(&comp_len);
+	    if (comp_buf)
+	    {
+		(void)gui_outstr_nowrap(comp_buf, comp_len,
+					GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
+					gui.norm_pixel, gui.back_pixel, 0);
+		vim_free(comp_buf);
+	    }
+	}
 	else
 	{
 #endif
diff --git a/src/hangulin.c b/src/hangulin.c
index 24cf180..f02cad8 100644
--- a/src/hangulin.c
+++ b/src/hangulin.c
@@ -1619,3 +1619,49 @@
     *des++ = johab_lcon_to_wan[lv];
     return 8;
 }
+
+    char_u *
+hangul_string_convert(buf, p_len)
+    char_u  *buf;
+    int	    *p_len;
+{
+    char_u *tmpbuf = NULL;
+    vimconv_T vc;
+
+    if (enc_utf8)
+    {
+	vc.vc_type = CONV_NONE;
+	if (convert_setup(&vc, (char_u *)"euc-kr", p_enc) == OK)
+	{
+	    tmpbuf = string_convert(&vc, buf, p_len);
+	    convert_setup(&vc, NULL, NULL);
+	}
+    }
+
+    return tmpbuf;
+}
+
+    char_u *
+hangul_composing_buffer_get(p_len)
+    int	    *p_len;
+{
+    char_u *tmpbuf = NULL;
+
+    if (composing_hangul)
+    {
+	int len = 2;
+
+	tmpbuf = hangul_string_convert(composing_hangul_buffer, &len);
+	if (tmpbuf != NULL)
+	{
+	    *p_len = len;
+	}
+	else
+	{
+	    tmpbuf = vim_strnsave(composing_hangul_buffer, 2);
+	    *p_len = 2;
+	}
+    }
+
+    return tmpbuf;
+}
diff --git a/src/proto/hangulin.pro b/src/proto/hangulin.pro
index adfde14..59e6986 100644
--- a/src/proto/hangulin.pro
+++ b/src/proto/hangulin.pro
@@ -6,4 +6,6 @@
 void hangul_keyboard_set __ARGS((void));
 int hangul_input_process __ARGS((char_u *s, int len));
 void hangul_input_clear __ARGS((void));
+char_u *hangul_string_convert __ARGS((char_u *buf, int *p_len));
+char_u *hangul_composing_buffer_get __ARGS((int *p_len));
 /* vim: set ft=c : */
diff --git a/src/screen.c b/src/screen.c
index b1af862..de9e04d 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -10047,7 +10047,13 @@
 	    if (gui.in_use)
 	    {
 		if (hangul_input_state_get())
-		    MSG_PUTS_ATTR(" \307\321\261\333", attr);   /* HANGUL */
+		{
+		    /* HANGUL */
+		    if (enc_utf8)
+			MSG_PUTS_ATTR(" \355\225\234\352\270\200", attr);
+		    else
+			MSG_PUTS_ATTR(" \307\321\261\333", attr);
+		}
 	    }
 #endif
 #ifdef FEAT_INS_EXPAND
diff --git a/src/ui.c b/src/ui.c
index e0e54d9..5438a38 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1723,8 +1723,17 @@
     char_u  *s;
     int	    len;
 {
+    char_u *tmpbuf;
+
+    tmpbuf = hangul_string_convert(s, &len);
+    if (tmpbuf != NULL)
+	s = tmpbuf;
+
     while (len--)
 	inbuf[inbufcount++] = *s++;
+
+    if (tmpbuf != NULL)
+	vim_free(tmpbuf);
 }
 #endif
 
diff --git a/src/version.c b/src/version.c
index a0896f8..1604635 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    913,
+/**/
     912,
 /**/
     911,
