diff --git a/BUGS b/BUGS
index 5f47aab0540a6b26464d32ca77fee6536a858e42..4b46ca294069c8cc71ca168e2c35798792e786b0 100644
--- a/BUGS
+++ b/BUGS
@@ -103,9 +103,10 @@
   the first fail if no string is entered (56) [FIXED].
 - Page down on a file of editwinrows fails (again). Reported by Ryan
   Krebs (57) [FIXED].
-- File browser aborts on Solaris in qsort() call.  (Reported by
-  Matthias Andree) (58) [FIXED by Matthias Andree].
 
 ** Open BUGS **
 
+- File browser aborts on Solaris in qsort() call.  (Reported by
+  Matthias Andree) (58).
+
 $Id$
diff --git a/ChangeLog b/ChangeLog
index 6a1e445327de7137f7c93ba81f1b58e224184f79..0e6d5149277862b6dfe643a6cce83a1e3951a37d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,8 +5,13 @@ CVS -
 	- Fixed typo in section 6.1 (discovered by Bob Farmer).
 - files.c:
   diralphasort()
-	- Changed stat calls to lstat to stop abort on symlinks, otherwise
-	  return 0.  (Matthias Andree, fixes bug #58)
+	- Stop abort on symlinks (Matthias Andree)
+  fielstat(), do_browse()
+	- Changed lstat calls to stat, which fixes the browser not
+	  following links to directories.  We only use lstat() when
+	  printing the details of the file, and if it is a link, then
+	  check via lstat() for link to a directory.  If it is 
+	  a directory, display (dir), else use the normal "--".  
 
 nano-1.0.0 - 03/22/2001
 - General
diff --git a/files.c b/files.c
index 63d8fd6bec5f4edd309127e7e017027e2de8e1ac..df907ff810da601ea139332e7fbd75b96faba5c3 100644
--- a/files.c
+++ b/files.c
@@ -993,7 +993,7 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace)
 struct stat filestat(const char *path) {
     struct stat st;
 
-    lstat(path, &st);
+    stat(path, &st);
     return st;
 }
 
@@ -1005,7 +1005,7 @@ int diralphasort(const void *va, const void *vb) {
     char *a = *(char **)va, *b = *(char **)vb;
     int answer = 0;
 
-    if ((lstat(a, &file1info) != -1) && (lstat(b, &file2info) != -1)) {
+    if ((stat(a, &file1info) != -1) && (stat(b, &file2info) != -1)) {
 	/* If is a is a dir and b isn't, return -1.
 	   Else if b is a dir and a isn't, return 0.
 	   Else return a < b */
@@ -1285,13 +1285,22 @@ char *do_browser(char *inpath)
 	    col += strlen(foo);
 
 	    /* Put file info in the string also */
-	    st = filestat(filelist[j]);
+	    /* We use lstat here to detect links, then if we find a
+		symlink we examine it via stat() to see if it is a
+		directory or just a file symlink */
+	    lstat(filelist[j], &st);
 	    if (S_ISDIR(st.st_mode))
 		strcpy(foo + longest - 5, "(dir)");
 	    else {
-		if (S_ISLNK(st.st_mode))
-		    strcpy(foo + longest - 2, "--");
-		else if (st.st_size < 1024) /* less than 1 K */
+		if (S_ISLNK(st.st_mode)) {
+		     /* Aha!  It's a symlink!  Now, is it a dir?  If so,
+			mark it as such */
+		    st = filestat(filelist[j]);
+		    if (S_ISDIR(st.st_mode))
+			strcpy(foo + longest - 5, "(dir)");
+		    else
+			strcpy(foo + longest - 2, "--");
+		} else if (st.st_size < 1024) /* less than 1 K */
 		    sprintf(foo + longest - 7, "%4d  B", (int) st.st_size);
 		else if (st.st_size > 1073741824) /* at least 1 gig */
 		    sprintf(foo + longest - 7, "%4d GB", (int) st.st_size / 1073741824);