diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 99342b2e8716a89e015ab5043228e825c55d5778..4f73095150e6a9cb81e8c1ffee32975b3ffb3137 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-26  Janne Blomqvist  <jb@gcc.gnu.org>
+
+	PR libgfortran/24945
+	* gfortran.dg/open_status_2.f90: New test.
+	
 2005-11-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* gcc.c-torture/execute/builtins/fprintf.c,
diff --git a/gcc/testsuite/gfortran.dg/open_status_2.f90 b/gcc/testsuite/gfortran.dg/open_status_2.f90
new file mode 100644
index 0000000000000000000000000000000000000000..8b4b5776c7fe1451afa3fefdfc8fae6a6f9acf7d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/open_status_2.f90
@@ -0,0 +1,12 @@
+! { dg-do run } 
+! PR 25036
+! Test reopening file without status specifier or with
+! status='unknown'. The standard says that these two must behave
+! identically, but the actual behaviour is processor dependent.
+program open_status_2
+  open(10, file="f", form='unformatted', status='unknown')
+  open(10, file="f", form='unformatted', status='unknown')
+  open(10, file="f", form='unformatted')
+  close(10, status='delete')
+end program open_status_2
+ 
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index a637ee4753621458cf90c5f79c1443c17dec6337..03629e24f88a529d78589bb46e029673755844a0 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-26  Janne Blomqvist  <jb@gcc.gnu.org>
+
+	PR libgfortran/24945
+	* io/open.c (edit_modes): Check for STATUS_UNKNOWN flag.
+	
 2005-11-25  Richard Henderson  <rth@redhat.com>
 
 	* io/list_read.c (nml_parse_qualifier): Use memcpy to extract
diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c
index 54595097049b1c165aaf064df61d676b7346fc1a..7e42cc6a2c843a627170a5d1c89a93661fd32d5c 100644
--- a/libgfortran/io/open.c
+++ b/libgfortran/io/open.c
@@ -144,9 +144,10 @@ edit_modes (st_parameter_open *opp, gfc_unit * u, unit_flags * flags)
 
   /* Status must be OLD if present.  */
 
-  if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD)
+  if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD &&
+      flags->status != STATUS_UNKNOWN)
     generate_error (&opp->common, ERROR_BAD_OPTION,
-		    "OPEN statement must have a STATUS of OLD");
+		    "OPEN statement must have a STATUS of OLD or UNKNOWN");
 
   if (u->flags.form == FORM_UNFORMATTED)
     {