diff --git a/doc/ncdu.pod b/doc/ncdu.pod
index eaa0ddc83643834a2c2258e5c71c45c24278c1c6..784500f3a20d5dd39a950e96ce3e76b537b1ace4 100644
--- a/doc/ncdu.pod
+++ b/doc/ncdu.pod
@@ -172,10 +172,12 @@ displayed, but not their content, and they are not counted towards the disk
 usage statistics.
 See http://www.brynosaurus.com/cachedir/
 
-=item -L,--follow-symlinks
+=item -L, --follow-symlinks
 
-Follow symlinks (except to directories) 00and count the size of the file
-they point to. Symlink loops and directories will be ignored.
+Follow symlinks and count the size of the file they point to. As of ncdu 1.14,
+this option will not follow symlinks to directories and will count each
+symlinked file as a unique file (i.e. unlike how hard links are handled). This
+is subject to change in later versions.
 
 =back
 
diff --git a/src/dir_scan.c b/src/dir_scan.c
index 3ec508c68d0c143b33a56ead21de1e9c1950c2aa..38068f1efbc9bfb5e1e728aaa0aaa01f0b2d3a9f 100644
--- a/src/dir_scan.c
+++ b/src/dir_scan.c
@@ -185,7 +185,7 @@ static int dir_scan_recurse(const char *name) {
  * directory. Assumes we're chdir'ed in the directory in which this item
  * resides. */
 static int dir_scan_item(const char *name) {
-  struct stat st;
+  static struct stat st, stl;
   int fail = 0;
 
 #ifdef __CYGWIN__
@@ -204,14 +204,12 @@ static int dir_scan_item(const char *name) {
     dir_setlasterr(dir_curpath);
   }
 
-  if(!(buf_dir->flags & (FF_ERR|FF_EXL)))
-    stat_to_dir(&st);
-
-  if (!(buf_dir->flags & (FF_ERR|FF_EXL)) && follow_symlinks && S_ISLNK(st.st_mode))
-    if (!stat(name, &st)) {
-      if (!S_ISDIR(st.st_mode))
-        stat_to_dir(&st);
-    }
+  if(!(buf_dir->flags & (FF_ERR|FF_EXL))) {
+    if(follow_symlinks && S_ISLNK(st.st_mode) && !stat(name, &stl) && !S_ISDIR(stl.st_mode))
+      stat_to_dir(&stl);
+    else
+      stat_to_dir(&st);
+  }
 
   if(cachedir_tags && (buf_dir->flags & FF_DIR) && !(buf_dir->flags & (FF_ERR|FF_EXL|FF_OTHFS)))
     if(has_cachedir_tag(buf_dir->name)) {