Index: src/Fl_File_Icon.cxx
===================================================================
--- src/Fl_File_Icon.cxx	(revision 4006)
+++ src/Fl_File_Icon.cxx	(working copy)
@@ -193,9 +193,11 @@
   // Get file information if needed...
   if (filetype == ANY)
   {
-#ifdef WIN32 
-    if (fl_filename_isdir(filename))
+#ifdef WIN32
+    if (filename[strlen(filename) - 1] == '/')
       filetype = DIRECTORY;
+    else if (fl_filename_isdir(filename))
+      filetype = DIRECTORY;
     else
       filetype = PLAIN;
 #else
Index: src/Fl_File_Chooser.cxx
===================================================================
--- src/Fl_File_Chooser.cxx	(revision 4006)
+++ src/Fl_File_Chooser.cxx	(working copy)
@@ -1,4 +1,4 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0105
+// generated by Fast Light User Interface Designer (fluid) version 1.0107
 
 #include "../FL/Fl_File_Chooser.H"
 
@@ -317,6 +317,7 @@
 void Fl_File_Chooser::show() {
   window->hotspot(fileList);
 window->show();
+rescan();
 fileName->take_focus();
 }
 
Index: src/Fl_File_Browser.cxx
===================================================================
--- src/Fl_File_Browser.cxx	(revision 4006)
+++ src/Fl_File_Browser.cxx	(working copy)
@@ -584,34 +584,31 @@
     if (num_files <= 0)
       return (0);
 
-    for (i = 0, num_dirs = 0; i < num_files; i ++)
-    {
+    for (i = 0, num_dirs = 0; i < num_files; i ++) {
       if (strcmp(files[i]->d_name, ".") &&
-          strcmp(files[i]->d_name, "./"))
-      {
+          strcmp(files[i]->d_name, "./")) {
 	snprintf(filename, sizeof(filename), "%s/%s", directory_,
 	         files[i]->d_name);
 
-#if defined(WIN32) && !defined(__CYGWIN__)
-	if (files[i]->d_name[strlen(files[i]->d_name) - 1] == '/')
-	{
+        icon = Fl_File_Icon::find(filename);
+	if (icon->type() == Fl_File_Icon::DIRECTORY) {
           num_dirs ++;
-          insert(num_dirs, files[i]->d_name, Fl_File_Icon::find(filename));
-	}
+
+#if defined(WIN32) && !defined(__CYGWIN__)
+	  // WIN32 already has the trailing slash... :)
+          insert(num_dirs, files[i]->d_name, icon);
 #else
-	if (fl_filename_isdir(filename))
-	{
+	  // Add a trailing slash to directory names...
 	  char name[1024]; // Temporary directory name
 
 	  snprintf(name, sizeof(name), "%s/", files[i]->d_name);
 
-          num_dirs ++;
-          insert(num_dirs, name, Fl_File_Icon::find(filename));
-	}
+          insert(num_dirs, name, icon);
 #endif // WIN32 && !__CYGWIN__
-	else if (filetype_ == FILES &&
-	         fl_filename_match(files[i]->d_name, pattern_))
-          add(files[i]->d_name, Fl_File_Icon::find(filename));
+	} else if (filetype_ == FILES &&
+	           fl_filename_match(files[i]->d_name, pattern_)) {
+          add(files[i]->d_name, icon);
+	}
       }
 
       free(files[i]);
@@ -636,7 +633,4 @@
     pattern_ = pattern;
   else
     pattern_ = "*";
-
-  // Reload the current directory...
-  load(directory_);
 }
Index: src/Fl_File_Chooser.fl
===================================================================
--- src/Fl_File_Chooser.fl	(revision 4006)
+++ src/Fl_File_Chooser.fl	(working copy)
@@ -1,5 +1,5 @@
 # data file for the Fltk User Interface Designer (fluid)
-version 1.0105 
+version 1.0107 
 header_name {../FL/Fl_File_Chooser.H} 
 code_name {.cxx}
 class FL_EXPORT Fl_File_Chooser {open
@@ -107,7 +107,7 @@
 if (callback_)
   (*callback_)(this, data_);
 
-window->hide();} selected
+window->hide();}
             private xywh {300 345 85 25}
             code0 {\#include <FL/fl_ask.H>}
             code1 {okButton->label(fl_ok);}
@@ -245,11 +245,13 @@
   }
   decl {void rescan();} {public
   }
-  Function {show()} {return_type void
+  Function {show()} {open return_type void
   } {
     code {window->hotspot(fileList);
 window->show();
-fileName->take_focus();} {}
+rescan();
+fileName->take_focus();} {selected
+    }
   }
   Function {shown()} {return_type int
   } {
Index: src/Fl_File_Chooser2.cxx
===================================================================
--- src/Fl_File_Chooser2.cxx	(revision 4006)
+++ src/Fl_File_Chooser2.cxx	(working copy)
@@ -196,8 +196,10 @@
   else
     directory_[0] = '\0';
 
-  // Rescan the directory...
-  rescan();
+  if (shown()) {
+    // Rescan the directory...
+    rescan();
+  }
 }
 
 
@@ -834,7 +836,11 @@
   }
 
   fileList->filter(pattern_);
-  rescan();
+
+  if (shown()) {
+    // Rescan the directory...
+    rescan();
+  }
 }
 
 
Index: FL/Fl_File_Chooser.H
===================================================================
--- FL/Fl_File_Chooser.H	(revision 4006)
+++ FL/Fl_File_Chooser.H	(working copy)
@@ -1,4 +1,4 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0105
+// generated by Fast Light User Interface Designer (fluid) version 1.0107
 
 #ifndef Fl_File_Chooser_H
 #define Fl_File_Chooser_H
Index: FL/Fl_File_Browser.H
===================================================================
--- FL/Fl_File_Browser.H	(revision 4006)
+++ FL/Fl_File_Browser.H	(working copy)
@@ -69,7 +69,7 @@
   void		textsize(uchar s) { Fl_Browser::textsize(s); iconsize_ = (uchar)(3 * s / 2); };
 
   int		filetype() const { return (filetype_); };
-  void		filetype(int t) { filetype_ = t; load(directory_); };
+  void		filetype(int t) { filetype_ = t; };
 };
 
 #endif // !_Fl_File_Browser_H_
Index: test/file_chooser.cxx
===================================================================
--- test/file_chooser.cxx	(revision 4006)
+++ test/file_chooser.cxx	(working copy)
@@ -307,7 +307,6 @@
   char	relative[1024];		// Relative filename
 
 
-  fc->show();
   if (filter->value()[0])
     fc->filter(filter->value());
 
