Index: main.c
===================================================================
--- main.c	(revision 232)
+++ main.c	(working copy)
@@ -1199,24 +1199,28 @@
     {
       GString* string = g_string_new((gchar*)element->data);
       /* Ellipsize text */
-      if (string->len > prefs.item_length)
+      glong len = g_utf8_strlen(string->str, string->len);
+      if (len > prefs.item_length)
       {
         switch (prefs.ellipsize)
         {
           case PANGO_ELLIPSIZE_START:
-            string = g_string_erase(string, 0, string->len-(prefs.item_length));
+            string = g_string_erase(string, 0, g_utf8_offset_to_pointer(string->str, len - prefs.item_length) - string->str);
             string = g_string_prepend(string, "...");
             break;
           case PANGO_ELLIPSIZE_MIDDLE:
-            string = g_string_erase(string, (prefs.item_length/2), string->len-(prefs.item_length));
-            string = g_string_insert(string, (string->len/2), "...");
+            ; /* to avoid wierd gcc error */
+            gchar* p1 = g_utf8_offset_to_pointer(string->str, prefs.item_length / 2);
+            gchar* p2 = g_utf8_offset_to_pointer(string->str, len - prefs.item_length / 2);
+            string = g_string_erase(string, p1 - string->str, p2 - p1);
+            string = g_string_insert(string, p1 - string->str, "...");
             break;
           case PANGO_ELLIPSIZE_END:
-            string = g_string_truncate(string, prefs.item_length);
+            string = g_string_truncate(string, g_utf8_offset_to_pointer(string->str, prefs.item_length) - string->str);
             string = g_string_append(string, "...");
             break;
         }
-      }
+      }
 		  /* Remove control characters */
       gsize i = 0;
       while (i < string->len)
