diff --git a/ChangeLog b/ChangeLog
index b7b81bd1a9436da30a6f3edec59c2f5b4894a19a..e3bc0ddb248507e185628e5321f16721c01efd7a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ CVS code -
   main()
 	- Reorder the getopt options to be more or less alphabetical
 	  (suggested by Sven Guckes).
+- winio.c:
+  do_cursorpos()
+	- Optimizations and cleanups by Rocco Corsi.
 
 nano 0.9.24 - 12/18/2000
 General
diff --git a/winio.c b/winio.c
index 4597d3fb11b21608ec42149e00e16e9d71613bf0..71fe081d0488eb2d3e2efc5ef04fdf31251f313d 100644
--- a/winio.c
+++ b/winio.c
@@ -1132,33 +1132,26 @@ void previous_line(void)
 int do_cursorpos(void)
 {
     filestruct *fileptr;
-    float linepct, bytepct;
-    int i, tot = 0;
+    float linepct = 0.0, bytepct = 0.0;
+    int i = 0;
 
     if (current == NULL || fileage == NULL)
 	return 0;
 
     for (fileptr = fileage; fileptr != current && fileptr != NULL;
 	 fileptr = fileptr->next)
-	tot += strlen(fileptr->data) + 1;
+	i += strlen(fileptr->data) + 1;
 
     if (fileptr == NULL)
 	return -1;
 
-    i = tot + current_x;;
-
-    for (fileptr = current->next; fileptr != NULL; fileptr = fileptr->next)
-	tot += strlen(fileptr->data) + 1;
+    i += current_x;
 
     if (totlines > 0)
 	linepct = 100 * current->lineno / totlines;
-    else
-	linepct = 0;
 
     if (totsize > 0)
 	bytepct = 100 * i / totsize;
-    else
-	bytepct = 0;
 
 #ifdef DEBUG
     fprintf(stderr, _("do_cursorpos: linepct = %f, bytepct = %f\n"),