diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 7e22961c1db1046490adfb41f276d22ff0ed2756..6ed025bddd86758a5420c7141ce23d99ed071549 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,17 @@
+2005-11-17  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR fortran/20811
+	* scanner.c (gfc_open_included_file): Add an extra include_cwd
+	argument. Only include files in the current working directory if
+	its value is true.
+	* gfortran.h: Change prototype for gfc_open_included_file.
+	(load_file): Don't search for include files in the current working
+	directory.
+	* options.c (gfc_post_options): Add the directory of the source file
+	to the list of paths for included files.
+	* module.c (gfc_use_module): Look for module files in the current
+	directory.
+
 2005-11-16  Alan Modra  <amodra@bigpond.net.au>
 
 	PR fortran/24096
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index a0d0e8c66951ba8c34bc0b1a1dc21ae809511daf..95794a5ca7bbe64eee485a6d5e6f8dbcaec86697 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1548,7 +1548,7 @@ void gfc_scanner_init_1 (void);
 
 void gfc_add_include_path (const char *);
 void gfc_release_include_path (void);
-FILE *gfc_open_included_file (const char *);
+FILE *gfc_open_included_file (const char *, bool);
 
 int gfc_at_end (void);
 int gfc_at_eof (void);
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 6f978aa293e1e610e2889daca2bf51c5145e8fe8..8f1ab7301f447f01b144adf282640f62bb5ec98d 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3741,7 +3741,7 @@ gfc_use_module (void)
   strcpy (filename, module_name);
   strcat (filename, MODULE_EXTENSION);
 
-  module_fp = gfc_open_included_file (filename);
+  module_fp = gfc_open_included_file (filename, true);
   if (module_fp == NULL)
     gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s",
 		     filename, strerror (errno));
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index ebce409ba94d3d923ba547b55c0575bfee92becc..a39876b80b5f48553d63d25d6ba96c85d95eee64 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -172,6 +172,8 @@ bool
 gfc_post_options (const char **pfilename)
 {
   const char *filename = *pfilename;
+  char *source_path;
+  int i;
 
   /* Verify the input file name.  */
   if (!filename || strcmp (filename, "-") == 0)
@@ -181,6 +183,21 @@ gfc_post_options (const char **pfilename)
 
   gfc_source_file = filename;
 
+  /* Adds the path where the source file is to the list of include files.  */
+
+  i = strlen(gfc_source_file);
+  while (i > 0 && !IS_DIR_SEPARATOR(gfc_source_file[i]))
+    i--;
+  if (i != 0)
+    {
+      source_path = alloca (i + 1);
+      memcpy (source_path, gfc_source_file, i);
+      source_path[i] = 0;
+      gfc_add_include_path (source_path);
+    }
+  else
+    gfc_add_include_path (".");
+
   /* Decide which form the file will be read in as.  */
 
   if (gfc_option.source_form != FORM_UNKNOWN)
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index 738e17280a0603c951cb7ae57ca87b37d28a14ce..883576166ffa6ad9bc953d7bdf590a45c2594c2b 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -159,18 +159,22 @@ gfc_release_include_path (void)
 }
 
 /* Opens file for reading, searching through the include directories
-   given if necessary.  */
+   given if necessary.  If the include_cwd argument is true, we try
+   to open the file in the current directory first.  */
 
 FILE *
-gfc_open_included_file (const char *name)
+gfc_open_included_file (const char *name, const bool include_cwd)
 {
   char *fullname;
   gfc_directorylist *p;
   FILE *f;
 
-  f = gfc_open_file (name);
-  if (f != NULL)
-    return f;
+  if (include_cwd)
+    {
+      f = gfc_open_file (name);
+      if (f != NULL)
+	return f;
+    }
 
   for (p = include_dirs; p; p = p->next)
     {
@@ -1034,7 +1038,7 @@ load_file (const char *filename, bool initial)
     }
   else
     {
-      input = gfc_open_included_file (filename);
+      input = gfc_open_included_file (filename, false);
       if (input == NULL)
 	{
 	  gfc_error_now ("Can't open included file '%s'", filename);