diff -uNr xmms-1.0.0-orig/xmms/bmp.c xmms-1.0.0/xmms/bmp.c
--- xmms-1.0.0-orig/xmms/bmp.c	Tue Jan 25 04:11:01 2000
+++ xmms-1.0.0/xmms/bmp.c	Sat Jan 29 00:30:46 2000
@@ -32,6 +32,9 @@
 #define BI_BITFIELDS  3L
 
 static GdkGC *bmp_gc = NULL;
+#ifdef I18N_MB
+static GdkColor *textfg = NULL, *textbg = NULL;
+#endif
 
 int read_le_short(FILE * file, gushort * ret)
 {
@@ -55,6 +58,100 @@
 	return 1;
 }
 
+#ifdef I18N_MB
+GdkColor *get_textfg_frombmp()
+{
+       GdkColor *fg = NULL;
+       GdkColormap *cm = gdk_colormap_get_system();
+
+       if (textfg)
+               fg = g_malloc(6 * sizeof(GdkColor));
+       if (fg)
+       {
+               gint i;
+               memcpy(fg, textfg, 6 * sizeof(GdkColor));
+               for (i = 0; i < 6; i++)
+                       gdk_color_alloc(gdk_colormap_get_system(), &fg[i]);
+       }
+       return fg;
+}
+
+GdkColor *get_textbg_frombmp()
+{
+       GdkColor *bg = NULL;
+       GdkColormap *cm = gdk_colormap_get_system();
+       if (textbg)
+               bg = g_malloc(6 * sizeof(GdkColor));
+       if (bg)
+       {
+               gint i;
+               memcpy(bg, textbg, 6 * sizeof(GdkColor));
+               for (i = 0; i < 6; i++)
+                       gdk_color_alloc(gdk_colormap_get_system(), &bg[i]);
+       }
+       return bg;
+}
+
+/*
+ * detect text foreground and backgrond in every raster.
+ */
+void search_textbg_or_textfg(guchar * data, int w, int h)
+{
+       gint i, d;
+       if (textfg)
+       {
+               g_free(textfg);
+               textfg = NULL;
+       }
+       if (textbg)
+       {
+               g_free(textbg);
+               textbg = NULL;
+       }
+       textbg = g_malloc(sizeof(GdkColor) * 6);
+       textfg = g_malloc(sizeof(GdkColor) * 6);
+
+       if ((!textbg) || (!textfg))
+               return;
+
+       for (i = 0; i < 6; i++)
+       {
+               gint red, green, blue;
+               gint maxd = -1;
+               gint x, y, k = 0;
+
+               textbg[i].red = (data[(i * w + w - 1) * 3] << 8) | 0xff;
+               textbg[i].green = (data[(i * w + w - 1) * 3 + 1] << 8) | 0xff;
+               textbg[i].blue = (data[(i * w + w - 1) * 3 + 2] << 8) | 0xff;
+
+               while (maxd < 4 && (i + k) >= 0 && (i + k) < 6)
+               {
+                       for (x = 0; x < w; x++)
+                       {
+
+                               red = data[((i + k) * w + x) * 3];
+                               green = data[((i + k) * w + x) * 3 + 1];
+                               blue = data[((i + k) * w + x) * 3 + 2];
+                               d = abs(red - ((unsigned int) textbg[i].red >> 8))
+                                       + abs(green - ((unsigned int) textbg[i].green >> 8))
+                                       + abs(blue - ((unsigned int) textbg[i].blue >> 8));
+                               if (d > maxd)
+                               {
+                                       textfg[i].red = (red << 8) | 0xff;
+                                       textfg[i].green = (green << 8) | 0xff;
+                                       textfg[i].blue = (blue << 8) | 0xff;
+                                       maxd = d;
+                               }
+                       }
+                       if (i < 3)
+                               k++;
+                       else
+                               k--;
+               }
+       }
+}
+#endif
+
 GdkPixmap *read_bmp(gchar * filename)
 {
 	FILE *file;
@@ -409,6 +506,11 @@
 			buffer_ptr += skip;
 		}
 	}
+
+#ifdef I18N_MB
+	if (g_strcasecmp(g_basename(filename), "text.bmp") == 0)
+		search_textbg_or_textfg(data,w,h);
+#endif
 
 	ret = gdk_pixmap_new(mainwin->window, w, h, gdk_rgb_get_visual()->depth);
 
diff -uNr xmms-1.0.0-orig/xmms/bmp.h xmms-1.0.0/xmms/bmp.h
--- xmms-1.0.0-orig/xmms/bmp.h	Fri Jul 30 06:03:12 1999
+++ xmms-1.0.0/xmms/bmp.h	Sat Jan 29 00:30:46 2000
@@ -20,5 +20,7 @@
 #define BMP_H
 
 GdkPixmap *read_bmp(char *file);
+GdkColor *get_textfg_frombmp();
+GdkColor *get_textbg_frombmp();
 
 #endif
diff -uNr xmms-1.0.0-orig/xmms/main.c xmms-1.0.0/xmms/main.c
--- xmms-1.0.0-orig/xmms/main.c	Tue Jan 25 04:11:01 2000
+++ xmms-1.0.0/xmms/main.c	Sat Jan 29 00:30:46 2000
@@ -404,7 +404,15 @@
 		xmms_cfg_read_boolean(cfgfile, "xmms", "playlist_shaded", &cfg.playlist_shaded);
 		xmms_cfg_read_boolean(cfgfile, "xmms", "playlist_visible", &cfg.playlist_visible);
 		if (!xmms_cfg_read_string(cfgfile, "xmms", "playlist_font", &cfg.playlist_font))
+#ifndef I18N_MB
 			cfg.playlist_font = g_strdup("-adobe-helvetica-bold-r-*-*-10-*");
+#else
+			cfg.playlist_font = g_strdup("-*-helvetica-medium-r-*-*-12-*,-*-gulim-medium-r-*--12-*,-*-*-medium-r-*--12-*,*");
+		if (!xmms_cfg_read_string(cfgfile, "xmms", "playinfo_font", &cfg.playinfo_font))
+			cfg.playinfo_font = g_strdup("-*-helvetica-medium-r-*-*-10-*,-*-gulim-medium-r-*--10-*,-*-*-medium-r-*--10-*,-*-*-medium-r-*--12-*,*");
+		xmms_cfg_read_boolean(cfgfile, "xmms", "playinfo_font_use_X11font", &cfg.playinfo_font_use_x11font);
+		xmms_cfg_read_int(cfgfile, "xmms", "playinfo_font_arrange", &cfg.playinfo_font_arrange);
+#endif
 		xmms_cfg_read_int(cfgfile, "xmms", "playlist_position", &cfg.playlist_position);
 		xmms_cfg_read_int(cfgfile, "xmms", "equalizer_x", &cfg.equalizer_x);
 		xmms_cfg_read_int(cfgfile, "xmms", "equalizer_y", &cfg.equalizer_y);
@@ -438,7 +446,12 @@
 	}
 	else
 	{
+#ifndef I18N_MB
 		cfg.playlist_font = g_strdup("-adobe-helvetica-bold-r-*-*-10-*");
+#else
+		cfg.playlist_font = g_strdup("-*-helvetica-medium-r-*-*-12-*,-*-gulim-medium-r-*--12-*,-*-*-medium-r-*--12-*,*");
+		cfg.playinfo_font = g_strdup("-*-helvetica-medium-r-*-*-10-*,-*-gulim-medium-r-*--10-*,-*-*-medium-r-*--10-*,-*-*-medium-r-*--12-*,*");
+#endif
 	}
 	g_free(filename);
 }
@@ -536,6 +549,12 @@
 	xmms_cfg_write_int(cfgfile, "xmms", "pause_between_songs_time", cfg.pause_between_songs_time);
 	/* Mouse Wheel Vol Change Select    C.Pitchford */
 	xmms_cfg_write_int(cfgfile, "xmms", "mouse_wheel_change", cfg.mouse_change);
+#ifdef I18N_MB
+	xmms_cfg_write_string(cfgfile, "xmms", "playinfo_font", cfg.playinfo_font);
+	/*g_free(cfg.playinfo_font);*/
+	xmms_cfg_write_boolean(cfgfile, "xmms", "playinfo_font_use_X11font", cfg.playinfo_font_use_x11font);
+	xmms_cfg_write_int(cfgfile, "xmms", "playinfo_font_arrange", cfg.playinfo_font_arrange);
+#endif
 	for (i = 0; i < 10; i++)
 	{
 		str = g_strdup_printf("equalizer_band%d", i);
@@ -2476,7 +2495,11 @@
 	mainwin_pl = create_tbutton(&mainwin_wlist, mainwin_bg, mainwin_gc, 242, 58, 23, 12, 23, 61, 69, 61, 23, 73, 69, 73, mainwin_pl_pushed, SKIN_SHUFREP);
 	tbutton_set_toggled(mainwin_pl, cfg.playlist_visible);
 
+#ifndef I18N_MB
 	mainwin_info = create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 112, 27, 153, 1, SKIN_TEXT);
+#else
+	mainwin_info = create_mbtextbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 112, 27, 153, 1, SKIN_TEXT);
+#endif
 	textbox_set_scroll(mainwin_info, cfg.autoscroll);
 	mainwin_rate_text = create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 111, 43, 15, 0, SKIN_TEXT);
 	mainwin_freq_text = create_textbox(&mainwin_wlist, mainwin_bg, mainwin_gc, 156, 43, 10, 0, SKIN_TEXT);
@@ -2960,6 +2983,9 @@
 
 	srand(time(NULL));
 
+#ifdef I18N_MB
+	gtk_set_locale();
+#endif
 	read_config();
 
 	gtk_init(&argc, &argv);
diff -uNr xmms-1.0.0-orig/xmms/main.h xmms-1.0.0/xmms/main.h
--- xmms-1.0.0-orig/xmms/main.h	Tue Jan 25 04:11:02 2000
+++ xmms-1.0.0/xmms/main.h	Sat Jan 29 00:30:46 2000
@@ -56,6 +56,12 @@
 	gint pause_between_songs_time;
 	gboolean pause_between_songs;
 	gint mouse_change;
+#ifdef I18N_MB
+	gchar *playinfo_font;
+	gint playinfo_font_arrange;
+	gboolean playinfo_font_use_x11font;
+#endif
+
 }
 Config;
 
diff -uNr xmms-1.0.0-orig/xmms/playlist_list.c xmms-1.0.0/xmms/playlist_list.c
--- xmms-1.0.0-orig/xmms/playlist_list.c	Wed Dec 22 09:43:20 1999
+++ xmms-1.0.0/xmms/playlist_list.c	Sat Jan 29 00:34:54 2000
@@ -234,7 +234,11 @@
 	gdk_gc_set_foreground(gc, get_skin_color(SKIN_PLEDIT_NORMALBG));
 	gdk_draw_rectangle(obj, gc, TRUE, pl->pl_widget.x, pl->pl_widget.y, width, height);
 
+#ifndef I18N_MB
 	if ((font = gdk_font_load(cfg.playlist_font)) != NULL)
+#else
+	if ((font = gdk_fontset_load(cfg.playlist_font)) != NULL)
+#endif
 	{
 		list = get_playlist();
 		pl->pl_fheight = font->ascent + font->descent + 1;
diff -uNr xmms-1.0.0-orig/xmms/playlistwin.c xmms-1.0.0/xmms/playlistwin.c
--- xmms-1.0.0-orig/xmms/playlistwin.c	Tue Jan 25 04:11:02 2000
+++ xmms-1.0.0/xmms/playlistwin.c	Sat Jan 29 00:30:46 2000
@@ -458,7 +458,11 @@
 			cfg.playlist_height = nh;
 			resize_widget(playlistwin_list, cfg.playlist_width - 31, cfg.playlist_height - 58);
 			move_widget(playlistwin_slider, cfg.playlist_width - 15, 20);
+#ifndef I18N_MB
 			resize_widget(playlistwin_sinfo, cfg.playlist_width - 35, 14);
+#else
+			resize_widget(playlistwin_sinfo, cfg.playlist_width - 35, playlistwin_sinfo->tb_widget.height);
+#endif
 			playlistwin_update_sinfo();
 			move_widget(playlistwin_shade, cfg.playlist_width - 21, 3);
 			move_widget(playlistwin_close, cfg.playlist_width - 11, 3);
@@ -1622,7 +1626,11 @@
 	playlistwin_create_mask();
 	playlistwin_gc = gdk_gc_new(playlistwin->window);
 
+#ifndef I18N_MB
 	playlistwin_sinfo = create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, 4, 4, cfg.playlist_width - 35, FALSE, SKIN_TEXT);
+#else
+	playlistwin_sinfo = create_mbtextbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, 4, 4, cfg.playlist_width - 35, FALSE, SKIN_TEXT);
+#endif
 	if (!cfg.playlist_shaded)
 		hide_widget(playlistwin_sinfo);
 	if (cfg.playlist_shaded)
diff -uNr xmms-1.0.0-orig/xmms/prefswin.c xmms-1.0.0/xmms/prefswin.c
--- xmms-1.0.0-orig/xmms/prefswin.c	Fri Jan 28 05:30:38 2000
+++ xmms-1.0.0/xmms/prefswin.c	Sat Jan 29 00:30:46 2000
@@ -59,6 +59,16 @@
 GtkWidget *prefswin_options_edga;
 GtkWidget *prefswin_options_font_frame, *prefswin_options_font_hbox;
 GtkWidget *prefswin_options_font_entry, *prefswin_options_font_browse;
+#ifdef I18N_MB
+GtkWidget *prefswin_pi_options_frame, *prefswin_pi_options_vbox, *prefswin_pi_options_table;
+GtkWidget *prefswin_pi_options_uxf;
+GtkWidget *prefswin_pi_options_font_frame, *prefswin_pi_options_font_vbox;
+GtkWidget *prefswin_pi_options_font_label;
+GtkWidget *prefswin_pi_options_font_hbox;
+GtkWidget *prefswin_pi_options_font_entry, *prefswin_pi_options_font_browse;
+GtkWidget *prefswin_pi_options_fontar_hbox, *prefswin_pi_options_fontar;
+GtkWidget *prefswin_pi_options_fontar_entry, *prefswin_pi_options_fontar_label;
+#endif
 GtkWidget *prefswin_options_fontsel;
 GtkWidget *prefswin_vbox, *prefswin_hbox, *prefswin_ok, *prefswin_cancel,
          *prefswin_apply;
@@ -285,6 +295,9 @@
 void prefswin_apply_changes(void)
 {
 	g_free(cfg.playlist_font);
+#ifdef I18N_MB
+	g_free(cfg.playinfo_font);
+#endif
 	cfg.allow_multiple_instances = GTK_TOGGLE_BUTTON(prefswin_options_ami)->active;
 	cfg.always_show_cb = GTK_TOGGLE_BUTTON(prefswin_options_asc)->active;
 	cfg.convert_underscore = GTK_TOGGLE_BUTTON(prefswin_options_cus)->active;
@@ -311,6 +324,11 @@
 	cfg.use_eplugins = GTK_TOGGLE_BUTTON(prefswin_egplugins_euse_cbox)->active;
 	cfg.mouse_change = (gint) GTK_ADJUSTMENT(prefswin_options_mouse_entry)->value;
 
+#ifdef I18N_MB
+	cfg.playinfo_font = g_strdup(gtk_entry_get_text(GTK_ENTRY(prefswin_pi_options_font_entry)));
+	cfg.playinfo_font_use_x11font = GTK_TOGGLE_BUTTON(prefswin_pi_options_uxf)->active;
+	sscanf(gtk_entry_get_text(GTK_ENTRY(prefswin_pi_options_fontar_entry)), "%u", &cfg.playinfo_font_arrange);
+#endif
 	equalizerwin_set_doublesize(cfg.doublesize && cfg.eq_doublesize_linked);
 
 	if (cfg.dim_titlebar)
@@ -468,6 +486,21 @@
 	gtk_clist_select_row(GTK_CLIST(prefswin_audio_ilist), sel, 0);
 }
 
+#ifdef I18N_MB
+void prefswin_i18n_mb_font_browse_cb(GtkWidget * w, gpointer data)
+{
+	if (!prefswin_options_fontsel)
+	{
+		prefswin_options_fontsel = gtk_font_selection_dialog_new("Select playinfo extra font:");
+		gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(prefswin_options_fontsel), cfg.playinfo_font);
+		gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(prefswin_options_fontsel)->ok_button), "clicked", GTK_SIGNAL_FUNC(prefswin_font_browse_ok), NULL);
+		gtk_signal_connect_object(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(prefswin_options_fontsel)->cancel_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(prefswin_options_fontsel));
+		gtk_signal_connect(GTK_OBJECT(prefswin_options_fontsel), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &prefswin_options_fontsel);
+		gtk_widget_show(prefswin_options_fontsel);
+	}
+}
+#endif
+
 void create_prefs_window(void)
 {
 	GtkWidget *scrolled_win;
@@ -809,6 +842,59 @@
 
 	gtk_notebook_append_page(GTK_NOTEBOOK(prefswin_notebook), prefswin_options_vbox, gtk_label_new("Options"));
 
+#ifdef I18N_MB
+       /*
+        * I18N MB Options page
+        */
+	prefswin_pi_options_vbox = gtk_vbox_new(FALSE, 0);
+	prefswin_pi_options_frame = gtk_frame_new("Playinfo Options");
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_vbox), prefswin_pi_options_frame, FALSE, FALSE, 0);
+	gtk_container_border_width(GTK_CONTAINER(prefswin_pi_options_frame), 5);
+	prefswin_pi_options_table = gtk_table_new(2, 7, FALSE);
+	gtk_container_add(GTK_CONTAINER(prefswin_pi_options_frame), prefswin_pi_options_table);
+	gtk_container_border_width(GTK_CONTAINER(prefswin_pi_options_table), 5);
+
+
+	prefswin_pi_options_uxf = gtk_check_button_new_with_label("Use X11 font anyway");
+	gtk_table_attach_defaults(GTK_TABLE(prefswin_pi_options_table), prefswin_pi_options_uxf, 0, 1, 0, 1);
+
+
+	prefswin_pi_options_font_frame = gtk_frame_new("Playinfo Extra font");
+	gtk_container_set_border_width(GTK_CONTAINER(prefswin_pi_options_font_frame), 5);
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_vbox), prefswin_pi_options_font_frame, FALSE, FALSE, 0);
+	prefswin_pi_options_font_vbox = gtk_vbox_new(FALSE, 5);
+	gtk_container_border_width(GTK_CONTAINER(prefswin_pi_options_font_vbox), 5);
+	gtk_container_add(GTK_CONTAINER(prefswin_pi_options_font_frame), prefswin_pi_options_font_vbox);
+
+	prefswin_pi_options_font_label = gtk_label_new("NOTE: This take effect next time you restart X11Amp");
+	gtk_container_add(GTK_CONTAINER(prefswin_pi_options_font_vbox), prefswin_pi_options_font_label);
+
+	prefswin_pi_options_font_hbox = gtk_hbox_new(FALSE, 5);
+	gtk_container_border_width(GTK_CONTAINER(prefswin_pi_options_font_hbox), 5);
+	gtk_container_add(GTK_CONTAINER(prefswin_pi_options_font_vbox), prefswin_pi_options_font_hbox);
+
+	prefswin_pi_options_font_entry = gtk_entry_new();
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_font_hbox), prefswin_pi_options_font_entry, TRUE, TRUE, 0);
+	prefswin_pi_options_font_browse = gtk_button_new_with_label("Browse");
+	gtk_signal_connect(GTK_OBJECT(prefswin_pi_options_font_browse), "clicked", GTK_SIGNAL_FUNC(prefswin_i18n_mb_font_browse_cb), NULL);
+	gtk_widget_set_usize(prefswin_pi_options_font_browse, 85, 17);
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_font_hbox), prefswin_pi_options_font_browse, FALSE, TRUE, 0);
+
+	prefswin_pi_options_fontar_hbox = gtk_hbox_new(FALSE, 5);
+	gtk_container_border_width(GTK_CONTAINER(prefswin_pi_options_fontar_hbox), 5);
+	gtk_container_add(GTK_CONTAINER(prefswin_pi_options_font_vbox), prefswin_pi_options_fontar_hbox);
+	prefswin_pi_options_fontar = gtk_label_new("Font height arrange:");
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_fontar_hbox), prefswin_pi_options_fontar, FALSE, FALSE, 0);
+	prefswin_pi_options_fontar_entry = gtk_entry_new_with_max_length(2);
+	gtk_widget_set_usize(prefswin_pi_options_fontar_entry, 20, -1);
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_fontar_hbox), prefswin_pi_options_fontar_entry, FALSE, FALSE, 0);
+	prefswin_pi_options_fontar_label = gtk_label_new("pixels");
+	gtk_box_pack_start(GTK_BOX(prefswin_pi_options_fontar_hbox), prefswin_pi_options_fontar_label, FALSE, FALSE, 0);
+
+
+	gtk_notebook_append_page(GTK_NOTEBOOK(prefswin_notebook), prefswin_pi_options_vbox, gtk_label_new("Extra options"));
+#endif 
+
 	/* 
 	 * Ok, Cancel & Apply 
 	 */
@@ -1110,6 +1196,13 @@
 	gtk_entry_set_text(GTK_ENTRY(prefswin_options_pbs_entry), temp);
 
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_egplugins_euse_cbox), cfg.use_eplugins);
+
+#ifdef I18N_MB
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_pi_options_uxf), cfg.playinfo_font_use_x11font);
+	gtk_entry_set_text(GTK_ENTRY(prefswin_pi_options_font_entry), cfg.playinfo_font);
+	sprintf(temp, "%u", cfg.playinfo_font_arrange);
+	gtk_entry_set_text(GTK_ENTRY(prefswin_pi_options_fontar_entry), temp);
+#endif
 
  	gtk_widget_show_all(prefswin);
 	gtk_widget_grab_default(prefswin_ok);
diff -uNr xmms-1.0.0-orig/xmms/skin.c xmms-1.0.0/xmms/skin.c
--- xmms-1.0.0-orig/xmms/skin.c	Tue Jan 25 04:11:02 2000
+++ xmms-1.0.0/xmms/skin.c	Sat Jan 29 00:37:16 2000
@@ -136,6 +136,14 @@
 		skin->vis_color[i][1] = skin_default_viscolor[i][1];
 		skin->vis_color[i][2] = skin_default_viscolor[i][2];
 	}
+
+#ifdef I18N_MB
+	for (i = 0; i < 6; i++)
+	{
+		skin->def_textfg[i] = skin->def_pledit_normal;
+		skin->def_textbg[i] = skin->def_pledit_normalbg;
+	}
+#endif
 	skin->def_mask = create_default_mask(mainwin->window, 275, 116);
 	skin->def_mask_ds = create_default_mask(mainwin->window, 550, 232);
 	skin->def_mask_shade = create_default_mask(mainwin->window, 275, 14);
@@ -361,6 +369,12 @@
 		g_free(skin->pledit_normalbg);
 	if (skin->pledit_selectedbg)
 		g_free(skin->pledit_selectedbg);
+#ifdef I18N_MB
+	if (skin->textfg)
+		g_free(skin->textfg);
+	if (skin->textbg)
+		g_free(skin->textbg);
+#endif
 	skin->main = NULL;
 	skin->cbuttons = NULL;
 	skin->titlebar = NULL;
@@ -379,6 +393,10 @@
 	skin->pledit_current = NULL;
 	skin->pledit_normalbg = NULL;
 	skin->pledit_selectedbg = NULL;
+#ifdef I18N_MB
+	skin->textfg = NULL;
+	skin->textbg = NULL;
+#endif
 	skin->mask_main = NULL;
 	skin->mask_main_ds = NULL;
 	skin->mask_shade = NULL;
@@ -478,6 +496,10 @@
 		skin->pledit_current = load_skin_color(path, "pledit.txt", "text", "current");
 		skin->pledit_normalbg = load_skin_color(path, "pledit.txt", "text", "normalbg");
 		skin->pledit_selectedbg = load_skin_color(path, "pledit.txt", "text", "selectedbg");
+#ifdef I18N_MB
+		skin->textbg = get_textbg_frombmp();
+		skin->textfg = get_textfg_frombmp();
+#endif
 		skin->mask_main = skin_create_transparent_mask(path, "region.txt", "Normal", mainwin->window, 275, 116, FALSE);
 		skin->mask_main_ds = skin_create_transparent_mask(path, "region.txt", "Normal", mainwin->window, 550, 232, TRUE);
 		skin->mask_shade = skin_create_transparent_mask(path, "region.txt", "WindowShade", mainwin->window, 275, 14, FALSE);
@@ -665,6 +687,18 @@
 			if (!ret)
 				ret = &skin->def_pledit_selectedbg;
 			break;
+#ifdef I18N_MB
+		case SKIN_TEXTFG:
+			ret = skin->textfg;
+			if (!ret)
+				ret = skin->def_textfg;
+			break;
+		case SKIN_TEXTBG:
+			ret = skin->textbg;
+			if (!ret)
+				ret = skin->def_textbg;
+			break;
+#endif
 	}
 	return ret;
 }
diff -uNr xmms-1.0.0-orig/xmms/skin.h xmms-1.0.0/xmms/skin.h
--- xmms-1.0.0-orig/xmms/skin.h	Wed Dec 22 09:43:20 1999
+++ xmms-1.0.0/xmms/skin.h	Sat Jan 29 00:38:17 2000
@@ -25,6 +25,9 @@
 	SKIN_PLEDIT, SKIN_EQMAIN, SKIN_EQ_EX,
 	SKIN_MASK_MAIN, SKIN_MASK_MAIN_DS, SKIN_MASK_EQ, SKIN_MASK_EQ_DS,
 	SKIN_MASK_SHADE, SKIN_MASK_SHADE_DS, SKIN_MASK_EQ_SHADE, SKIN_MASK_EQ_SHADE_DS
+#ifdef I18N_MB
+	,SKIN_TEXTFG, SKIN_TEXTBG
+#endif
 } SkinIndex;
 
 typedef enum
@@ -56,6 +59,10 @@
 	GdkColor *pledit_normalbg, def_pledit_normalbg;
 	GdkColor *pledit_selectedbg, def_pledit_selectedbg;
 	guchar vis_color[24][3];
+#ifdef I18N_MB
+	GdkColor *textfg,def_textfg[6];
+	GdkColor *textbg,def_textbg[6];
+#endif
 	GdkBitmap *def_mask, *def_mask_ds;
 	GdkBitmap *def_mask_shade, *def_mask_shade_ds;
 	GdkBitmap *mask_main, *mask_main_ds;
diff -uNr xmms-1.0.0-orig/xmms/textbox.c xmms-1.0.0/xmms/textbox.c
--- xmms-1.0.0-orig/xmms/textbox.c	Thu Jan 13 07:59:06 2000
+++ xmms-1.0.0/xmms/textbox.c	Sat Jan 29 00:43:06 2000
@@ -21,6 +21,33 @@
 
 void textbox_generate_pixmap(TextBox * tb);
 
+#ifdef I18N_MB
+gint mbtext_width(GdkFont * font, gchar * text, gint length)
+{
+	gint i, len, width;
+
+	if (!font)
+		width = length * 5;
+	else if (cfg.playinfo_font_use_x11font)
+		width = gdk_text_width(font, text, length);
+	else
+	{
+		for (i = 0, width = 0; i < length; i++)
+		{
+			len = mblen(&text[i], MB_CUR_MAX);
+			if (len > 1)
+			{
+				width += gdk_text_width(font, &text[i], len);
+				i += len - 1;
+			}
+			else
+				width += 5;
+		}
+	}
+	return width;
+}
+#endif
+
 void textbox_draw(Widget * w)
 {
 	TextBox *tb = (TextBox *) w;
@@ -55,9 +82,17 @@
 		cw = tb->tb_pixmap_width - tb->tb_offset;
 		if (cw > tb->tb_widget.width)
 			cw = tb->tb_widget.width;
+#ifndef I18N_MB
 		gdk_draw_pixmap(obj, tb->tb_widget.gc, src, tb->tb_offset, 0, tb->tb_widget.x, tb->tb_widget.y, cw, 6);
+#else
+		gdk_draw_pixmap(obj, tb->tb_widget.gc, src, tb->tb_offset, 0, tb->tb_widget.x, tb->tb_widget.y, cw, tb->tb_widget.height);
+#endif
 		if (cw < tb->tb_widget.width)
+#ifndef I18N_MB
 			gdk_draw_pixmap(obj, tb->tb_widget.gc, src, 0, 0, tb->tb_widget.x + cw, tb->tb_widget.y, tb->tb_widget.width - cw, 6);
+#else
+			gdk_draw_pixmap(obj, tb->tb_widget.gc, src, 0, 0, tb->tb_widget.x + cw, tb->tb_widget.y, tb->tb_widget.width-cw, tb->tb_widget.height);
+#endif
 	}
 }
 
@@ -150,10 +185,18 @@
 	if (wl * 5 != tb->tb_widget.width)
 		wl++;
 
+#ifdef I18N_MB
+	if (mbtext_width(tb->font, text, length) < tb->tb_widget.width)
+#else
 	if (length <= wl)
+#endif
 	{
 		tb->tb_is_scrollable = FALSE;
+#ifdef I18N_MB
+		pad = (tb->tb_widget.width - mbtext_width(tb->font, text, length)) / mbtext_width(tb->font, " ", 1);
+#else
 		pad = wl - length;
+#endif
 		tb->tb_text = (gchar *) g_realloc(tb->tb_text, length + pad + 1);
 		for (i = 0; i < pad; i++)
 			strcat(tb->tb_text, " ");
@@ -164,7 +207,11 @@
 			tb->tb_timeout_tag = 0;
 		}
 	}
+#ifdef I18N_MB
+	else if (mbtext_width(tb->font, text, length) > tb->tb_widget.width && tb->tb_scroll_allowed)
+#else
 	else if (length * 5 > tb->tb_widget.width && tb->tb_scroll_allowed)
+#endif
 	{
 		tb->tb_is_scrollable = TRUE;
 		length += 7;
@@ -185,6 +232,10 @@
 {
 	gint length, i, x, y;
 	GdkGC *gc;
+#ifdef I18N_MB
+	gint xx, yy;
+	GdkPixmap *tmp_pixmap;
+#endif
 
 	if (tb->tb_pixmap)
 		gdk_pixmap_unref(tb->tb_pixmap);
@@ -195,13 +246,40 @@
 
 	length = strlen(tb->tb_text);
 
+#ifndef I18N_MB
 	tb->tb_pixmap_width = length * 5;
 	tb->tb_pixmap = gdk_pixmap_new(mainwin->window, tb->tb_pixmap_width, 6, gdk_rgb_get_visual()->depth);
+#else
+	tb->tb_pixmap_width=mbtext_width(tb->font, tb->tb_text, length);
+	if(tb->tb_pixmap_width < tb->tb_widget.width)
+		tb->tb_pixmap_width=tb->tb_widget.width;
+	tb->tb_pixmap=gdk_pixmap_new(mainwin->window,tb->tb_pixmap_width,
+		tb->tb_widget.height,gdk_visual_get_best_depth());
+#endif
 	gc = tb->tb_widget.gc;
 
+#ifdef I18N_MB
+	xx = 0;
+	if (tb->font)
+		yy = abs((int) ((double) (tb->tb_widget.height - 6) / 2 + 1));
+	else
+		yy = 0;
+	tmp_pixmap = gdk_pixmap_new(mainwin->window, tb->tb_pixmap_width,
+					1, gdk_visual_get_best_depth());
+	/* Draw default background */
+	for (y = 0; y < tb->tb_widget.height; y++)
+	{
+		gdk_gc_set_foreground(gc, &(get_skin_color(SKIN_TEXTBG)[5 * y / (tb->tb_widget.height - 1)]));
+		gdk_draw_rectangle(tb->tb_pixmap, gc, 1, 0, y, tb->tb_pixmap_width, 1);
+	}
+#endif
 	for (i = 0; i < length; i++)
 	{
 		x = y = -1;
+#ifdef I18N_MB
+		if ((!tb->font) || (!cfg.playinfo_font_use_x11font))
+		{
+#endif
 		tb->tb_text[i] = toupper(tb->tb_text[i]);
 		if (tb->tb_text[i] >= 'A' && tb->tb_text[i] <= 'Z')
 		{
@@ -299,6 +377,7 @@
 					x = 150;
 					y = 6;
 					break;
+#ifndef I18N_MB
 				case 'å':
 				case 'Å':
 					x = 0;
@@ -319,6 +398,7 @@
 					x = 100;
 					y = 0;
 					break;
+#endif
 				case '?':
 					x = 15;
 					y = 12;
@@ -327,14 +407,49 @@
 					x = 20;
 					y = 12;
 					break;
+#ifdef I18N_MB
+				case ' ':
+#else
 				default:
+#endif
 					x = 145;
 					y = 0;
 					break;
 			}
 		}
+#ifdef I18N_MB
+		}
+		if (x < 0 && tb->font)
+		{                               /* draw multibyte charactor with gradiation */
+			gint len, y, w, h;
+			len = mblen(&tb->tb_text[i], MB_CUR_MAX);
+			if (len > 0)
+			{
+				w = gdk_text_width(tb->font, &tb->tb_text[i], len);
+				h = tb->tb_widget.height;
+				for (y = 0; y < h; y++)
+				{
+					gdk_draw_pixmap(tmp_pixmap, gc, tb->tb_pixmap, xx, y, 0, 0, w, h);
+					gdk_gc_set_foreground(gc, &(get_skin_color(SKIN_TEXTFG)[5 * y / (h - 1)]));
+					gdk_draw_text(tmp_pixmap, tb->font, gc, 0, tb->font->ascent + cfg.playinfo_font_arrange - 2 - y, &tb->tb_text[i], len);
+					gdk_draw_pixmap(tb->tb_pixmap, gc, tmp_pixmap, 0, 0, xx, y, w, 1);
+				}
+				xx += w;
+				i += len - 1;
+			}
+		}
+		else
+		{                               /* draw single charactor with  skin's font */
+			gdk_draw_pixmap(tb->tb_pixmap, gc, get_skin_pixmap(tb->tb_skin_index), x, y, xx, yy, 5, 6);
+			xx += 5;
+		}
+#else
 		gdk_draw_pixmap(tb->tb_pixmap, gc, get_skin_pixmap(tb->tb_skin_index), x, y, i * 5, 0, 5, 6);
+#endif
 	}
+#ifdef I18N_MB
+       gdk_pixmap_unref(tmp_pixmap);
+#endif
 
 	
 }
@@ -367,6 +482,9 @@
 	TextBox *tb;
 
 	tb = (TextBox *) g_malloc0(sizeof (TextBox));
+#ifdef I18N_MB
+	tb->font = NULL;
+#endif
 	tb->tb_widget.parent = parent;
 	tb->tb_widget.gc = gc;
 	tb->tb_widget.x = x;
@@ -384,6 +502,32 @@
 	add_widget(wlist, tb);
 	return tb;
 }
+
+#ifdef I18N_MB
+TextBox *create_mbtextbox(GList ** wlist, GdkPixmap * parent, GdkGC * gc, gint x, gint y, gint w, gboolean allow_scroll, SkinIndex si)
+{
+	TextBox *tb;
+	GdkFont *font;
+	gint height;
+
+	tb = create_textbox(wlist, parent, gc, x, y, w, allow_scroll, si);
+
+	if (strlen(cfg.playinfo_font))
+		font = gdk_fontset_load(cfg.playinfo_font);
+
+	if (font)
+	{
+		tb->font = font;
+		height = font->ascent + font->descent - 2 + cfg.playinfo_font_arrange;
+		if (height > 6)
+			tb->tb_widget.y -= (height - 6) / 2;
+		else
+			height = 6;
+		tb->tb_widget.height = height;
+	}
+	return tb;
+}
+#endif
 
 void free_textbox(TextBox * tb)
 {
diff -uNr xmms-1.0.0-orig/xmms/textbox.h xmms-1.0.0/xmms/textbox.h
--- xmms-1.0.0-orig/xmms/textbox.h	Fri Jul 30 06:03:13 1999
+++ xmms-1.0.0/xmms/textbox.h	Sat Jan 29 00:30:47 2000
@@ -33,6 +33,9 @@
 	         tb_is_dragging;
 	gint tb_timeout_tag, tb_drag_x, tb_drag_off;
 	SkinIndex tb_skin_index;
+#ifdef I18N_MB
+	GdkFont *font;
+#endif
 }
 TextBox;
 
@@ -40,5 +43,8 @@
 void textbox_set_scroll(TextBox * tb, gboolean s);
 TextBox *create_textbox(GList ** wlist, GdkPixmap * parent, GdkGC * gc, gint x, gint y, gint w, gboolean allow_scroll, SkinIndex si);
 void free_textbox(TextBox * tb);
+#ifdef I18N_MB
+TextBox *create_mbtextbox(GList **wlist,GdkPixmap *parent,GdkGC *gc,gint x,gint y,gint w,gboolean allow_scroll,SkinIndex si);
+#endif
 
 #endif
