diff --git a/xmlschema.ast b/xmlschema.ast
index 0a4b7cf6e2a40244bfb15053db15df96abc083ba..53dc470fe8bd44f46cc39e7b86a377a8641b354f 100644
--- a/xmlschema.ast
+++ b/xmlschema.ast
@@ -30,6 +30,7 @@ XmlHeader ::= Attribute*;
 abstract Element;
 abstract ComplexElement : Element ::= Attribute* Element*;
 
+XsAll            : ComplexElement;
 XsAnnotation     : ComplexElement;
 XsAny            : ComplexElement;
 XsAnyAttribute   : ComplexElement;
diff --git a/xmlschema.jjt b/xmlschema.jjt
index c6e4e6e6e2b5842e4ad23b2e2dbe16873e5ebc5e..139ae28720c1ad6475b717657e4cc8719f6ca8bd 100644
--- a/xmlschema.jjt
+++ b/xmlschema.jjt
@@ -80,7 +80,8 @@ SPECIAL_TOKEN : /* COMMENTS */
 
 <DEFAULT, BOUNDS> TOKEN : /* RESERVED WORDS AND LITERALS */
 {
-    < XS_ANNOTATION            : "xs:annotation" >
+    < XS_ALL                   : "xs:all" >
+  | < XS_ANNOTATION            : "xs:annotation" >
   | < XS_ANY                   : "xs:any" >
   | < XS_ANYATTRIBUTE          : "xs:anyAttribute" >
   | < XS_APPINFO               : "xs:appinfo" >
@@ -256,8 +257,8 @@ SPECIAL_TOKEN : /* COMMENTS */
 {
       < LPAREN               : "("    >
     | < RPAREN               : ")"    >
-     | < CDATA_START         : "<![CDATA["    >
-     | < CDATA_END           : "]]>"    >
+    | < CDATA_START         : "<![CDATA["    >
+    | < CDATA_END           : "]]>"    >
     | < LBRACE               : "{"    >
     | < RBRACE               : "}"    >
     | < LBRACKET             : "["    >
@@ -266,7 +267,9 @@ SPECIAL_TOKEN : /* COMMENTS */
     | < COMMA                : ","    >
     | < DOT                  : "."    >
     | < SQUOTE               : "'"    >
-         | < AT                   : "@"  >
+    | < AT                   : "@"  >
+    | < PERCENT              : "%"  >
+    | < QUESTION             : "?"  >
 }// SEPARATORS
 
 
@@ -357,6 +360,7 @@ void ElementList() #List : {}
 void Element() : {}
 {
     ( "<" (XsAnnotation()
+	| XsAll()
 	| XsAny()
 	| XsAnyAttribute()
 	| XsAppinfo()
@@ -393,6 +397,12 @@ void XsAnnotation() #XsAnnotation : {}
 		 (">" ElementList() "</" <XS_ANNOTATION> ">" | ElementList() "/>")
 }
 
+void XsAll() #XsAll : {}
+{
+    <XS_ALL> AttributeList() 
+		 (">" ElementList() "</" <XS_ALL> ">" | ElementList() "/>")
+}
+
 void XsAny() #XsAny : {}
 {
     <XS_ANY> AttributeList()