diff --git a/glib/gfileutils.c b/glib/gfileutils.c
index 13f8627..87e0112 100644
--- a/glib/gfileutils.c
+++ b/glib/gfileutils.c
@@ -1710,10 +1710,6 @@ g_build_filename (const gchar *first_element,
   return str;
 }
 
-#define KILOBYTE_FACTOR 1024.0
-#define MEGABYTE_FACTOR (1024.0 * 1024.0)
-#define GIGABYTE_FACTOR (1024.0 * 1024.0 * 1024.0)
-
 /**
  * g_format_size_for_display:
  * @size: a size in bytes.
@@ -1735,31 +1731,28 @@ g_build_filename (const gchar *first_element,
 char *
 g_format_size_for_display (goffset size)
 {
-  if (size < (goffset) KILOBYTE_FACTOR)
-    return g_strdup_printf (g_dngettext(GETTEXT_PACKAGE, "%u byte", "%u bytes",(guint) size), (guint) size);
-  else
-    {
-      gdouble displayed_size;
-      
-      if (size < (goffset) MEGABYTE_FACTOR)
-	{
-	  displayed_size = (gdouble) size / KILOBYTE_FACTOR;
-	  return g_strdup_printf (_("%.1f KB"), displayed_size);
-	}
-      else if (size < (goffset) GIGABYTE_FACTOR)
-	{
-	  displayed_size = (gdouble) size / MEGABYTE_FACTOR;
-	  return g_strdup_printf (_("%.1f MB"), displayed_size);
-	}
-      else
-	{
-	  displayed_size = (gdouble) size / GIGABYTE_FACTOR;
-	  return g_strdup_printf (_("%.1f GB"), displayed_size);
-	}
-    }
+  const gchar* sizes[] = 
+  {
+	"bytes",
+	"kB",
+	"MB",
+	"GB",
+	"TB",
+	"PB",
+	"EB",
+	"ZB",
+	"YB"
+  };
+  guint loopIndex; 
+  gdouble displayed_size = (gdouble) size;
+  
+  for (loopIndex = 0; displayed_size >= 1024; loopIndex++)
+  {
+	  displayed_size /= 1024;
+  }
+  return g_strdup_printf (_("%.2f %s"), displayed_size, sizes[loopIndex]);
 }
 
-
 /**
  * g_file_read_link:
  * @filename: the symbolic link
