diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 053ffef084a9863ca954f0ea44bf983a990f1906..8a86bc9000d2c3a21699b82d83f086c8abf2e224 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,11 @@
+2004-08-13  Bryce McKinlay  <mckinlay@redhat.com>
+
+	PR libgcj/17020
+	Reported by Robin Green.
+	* defineclass.cc (handleField): Don't throw exception on unrecognised
+	modifier. Add FIXME comments for spec compliance.
+	(handleMethod): Likewise.
+
 2004-08-10  Hans Boehm <Hans.Boehm@hp.com>
 
 	PR libgcj/16662
diff --git a/libjava/defineclass.cc b/libjava/defineclass.cc
index ad40fc8f7fce6a054383c702beab10b1ca5b8208..5cd6b009be554cac53d57f0db340f8abe05a73a5 100644
--- a/libjava/defineclass.cc
+++ b/libjava/defineclass.cc
@@ -1096,16 +1096,15 @@ void _Jv_ClassReader::handleField (int field_no,
 	    throw_class_format_error ("duplicate field name");
 	}
 
-      if (field->flags & (Modifier::SYNCHRONIZED
-			  | Modifier::NATIVE
-			  | Modifier::INTERFACE
-			  | Modifier::ABSTRACT))
-	throw_class_format_error ("erroneous field access flags");
-      
+      // At most one of PUBLIC, PRIVATE, or PROTECTED is allowed.
       if (1 < ( ((field->flags & Modifier::PUBLIC) ? 1 : 0)
 		+((field->flags & Modifier::PRIVATE) ? 1 : 0)
 		+((field->flags & Modifier::PROTECTED) ? 1 : 0)))
 	throw_class_format_error ("erroneous field access flags");
+
+      // FIXME: JVM spec S4.5: Verify ACC_FINAL and ACC_VOLATILE are not 
+      // both set. Verify modifiers for interface fields.
+      
     }
 
   if (verify)
@@ -1256,15 +1255,15 @@ void _Jv_ClassReader::handleMethod
 	    throw_class_format_error ("duplicate method");
 	}
 
-      if (method->accflags & (Modifier::VOLATILE
-			      | Modifier::TRANSIENT
-			      | Modifier::INTERFACE))
-	throw_class_format_error ("erroneous method access flags");
-      
+      // At most one of PUBLIC, PRIVATE, or PROTECTED is allowed.
       if (1 < ( ((method->accflags & Modifier::PUBLIC) ? 1 : 0)
 		+((method->accflags & Modifier::PRIVATE) ? 1 : 0)
 		+((method->accflags & Modifier::PROTECTED) ? 1 : 0)))
 	throw_class_format_error ("erroneous method access flags");
+
+      // FIXME: JVM spec S4.6: if ABSTRACT modifier is set, verify other 
+      // flags are not set. Verify flags for interface methods. Verifiy
+      // modifiers for initializers. 
     }
 }