diff --git a/winio.c b/winio.c
index 38824d0..e685e2d 100644
--- a/winio.c
+++ b/winio.c
@@ -1586,32 +1586,47 @@
 {
     filestruct *fileptr;
     float linepct = 0.0, bytepct = 0.0;
-    long i = 0;
+    long i = 0, j = 0;
     static long old_i = -1, old_totsize = -1;
 
     if (current == NULL || fileage == NULL)
 	return 0;
 
-    for (fileptr = fileage; fileptr != current && fileptr != NULL;
-	 fileptr = fileptr->next)
-	i += strlen(fileptr->data) + 1;
-
-    if (fileptr == NULL)
-	return -1;
-
-    i += current_x;
-
     if (old_i == -1)
 	old_i = i;
 
     if (old_totsize == -1)
 	old_totsize = totsize;
 
-    if (totlines > 0)
-	linepct = 100 * current->lineno / totlines;
+    if (ISSET(RELATIVECHARS)) {
 
-    if (totsize > 0)
-	bytepct = 100 * i / totsize;
+	if (strlen(current->data) == 0)
+	    bytepct = 0;
+	else
+	    bytepct = 100 * current_x / strlen(current->data);
+
+	old_i = -1;
+	i = current_x;
+	j = strlen(current->data);
+
+    } else {
+	for (fileptr = fileage; fileptr != current && fileptr != NULL;
+	     fileptr = fileptr->next)
+	    i += strlen(fileptr->data) + 1;
+
+	if (fileptr == NULL)
+	    return -1;
+
+	i += current_x;
+
+	j = totsize;
+
+	if (totsize > 0)
+	    bytepct = 100 * i / totsize;
+    }
+
+    if (totlines > 0)
+	 linepct = 100 * current->lineno / totlines;
 
 #ifdef DEBUG
     fprintf(stderr, _("do_cursorpos: linepct = %f, bytepct = %f\n"),
@@ -1624,7 +1639,7 @@
     if (!constant || (old_i != i || old_totsize != totsize)) {
 	statusbar(_
 		  ("line %d of %d (%.0f%%), character %ld of %ld (%.0f%%)"),
-		  current->lineno, totlines, linepct, i, totsize, bytepct);
+		  current->lineno, totlines, linepct, i, j, bytepct);
     }
 
     old_i = i;
