diff -rpu gkrellm-xkb-1.05.old/flags/unknown.xpm gkrellm-xkb-1.05/flags/unknown.xpm
--- gkrellm-xkb-1.05.old/flags/unknown.xpm	2003-06-23 20:05:10.000000000 +0200
+++ gkrellm-xkb-1.05/flags/unknown.xpm	2008-03-24 14:24:38.000000000 +0100
@@ -20,16 +20,16 @@ static char *flag_xpm_unknown[] = {
 /* pixels */
 ";;;;;;;;;;;;;;;;;;;;;",
 ";;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;#O. X@;;;;;;;;",
-";;;;;;; O*=@ +;;;;;;;",
-";;;;;;;;;;;;  ;;;;;;;",
-";;;;;;;;;;;& .;;;;;;;",
-";;;;;;;;;;=oX&;;;;;;;",
-";;;;;;;;;$X %;;;;;;;;",
-";;;;;;;;;  *;;;;;;;;;",
-";;;;;;;;;  ;;;;;;;;;;",
 ";;;;;;;;;;;;;;;;;;;;;",
-";;;;;;;;;  ;;;;;;;;;;",
-";;;;;;;;;  ;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
+";;;;;;;;;;;;;;;;;;;;;",
 ";;;;;;;;;;;;;;;;;;;;;"
 };
diff -rpu gkrellm-xkb-1.05.old/main.c gkrellm-xkb-1.05/main.c
--- gkrellm-xkb-1.05.old/main.c	2004-02-21 17:26:36.000000000 +0100
+++ gkrellm-xkb-1.05/main.c	2008-03-24 14:32:59.000000000 +0100
@@ -105,6 +105,9 @@ static GkrellmTicks *pGK;
 static int force_redraw = 0;
 static int update_locked = 0;
 
+#define STYLE_NAME "xkb"
+static gint style_id;
+
 static struct {
     const char *country_code;
     char **flag_pointer; 
@@ -197,6 +200,7 @@ static GkrellmMonitor plugin_mon = { /* 
 /* }}} */
 
 GkrellmMonitor *gkrellm_init_plugin(void) { /* {{{ */
+    style_id = gkrellm_add_meter_style(&plugin_mon, STYLE_NAME);
     monitor = &plugin_mon;
     pGK = gkrellm_ticks();
     return monitor;
@@ -334,6 +338,7 @@ static void draw_flag(int redraw) { /* {
     int num_groups = 0;
     xkbGroup groups[XKB_MAX_GROUPS];
     int active_group;
+    static int current_group;
     int flag_width, flag_height;
     int loc_x, loc_y;
     static GdkPixmap *flag_pix = NULL;
@@ -341,6 +346,7 @@ static void draw_flag(int redraw) { /* {
     static GdkPixmap *num_pix = NULL;
     static GdkPixmap *bg_scaled = NULL;
     static GkrellmDecal *decal_flag = NULL;
+    static GkrellmDecal *decal_text = NULL;
     static GkrellmDecal *decal_caps = NULL;
     static GkrellmDecal *decal_num = NULL;
     static GkrellmDecal *decal_bg = NULL;
@@ -371,10 +377,12 @@ static void draw_flag(int redraw) { /* {
     }
     
     if (! (redraw || force_redraw ||
-           current_flag == NULL || current_flag != groups[active_group].flag_xpm ||
+           current_flag == NULL || /* current_flag != groups[active_group].flag_xpm || */
+           current_group != active_group ||
            ind_caps != ind_caps_prev || ind_num != ind_num_prev))
         goto cleanup;
 
+    current_group = active_group;
     /* fprintf(stderr, "Redrawing...\n"); */
     
     ind_caps_prev = ind_caps;
@@ -388,6 +396,9 @@ static void draw_flag(int redraw) { /* {
     if (!redraw && decal_flag) {
         gkrellm_destroy_decal(decal_flag); decal_flag = NULL;
     }
+    if (!redraw && decal_text) {
+        gkrellm_destroy_decal(decal_text); decal_text = NULL;
+    }
     if (!redraw && decal_caps) {
         gkrellm_destroy_decal(decal_caps); decal_caps = NULL;
     }
@@ -435,6 +446,26 @@ static void draw_flag(int redraw) { /* {
         decal_caps = gkrellm_create_decal_pixmap(panel, caps_pix, NULL, 0, NULL, 0, loc_y);
         decal_num = gkrellm_create_decal_pixmap(panel, num_pix, NULL, 0, NULL, 
                 gkrellm_chart_width() - 14, loc_y);
+
+        /* Also draw country code if we don't have flag */
+        gchar **xkb_rules;
+        if (current_flag == flag_xpm_unknown &&
+            (xkb_rules = parse_xkb_rules_names())) {
+            GkrellmStyle *style;
+            GkrellmTextstyle *ts, *ts_alt;
+            style = gkrellm_meter_style(style_id);
+            ts = gkrellm_meter_textstyle(style_id);
+            ts_alt = gkrellm_meter_alt_textstyle(style_id);
+
+            decal_text = gkrellm_create_decal_text(panel, "XX", ts, style, -1, -1, 0);
+            int string_w = gdk_string_width(decal_text->text_style.font, xkb_rules[active_group]);
+            decal_text->x = loc_x + (flag_width/2) - (string_w/2);
+            decal_text->y = loc_y + 2;
+            gkrellm_draw_decal_text(panel, decal_text, xkb_rules[active_group], 0);
+
+            g_strfreev(xkb_rules);
+        }
+
         gkrellm_draw_decal_pixmap(panel, decal_flag, 0);
         gkrellm_draw_decal_pixmap(panel, decal_caps, 0);
         gkrellm_draw_decal_pixmap(panel, decal_num, 0);
