diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
index d164d32f15..1ccb8e8c68 100644
--- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
+++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
@@ -401,7 +401,7 @@ out u);
 
 	void GlobalAttributeSection() {
 
-#line  2184 "VBNET.ATG" 
+#line  2191 "VBNET.ATG" 
 		Point startPos = t.Location; 
 		Expect(27);
 		if (la.kind == 49) {
@@ -410,20 +410,20 @@ out u);
 			lexer.NextToken();
 		} else SynErr(208);
 
-#line  2186 "VBNET.ATG" 
+#line  2193 "VBNET.ATG" 
 		string attributeTarget = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
 		List<ASTAttribute> attributes = new List<ASTAttribute>();
 		ASTAttribute attribute;
 		
 		Expect(13);
 		Attribute(
-#line  2190 "VBNET.ATG" 
+#line  2197 "VBNET.ATG" 
 out attribute);
 
-#line  2190 "VBNET.ATG" 
+#line  2197 "VBNET.ATG" 
 		attributes.Add(attribute); 
 		while (
-#line  2191 "VBNET.ATG" 
+#line  2198 "VBNET.ATG" 
 NotFinalComma()) {
 			if (la.kind == 12) {
 				lexer.NextToken();
@@ -435,10 +435,10 @@ NotFinalComma()) {
 				Expect(13);
 			}
 			Attribute(
-#line  2191 "VBNET.ATG" 
+#line  2198 "VBNET.ATG" 
 out attribute);
 
-#line  2191 "VBNET.ATG" 
+#line  2198 "VBNET.ATG" 
 			attributes.Add(attribute); 
 		}
 		if (la.kind == 12) {
@@ -447,7 +447,7 @@ out attribute);
 		Expect(26);
 		EndOfStmt();
 
-#line  2196 "VBNET.ATG" 
+#line  2203 "VBNET.ATG" 
 		AttributeSection section = new AttributeSection(attributeTarget, attributes);
 		section.StartLocation = startPos;
 		section.EndLocation = t.EndLocation;
@@ -564,47 +564,47 @@ out aliasedType);
 	}
 
 	void Qualident(
-#line  2896 "VBNET.ATG" 
+#line  2903 "VBNET.ATG" 
 out string qualident) {
 
-#line  2898 "VBNET.ATG" 
+#line  2905 "VBNET.ATG" 
 		string name;
 		qualidentBuilder.Length = 0; 
 		
 		Identifier();
 
-#line  2902 "VBNET.ATG" 
+#line  2909 "VBNET.ATG" 
 		qualidentBuilder.Append(t.val); 
 		while (
-#line  2903 "VBNET.ATG" 
+#line  2910 "VBNET.ATG" 
 DotAndIdentOrKw()) {
 			Expect(10);
 			IdentifierOrKeyword(
-#line  2903 "VBNET.ATG" 
+#line  2910 "VBNET.ATG" 
 out name);
 
-#line  2903 "VBNET.ATG" 
+#line  2910 "VBNET.ATG" 
 			qualidentBuilder.Append('.'); qualidentBuilder.Append(name); 
 		}
 
-#line  2905 "VBNET.ATG" 
+#line  2912 "VBNET.ATG" 
 		qualident = qualidentBuilder.ToString(); 
 	}
 
 	void TypeName(
-#line  2077 "VBNET.ATG" 
+#line  2084 "VBNET.ATG" 
 out TypeReference typeref) {
 
-#line  2078 "VBNET.ATG" 
+#line  2085 "VBNET.ATG" 
 		ArrayList rank = null; 
 		NonArrayTypeName(
-#line  2080 "VBNET.ATG" 
+#line  2087 "VBNET.ATG" 
 out typeref, false);
 		ArrayTypeModifiers(
-#line  2081 "VBNET.ATG" 
+#line  2088 "VBNET.ATG" 
 out rank);
 
-#line  2082 "VBNET.ATG" 
+#line  2089 "VBNET.ATG" 
 		if (rank != null && typeref != null) {
 		typeref.RankSpecifier = (int[])rank.ToArray(typeof(int));
 		}
@@ -621,35 +621,35 @@ out rank);
 	}
 
 	void AttributeSection(
-#line  2253 "VBNET.ATG" 
+#line  2260 "VBNET.ATG" 
 out AttributeSection section) {
 
-#line  2255 "VBNET.ATG" 
+#line  2262 "VBNET.ATG" 
 		string attributeTarget = "";List<ASTAttribute> attributes = new List<ASTAttribute>();
 		ASTAttribute attribute;
 		
 		
 		Expect(27);
 
-#line  2259 "VBNET.ATG" 
+#line  2266 "VBNET.ATG" 
 		Point startPos = t.Location; 
 		if (
-#line  2260 "VBNET.ATG" 
+#line  2267 "VBNET.ATG" 
 IsLocalAttrTarget()) {
 			if (la.kind == 93) {
 				lexer.NextToken();
 
-#line  2261 "VBNET.ATG" 
+#line  2268 "VBNET.ATG" 
 				attributeTarget = "event";
 			} else if (la.kind == 154) {
 				lexer.NextToken();
 
-#line  2262 "VBNET.ATG" 
+#line  2269 "VBNET.ATG" 
 				attributeTarget = "return";
 			} else {
 				Identifier();
 
-#line  2265 "VBNET.ATG" 
+#line  2272 "VBNET.ATG" 
 				string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
 				if (val != "field"	|| val != "method" ||
 					val != "module" || val != "param"  ||
@@ -662,20 +662,20 @@ IsLocalAttrTarget()) {
 			Expect(13);
 		}
 		Attribute(
-#line  2275 "VBNET.ATG" 
+#line  2282 "VBNET.ATG" 
 out attribute);
 
-#line  2275 "VBNET.ATG" 
+#line  2282 "VBNET.ATG" 
 		attributes.Add(attribute); 
 		while (
-#line  2276 "VBNET.ATG" 
+#line  2283 "VBNET.ATG" 
 NotFinalComma()) {
 			Expect(12);
 			Attribute(
-#line  2276 "VBNET.ATG" 
+#line  2283 "VBNET.ATG" 
 out attribute);
 
-#line  2276 "VBNET.ATG" 
+#line  2283 "VBNET.ATG" 
 			attributes.Add(attribute); 
 		}
 		if (la.kind == 12) {
@@ -683,7 +683,7 @@ out attribute);
 		}
 		Expect(26);
 
-#line  2280 "VBNET.ATG" 
+#line  2287 "VBNET.ATG" 
 		section = new AttributeSection(attributeTarget, attributes);
 		section.StartLocation = startPos;
 		section.EndLocation = t.EndLocation;
@@ -691,69 +691,69 @@ out attribute);
 	}
 
 	void TypeModifier(
-#line  2957 "VBNET.ATG" 
+#line  2979 "VBNET.ATG" 
 Modifiers m) {
 		switch (la.kind) {
 		case 148: {
 			lexer.NextToken();
 
-#line  2958 "VBNET.ATG" 
+#line  2980 "VBNET.ATG" 
 			m.Add(Modifier.Public, t.Location); 
 			break;
 		}
 		case 147: {
 			lexer.NextToken();
 
-#line  2959 "VBNET.ATG" 
+#line  2981 "VBNET.ATG" 
 			m.Add(Modifier.Protected, t.Location); 
 			break;
 		}
 		case 99: {
 			lexer.NextToken();
 
-#line  2960 "VBNET.ATG" 
+#line  2982 "VBNET.ATG" 
 			m.Add(Modifier.Internal, t.Location); 
 			break;
 		}
 		case 145: {
 			lexer.NextToken();
 
-#line  2961 "VBNET.ATG" 
+#line  2983 "VBNET.ATG" 
 			m.Add(Modifier.Private, t.Location); 
 			break;
 		}
 		case 158: {
 			lexer.NextToken();
 
-#line  2962 "VBNET.ATG" 
+#line  2984 "VBNET.ATG" 
 			m.Add(Modifier.Static, t.Location); 
 			break;
 		}
 		case 157: {
 			lexer.NextToken();
 
-#line  2963 "VBNET.ATG" 
+#line  2985 "VBNET.ATG" 
 			m.Add(Modifier.New, t.Location); 
 			break;
 		}
 		case 122: {
 			lexer.NextToken();
 
-#line  2964 "VBNET.ATG" 
+#line  2986 "VBNET.ATG" 
 			m.Add(Modifier.Abstract, t.Location); 
 			break;
 		}
 		case 131: {
 			lexer.NextToken();
 
-#line  2965 "VBNET.ATG" 
+#line  2987 "VBNET.ATG" 
 			m.Add(Modifier.Sealed, t.Location); 
 			break;
 		}
 		case 203: {
 			lexer.NextToken();
 
-#line  2966 "VBNET.ATG" 
+#line  2988 "VBNET.ATG" 
 			m.Add(Modifier.Partial, t.Location); 
 			break;
 		}
@@ -1108,6 +1108,10 @@ template);
 			lexer.NextToken();
 			break;
 		}
+		case 204: {
+			lexer.NextToken();
+			break;
+		}
 		case 49: {
 			lexer.NextToken();
 			break;
@@ -1187,28 +1191,28 @@ out typeRef);
 	}
 
 	void TypeImplementsClause(
-#line  1683 "VBNET.ATG" 
+#line  1690 "VBNET.ATG" 
 out List<TypeReference> baseInterfaces) {
 
-#line  1685 "VBNET.ATG" 
+#line  1692 "VBNET.ATG" 
 		baseInterfaces = new List<TypeReference>();
 		TypeReference type = null;
 		
 		Expect(107);
 		TypeName(
-#line  1688 "VBNET.ATG" 
+#line  1695 "VBNET.ATG" 
 out type);
 
-#line  1690 "VBNET.ATG" 
+#line  1697 "VBNET.ATG" 
 		baseInterfaces.Add(type);
 		
 		while (la.kind == 12) {
 			lexer.NextToken();
 			TypeName(
-#line  1693 "VBNET.ATG" 
+#line  1700 "VBNET.ATG" 
 out type);
 
-#line  1694 "VBNET.ATG" 
+#line  1701 "VBNET.ATG" 
 			baseInterfaces.Add(type); 
 		}
 		EndOfStmt();
@@ -1326,10 +1330,10 @@ m, attributes);
 	}
 
 	void NonArrayTypeName(
-#line  2100 "VBNET.ATG" 
+#line  2107 "VBNET.ATG" 
 out TypeReference typeref, bool canBeUnbound) {
 
-#line  2102 "VBNET.ATG" 
+#line  2109 "VBNET.ATG" 
 		string name;
 		typeref = null;
 		bool isGlobal = false;
@@ -1339,38 +1343,38 @@ out TypeReference typeref, bool canBeUnbound) {
 				lexer.NextToken();
 				Expect(10);
 
-#line  2107 "VBNET.ATG" 
+#line  2114 "VBNET.ATG" 
 				isGlobal = true; 
 			}
 			QualIdentAndTypeArguments(
-#line  2108 "VBNET.ATG" 
+#line  2115 "VBNET.ATG" 
 out typeref, canBeUnbound);
 
-#line  2109 "VBNET.ATG" 
+#line  2116 "VBNET.ATG" 
 			typeref.IsGlobal = isGlobal; 
 			while (la.kind == 10) {
 				lexer.NextToken();
 
-#line  2110 "VBNET.ATG" 
+#line  2117 "VBNET.ATG" 
 				TypeReference nestedTypeRef; 
 				QualIdentAndTypeArguments(
-#line  2111 "VBNET.ATG" 
+#line  2118 "VBNET.ATG" 
 out nestedTypeRef, canBeUnbound);
 
-#line  2112 "VBNET.ATG" 
+#line  2119 "VBNET.ATG" 
 				typeref = new InnerClassTypeReference(typeref, nestedTypeRef.Type, nestedTypeRef.GenericTypes); 
 			}
 		} else if (la.kind == 133) {
 			lexer.NextToken();
 
-#line  2115 "VBNET.ATG" 
+#line  2122 "VBNET.ATG" 
 			typeref = new TypeReference("System.Object"); 
 		} else if (StartOf(9)) {
 			PrimitiveTypeName(
-#line  2116 "VBNET.ATG" 
+#line  2123 "VBNET.ATG" 
 out name);
 
-#line  2116 "VBNET.ATG" 
+#line  2123 "VBNET.ATG" 
 			typeref = new TypeReference(name); 
 		} else SynErr(218);
 	}
@@ -1398,27 +1402,27 @@ out f);
 	}
 
 	void InterfaceBase(
-#line  1668 "VBNET.ATG" 
+#line  1675 "VBNET.ATG" 
 out List<TypeReference> bases) {
 
-#line  1670 "VBNET.ATG" 
+#line  1677 "VBNET.ATG" 
 		TypeReference type;
 		bases = new List<TypeReference>();
 		
 		Expect(110);
 		TypeName(
-#line  1674 "VBNET.ATG" 
+#line  1681 "VBNET.ATG" 
 out type);
 
-#line  1674 "VBNET.ATG" 
+#line  1681 "VBNET.ATG" 
 		bases.Add(type); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			TypeName(
-#line  1677 "VBNET.ATG" 
+#line  1684 "VBNET.ATG" 
 out type);
 
-#line  1677 "VBNET.ATG" 
+#line  1684 "VBNET.ATG" 
 			bases.Add(type); 
 		}
 		Expect(1);
@@ -1439,27 +1443,27 @@ TypeDeclaration newType) {
 	}
 
 	void FormalParameterList(
-#line  2287 "VBNET.ATG" 
+#line  2294 "VBNET.ATG" 
 List<ParameterDeclarationExpression> parameter) {
 
-#line  2289 "VBNET.ATG" 
+#line  2296 "VBNET.ATG" 
 		ParameterDeclarationExpression p;
 		AttributeSection section;
 		List<AttributeSection> attributes = new List<AttributeSection>();
 		
 		while (la.kind == 27) {
 			AttributeSection(
-#line  2293 "VBNET.ATG" 
+#line  2300 "VBNET.ATG" 
 out section);
 
-#line  2293 "VBNET.ATG" 
+#line  2300 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
 		FormalParameter(
-#line  2295 "VBNET.ATG" 
+#line  2302 "VBNET.ATG" 
 out p);
 
-#line  2297 "VBNET.ATG" 
+#line  2304 "VBNET.ATG" 
 		bool paramsFound = false;
 		p.Attributes = attributes;
 		parameter.Add(p);
@@ -1467,152 +1471,152 @@ out p);
 		while (la.kind == 12) {
 			lexer.NextToken();
 
-#line  2302 "VBNET.ATG" 
+#line  2309 "VBNET.ATG" 
 			if (paramsFound) Error("params array must be at end of parameter list"); 
 			while (la.kind == 27) {
 				AttributeSection(
-#line  2303 "VBNET.ATG" 
+#line  2310 "VBNET.ATG" 
 out section);
 
-#line  2303 "VBNET.ATG" 
+#line  2310 "VBNET.ATG" 
 				attributes.Add(section); 
 			}
 			FormalParameter(
-#line  2305 "VBNET.ATG" 
+#line  2312 "VBNET.ATG" 
 out p);
 
-#line  2305 "VBNET.ATG" 
+#line  2312 "VBNET.ATG" 
 			p.Attributes = attributes; parameter.Add(p); 
 		}
 	}
 
 	void MemberModifier(
-#line  2969 "VBNET.ATG" 
+#line  2991 "VBNET.ATG" 
 Modifiers m) {
 		switch (la.kind) {
 		case 122: {
 			lexer.NextToken();
 
-#line  2970 "VBNET.ATG" 
+#line  2992 "VBNET.ATG" 
 			m.Add(Modifier.Abstract, t.Location);
 			break;
 		}
 		case 79: {
 			lexer.NextToken();
 
-#line  2971 "VBNET.ATG" 
+#line  2993 "VBNET.ATG" 
 			m.Add(Modifier.Default, t.Location);
 			break;
 		}
 		case 99: {
 			lexer.NextToken();
 
-#line  2972 "VBNET.ATG" 
+#line  2994 "VBNET.ATG" 
 			m.Add(Modifier.Internal, t.Location);
 			break;
 		}
 		case 157: {
 			lexer.NextToken();
 
-#line  2973 "VBNET.ATG" 
+#line  2995 "VBNET.ATG" 
 			m.Add(Modifier.New, t.Location);
 			break;
 		}
 		case 142: {
 			lexer.NextToken();
 
-#line  2974 "VBNET.ATG" 
+#line  2996 "VBNET.ATG" 
 			m.Add(Modifier.Override, t.Location);
 			break;
 		}
 		case 123: {
 			lexer.NextToken();
 
-#line  2975 "VBNET.ATG" 
+#line  2997 "VBNET.ATG" 
 			m.Add(Modifier.Abstract, t.Location);
 			break;
 		}
 		case 145: {
 			lexer.NextToken();
 
-#line  2976 "VBNET.ATG" 
+#line  2998 "VBNET.ATG" 
 			m.Add(Modifier.Private, t.Location);
 			break;
 		}
 		case 147: {
 			lexer.NextToken();
 
-#line  2977 "VBNET.ATG" 
+#line  2999 "VBNET.ATG" 
 			m.Add(Modifier.Protected, t.Location);
 			break;
 		}
 		case 148: {
 			lexer.NextToken();
 
-#line  2978 "VBNET.ATG" 
+#line  3000 "VBNET.ATG" 
 			m.Add(Modifier.Public, t.Location);
 			break;
 		}
 		case 131: {
 			lexer.NextToken();
 
-#line  2979 "VBNET.ATG" 
+#line  3001 "VBNET.ATG" 
 			m.Add(Modifier.Sealed, t.Location);
 			break;
 		}
 		case 132: {
 			lexer.NextToken();
 
-#line  2980 "VBNET.ATG" 
+#line  3002 "VBNET.ATG" 
 			m.Add(Modifier.Sealed, t.Location);
 			break;
 		}
 		case 158: {
 			lexer.NextToken();
 
-#line  2981 "VBNET.ATG" 
+#line  3003 "VBNET.ATG" 
 			m.Add(Modifier.Static, t.Location);
 			break;
 		}
 		case 141: {
 			lexer.NextToken();
 
-#line  2982 "VBNET.ATG" 
+#line  3004 "VBNET.ATG" 
 			m.Add(Modifier.Virtual, t.Location);
 			break;
 		}
 		case 140: {
 			lexer.NextToken();
 
-#line  2983 "VBNET.ATG" 
+#line  3005 "VBNET.ATG" 
 			m.Add(Modifier.Overloads, t.Location);
 			break;
 		}
 		case 150: {
 			lexer.NextToken();
 
-#line  2984 "VBNET.ATG" 
+#line  3006 "VBNET.ATG" 
 			m.Add(Modifier.ReadOnly, t.Location);
 			break;
 		}
 		case 184: {
 			lexer.NextToken();
 
-#line  2985 "VBNET.ATG" 
+#line  3007 "VBNET.ATG" 
 			m.Add(Modifier.WriteOnly, t.Location);
 			break;
 		}
 		case 183: {
 			lexer.NextToken();
 
-#line  2986 "VBNET.ATG" 
+#line  3008 "VBNET.ATG" 
 			m.Add(Modifier.WithEvents, t.Location);
 			break;
 		}
 		case 81: {
 			lexer.NextToken();
 
-#line  2987 "VBNET.ATG" 
+#line  3009 "VBNET.ATG" 
 			m.Add(Modifier.Dim, t.Location);
 			break;
 		}
@@ -1642,37 +1646,37 @@ Modifiers m, List<AttributeSection> attributes) {
 		switch (la.kind) {
 		case 67: case 80: case 90: case 112: case 121: case 166: {
 			NonModuleDeclaration(
-#line  961 "VBNET.ATG" 
+#line  962 "VBNET.ATG" 
 m, attributes);
 			break;
 		}
 		case 167: {
 			lexer.NextToken();
 
-#line  965 "VBNET.ATG" 
+#line  966 "VBNET.ATG" 
 			Point startPos = t.Location;
 			
 			if (StartOf(12)) {
 
-#line  969 "VBNET.ATG" 
+#line  970 "VBNET.ATG" 
 				string name = String.Empty;
 				MethodDeclaration methodDeclaration; List<string> handlesClause = null;
 				List<InterfaceImplementation> implementsClause = null;
 				
 				Identifier();
 
-#line  975 "VBNET.ATG" 
+#line  976 "VBNET.ATG" 
 				name = t.val;
 				m.Check(Modifier.VBMethods);
 				
 				TypeParameterList(
-#line  978 "VBNET.ATG" 
+#line  979 "VBNET.ATG" 
 templates);
 				if (la.kind == 24) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  979 "VBNET.ATG" 
+#line  980 "VBNET.ATG" 
 p);
 					}
 					Expect(25);
@@ -1680,23 +1684,23 @@ p);
 				if (la.kind == 105 || la.kind == 107) {
 					if (la.kind == 107) {
 						ImplementsClause(
-#line  982 "VBNET.ATG" 
+#line  983 "VBNET.ATG" 
 out implementsClause);
 					} else {
 						HandlesClause(
-#line  984 "VBNET.ATG" 
+#line  985 "VBNET.ATG" 
 out handlesClause);
 					}
 				}
 
-#line  987 "VBNET.ATG" 
+#line  988 "VBNET.ATG" 
 				Point endLocation = t.EndLocation; 
 				Expect(1);
 				if (
-#line  991 "VBNET.ATG" 
+#line  992 "VBNET.ATG" 
 IsMustOverride(m)) {
 
-#line  993 "VBNET.ATG" 
+#line  994 "VBNET.ATG" 
 					methodDeclaration = new MethodDeclaration(name, m.Modifier,  null, p, attributes);
 					methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 					methodDeclaration.EndLocation   = endLocation;
@@ -1710,7 +1714,7 @@ IsMustOverride(m)) {
 					
 				} else if (StartOf(13)) {
 
-#line  1006 "VBNET.ATG" 
+#line  1007 "VBNET.ATG" 
 					methodDeclaration = new MethodDeclaration(name, m.Modifier,  null, p, attributes);
 					methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 					methodDeclaration.EndLocation   = endLocation;
@@ -1724,17 +1728,17 @@ IsMustOverride(m)) {
 					compilationUnit.BlockStart(methodDeclaration);
 					
 					Block(
-#line  1018 "VBNET.ATG" 
+#line  1019 "VBNET.ATG" 
 out stmt);
 
-#line  1020 "VBNET.ATG" 
+#line  1021 "VBNET.ATG" 
 					compilationUnit.BlockEnd();
 					methodDeclaration.Body  = (BlockStatement)stmt;
 					
 					Expect(88);
 					Expect(167);
 
-#line  1023 "VBNET.ATG" 
+#line  1024 "VBNET.ATG" 
 					methodDeclaration.Body.EndLocation = t.EndLocation; 
 					Expect(1);
 				} else SynErr(220);
@@ -1744,29 +1748,29 @@ out stmt);
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  1026 "VBNET.ATG" 
+#line  1027 "VBNET.ATG" 
 p);
 					}
 					Expect(25);
 				}
 
-#line  1027 "VBNET.ATG" 
+#line  1028 "VBNET.ATG" 
 				m.Check(Modifier.Constructors); 
 
-#line  1028 "VBNET.ATG" 
+#line  1029 "VBNET.ATG" 
 				Point constructorEndLocation = t.EndLocation; 
 				Expect(1);
 				Block(
-#line  1030 "VBNET.ATG" 
+#line  1031 "VBNET.ATG" 
 out stmt);
 				Expect(88);
 				Expect(167);
 
-#line  1031 "VBNET.ATG" 
+#line  1032 "VBNET.ATG" 
 				Point endLocation = t.EndLocation; 
 				Expect(1);
 
-#line  1033 "VBNET.ATG" 
+#line  1034 "VBNET.ATG" 
 				ConstructorDeclaration cd = new ConstructorDeclaration("New", m.Modifier, p, attributes); 
 				cd.StartLocation = m.GetDeclarationLocation(startPos);
 				cd.EndLocation   = constructorEndLocation;
@@ -1780,7 +1784,7 @@ out stmt);
 		case 100: {
 			lexer.NextToken();
 
-#line  1045 "VBNET.ATG" 
+#line  1046 "VBNET.ATG" 
 			m.Check(Modifier.VBMethods);
 			string name = String.Empty;
 			Point startPos = t.Location;
@@ -1790,16 +1794,16 @@ out stmt);
 			
 			Identifier();
 
-#line  1052 "VBNET.ATG" 
+#line  1053 "VBNET.ATG" 
 			name = t.val; 
 			TypeParameterList(
-#line  1053 "VBNET.ATG" 
+#line  1054 "VBNET.ATG" 
 templates);
 			if (la.kind == 24) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1054 "VBNET.ATG" 
+#line  1055 "VBNET.ATG" 
 p);
 				}
 				Expect(25);
@@ -1808,15 +1812,15 @@ p);
 				lexer.NextToken();
 				while (la.kind == 27) {
 					AttributeSection(
-#line  1055 "VBNET.ATG" 
+#line  1056 "VBNET.ATG" 
 out returnTypeAttributeSection);
 				}
 				TypeName(
-#line  1055 "VBNET.ATG" 
+#line  1056 "VBNET.ATG" 
 out type);
 			}
 
-#line  1057 "VBNET.ATG" 
+#line  1058 "VBNET.ATG" 
 			if(type == null) {
 			type = new TypeReference("System.Object");
 			}
@@ -1824,20 +1828,20 @@ out type);
 			if (la.kind == 105 || la.kind == 107) {
 				if (la.kind == 107) {
 					ImplementsClause(
-#line  1063 "VBNET.ATG" 
+#line  1064 "VBNET.ATG" 
 out implementsClause);
 				} else {
 					HandlesClause(
-#line  1065 "VBNET.ATG" 
+#line  1066 "VBNET.ATG" 
 out handlesClause);
 				}
 			}
 			Expect(1);
 			if (
-#line  1071 "VBNET.ATG" 
+#line  1072 "VBNET.ATG" 
 IsMustOverride(m)) {
 
-#line  1073 "VBNET.ATG" 
+#line  1074 "VBNET.ATG" 
 				methodDeclaration = new MethodDeclaration(name, m.Modifier,  type, p, attributes);
 				methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 				methodDeclaration.EndLocation   = t.EndLocation;
@@ -1853,7 +1857,7 @@ IsMustOverride(m)) {
 				
 			} else if (StartOf(13)) {
 
-#line  1088 "VBNET.ATG" 
+#line  1089 "VBNET.ATG" 
 				methodDeclaration = new MethodDeclaration(name, m.Modifier,  type, p, attributes);
 				methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 				methodDeclaration.EndLocation   = t.EndLocation;
@@ -1870,17 +1874,17 @@ IsMustOverride(m)) {
 				compilationUnit.BlockStart(methodDeclaration);
 				
 				Block(
-#line  1103 "VBNET.ATG" 
+#line  1104 "VBNET.ATG" 
 out stmt);
 
-#line  1105 "VBNET.ATG" 
+#line  1106 "VBNET.ATG" 
 				compilationUnit.BlockEnd();
 				methodDeclaration.Body  = (BlockStatement)stmt;
 				
 				Expect(88);
 				Expect(100);
 
-#line  1110 "VBNET.ATG" 
+#line  1111 "VBNET.ATG" 
 				methodDeclaration.Body.StartLocation = methodDeclaration.EndLocation;
 				methodDeclaration.Body.EndLocation   = t.EndLocation;
 				
@@ -1891,7 +1895,7 @@ out stmt);
 		case 78: {
 			lexer.NextToken();
 
-#line  1119 "VBNET.ATG" 
+#line  1120 "VBNET.ATG" 
 			m.Check(Modifier.VBExternalMethods);
 			Point startPos = t.Location;
 			CharsetModifier charsetModifer = CharsetModifier.None;
@@ -1901,39 +1905,39 @@ out stmt);
 			
 			if (StartOf(14)) {
 				Charset(
-#line  1126 "VBNET.ATG" 
+#line  1127 "VBNET.ATG" 
 out charsetModifer);
 			}
 			if (la.kind == 167) {
 				lexer.NextToken();
 				Identifier();
 
-#line  1129 "VBNET.ATG" 
+#line  1130 "VBNET.ATG" 
 				name = t.val; 
 				Expect(115);
 				Expect(3);
 
-#line  1130 "VBNET.ATG" 
+#line  1131 "VBNET.ATG" 
 				library = t.literalValue.ToString(); 
 				if (la.kind == 44) {
 					lexer.NextToken();
 					Expect(3);
 
-#line  1131 "VBNET.ATG" 
+#line  1132 "VBNET.ATG" 
 					alias = t.literalValue.ToString(); 
 				}
 				if (la.kind == 24) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  1132 "VBNET.ATG" 
+#line  1133 "VBNET.ATG" 
 p);
 					}
 					Expect(25);
 				}
 				Expect(1);
 
-#line  1135 "VBNET.ATG" 
+#line  1136 "VBNET.ATG" 
 				DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, null, p, attributes, library, alias, charsetModifer);
 				declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 				declareDeclaration.EndLocation   = t.EndLocation;
@@ -1943,25 +1947,25 @@ p);
 				lexer.NextToken();
 				Identifier();
 
-#line  1142 "VBNET.ATG" 
+#line  1143 "VBNET.ATG" 
 				name = t.val; 
 				Expect(115);
 				Expect(3);
 
-#line  1143 "VBNET.ATG" 
+#line  1144 "VBNET.ATG" 
 				library = t.literalValue.ToString(); 
 				if (la.kind == 44) {
 					lexer.NextToken();
 					Expect(3);
 
-#line  1144 "VBNET.ATG" 
+#line  1145 "VBNET.ATG" 
 					alias = t.literalValue.ToString(); 
 				}
 				if (la.kind == 24) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  1145 "VBNET.ATG" 
+#line  1146 "VBNET.ATG" 
 p);
 					}
 					Expect(25);
@@ -1969,12 +1973,12 @@ p);
 				if (la.kind == 48) {
 					lexer.NextToken();
 					TypeName(
-#line  1146 "VBNET.ATG" 
+#line  1147 "VBNET.ATG" 
 out type);
 				}
 				Expect(1);
 
-#line  1149 "VBNET.ATG" 
+#line  1150 "VBNET.ATG" 
 				DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, type, p, attributes, library, alias, charsetModifer);
 				declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 				declareDeclaration.EndLocation   = t.EndLocation;
@@ -1986,7 +1990,7 @@ out type);
 		case 93: {
 			lexer.NextToken();
 
-#line  1159 "VBNET.ATG" 
+#line  1160 "VBNET.ATG" 
 			m.Check(Modifier.VBEvents);
 			Point startPos = t.Location;
 			EventDeclaration eventDeclaration;
@@ -1995,19 +1999,19 @@ out type);
 			
 			Identifier();
 
-#line  1165 "VBNET.ATG" 
+#line  1166 "VBNET.ATG" 
 			name= t.val; 
 			if (la.kind == 48) {
 				lexer.NextToken();
 				TypeName(
-#line  1167 "VBNET.ATG" 
+#line  1168 "VBNET.ATG" 
 out type);
 			} else if (la.kind == 1 || la.kind == 24 || la.kind == 107) {
 				if (la.kind == 24) {
 					lexer.NextToken();
 					if (StartOf(4)) {
 						FormalParameterList(
-#line  1169 "VBNET.ATG" 
+#line  1170 "VBNET.ATG" 
 p);
 					}
 					Expect(25);
@@ -2015,11 +2019,11 @@ p);
 			} else SynErr(224);
 			if (la.kind == 107) {
 				ImplementsClause(
-#line  1171 "VBNET.ATG" 
+#line  1172 "VBNET.ATG" 
 out implementsClause);
 			}
 
-#line  1173 "VBNET.ATG" 
+#line  1174 "VBNET.ATG" 
 			eventDeclaration = new EventDeclaration(type, m.Modifier, p, attributes, name, implementsClause);
 			eventDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
 			eventDeclaration.EndLocation = t.EndLocation;
@@ -2030,26 +2034,30 @@ out implementsClause);
 		}
 		case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: {
 
-#line  1180 "VBNET.ATG" 
+#line  1181 "VBNET.ATG" 
 			Point startPos = t.Location; 
 
-#line  1182 "VBNET.ATG" 
+#line  1183 "VBNET.ATG" 
 			m.Check(Modifier.Fields);
 			FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
 			fd.StartLocation = m.GetDeclarationLocation(startPos); 
 			
-			VariableDeclarator(
-#line  1186 "VBNET.ATG" 
-variableDeclarators);
+			IdentifierForFieldDeclaration();
+
+#line  1187 "VBNET.ATG" 
+			string name = t.val; 
+			VariableDeclaratorPartAfterIdentifier(
+#line  1188 "VBNET.ATG" 
+variableDeclarators, name);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				VariableDeclarator(
-#line  1187 "VBNET.ATG" 
+#line  1189 "VBNET.ATG" 
 variableDeclarators);
 			}
 			Expect(1);
 
-#line  1190 "VBNET.ATG" 
+#line  1192 "VBNET.ATG" 
 			fd.EndLocation = t.EndLocation;
 			fd.Fields = variableDeclarators;
 			compilationUnit.AddChild(fd);
@@ -2058,35 +2066,35 @@ variableDeclarators);
 		}
 		case 71: {
 
-#line  1195 "VBNET.ATG" 
+#line  1197 "VBNET.ATG" 
 			m.Check(Modifier.Fields); 
 			lexer.NextToken();
 
-#line  1196 "VBNET.ATG" 
+#line  1198 "VBNET.ATG" 
 			m.Add(Modifier.Const, t.Location);  
 
-#line  1198 "VBNET.ATG" 
+#line  1200 "VBNET.ATG" 
 			FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
 			fd.StartLocation = m.GetDeclarationLocation(t.Location);
 			List<VariableDeclaration> constantDeclarators = new List<VariableDeclaration>();
 			
 			ConstantDeclarator(
-#line  1202 "VBNET.ATG" 
+#line  1204 "VBNET.ATG" 
 constantDeclarators);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				ConstantDeclarator(
-#line  1203 "VBNET.ATG" 
+#line  1205 "VBNET.ATG" 
 constantDeclarators);
 			}
 
-#line  1205 "VBNET.ATG" 
+#line  1207 "VBNET.ATG" 
 			fd.Fields = constantDeclarators;
 			fd.EndLocation = t.Location;
 			
 			Expect(1);
 
-#line  1210 "VBNET.ATG" 
+#line  1212 "VBNET.ATG" 
 			fd.EndLocation = t.EndLocation;
 			compilationUnit.AddChild(fd);
 			
@@ -2095,20 +2103,20 @@ constantDeclarators);
 		case 146: {
 			lexer.NextToken();
 
-#line  1216 "VBNET.ATG" 
+#line  1218 "VBNET.ATG" 
 			m.Check(Modifier.VBProperties);
 			Point startPos = t.Location;
 			List<InterfaceImplementation> implementsClause = null;
 			
 			Identifier();
 
-#line  1220 "VBNET.ATG" 
+#line  1222 "VBNET.ATG" 
 			string propertyName = t.val; 
 			if (la.kind == 24) {
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1221 "VBNET.ATG" 
+#line  1223 "VBNET.ATG" 
 p);
 				}
 				Expect(25);
@@ -2116,26 +2124,26 @@ p);
 			if (la.kind == 48) {
 				lexer.NextToken();
 				TypeName(
-#line  1222 "VBNET.ATG" 
+#line  1224 "VBNET.ATG" 
 out type);
 			}
 
-#line  1224 "VBNET.ATG" 
+#line  1226 "VBNET.ATG" 
 			if(type == null) {
 			type = new TypeReference("System.Object");
 			}
 			
 			if (la.kind == 107) {
 				ImplementsClause(
-#line  1228 "VBNET.ATG" 
+#line  1230 "VBNET.ATG" 
 out implementsClause);
 			}
 			Expect(1);
 			if (
-#line  1232 "VBNET.ATG" 
+#line  1234 "VBNET.ATG" 
 IsMustOverride(m)) {
 
-#line  1234 "VBNET.ATG" 
+#line  1236 "VBNET.ATG" 
 				PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes);
 				pDecl.StartLocation = m.GetDeclarationLocation(startPos);
 				pDecl.EndLocation   = t.Location;
@@ -2146,7 +2154,7 @@ IsMustOverride(m)) {
 				
 			} else if (la.kind == 27 || la.kind == 101 || la.kind == 156) {
 
-#line  1244 "VBNET.ATG" 
+#line  1246 "VBNET.ATG" 
 				PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes);
 				pDecl.StartLocation = m.GetDeclarationLocation(startPos);
 				pDecl.EndLocation   = t.Location;
@@ -2158,13 +2166,13 @@ IsMustOverride(m)) {
 				PropertySetRegion setRegion;
 				
 				AccessorDecls(
-#line  1254 "VBNET.ATG" 
+#line  1256 "VBNET.ATG" 
 out getRegion, out setRegion);
 				Expect(88);
 				Expect(146);
 				Expect(1);
 
-#line  1258 "VBNET.ATG" 
+#line  1260 "VBNET.ATG" 
 				pDecl.GetRegion = getRegion;
 				pDecl.SetRegion = setRegion;
 				pDecl.BodyEnd = t.EndLocation;
@@ -2176,11 +2184,11 @@ out getRegion, out setRegion);
 		case 204: {
 			lexer.NextToken();
 
-#line  1265 "VBNET.ATG" 
+#line  1267 "VBNET.ATG" 
 			Point startPos = t.Location; 
 			Expect(93);
 
-#line  1267 "VBNET.ATG" 
+#line  1269 "VBNET.ATG" 
 			m.Check(Modifier.VBCustomEvents);
 			EventAddRemoveRegion eventAccessorDeclaration;
 			EventAddRegion addHandlerAccessorDeclaration = null;
@@ -2190,24 +2198,24 @@ out getRegion, out setRegion);
 			
 			Identifier();
 
-#line  1274 "VBNET.ATG" 
+#line  1276 "VBNET.ATG" 
 			string customEventName = t.val; 
 			Expect(48);
 			TypeName(
-#line  1275 "VBNET.ATG" 
+#line  1277 "VBNET.ATG" 
 out type);
 			if (la.kind == 107) {
 				ImplementsClause(
-#line  1276 "VBNET.ATG" 
+#line  1278 "VBNET.ATG" 
 out implementsClause);
 			}
 			Expect(1);
 			while (StartOf(15)) {
 				EventAccessorDeclaration(
-#line  1279 "VBNET.ATG" 
+#line  1281 "VBNET.ATG" 
 out eventAccessorDeclaration);
 
-#line  1281 "VBNET.ATG" 
+#line  1283 "VBNET.ATG" 
 				if(eventAccessorDeclaration is EventAddRegion)
 				{
 					addHandlerAccessorDeclaration = (EventAddRegion)eventAccessorDeclaration;
@@ -2226,7 +2234,7 @@ out eventAccessorDeclaration);
 			Expect(93);
 			Expect(1);
 
-#line  1297 "VBNET.ATG" 
+#line  1299 "VBNET.ATG" 
 			if(addHandlerAccessorDeclaration == null)
 			{
 				Error("Need to provide AddHandler accessor.");
@@ -2254,24 +2262,24 @@ out eventAccessorDeclaration);
 		}
 		case 187: case 201: case 202: {
 
-#line  1320 "VBNET.ATG" 
+#line  1322 "VBNET.ATG" 
 			ConversionType opConversionType = ConversionType.None; 
 			if (la.kind == 201 || la.kind == 202) {
 				if (la.kind == 202) {
 					lexer.NextToken();
 
-#line  1321 "VBNET.ATG" 
+#line  1323 "VBNET.ATG" 
 					opConversionType = ConversionType.Implicit; 
 				} else {
 					lexer.NextToken();
 
-#line  1322 "VBNET.ATG" 
+#line  1324 "VBNET.ATG" 
 					opConversionType = ConversionType.Explicit;
 				}
 			}
 			Expect(187);
 
-#line  1325 "VBNET.ATG" 
+#line  1327 "VBNET.ATG" 
 			m.Check(Modifier.VBOperators);
 			Point startPos = t.Location;
 			TypeReference returnType = NullTypeReference.Instance;
@@ -2283,7 +2291,7 @@ out eventAccessorDeclaration);
 			List<AttributeSection> returnTypeAttributes = new List<AttributeSection>();
 			
 			OverloadableOperator(
-#line  1335 "VBNET.ATG" 
+#line  1337 "VBNET.ATG" 
 out operatorType);
 			Expect(24);
 			if (la.kind == 55) {
@@ -2291,16 +2299,16 @@ out operatorType);
 			}
 			Identifier();
 
-#line  1336 "VBNET.ATG" 
+#line  1338 "VBNET.ATG" 
 			operandName = t.val; 
 			if (la.kind == 48) {
 				lexer.NextToken();
 				TypeName(
-#line  1337 "VBNET.ATG" 
+#line  1339 "VBNET.ATG" 
 out operandType);
 			}
 
-#line  1338 "VBNET.ATG" 
+#line  1340 "VBNET.ATG" 
 			parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParamModifier.In)); 
 			while (la.kind == 12) {
 				lexer.NextToken();
@@ -2309,48 +2317,48 @@ out operandType);
 				}
 				Identifier();
 
-#line  1342 "VBNET.ATG" 
+#line  1344 "VBNET.ATG" 
 				operandName = t.val; 
 				if (la.kind == 48) {
 					lexer.NextToken();
 					TypeName(
-#line  1343 "VBNET.ATG" 
+#line  1345 "VBNET.ATG" 
 out operandType);
 				}
 
-#line  1344 "VBNET.ATG" 
+#line  1346 "VBNET.ATG" 
 				parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParamModifier.In)); 
 			}
 			Expect(25);
 
-#line  1347 "VBNET.ATG" 
+#line  1349 "VBNET.ATG" 
 			Point endPos = t.EndLocation; 
 			if (la.kind == 48) {
 				lexer.NextToken();
 				while (la.kind == 27) {
 					AttributeSection(
-#line  1348 "VBNET.ATG" 
+#line  1350 "VBNET.ATG" 
 out section);
 
-#line  1348 "VBNET.ATG" 
+#line  1350 "VBNET.ATG" 
 					returnTypeAttributes.Add(section); 
 				}
 				TypeName(
-#line  1348 "VBNET.ATG" 
+#line  1350 "VBNET.ATG" 
 out returnType);
 
-#line  1348 "VBNET.ATG" 
+#line  1350 "VBNET.ATG" 
 				endPos = t.EndLocation; 
 				Expect(1);
 			}
 			Block(
-#line  1349 "VBNET.ATG" 
+#line  1351 "VBNET.ATG" 
 out stmt);
 			Expect(88);
 			Expect(187);
 			Expect(1);
 
-#line  1351 "VBNET.ATG" 
+#line  1353 "VBNET.ATG" 
 			OperatorDeclaration operatorDeclaration = new OperatorDeclaration(m.Modifier, 
 			                                                                 attributes, 
 			                                                                 parameters, 
@@ -2589,91 +2597,91 @@ mod, attributes);
 	}
 
 	void Expr(
-#line  1729 "VBNET.ATG" 
+#line  1736 "VBNET.ATG" 
 out Expression expr) {
 		DisjunctionExpr(
-#line  1731 "VBNET.ATG" 
+#line  1738 "VBNET.ATG" 
 out expr);
 	}
 
 	void ImplementsClause(
-#line  1700 "VBNET.ATG" 
+#line  1707 "VBNET.ATG" 
 out List<InterfaceImplementation> baseInterfaces) {
 
-#line  1702 "VBNET.ATG" 
+#line  1709 "VBNET.ATG" 
 		baseInterfaces = new List<InterfaceImplementation>();
 		TypeReference type = null;
 		string memberName = null;
 		
 		Expect(107);
 		NonArrayTypeName(
-#line  1707 "VBNET.ATG" 
+#line  1714 "VBNET.ATG" 
 out type, false);
 
-#line  1708 "VBNET.ATG" 
+#line  1715 "VBNET.ATG" 
 		if (type != null) memberName = TypeReference.StripLastIdentifierFromType(ref type); 
 
-#line  1709 "VBNET.ATG" 
+#line  1716 "VBNET.ATG" 
 		baseInterfaces.Add(new InterfaceImplementation(type, memberName)); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			NonArrayTypeName(
-#line  1711 "VBNET.ATG" 
+#line  1718 "VBNET.ATG" 
 out type, false);
 
-#line  1712 "VBNET.ATG" 
+#line  1719 "VBNET.ATG" 
 			if (type != null) memberName = TypeReference.StripLastIdentifierFromType(ref type); 
 
-#line  1713 "VBNET.ATG" 
+#line  1720 "VBNET.ATG" 
 			baseInterfaces.Add(new InterfaceImplementation(type, memberName)); 
 		}
 	}
 
 	void HandlesClause(
-#line  1658 "VBNET.ATG" 
+#line  1665 "VBNET.ATG" 
 out List<string> handlesClause) {
 
-#line  1660 "VBNET.ATG" 
+#line  1667 "VBNET.ATG" 
 		handlesClause = new List<string>();
 		string name;
 		
 		Expect(105);
 		EventMemberSpecifier(
-#line  1663 "VBNET.ATG" 
+#line  1670 "VBNET.ATG" 
 out name);
 
-#line  1663 "VBNET.ATG" 
+#line  1670 "VBNET.ATG" 
 		handlesClause.Add(name); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			EventMemberSpecifier(
-#line  1664 "VBNET.ATG" 
+#line  1671 "VBNET.ATG" 
 out name);
 
-#line  1664 "VBNET.ATG" 
+#line  1671 "VBNET.ATG" 
 			handlesClause.Add(name); 
 		}
 	}
 
 	void Block(
-#line  2343 "VBNET.ATG" 
+#line  2350 "VBNET.ATG" 
 out Statement stmt) {
 
-#line  2346 "VBNET.ATG" 
+#line  2353 "VBNET.ATG" 
 		BlockStatement blockStmt = new BlockStatement();
 		blockStmt.StartLocation = t.Location;
 		compilationUnit.BlockStart(blockStmt);
 		
 		while (StartOf(18) || 
-#line  2351 "VBNET.ATG" 
+#line  2358 "VBNET.ATG" 
 IsEndStmtAhead()) {
 			if (
-#line  2351 "VBNET.ATG" 
+#line  2358 "VBNET.ATG" 
 IsEndStmtAhead()) {
 				Expect(88);
 				EndOfStmt();
 
-#line  2351 "VBNET.ATG" 
+#line  2358 "VBNET.ATG" 
 				compilationUnit.AddChild(new EndStatement()); 
 			} else {
 				Statement();
@@ -2681,7 +2689,7 @@ IsEndStmtAhead()) {
 			}
 		}
 
-#line  2356 "VBNET.ATG" 
+#line  2363 "VBNET.ATG" 
 		stmt = blockStmt;
 		blockStmt.EndLocation = t.EndLocation;
 		compilationUnit.BlockEnd();
@@ -2689,67 +2697,109 @@ IsEndStmtAhead()) {
 	}
 
 	void Charset(
-#line  1650 "VBNET.ATG" 
+#line  1657 "VBNET.ATG" 
 out CharsetModifier charsetModifier) {
 
-#line  1651 "VBNET.ATG" 
+#line  1658 "VBNET.ATG" 
 		charsetModifier = CharsetModifier.None; 
 		if (la.kind == 100 || la.kind == 167) {
 		} else if (la.kind == 47) {
 			lexer.NextToken();
 
-#line  1652 "VBNET.ATG" 
+#line  1659 "VBNET.ATG" 
 			charsetModifier = CharsetModifier.ANSI; 
 		} else if (la.kind == 50) {
 			lexer.NextToken();
 
-#line  1653 "VBNET.ATG" 
+#line  1660 "VBNET.ATG" 
 			charsetModifier = CharsetModifier.Auto; 
 		} else if (la.kind == 176) {
 			lexer.NextToken();
 
-#line  1654 "VBNET.ATG" 
+#line  1661 "VBNET.ATG" 
 			charsetModifier = CharsetModifier.Unicode; 
 		} else SynErr(229);
 	}
 
-	void VariableDeclarator(
-#line  1538 "VBNET.ATG" 
-List<VariableDeclaration> fieldDeclaration) {
+	void IdentifierForFieldDeclaration() {
+		switch (la.kind) {
+		case 2: {
+			lexer.NextToken();
+			break;
+		}
+		case 169: {
+			lexer.NextToken();
+			break;
+		}
+		case 51: {
+			lexer.NextToken();
+			break;
+		}
+		case 70: {
+			lexer.NextToken();
+			break;
+		}
+		case 49: {
+			lexer.NextToken();
+			break;
+		}
+		case 47: {
+			lexer.NextToken();
+			break;
+		}
+		case 50: {
+			lexer.NextToken();
+			break;
+		}
+		case 144: {
+			lexer.NextToken();
+			break;
+		}
+		case 176: {
+			lexer.NextToken();
+			break;
+		}
+		case 177: {
+			lexer.NextToken();
+			break;
+		}
+		default: SynErr(230); break;
+		}
+	}
 
-#line  1540 "VBNET.ATG" 
+	void VariableDeclaratorPartAfterIdentifier(
+#line  1546 "VBNET.ATG" 
+List<VariableDeclaration> fieldDeclaration, string name) {
+
+#line  1548 "VBNET.ATG" 
 		Expression expr = null;
 		TypeReference type = null;
 		ArrayList rank = null;
 		List<Expression> dimension = null;
 		
-		Identifier();
-
-#line  1545 "VBNET.ATG" 
-		string name = t.val; 
 		if (
-#line  1546 "VBNET.ATG" 
+#line  1553 "VBNET.ATG" 
 IsSize() && !IsDims()) {
 			ArrayInitializationModifier(
-#line  1546 "VBNET.ATG" 
+#line  1553 "VBNET.ATG" 
 out dimension);
 		}
 		if (
-#line  1547 "VBNET.ATG" 
+#line  1554 "VBNET.ATG" 
 IsDims()) {
 			ArrayNameModifier(
-#line  1547 "VBNET.ATG" 
+#line  1554 "VBNET.ATG" 
 out rank);
 		}
 		if (
-#line  1549 "VBNET.ATG" 
+#line  1556 "VBNET.ATG" 
 IsObjectCreation()) {
 			Expect(48);
 			ObjectCreateExpression(
-#line  1549 "VBNET.ATG" 
+#line  1556 "VBNET.ATG" 
 out expr);
 
-#line  1551 "VBNET.ATG" 
+#line  1558 "VBNET.ATG" 
 			if (expr is ObjectCreateExpression) {
 			type = ((ObjectCreateExpression)expr).CreateType;
 			} else {
@@ -2760,11 +2810,11 @@ out expr);
 			if (la.kind == 48) {
 				lexer.NextToken();
 				TypeName(
-#line  1558 "VBNET.ATG" 
+#line  1565 "VBNET.ATG" 
 out type);
 			}
 
-#line  1560 "VBNET.ATG" 
+#line  1567 "VBNET.ATG" 
 			if (type != null && dimension != null) {
 			if(type.RankSpecifier != null) {
 				Error("array rank only allowed one time");
@@ -2790,40 +2840,52 @@ out type);
 			if (la.kind == 11) {
 				lexer.NextToken();
 				VariableInitializer(
-#line  1582 "VBNET.ATG" 
+#line  1589 "VBNET.ATG" 
 out expr);
 			}
-		} else SynErr(230);
+		} else SynErr(231);
 
-#line  1584 "VBNET.ATG" 
+#line  1591 "VBNET.ATG" 
 		fieldDeclaration.Add(new VariableDeclaration(name, expr, type)); 
 	}
 
+	void VariableDeclarator(
+#line  1540 "VBNET.ATG" 
+List<VariableDeclaration> fieldDeclaration) {
+		Identifier();
+
+#line  1542 "VBNET.ATG" 
+		string name = t.val; 
+		VariableDeclaratorPartAfterIdentifier(
+#line  1543 "VBNET.ATG" 
+fieldDeclaration, name);
+	}
+
 	void ConstantDeclarator(
-#line  1521 "VBNET.ATG" 
+#line  1523 "VBNET.ATG" 
 List<VariableDeclaration> constantDeclaration) {
 
-#line  1523 "VBNET.ATG" 
+#line  1525 "VBNET.ATG" 
 		Expression expr = null;
 		TypeReference type = null;
 		string name = String.Empty;
 		
 		Identifier();
 
-#line  1527 "VBNET.ATG" 
+#line  1529 "VBNET.ATG" 
 		name = t.val; 
 		if (la.kind == 48) {
 			lexer.NextToken();
 			TypeName(
-#line  1528 "VBNET.ATG" 
+#line  1530 "VBNET.ATG" 
 out type);
 		}
 		Expect(11);
 		Expr(
-#line  1529 "VBNET.ATG" 
+#line  1531 "VBNET.ATG" 
 out expr);
 
-#line  1531 "VBNET.ATG" 
+#line  1533 "VBNET.ATG" 
 		VariableDeclaration f = new VariableDeclaration(name, expr);
 		f.TypeReference = type;
 		constantDeclaration.Add(f);
@@ -2831,10 +2893,10 @@ out expr);
 	}
 
 	void AccessorDecls(
-#line  1463 "VBNET.ATG" 
+#line  1465 "VBNET.ATG" 
 out PropertyGetRegion getBlock, out PropertySetRegion setBlock) {
 
-#line  1465 "VBNET.ATG" 
+#line  1467 "VBNET.ATG" 
 		List<AttributeSection> attributes = new List<AttributeSection>();
 		AttributeSection section;
 		getBlock = null;
@@ -2842,60 +2904,60 @@ out PropertyGetRegion getBlock, out PropertySetRegion setBlock) {
 		
 		while (la.kind == 27) {
 			AttributeSection(
-#line  1470 "VBNET.ATG" 
+#line  1472 "VBNET.ATG" 
 out section);
 
-#line  1470 "VBNET.ATG" 
+#line  1472 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
 		if (la.kind == 101) {
 			GetAccessorDecl(
-#line  1472 "VBNET.ATG" 
+#line  1474 "VBNET.ATG" 
 out getBlock, attributes);
 			if (la.kind == 27 || la.kind == 156) {
 
-#line  1474 "VBNET.ATG" 
+#line  1476 "VBNET.ATG" 
 				attributes = new List<AttributeSection>(); 
 				while (la.kind == 27) {
 					AttributeSection(
-#line  1475 "VBNET.ATG" 
+#line  1477 "VBNET.ATG" 
 out section);
 
-#line  1475 "VBNET.ATG" 
+#line  1477 "VBNET.ATG" 
 					attributes.Add(section); 
 				}
 				SetAccessorDecl(
-#line  1476 "VBNET.ATG" 
+#line  1478 "VBNET.ATG" 
 out setBlock, attributes);
 			}
 		} else if (la.kind == 156) {
 			SetAccessorDecl(
-#line  1479 "VBNET.ATG" 
+#line  1481 "VBNET.ATG" 
 out setBlock, attributes);
 			if (la.kind == 27 || la.kind == 101) {
 
-#line  1481 "VBNET.ATG" 
+#line  1483 "VBNET.ATG" 
 				attributes = new List<AttributeSection>(); 
 				while (la.kind == 27) {
 					AttributeSection(
-#line  1482 "VBNET.ATG" 
+#line  1484 "VBNET.ATG" 
 out section);
 
-#line  1482 "VBNET.ATG" 
+#line  1484 "VBNET.ATG" 
 					attributes.Add(section); 
 				}
 				GetAccessorDecl(
-#line  1483 "VBNET.ATG" 
+#line  1485 "VBNET.ATG" 
 out getBlock, attributes);
 			}
-		} else SynErr(231);
+		} else SynErr(232);
 	}
 
 	void EventAccessorDeclaration(
-#line  1426 "VBNET.ATG" 
+#line  1428 "VBNET.ATG" 
 out EventAddRemoveRegion eventAccessorDeclaration) {
 
-#line  1428 "VBNET.ATG" 
+#line  1430 "VBNET.ATG" 
 		Statement stmt = null;
 		List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 		AttributeSection section;
@@ -2904,10 +2966,10 @@ out EventAddRemoveRegion eventAccessorDeclaration) {
 		
 		while (la.kind == 27) {
 			AttributeSection(
-#line  1434 "VBNET.ATG" 
+#line  1436 "VBNET.ATG" 
 out section);
 
-#line  1434 "VBNET.ATG" 
+#line  1436 "VBNET.ATG" 
 			attributes.Add(section); 
 		}
 		if (la.kind == 42) {
@@ -2916,20 +2978,20 @@ out section);
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1436 "VBNET.ATG" 
+#line  1438 "VBNET.ATG" 
 p);
 				}
 				Expect(25);
 			}
 			Expect(1);
 			Block(
-#line  1437 "VBNET.ATG" 
+#line  1439 "VBNET.ATG" 
 out stmt);
 			Expect(88);
 			Expect(42);
 			Expect(1);
 
-#line  1439 "VBNET.ATG" 
+#line  1441 "VBNET.ATG" 
 			eventAccessorDeclaration = new EventAddRegion(attributes);
 			eventAccessorDeclaration.Block = (BlockStatement)stmt;
 			eventAccessorDeclaration.Parameters = p;
@@ -2940,20 +3002,20 @@ out stmt);
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1444 "VBNET.ATG" 
+#line  1446 "VBNET.ATG" 
 p);
 				}
 				Expect(25);
 			}
 			Expect(1);
 			Block(
-#line  1445 "VBNET.ATG" 
+#line  1447 "VBNET.ATG" 
 out stmt);
 			Expect(88);
 			Expect(152);
 			Expect(1);
 
-#line  1447 "VBNET.ATG" 
+#line  1449 "VBNET.ATG" 
 			eventAccessorDeclaration = new EventRemoveRegion(attributes);
 			eventAccessorDeclaration.Block = (BlockStatement)stmt;
 			eventAccessorDeclaration.Parameters = p;
@@ -2964,185 +3026,185 @@ out stmt);
 				lexer.NextToken();
 				if (StartOf(4)) {
 					FormalParameterList(
-#line  1452 "VBNET.ATG" 
+#line  1454 "VBNET.ATG" 
 p);
 				}
 				Expect(25);
 			}
 			Expect(1);
 			Block(
-#line  1453 "VBNET.ATG" 
+#line  1455 "VBNET.ATG" 
 out stmt);
 			Expect(88);
 			Expect(149);
 			Expect(1);
 
-#line  1455 "VBNET.ATG" 
+#line  1457 "VBNET.ATG" 
 			eventAccessorDeclaration = new EventRaiseRegion(attributes);
 			eventAccessorDeclaration.Block = (BlockStatement)stmt;
 			eventAccessorDeclaration.Parameters = p;
 			
-		} else SynErr(232);
+		} else SynErr(233);
 	}
 
 	void OverloadableOperator(
-#line  1368 "VBNET.ATG" 
+#line  1370 "VBNET.ATG" 
 out OverloadableOperatorType operatorType) {
 
-#line  1369 "VBNET.ATG" 
+#line  1371 "VBNET.ATG" 
 		operatorType = OverloadableOperatorType.None; 
 		switch (la.kind) {
 		case 14: {
 			lexer.NextToken();
 
-#line  1371 "VBNET.ATG" 
+#line  1373 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Add; 
 			break;
 		}
 		case 15: {
 			lexer.NextToken();
 
-#line  1373 "VBNET.ATG" 
+#line  1375 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Subtract; 
 			break;
 		}
 		case 16: {
 			lexer.NextToken();
 
-#line  1375 "VBNET.ATG" 
+#line  1377 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Multiply; 
 			break;
 		}
 		case 17: {
 			lexer.NextToken();
 
-#line  1377 "VBNET.ATG" 
+#line  1379 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Divide; 
 			break;
 		}
 		case 18: {
 			lexer.NextToken();
 
-#line  1379 "VBNET.ATG" 
+#line  1381 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.DivideInteger; 
 			break;
 		}
 		case 19: {
 			lexer.NextToken();
 
-#line  1381 "VBNET.ATG" 
+#line  1383 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Concat; 
 			break;
 		}
 		case 116: {
 			lexer.NextToken();
 
-#line  1383 "VBNET.ATG" 
+#line  1385 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Like; 
 			break;
 		}
 		case 120: {
 			lexer.NextToken();
 
-#line  1385 "VBNET.ATG" 
+#line  1387 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Modulus; 
 			break;
 		}
 		case 45: {
 			lexer.NextToken();
 
-#line  1387 "VBNET.ATG" 
+#line  1389 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.BitwiseAnd; 
 			break;
 		}
 		case 138: {
 			lexer.NextToken();
 
-#line  1389 "VBNET.ATG" 
+#line  1391 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.BitwiseOr; 
 			break;
 		}
 		case 185: {
 			lexer.NextToken();
 
-#line  1391 "VBNET.ATG" 
+#line  1393 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.ExclusiveOr; 
 			break;
 		}
 		case 20: {
 			lexer.NextToken();
 
-#line  1393 "VBNET.ATG" 
+#line  1395 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Power; 
 			break;
 		}
 		case 31: {
 			lexer.NextToken();
 
-#line  1395 "VBNET.ATG" 
+#line  1397 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.ShiftLeft; 
 			break;
 		}
 		case 32: {
 			lexer.NextToken();
 
-#line  1397 "VBNET.ATG" 
+#line  1399 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.ShiftRight; 
 			break;
 		}
 		case 11: {
 			lexer.NextToken();
 
-#line  1399 "VBNET.ATG" 
+#line  1401 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.Equality; 
 			break;
 		}
 		case 28: {
 			lexer.NextToken();
 
-#line  1401 "VBNET.ATG" 
+#line  1403 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.InEquality; 
 			break;
 		}
 		case 27: {
 			lexer.NextToken();
 
-#line  1403 "VBNET.ATG" 
+#line  1405 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.LessThan; 
 			break;
 		}
 		case 30: {
 			lexer.NextToken();
 
-#line  1405 "VBNET.ATG" 
+#line  1407 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.LessThanOrEqual; 
 			break;
 		}
 		case 26: {
 			lexer.NextToken();
 
-#line  1407 "VBNET.ATG" 
+#line  1409 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.GreaterThan; 
 			break;
 		}
 		case 29: {
 			lexer.NextToken();
 
-#line  1409 "VBNET.ATG" 
+#line  1411 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.GreaterThanOrEqual; 
 			break;
 		}
 		case 75: {
 			lexer.NextToken();
 
-#line  1411 "VBNET.ATG" 
+#line  1413 "VBNET.ATG" 
 			operatorType = OverloadableOperatorType.CType; 
 			break;
 		}
-		case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: {
+		case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: case 204: {
 			Identifier();
 
-#line  1415 "VBNET.ATG" 
+#line  1417 "VBNET.ATG" 
 			string opName = t.val; 
 			if (string.Equals(opName, "istrue", StringComparison.InvariantCultureIgnoreCase)) {
 				operatorType = OverloadableOperatorType.IsTrue;
@@ -3154,103 +3216,103 @@ out OverloadableOperatorType operatorType) {
 			
 			break;
 		}
-		default: SynErr(233); break;
+		default: SynErr(234); break;
 		}
 	}
 
 	void GetAccessorDecl(
-#line  1489 "VBNET.ATG" 
+#line  1491 "VBNET.ATG" 
 out PropertyGetRegion getBlock, List<AttributeSection> attributes) {
 
-#line  1490 "VBNET.ATG" 
+#line  1492 "VBNET.ATG" 
 		Statement stmt = null; 
 		Expect(101);
 
-#line  1492 "VBNET.ATG" 
+#line  1494 "VBNET.ATG" 
 		Point startLocation = t.Location; 
 		Expect(1);
 		Block(
-#line  1494 "VBNET.ATG" 
+#line  1496 "VBNET.ATG" 
 out stmt);
 
-#line  1495 "VBNET.ATG" 
+#line  1497 "VBNET.ATG" 
 		getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); 
 		Expect(88);
 		Expect(101);
 
-#line  1497 "VBNET.ATG" 
+#line  1499 "VBNET.ATG" 
 		getBlock.StartLocation = startLocation; getBlock.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void SetAccessorDecl(
-#line  1502 "VBNET.ATG" 
+#line  1504 "VBNET.ATG" 
 out PropertySetRegion setBlock, List<AttributeSection> attributes) {
 
-#line  1504 "VBNET.ATG" 
+#line  1506 "VBNET.ATG" 
 		Statement stmt = null; List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
 		
 		Expect(156);
 
-#line  1507 "VBNET.ATG" 
+#line  1509 "VBNET.ATG" 
 		Point startLocation = t.Location; 
 		if (la.kind == 24) {
 			lexer.NextToken();
 			if (StartOf(4)) {
 				FormalParameterList(
-#line  1508 "VBNET.ATG" 
+#line  1510 "VBNET.ATG" 
 p);
 			}
 			Expect(25);
 		}
 		Expect(1);
 		Block(
-#line  1510 "VBNET.ATG" 
+#line  1512 "VBNET.ATG" 
 out stmt);
 
-#line  1512 "VBNET.ATG" 
+#line  1514 "VBNET.ATG" 
 		setBlock = new PropertySetRegion((BlockStatement)stmt, attributes);
 		setBlock.Parameters = p;
 		
 		Expect(88);
 		Expect(156);
 
-#line  1516 "VBNET.ATG" 
+#line  1518 "VBNET.ATG" 
 		setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; 
 		Expect(1);
 	}
 
 	void ArrayInitializationModifier(
-#line  1588 "VBNET.ATG" 
+#line  1595 "VBNET.ATG" 
 out List<Expression> arrayModifiers) {
 
-#line  1590 "VBNET.ATG" 
+#line  1597 "VBNET.ATG" 
 		arrayModifiers = null;
 		
 		Expect(24);
 		InitializationRankList(
-#line  1592 "VBNET.ATG" 
+#line  1599 "VBNET.ATG" 
 out arrayModifiers);
 		Expect(25);
 	}
 
 	void ArrayNameModifier(
-#line  2136 "VBNET.ATG" 
+#line  2143 "VBNET.ATG" 
 out ArrayList arrayModifiers) {
 
-#line  2138 "VBNET.ATG" 
+#line  2145 "VBNET.ATG" 
 		arrayModifiers = null;
 		
 		ArrayTypeModifiers(
-#line  2140 "VBNET.ATG" 
+#line  2147 "VBNET.ATG" 
 out arrayModifiers);
 	}
 
 	void ObjectCreateExpression(
-#line  2018 "VBNET.ATG" 
+#line  2025 "VBNET.ATG" 
 out Expression oce) {
 
-#line  2020 "VBNET.ATG" 
+#line  2027 "VBNET.ATG" 
 		TypeReference type = null;
 		Expression initializer = null;
 		List<Expression> arguments = null;
@@ -3259,37 +3321,37 @@ out Expression oce) {
 		
 		Expect(127);
 		NonArrayTypeName(
-#line  2026 "VBNET.ATG" 
+#line  2033 "VBNET.ATG" 
 out type, false);
 		if (la.kind == 24) {
 			lexer.NextToken();
 			if (StartOf(20)) {
 				ArgumentList(
-#line  2027 "VBNET.ATG" 
+#line  2034 "VBNET.ATG" 
 out arguments);
 			}
 			Expect(25);
 		}
 		if (la.kind == 22 || 
-#line  2028 "VBNET.ATG" 
+#line  2035 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis) {
 			if (
-#line  2028 "VBNET.ATG" 
+#line  2035 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis) {
 				ArrayTypeModifiers(
-#line  2029 "VBNET.ATG" 
+#line  2036 "VBNET.ATG" 
 out dimensions);
 				ArrayInitializer(
-#line  2030 "VBNET.ATG" 
+#line  2037 "VBNET.ATG" 
 out initializer);
 			} else {
 				ArrayInitializer(
-#line  2031 "VBNET.ATG" 
+#line  2038 "VBNET.ATG" 
 out initializer);
 			}
 		}
 
-#line  2033 "VBNET.ATG" 
+#line  2040 "VBNET.ATG" 
 		if (initializer == null) {
 		oce = new ObjectCreateExpression(type, arguments);
 		} else {
@@ -3304,120 +3366,120 @@ out initializer);
 	}
 
 	void VariableInitializer(
-#line  1622 "VBNET.ATG" 
+#line  1629 "VBNET.ATG" 
 out Expression initializerExpression) {
 
-#line  1624 "VBNET.ATG" 
+#line  1631 "VBNET.ATG" 
 		initializerExpression = null;
 		
 		if (StartOf(21)) {
 			Expr(
-#line  1626 "VBNET.ATG" 
+#line  1633 "VBNET.ATG" 
 out initializerExpression);
 		} else if (la.kind == 22) {
 			ArrayInitializer(
-#line  1627 "VBNET.ATG" 
+#line  1634 "VBNET.ATG" 
 out initializerExpression);
-		} else SynErr(234);
+		} else SynErr(235);
 	}
 
 	void InitializationRankList(
-#line  1596 "VBNET.ATG" 
+#line  1603 "VBNET.ATG" 
 out List<Expression> rank) {
 
-#line  1598 "VBNET.ATG" 
+#line  1605 "VBNET.ATG" 
 		rank = new List<Expression>();
 		Expression expr = null;
 		
 		Expr(
-#line  1601 "VBNET.ATG" 
+#line  1608 "VBNET.ATG" 
 out expr);
 		if (la.kind == 172) {
 			lexer.NextToken();
 
-#line  1603 "VBNET.ATG" 
+#line  1610 "VBNET.ATG" 
 			if (!(expr is PrimitiveExpression) || (expr as PrimitiveExpression).StringValue != "0")
 			Error("lower bound of array must be zero");
 			
 			Expr(
-#line  1606 "VBNET.ATG" 
+#line  1613 "VBNET.ATG" 
 out expr);
 		}
 
-#line  1608 "VBNET.ATG" 
+#line  1615 "VBNET.ATG" 
 		if (expr != null) { rank.Add(expr); } 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			Expr(
-#line  1610 "VBNET.ATG" 
+#line  1617 "VBNET.ATG" 
 out expr);
 			if (la.kind == 172) {
 				lexer.NextToken();
 
-#line  1612 "VBNET.ATG" 
+#line  1619 "VBNET.ATG" 
 				if (!(expr is PrimitiveExpression) || (expr as PrimitiveExpression).StringValue != "0")
 				Error("lower bound of array must be zero");
 				
 				Expr(
-#line  1615 "VBNET.ATG" 
+#line  1622 "VBNET.ATG" 
 out expr);
 			}
 
-#line  1617 "VBNET.ATG" 
+#line  1624 "VBNET.ATG" 
 			if (expr != null) { rank.Add(expr); } 
 		}
 	}
 
 	void ArrayInitializer(
-#line  1631 "VBNET.ATG" 
+#line  1638 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1633 "VBNET.ATG" 
+#line  1640 "VBNET.ATG" 
 		Expression expr = null;
 		ArrayInitializerExpression initializer = new ArrayInitializerExpression();
 		
 		Expect(22);
 		if (StartOf(22)) {
 			VariableInitializer(
-#line  1638 "VBNET.ATG" 
+#line  1645 "VBNET.ATG" 
 out expr);
 
-#line  1640 "VBNET.ATG" 
+#line  1647 "VBNET.ATG" 
 			if (expr != null) { initializer.CreateExpressions.Add(expr); }
 			
 			while (
-#line  1643 "VBNET.ATG" 
+#line  1650 "VBNET.ATG" 
 NotFinalComma()) {
 				Expect(12);
 				VariableInitializer(
-#line  1643 "VBNET.ATG" 
+#line  1650 "VBNET.ATG" 
 out expr);
 
-#line  1644 "VBNET.ATG" 
+#line  1651 "VBNET.ATG" 
 				if (expr != null) { initializer.CreateExpressions.Add(expr); } 
 			}
 		}
 		Expect(23);
 
-#line  1647 "VBNET.ATG" 
+#line  1654 "VBNET.ATG" 
 		outExpr = initializer; 
 	}
 
 	void EventMemberSpecifier(
-#line  1717 "VBNET.ATG" 
+#line  1724 "VBNET.ATG" 
 out string name) {
 
-#line  1718 "VBNET.ATG" 
+#line  1725 "VBNET.ATG" 
 		string type; name = String.Empty; 
 		if (StartOf(12)) {
 			Identifier();
 
-#line  1719 "VBNET.ATG" 
+#line  1726 "VBNET.ATG" 
 			type = t.val; 
 			Expect(10);
 			Identifier();
 
-#line  1721 "VBNET.ATG" 
+#line  1728 "VBNET.ATG" 
 			name = type + "." + t.val; 
 		} else if (la.kind == 124) {
 			lexer.NextToken();
@@ -3425,140 +3487,140 @@ out string name) {
 			if (StartOf(12)) {
 				Identifier();
 
-#line  1724 "VBNET.ATG" 
+#line  1731 "VBNET.ATG" 
 				name = "MyBase." + t.val; 
 			} else if (la.kind == 92) {
 				lexer.NextToken();
 
-#line  1725 "VBNET.ATG" 
+#line  1732 "VBNET.ATG" 
 				name = "MyBase.Error"; 
-			} else SynErr(235);
-		} else SynErr(236);
+			} else SynErr(236);
+		} else SynErr(237);
 	}
 
 	void DisjunctionExpr(
-#line  1867 "VBNET.ATG" 
+#line  1874 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1869 "VBNET.ATG" 
+#line  1876 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ConjunctionExpr(
-#line  1872 "VBNET.ATG" 
+#line  1879 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 138 || la.kind == 139 || la.kind == 185) {
 			if (la.kind == 138) {
 				lexer.NextToken();
 
-#line  1875 "VBNET.ATG" 
+#line  1882 "VBNET.ATG" 
 				op = BinaryOperatorType.BitwiseOr; 
 			} else if (la.kind == 139) {
 				lexer.NextToken();
 
-#line  1876 "VBNET.ATG" 
+#line  1883 "VBNET.ATG" 
 				op = BinaryOperatorType.LogicalOr; 
 			} else {
 				lexer.NextToken();
 
-#line  1877 "VBNET.ATG" 
+#line  1884 "VBNET.ATG" 
 				op = BinaryOperatorType.ExclusiveOr; 
 			}
 			ConjunctionExpr(
-#line  1879 "VBNET.ATG" 
+#line  1886 "VBNET.ATG" 
 out expr);
 
-#line  1879 "VBNET.ATG" 
+#line  1886 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void AssignmentOperator(
-#line  1734 "VBNET.ATG" 
+#line  1741 "VBNET.ATG" 
 out AssignmentOperatorType op) {
 
-#line  1735 "VBNET.ATG" 
+#line  1742 "VBNET.ATG" 
 		op = AssignmentOperatorType.None; 
 		switch (la.kind) {
 		case 11: {
 			lexer.NextToken();
 
-#line  1736 "VBNET.ATG" 
+#line  1743 "VBNET.ATG" 
 			op = AssignmentOperatorType.Assign; 
 			break;
 		}
 		case 41: {
 			lexer.NextToken();
 
-#line  1737 "VBNET.ATG" 
+#line  1744 "VBNET.ATG" 
 			op = AssignmentOperatorType.ConcatString; 
 			break;
 		}
 		case 33: {
 			lexer.NextToken();
 
-#line  1738 "VBNET.ATG" 
+#line  1745 "VBNET.ATG" 
 			op = AssignmentOperatorType.Add; 
 			break;
 		}
 		case 35: {
 			lexer.NextToken();
 
-#line  1739 "VBNET.ATG" 
+#line  1746 "VBNET.ATG" 
 			op = AssignmentOperatorType.Subtract; 
 			break;
 		}
 		case 36: {
 			lexer.NextToken();
 
-#line  1740 "VBNET.ATG" 
+#line  1747 "VBNET.ATG" 
 			op = AssignmentOperatorType.Multiply; 
 			break;
 		}
 		case 37: {
 			lexer.NextToken();
 
-#line  1741 "VBNET.ATG" 
+#line  1748 "VBNET.ATG" 
 			op = AssignmentOperatorType.Divide; 
 			break;
 		}
 		case 38: {
 			lexer.NextToken();
 
-#line  1742 "VBNET.ATG" 
+#line  1749 "VBNET.ATG" 
 			op = AssignmentOperatorType.DivideInteger; 
 			break;
 		}
 		case 34: {
 			lexer.NextToken();
 
-#line  1743 "VBNET.ATG" 
+#line  1750 "VBNET.ATG" 
 			op = AssignmentOperatorType.Power; 
 			break;
 		}
 		case 39: {
 			lexer.NextToken();
 
-#line  1744 "VBNET.ATG" 
+#line  1751 "VBNET.ATG" 
 			op = AssignmentOperatorType.ShiftLeft; 
 			break;
 		}
 		case 40: {
 			lexer.NextToken();
 
-#line  1745 "VBNET.ATG" 
+#line  1752 "VBNET.ATG" 
 			op = AssignmentOperatorType.ShiftRight; 
 			break;
 		}
-		default: SynErr(237); break;
+		default: SynErr(238); break;
 		}
 	}
 
 	void SimpleExpr(
-#line  1749 "VBNET.ATG" 
+#line  1756 "VBNET.ATG" 
 out Expression pexpr) {
 
-#line  1751 "VBNET.ATG" 
+#line  1758 "VBNET.ATG" 
 		Expression expr;
 		TypeReference type = null;
 		string name = String.Empty;
@@ -3569,136 +3631,136 @@ out Expression pexpr) {
 			case 3: {
 				lexer.NextToken();
 
-#line  1759 "VBNET.ATG" 
+#line  1766 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 4: {
 				lexer.NextToken();
 
-#line  1760 "VBNET.ATG" 
+#line  1767 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 7: {
 				lexer.NextToken();
 
-#line  1761 "VBNET.ATG" 
+#line  1768 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 6: {
 				lexer.NextToken();
 
-#line  1762 "VBNET.ATG" 
+#line  1769 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 5: {
 				lexer.NextToken();
 
-#line  1763 "VBNET.ATG" 
+#line  1770 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 9: {
 				lexer.NextToken();
 
-#line  1764 "VBNET.ATG" 
+#line  1771 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 8: {
 				lexer.NextToken();
 
-#line  1765 "VBNET.ATG" 
+#line  1772 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(t.literalValue, t.val);  
 				break;
 			}
 			case 173: {
 				lexer.NextToken();
 
-#line  1767 "VBNET.ATG" 
+#line  1774 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(true, "true");  
 				break;
 			}
 			case 96: {
 				lexer.NextToken();
 
-#line  1768 "VBNET.ATG" 
+#line  1775 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(false, "false"); 
 				break;
 			}
 			case 130: {
 				lexer.NextToken();
 
-#line  1769 "VBNET.ATG" 
+#line  1776 "VBNET.ATG" 
 				pexpr = new PrimitiveExpression(null, "null");  
 				break;
 			}
 			case 24: {
 				lexer.NextToken();
 				Expr(
-#line  1770 "VBNET.ATG" 
+#line  1777 "VBNET.ATG" 
 out expr);
 				Expect(25);
 
-#line  1770 "VBNET.ATG" 
+#line  1777 "VBNET.ATG" 
 				pexpr = new ParenthesizedExpression(expr); 
 				break;
 			}
-			case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: {
+			case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: case 204: {
 				Identifier();
 
-#line  1771 "VBNET.ATG" 
+#line  1778 "VBNET.ATG" 
 				pexpr = new IdentifierExpression(t.val); 
 				break;
 			}
 			case 52: case 54: case 65: case 76: case 77: case 84: case 111: case 117: case 159: case 160: case 165: case 190: case 191: case 192: case 193: {
 
-#line  1772 "VBNET.ATG" 
+#line  1779 "VBNET.ATG" 
 				string val = String.Empty; 
 				PrimitiveTypeName(
-#line  1773 "VBNET.ATG" 
+#line  1780 "VBNET.ATG" 
 out val);
 				Expect(10);
 
-#line  1774 "VBNET.ATG" 
+#line  1781 "VBNET.ATG" 
 				t.val = ""; 
 				Identifier();
 
-#line  1774 "VBNET.ATG" 
+#line  1781 "VBNET.ATG" 
 				pexpr = new FieldReferenceExpression(new TypeReferenceExpression(val), t.val); 
 				break;
 			}
 			case 119: {
 				lexer.NextToken();
 
-#line  1775 "VBNET.ATG" 
+#line  1782 "VBNET.ATG" 
 				pexpr = new ThisReferenceExpression(); 
 				break;
 			}
 			case 124: case 125: {
 
-#line  1776 "VBNET.ATG" 
+#line  1783 "VBNET.ATG" 
 				Expression retExpr = null; 
 				if (la.kind == 124) {
 					lexer.NextToken();
 
-#line  1777 "VBNET.ATG" 
+#line  1784 "VBNET.ATG" 
 					retExpr = new BaseReferenceExpression(); 
 				} else if (la.kind == 125) {
 					lexer.NextToken();
 
-#line  1778 "VBNET.ATG" 
+#line  1785 "VBNET.ATG" 
 					retExpr = new ClassReferenceExpression(); 
-				} else SynErr(238);
+				} else SynErr(239);
 				Expect(10);
 				IdentifierOrKeyword(
-#line  1780 "VBNET.ATG" 
+#line  1787 "VBNET.ATG" 
 out name);
 
-#line  1780 "VBNET.ATG" 
+#line  1787 "VBNET.ATG" 
 				pexpr = new FieldReferenceExpression(retExpr, name); 
 				break;
 			}
@@ -3707,77 +3769,77 @@ out name);
 				Expect(10);
 				Identifier();
 
-#line  1782 "VBNET.ATG" 
+#line  1789 "VBNET.ATG" 
 				type = new TypeReference(t.val ?? ""); 
 
-#line  1784 "VBNET.ATG" 
+#line  1791 "VBNET.ATG" 
 				type.IsGlobal = true; 
 
-#line  1785 "VBNET.ATG" 
+#line  1792 "VBNET.ATG" 
 				pexpr = new TypeReferenceExpression(type); 
 				break;
 			}
 			case 127: {
 				ObjectCreateExpression(
-#line  1786 "VBNET.ATG" 
+#line  1793 "VBNET.ATG" 
 out expr);
 
-#line  1786 "VBNET.ATG" 
+#line  1793 "VBNET.ATG" 
 				pexpr = expr; 
 				break;
 			}
 			case 75: case 82: case 199: {
 
-#line  1788 "VBNET.ATG" 
+#line  1795 "VBNET.ATG" 
 				CastType castType = CastType.Cast; 
 				if (la.kind == 82) {
 					lexer.NextToken();
 				} else if (la.kind == 75) {
 					lexer.NextToken();
 
-#line  1790 "VBNET.ATG" 
+#line  1797 "VBNET.ATG" 
 					castType = CastType.Conversion; 
 				} else if (la.kind == 199) {
 					lexer.NextToken();
 
-#line  1791 "VBNET.ATG" 
+#line  1798 "VBNET.ATG" 
 					castType = CastType.TryCast; 
-				} else SynErr(239);
+				} else SynErr(240);
 				Expect(24);
 				Expr(
-#line  1793 "VBNET.ATG" 
+#line  1800 "VBNET.ATG" 
 out expr);
 				Expect(12);
 				TypeName(
-#line  1793 "VBNET.ATG" 
+#line  1800 "VBNET.ATG" 
 out type);
 				Expect(25);
 
-#line  1794 "VBNET.ATG" 
+#line  1801 "VBNET.ATG" 
 				pexpr = new CastExpression(type, expr, castType); 
 				break;
 			}
 			case 59: case 60: case 61: case 62: case 63: case 64: case 66: case 68: case 69: case 72: case 73: case 74: case 194: case 195: case 196: case 197: {
 				CastTarget(
-#line  1795 "VBNET.ATG" 
+#line  1802 "VBNET.ATG" 
 out type);
 				Expect(24);
 				Expr(
-#line  1795 "VBNET.ATG" 
+#line  1802 "VBNET.ATG" 
 out expr);
 				Expect(25);
 
-#line  1795 "VBNET.ATG" 
+#line  1802 "VBNET.ATG" 
 				pexpr = new CastExpression(type, expr, CastType.PrimitiveConversion); 
 				break;
 			}
 			case 43: {
 				lexer.NextToken();
 				Expr(
-#line  1796 "VBNET.ATG" 
+#line  1803 "VBNET.ATG" 
 out expr);
 
-#line  1796 "VBNET.ATG" 
+#line  1803 "VBNET.ATG" 
 				pexpr = new AddressOfExpression(expr); 
 				break;
 			}
@@ -3785,312 +3847,312 @@ out expr);
 				lexer.NextToken();
 				Expect(24);
 				GetTypeTypeName(
-#line  1797 "VBNET.ATG" 
+#line  1804 "VBNET.ATG" 
 out type);
 				Expect(25);
 
-#line  1797 "VBNET.ATG" 
+#line  1804 "VBNET.ATG" 
 				pexpr = new TypeOfExpression(type); 
 				break;
 			}
 			case 175: {
 				lexer.NextToken();
 				SimpleExpr(
-#line  1798 "VBNET.ATG" 
+#line  1805 "VBNET.ATG" 
 out expr);
 				Expect(113);
 				TypeName(
-#line  1798 "VBNET.ATG" 
+#line  1805 "VBNET.ATG" 
 out type);
 
-#line  1798 "VBNET.ATG" 
+#line  1805 "VBNET.ATG" 
 				pexpr = new TypeOfIsExpression(expr, type); 
 				break;
 			}
 			}
 			while (la.kind == 10 || la.kind == 24) {
 				InvocationOrMemberReferenceExpression(
-#line  1800 "VBNET.ATG" 
+#line  1807 "VBNET.ATG" 
 ref pexpr);
 			}
 		} else if (la.kind == 10) {
 			lexer.NextToken();
 			IdentifierOrKeyword(
-#line  1803 "VBNET.ATG" 
+#line  1810 "VBNET.ATG" 
 out name);
 
-#line  1803 "VBNET.ATG" 
+#line  1810 "VBNET.ATG" 
 			pexpr = new FieldReferenceExpression(pexpr, name);
 			while (la.kind == 10 || la.kind == 24) {
 				InvocationOrMemberReferenceExpression(
-#line  1804 "VBNET.ATG" 
+#line  1811 "VBNET.ATG" 
 ref pexpr);
 			}
-		} else SynErr(240);
+		} else SynErr(241);
 	}
 
 	void PrimitiveTypeName(
-#line  2931 "VBNET.ATG" 
+#line  2953 "VBNET.ATG" 
 out string type) {
 
-#line  2932 "VBNET.ATG" 
+#line  2954 "VBNET.ATG" 
 		type = String.Empty; 
 		switch (la.kind) {
 		case 52: {
 			lexer.NextToken();
 
-#line  2933 "VBNET.ATG" 
+#line  2955 "VBNET.ATG" 
 			type = "Boolean"; 
 			break;
 		}
 		case 76: {
 			lexer.NextToken();
 
-#line  2934 "VBNET.ATG" 
+#line  2956 "VBNET.ATG" 
 			type = "Date"; 
 			break;
 		}
 		case 65: {
 			lexer.NextToken();
 
-#line  2935 "VBNET.ATG" 
+#line  2957 "VBNET.ATG" 
 			type = "Char"; 
 			break;
 		}
 		case 165: {
 			lexer.NextToken();
 
-#line  2936 "VBNET.ATG" 
+#line  2958 "VBNET.ATG" 
 			type = "String"; 
 			break;
 		}
 		case 77: {
 			lexer.NextToken();
 
-#line  2937 "VBNET.ATG" 
+#line  2959 "VBNET.ATG" 
 			type = "Decimal"; 
 			break;
 		}
 		case 54: {
 			lexer.NextToken();
 
-#line  2938 "VBNET.ATG" 
+#line  2960 "VBNET.ATG" 
 			type = "Byte"; 
 			break;
 		}
 		case 159: {
 			lexer.NextToken();
 
-#line  2939 "VBNET.ATG" 
+#line  2961 "VBNET.ATG" 
 			type = "Short"; 
 			break;
 		}
 		case 111: {
 			lexer.NextToken();
 
-#line  2940 "VBNET.ATG" 
+#line  2962 "VBNET.ATG" 
 			type = "Integer"; 
 			break;
 		}
 		case 117: {
 			lexer.NextToken();
 
-#line  2941 "VBNET.ATG" 
+#line  2963 "VBNET.ATG" 
 			type = "Long"; 
 			break;
 		}
 		case 160: {
 			lexer.NextToken();
 
-#line  2942 "VBNET.ATG" 
+#line  2964 "VBNET.ATG" 
 			type = "Single"; 
 			break;
 		}
 		case 84: {
 			lexer.NextToken();
 
-#line  2943 "VBNET.ATG" 
+#line  2965 "VBNET.ATG" 
 			type = "Double"; 
 			break;
 		}
 		case 191: {
 			lexer.NextToken();
 
-#line  2944 "VBNET.ATG" 
+#line  2966 "VBNET.ATG" 
 			type = "UInteger"; 
 			break;
 		}
 		case 192: {
 			lexer.NextToken();
 
-#line  2945 "VBNET.ATG" 
+#line  2967 "VBNET.ATG" 
 			type = "ULong"; 
 			break;
 		}
 		case 193: {
 			lexer.NextToken();
 
-#line  2946 "VBNET.ATG" 
+#line  2968 "VBNET.ATG" 
 			type = "UShort"; 
 			break;
 		}
 		case 190: {
 			lexer.NextToken();
 
-#line  2947 "VBNET.ATG" 
+#line  2969 "VBNET.ATG" 
 			type = "SByte"; 
 			break;
 		}
-		default: SynErr(241); break;
+		default: SynErr(242); break;
 		}
 	}
 
 	void IdentifierOrKeyword(
-#line  2924 "VBNET.ATG" 
+#line  2946 "VBNET.ATG" 
 out string name) {
 
-#line  2926 "VBNET.ATG" 
+#line  2948 "VBNET.ATG" 
 		lexer.NextToken(); name = t.val;  
 	}
 
 	void CastTarget(
-#line  1845 "VBNET.ATG" 
+#line  1852 "VBNET.ATG" 
 out TypeReference type) {
 
-#line  1847 "VBNET.ATG" 
+#line  1854 "VBNET.ATG" 
 		type = null;
 		
 		switch (la.kind) {
 		case 59: {
 			lexer.NextToken();
 
-#line  1849 "VBNET.ATG" 
+#line  1856 "VBNET.ATG" 
 			type = new TypeReference("System.Boolean"); 
 			break;
 		}
 		case 60: {
 			lexer.NextToken();
 
-#line  1850 "VBNET.ATG" 
+#line  1857 "VBNET.ATG" 
 			type = new TypeReference("System.Byte"); 
 			break;
 		}
 		case 194: {
 			lexer.NextToken();
 
-#line  1851 "VBNET.ATG" 
+#line  1858 "VBNET.ATG" 
 			type = new TypeReference("System.SByte"); 
 			break;
 		}
 		case 61: {
 			lexer.NextToken();
 
-#line  1852 "VBNET.ATG" 
+#line  1859 "VBNET.ATG" 
 			type = new TypeReference("System.Char"); 
 			break;
 		}
 		case 62: {
 			lexer.NextToken();
 
-#line  1853 "VBNET.ATG" 
+#line  1860 "VBNET.ATG" 
 			type = new TypeReference("System.DateTime"); 
 			break;
 		}
 		case 64: {
 			lexer.NextToken();
 
-#line  1854 "VBNET.ATG" 
+#line  1861 "VBNET.ATG" 
 			type = new TypeReference("System.Decimal"); 
 			break;
 		}
 		case 63: {
 			lexer.NextToken();
 
-#line  1855 "VBNET.ATG" 
+#line  1862 "VBNET.ATG" 
 			type = new TypeReference("System.Double"); 
 			break;
 		}
 		case 72: {
 			lexer.NextToken();
 
-#line  1856 "VBNET.ATG" 
+#line  1863 "VBNET.ATG" 
 			type = new TypeReference("System.Int16"); 
 			break;
 		}
 		case 66: {
 			lexer.NextToken();
 
-#line  1857 "VBNET.ATG" 
+#line  1864 "VBNET.ATG" 
 			type = new TypeReference("System.Int32"); 
 			break;
 		}
 		case 68: {
 			lexer.NextToken();
 
-#line  1858 "VBNET.ATG" 
+#line  1865 "VBNET.ATG" 
 			type = new TypeReference("System.Int64"); 
 			break;
 		}
 		case 195: {
 			lexer.NextToken();
 
-#line  1859 "VBNET.ATG" 
+#line  1866 "VBNET.ATG" 
 			type = new TypeReference("System.UInt16"); 
 			break;
 		}
 		case 196: {
 			lexer.NextToken();
 
-#line  1860 "VBNET.ATG" 
+#line  1867 "VBNET.ATG" 
 			type = new TypeReference("System.UInt32"); 
 			break;
 		}
 		case 197: {
 			lexer.NextToken();
 
-#line  1861 "VBNET.ATG" 
+#line  1868 "VBNET.ATG" 
 			type = new TypeReference("System.UInt64"); 
 			break;
 		}
 		case 69: {
 			lexer.NextToken();
 
-#line  1862 "VBNET.ATG" 
+#line  1869 "VBNET.ATG" 
 			type = new TypeReference("System.Object"); 
 			break;
 		}
 		case 73: {
 			lexer.NextToken();
 
-#line  1863 "VBNET.ATG" 
+#line  1870 "VBNET.ATG" 
 			type = new TypeReference("System.Single"); 
 			break;
 		}
 		case 74: {
 			lexer.NextToken();
 
-#line  1864 "VBNET.ATG" 
+#line  1871 "VBNET.ATG" 
 			type = new TypeReference("System.String"); 
 			break;
 		}
-		default: SynErr(242); break;
+		default: SynErr(243); break;
 		}
 	}
 
 	void GetTypeTypeName(
-#line  2088 "VBNET.ATG" 
+#line  2095 "VBNET.ATG" 
 out TypeReference typeref) {
 
-#line  2089 "VBNET.ATG" 
+#line  2096 "VBNET.ATG" 
 		ArrayList rank = null; 
 		NonArrayTypeName(
-#line  2091 "VBNET.ATG" 
+#line  2098 "VBNET.ATG" 
 out typeref, true);
 		ArrayTypeModifiers(
-#line  2092 "VBNET.ATG" 
+#line  2099 "VBNET.ATG" 
 out rank);
 
-#line  2093 "VBNET.ATG" 
+#line  2100 "VBNET.ATG" 
 		if (rank != null && typeref != null) {
 		typeref.RankSpecifier = (int[])rank.ToArray(typeof(int));
 		}
@@ -4098,53 +4160,53 @@ out rank);
 	}
 
 	void InvocationOrMemberReferenceExpression(
-#line  1808 "VBNET.ATG" 
+#line  1815 "VBNET.ATG" 
 ref Expression pexpr) {
 
-#line  1809 "VBNET.ATG" 
+#line  1816 "VBNET.ATG" 
 		string name; 
 		if (la.kind == 10) {
 			lexer.NextToken();
 			IdentifierOrKeyword(
-#line  1811 "VBNET.ATG" 
+#line  1818 "VBNET.ATG" 
 out name);
 
-#line  1811 "VBNET.ATG" 
+#line  1818 "VBNET.ATG" 
 			pexpr = new FieldReferenceExpression(pexpr, name); 
 		} else if (la.kind == 24) {
 			InvocationExpression(
-#line  1812 "VBNET.ATG" 
+#line  1819 "VBNET.ATG" 
 ref pexpr);
-		} else SynErr(243);
+		} else SynErr(244);
 	}
 
 	void InvocationExpression(
-#line  1815 "VBNET.ATG" 
+#line  1822 "VBNET.ATG" 
 ref Expression pexpr) {
 
-#line  1816 "VBNET.ATG" 
+#line  1823 "VBNET.ATG" 
 		List<TypeReference> typeParameters = new List<TypeReference>();
 		List<Expression> parameters = null;
 		TypeReference type; 
 		Expect(24);
 
-#line  1820 "VBNET.ATG" 
+#line  1827 "VBNET.ATG" 
 		Point start = t.Location; 
 		if (la.kind == 200) {
 			lexer.NextToken();
 			TypeName(
-#line  1822 "VBNET.ATG" 
+#line  1829 "VBNET.ATG" 
 out type);
 
-#line  1822 "VBNET.ATG" 
+#line  1829 "VBNET.ATG" 
 			if (type != null) typeParameters.Add(type); 
 			while (la.kind == 12) {
 				lexer.NextToken();
 				TypeName(
-#line  1825 "VBNET.ATG" 
+#line  1832 "VBNET.ATG" 
 out type);
 
-#line  1825 "VBNET.ATG" 
+#line  1832 "VBNET.ATG" 
 				if (type != null) typeParameters.Add(type); 
 			}
 			Expect(25);
@@ -4152,360 +4214,360 @@ out type);
 				lexer.NextToken();
 				Identifier();
 
-#line  1830 "VBNET.ATG" 
+#line  1837 "VBNET.ATG" 
 				pexpr = new FieldReferenceExpression(GetTypeReferenceExpression(pexpr, typeParameters), t.val); 
 			} else if (la.kind == 24) {
 				lexer.NextToken();
 				ArgumentList(
-#line  1832 "VBNET.ATG" 
+#line  1839 "VBNET.ATG" 
 out parameters);
 				Expect(25);
 
-#line  1834 "VBNET.ATG" 
+#line  1841 "VBNET.ATG" 
 				pexpr = new InvocationExpression(pexpr, parameters, typeParameters); 
-			} else SynErr(244);
+			} else SynErr(245);
 		} else if (StartOf(20)) {
 			ArgumentList(
-#line  1836 "VBNET.ATG" 
+#line  1843 "VBNET.ATG" 
 out parameters);
 			Expect(25);
 
-#line  1838 "VBNET.ATG" 
+#line  1845 "VBNET.ATG" 
 			pexpr = new InvocationExpression(pexpr, parameters, typeParameters); 
-		} else SynErr(245);
+		} else SynErr(246);
 
-#line  1840 "VBNET.ATG" 
+#line  1847 "VBNET.ATG" 
 		pexpr.StartLocation = start; pexpr.EndLocation = t.Location; 
 	}
 
 	void ArgumentList(
-#line  2047 "VBNET.ATG" 
+#line  2054 "VBNET.ATG" 
 out List<Expression> arguments) {
 
-#line  2049 "VBNET.ATG" 
+#line  2056 "VBNET.ATG" 
 		arguments = new List<Expression>();
 		Expression expr = null;
 		
 		if (StartOf(21)) {
 			Argument(
-#line  2053 "VBNET.ATG" 
+#line  2060 "VBNET.ATG" 
 out expr);
 
-#line  2053 "VBNET.ATG" 
+#line  2060 "VBNET.ATG" 
 			if (expr != null) { arguments.Add(expr); } 
 			while (la.kind == 12) {
 				lexer.NextToken();
 				Argument(
-#line  2056 "VBNET.ATG" 
+#line  2063 "VBNET.ATG" 
 out expr);
 
-#line  2056 "VBNET.ATG" 
+#line  2063 "VBNET.ATG" 
 				if (expr != null) { arguments.Add(expr); } 
 			}
 		}
 	}
 
 	void ConjunctionExpr(
-#line  1883 "VBNET.ATG" 
+#line  1890 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1885 "VBNET.ATG" 
+#line  1892 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		NotExpr(
-#line  1888 "VBNET.ATG" 
+#line  1895 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 45 || la.kind == 46) {
 			if (la.kind == 45) {
 				lexer.NextToken();
 
-#line  1891 "VBNET.ATG" 
+#line  1898 "VBNET.ATG" 
 				op = BinaryOperatorType.BitwiseAnd; 
 			} else {
 				lexer.NextToken();
 
-#line  1892 "VBNET.ATG" 
+#line  1899 "VBNET.ATG" 
 				op = BinaryOperatorType.LogicalAnd; 
 			}
 			NotExpr(
-#line  1894 "VBNET.ATG" 
+#line  1901 "VBNET.ATG" 
 out expr);
 
-#line  1894 "VBNET.ATG" 
+#line  1901 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void NotExpr(
-#line  1898 "VBNET.ATG" 
+#line  1905 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1899 "VBNET.ATG" 
+#line  1906 "VBNET.ATG" 
 		UnaryOperatorType uop = UnaryOperatorType.None; 
 		while (la.kind == 129) {
 			lexer.NextToken();
 
-#line  1900 "VBNET.ATG" 
+#line  1907 "VBNET.ATG" 
 			uop = UnaryOperatorType.Not; 
 		}
 		ComparisonExpr(
-#line  1901 "VBNET.ATG" 
+#line  1908 "VBNET.ATG" 
 out outExpr);
 
-#line  1902 "VBNET.ATG" 
+#line  1909 "VBNET.ATG" 
 		if (uop != UnaryOperatorType.None)
 		outExpr = new UnaryOperatorExpression(outExpr, uop);
 		
 	}
 
 	void ComparisonExpr(
-#line  1907 "VBNET.ATG" 
+#line  1914 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1909 "VBNET.ATG" 
+#line  1916 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ShiftExpr(
-#line  1912 "VBNET.ATG" 
+#line  1919 "VBNET.ATG" 
 out outExpr);
 		while (StartOf(24)) {
 			switch (la.kind) {
 			case 27: {
 				lexer.NextToken();
 
-#line  1915 "VBNET.ATG" 
+#line  1922 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThan; 
 				break;
 			}
 			case 26: {
 				lexer.NextToken();
 
-#line  1916 "VBNET.ATG" 
+#line  1923 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThan; 
 				break;
 			}
 			case 30: {
 				lexer.NextToken();
 
-#line  1917 "VBNET.ATG" 
+#line  1924 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThanOrEqual; 
 				break;
 			}
 			case 29: {
 				lexer.NextToken();
 
-#line  1918 "VBNET.ATG" 
+#line  1925 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThanOrEqual; 
 				break;
 			}
 			case 28: {
 				lexer.NextToken();
 
-#line  1919 "VBNET.ATG" 
+#line  1926 "VBNET.ATG" 
 				op = BinaryOperatorType.InEquality; 
 				break;
 			}
 			case 11: {
 				lexer.NextToken();
 
-#line  1920 "VBNET.ATG" 
+#line  1927 "VBNET.ATG" 
 				op = BinaryOperatorType.Equality; 
 				break;
 			}
 			case 116: {
 				lexer.NextToken();
 
-#line  1921 "VBNET.ATG" 
+#line  1928 "VBNET.ATG" 
 				op = BinaryOperatorType.Like; 
 				break;
 			}
 			case 113: {
 				lexer.NextToken();
 
-#line  1922 "VBNET.ATG" 
+#line  1929 "VBNET.ATG" 
 				op = BinaryOperatorType.ReferenceEquality; 
 				break;
 			}
 			case 189: {
 				lexer.NextToken();
 
-#line  1923 "VBNET.ATG" 
+#line  1930 "VBNET.ATG" 
 				op = BinaryOperatorType.ReferenceInequality; 
 				break;
 			}
 			}
 			ShiftExpr(
-#line  1925 "VBNET.ATG" 
+#line  1932 "VBNET.ATG" 
 out expr);
 
-#line  1925 "VBNET.ATG" 
+#line  1932 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void ShiftExpr(
-#line  1929 "VBNET.ATG" 
+#line  1936 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1931 "VBNET.ATG" 
+#line  1938 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ConcatenationExpr(
-#line  1934 "VBNET.ATG" 
+#line  1941 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 31 || la.kind == 32) {
 			if (la.kind == 31) {
 				lexer.NextToken();
 
-#line  1937 "VBNET.ATG" 
+#line  1944 "VBNET.ATG" 
 				op = BinaryOperatorType.ShiftLeft; 
 			} else {
 				lexer.NextToken();
 
-#line  1938 "VBNET.ATG" 
+#line  1945 "VBNET.ATG" 
 				op = BinaryOperatorType.ShiftRight; 
 			}
 			ConcatenationExpr(
-#line  1940 "VBNET.ATG" 
+#line  1947 "VBNET.ATG" 
 out expr);
 
-#line  1940 "VBNET.ATG" 
+#line  1947 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void ConcatenationExpr(
-#line  1944 "VBNET.ATG" 
+#line  1951 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1945 "VBNET.ATG" 
+#line  1952 "VBNET.ATG" 
 		Expression expr; 
 		AdditiveExpr(
-#line  1947 "VBNET.ATG" 
+#line  1954 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 19) {
 			lexer.NextToken();
 			AdditiveExpr(
-#line  1947 "VBNET.ATG" 
+#line  1954 "VBNET.ATG" 
 out expr);
 
-#line  1947 "VBNET.ATG" 
+#line  1954 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Concat, expr);  
 		}
 	}
 
 	void AdditiveExpr(
-#line  1950 "VBNET.ATG" 
+#line  1957 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1952 "VBNET.ATG" 
+#line  1959 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		ModuloExpr(
-#line  1955 "VBNET.ATG" 
+#line  1962 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 14 || la.kind == 15) {
 			if (la.kind == 14) {
 				lexer.NextToken();
 
-#line  1958 "VBNET.ATG" 
+#line  1965 "VBNET.ATG" 
 				op = BinaryOperatorType.Add; 
 			} else {
 				lexer.NextToken();
 
-#line  1959 "VBNET.ATG" 
+#line  1966 "VBNET.ATG" 
 				op = BinaryOperatorType.Subtract; 
 			}
 			ModuloExpr(
-#line  1961 "VBNET.ATG" 
+#line  1968 "VBNET.ATG" 
 out expr);
 
-#line  1961 "VBNET.ATG" 
+#line  1968 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr);  
 		}
 	}
 
 	void ModuloExpr(
-#line  1965 "VBNET.ATG" 
+#line  1972 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1966 "VBNET.ATG" 
+#line  1973 "VBNET.ATG" 
 		Expression expr; 
 		IntegerDivisionExpr(
-#line  1968 "VBNET.ATG" 
+#line  1975 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 120) {
 			lexer.NextToken();
 			IntegerDivisionExpr(
-#line  1968 "VBNET.ATG" 
+#line  1975 "VBNET.ATG" 
 out expr);
 
-#line  1968 "VBNET.ATG" 
+#line  1975 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Modulus, expr);  
 		}
 	}
 
 	void IntegerDivisionExpr(
-#line  1971 "VBNET.ATG" 
+#line  1978 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1972 "VBNET.ATG" 
+#line  1979 "VBNET.ATG" 
 		Expression expr; 
 		MultiplicativeExpr(
-#line  1974 "VBNET.ATG" 
+#line  1981 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 18) {
 			lexer.NextToken();
 			MultiplicativeExpr(
-#line  1974 "VBNET.ATG" 
+#line  1981 "VBNET.ATG" 
 out expr);
 
-#line  1974 "VBNET.ATG" 
+#line  1981 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.DivideInteger, expr);  
 		}
 	}
 
 	void MultiplicativeExpr(
-#line  1977 "VBNET.ATG" 
+#line  1984 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  1979 "VBNET.ATG" 
+#line  1986 "VBNET.ATG" 
 		Expression expr;
 		BinaryOperatorType op = BinaryOperatorType.None;
 		
 		UnaryExpr(
-#line  1982 "VBNET.ATG" 
+#line  1989 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 16 || la.kind == 17) {
 			if (la.kind == 16) {
 				lexer.NextToken();
 
-#line  1985 "VBNET.ATG" 
+#line  1992 "VBNET.ATG" 
 				op = BinaryOperatorType.Multiply; 
 			} else {
 				lexer.NextToken();
 
-#line  1986 "VBNET.ATG" 
+#line  1993 "VBNET.ATG" 
 				op = BinaryOperatorType.Divide; 
 			}
 			UnaryExpr(
-#line  1988 "VBNET.ATG" 
+#line  1995 "VBNET.ATG" 
 out expr);
 
-#line  1988 "VBNET.ATG" 
+#line  1995 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, op, expr); 
 		}
 	}
 
 	void UnaryExpr(
-#line  1992 "VBNET.ATG" 
+#line  1999 "VBNET.ATG" 
 out Expression uExpr) {
 
-#line  1994 "VBNET.ATG" 
+#line  2001 "VBNET.ATG" 
 		Expression expr;
 		UnaryOperatorType uop = UnaryOperatorType.None;
 		bool isUOp = false;
@@ -4514,25 +4576,25 @@ out Expression uExpr) {
 			if (la.kind == 14) {
 				lexer.NextToken();
 
-#line  1998 "VBNET.ATG" 
+#line  2005 "VBNET.ATG" 
 				uop = UnaryOperatorType.Plus; isUOp = true; 
 			} else if (la.kind == 15) {
 				lexer.NextToken();
 
-#line  1999 "VBNET.ATG" 
+#line  2006 "VBNET.ATG" 
 				uop = UnaryOperatorType.Minus; isUOp = true; 
 			} else {
 				lexer.NextToken();
 
-#line  2000 "VBNET.ATG" 
+#line  2007 "VBNET.ATG" 
 				uop = UnaryOperatorType.Star;  isUOp = true;
 			}
 		}
 		ExponentiationExpr(
-#line  2002 "VBNET.ATG" 
+#line  2009 "VBNET.ATG" 
 out expr);
 
-#line  2004 "VBNET.ATG" 
+#line  2011 "VBNET.ATG" 
 		if (isUOp) {
 		uExpr = new UnaryOperatorExpression(expr, uop);
 		} else {
@@ -4542,50 +4604,50 @@ out expr);
 	}
 
 	void ExponentiationExpr(
-#line  2012 "VBNET.ATG" 
+#line  2019 "VBNET.ATG" 
 out Expression outExpr) {
 
-#line  2013 "VBNET.ATG" 
+#line  2020 "VBNET.ATG" 
 		Expression expr; 
 		SimpleExpr(
-#line  2015 "VBNET.ATG" 
+#line  2022 "VBNET.ATG" 
 out outExpr);
 		while (la.kind == 20) {
 			lexer.NextToken();
 			SimpleExpr(
-#line  2015 "VBNET.ATG" 
+#line  2022 "VBNET.ATG" 
 out expr);
 
-#line  2015 "VBNET.ATG" 
+#line  2022 "VBNET.ATG" 
 			outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Power, expr);  
 		}
 	}
 
 	void ArrayTypeModifiers(
-#line  2145 "VBNET.ATG" 
+#line  2152 "VBNET.ATG" 
 out ArrayList arrayModifiers) {
 
-#line  2147 "VBNET.ATG" 
+#line  2154 "VBNET.ATG" 
 		arrayModifiers = new ArrayList();
 		int i = 0;
 		
 		while (
-#line  2150 "VBNET.ATG" 
+#line  2157 "VBNET.ATG" 
 IsDims()) {
 			Expect(24);
 			if (la.kind == 12 || la.kind == 25) {
 				RankList(
-#line  2152 "VBNET.ATG" 
+#line  2159 "VBNET.ATG" 
 out i);
 			}
 
-#line  2154 "VBNET.ATG" 
+#line  2161 "VBNET.ATG" 
 			arrayModifiers.Add(i);
 			
 			Expect(25);
 		}
 
-#line  2159 "VBNET.ATG" 
+#line  2166 "VBNET.ATG" 
 		if(arrayModifiers.Count == 0) {
 		 arrayModifiers = null;
 		}
@@ -4593,118 +4655,118 @@ out i);
 	}
 
 	void Argument(
-#line  2062 "VBNET.ATG" 
+#line  2069 "VBNET.ATG" 
 out Expression argumentexpr) {
 
-#line  2064 "VBNET.ATG" 
+#line  2071 "VBNET.ATG" 
 		Expression expr;
 		argumentexpr = null;
 		string name;
 		
 		if (
-#line  2068 "VBNET.ATG" 
+#line  2075 "VBNET.ATG" 
 IsNamedAssign()) {
 			Identifier();
 
-#line  2068 "VBNET.ATG" 
+#line  2075 "VBNET.ATG" 
 			name = t.val;  
 			Expect(13);
 			Expect(11);
 			Expr(
-#line  2068 "VBNET.ATG" 
+#line  2075 "VBNET.ATG" 
 out expr);
 
-#line  2070 "VBNET.ATG" 
+#line  2077 "VBNET.ATG" 
 			argumentexpr = new NamedArgumentExpression(name, expr);
 			
 		} else if (StartOf(21)) {
 			Expr(
-#line  2073 "VBNET.ATG" 
+#line  2080 "VBNET.ATG" 
 out argumentexpr);
-		} else SynErr(246);
+		} else SynErr(247);
 	}
 
 	void QualIdentAndTypeArguments(
-#line  2119 "VBNET.ATG" 
+#line  2126 "VBNET.ATG" 
 out TypeReference typeref, bool canBeUnbound) {
 
-#line  2120 "VBNET.ATG" 
+#line  2127 "VBNET.ATG" 
 		string name; typeref = null; 
 		Qualident(
-#line  2122 "VBNET.ATG" 
+#line  2129 "VBNET.ATG" 
 out name);
 
-#line  2123 "VBNET.ATG" 
+#line  2130 "VBNET.ATG" 
 		typeref = new TypeReference(name); 
 		if (
-#line  2124 "VBNET.ATG" 
+#line  2131 "VBNET.ATG" 
 la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) {
 			lexer.NextToken();
 			Expect(200);
 			if (
-#line  2126 "VBNET.ATG" 
+#line  2133 "VBNET.ATG" 
 canBeUnbound && (la.kind == Tokens.CloseParenthesis || la.kind == Tokens.Comma)) {
 
-#line  2127 "VBNET.ATG" 
+#line  2134 "VBNET.ATG" 
 				typeref.GenericTypes.Add(NullTypeReference.Instance); 
 				while (la.kind == 12) {
 					lexer.NextToken();
 
-#line  2128 "VBNET.ATG" 
+#line  2135 "VBNET.ATG" 
 					typeref.GenericTypes.Add(NullTypeReference.Instance); 
 				}
 			} else if (StartOf(5)) {
 				TypeArgumentList(
-#line  2129 "VBNET.ATG" 
+#line  2136 "VBNET.ATG" 
 typeref.GenericTypes);
-			} else SynErr(247);
+			} else SynErr(248);
 			Expect(25);
 		}
 	}
 
 	void TypeArgumentList(
-#line  2172 "VBNET.ATG" 
+#line  2179 "VBNET.ATG" 
 List<TypeReference> typeArguments) {
 
-#line  2174 "VBNET.ATG" 
+#line  2181 "VBNET.ATG" 
 		TypeReference typeref;
 		
 		TypeName(
-#line  2176 "VBNET.ATG" 
+#line  2183 "VBNET.ATG" 
 out typeref);
 
-#line  2176 "VBNET.ATG" 
+#line  2183 "VBNET.ATG" 
 		if (typeref != null) typeArguments.Add(typeref); 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			TypeName(
-#line  2179 "VBNET.ATG" 
+#line  2186 "VBNET.ATG" 
 out typeref);
 
-#line  2179 "VBNET.ATG" 
+#line  2186 "VBNET.ATG" 
 			if (typeref != null) typeArguments.Add(typeref); 
 		}
 	}
 
 	void RankList(
-#line  2166 "VBNET.ATG" 
+#line  2173 "VBNET.ATG" 
 out int i) {
 
-#line  2167 "VBNET.ATG" 
+#line  2174 "VBNET.ATG" 
 		i = 0; 
 		while (la.kind == 12) {
 			lexer.NextToken();
 
-#line  2168 "VBNET.ATG" 
+#line  2175 "VBNET.ATG" 
 			++i; 
 		}
 	}
 
 	void Attribute(
-#line  2204 "VBNET.ATG" 
+#line  2211 "VBNET.ATG" 
 out ICSharpCode.NRefactory.Parser.AST.Attribute attribute) {
 
-#line  2205 "VBNET.ATG" 
+#line  2212 "VBNET.ATG" 
 		string name;
 		List<Expression> positional = new List<Expression>();
 		List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
@@ -4714,39 +4776,39 @@ out ICSharpCode.NRefactory.Parser.AST.Attribute attribute) {
 			Expect(10);
 		}
 		Qualident(
-#line  2210 "VBNET.ATG" 
+#line  2217 "VBNET.ATG" 
 out name);
 		if (la.kind == 24) {
 			AttributeArguments(
-#line  2211 "VBNET.ATG" 
+#line  2218 "VBNET.ATG" 
 positional, named);
 		}
 
-#line  2212 "VBNET.ATG" 
+#line  2219 "VBNET.ATG" 
 		attribute  = new ICSharpCode.NRefactory.Parser.AST.Attribute(name, positional, named); 
 	}
 
 	void AttributeArguments(
-#line  2216 "VBNET.ATG" 
+#line  2223 "VBNET.ATG" 
 List<Expression> positional, List<NamedArgumentExpression> named) {
 
-#line  2218 "VBNET.ATG" 
+#line  2225 "VBNET.ATG" 
 		bool nameFound = false;
 		string name = "";
 		Expression expr;
 		
 		Expect(24);
 		if (
-#line  2224 "VBNET.ATG" 
+#line  2231 "VBNET.ATG" 
 IsNotClosingParenthesis()) {
 			if (
-#line  2226 "VBNET.ATG" 
+#line  2233 "VBNET.ATG" 
 IsNamedAssign()) {
 
-#line  2226 "VBNET.ATG" 
+#line  2233 "VBNET.ATG" 
 				nameFound = true; 
 				IdentifierOrKeyword(
-#line  2227 "VBNET.ATG" 
+#line  2234 "VBNET.ATG" 
 out name);
 				if (la.kind == 13) {
 					lexer.NextToken();
@@ -4754,10 +4816,10 @@ out name);
 				Expect(11);
 			}
 			Expr(
-#line  2229 "VBNET.ATG" 
+#line  2236 "VBNET.ATG" 
 out expr);
 
-#line  2231 "VBNET.ATG" 
+#line  2238 "VBNET.ATG" 
 			if (expr != null) { if(name == "") positional.Add(expr);
 			else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; }
 			}
@@ -4765,13 +4827,13 @@ out expr);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				if (
-#line  2238 "VBNET.ATG" 
+#line  2245 "VBNET.ATG" 
 IsNamedAssign()) {
 
-#line  2238 "VBNET.ATG" 
+#line  2245 "VBNET.ATG" 
 					nameFound = true; 
 					IdentifierOrKeyword(
-#line  2239 "VBNET.ATG" 
+#line  2246 "VBNET.ATG" 
 out name);
 					if (la.kind == 13) {
 						lexer.NextToken();
@@ -4779,14 +4841,14 @@ out name);
 					Expect(11);
 				} else if (StartOf(21)) {
 
-#line  2241 "VBNET.ATG" 
+#line  2248 "VBNET.ATG" 
 					if (nameFound) Error("no positional argument after named argument"); 
-				} else SynErr(248);
+				} else SynErr(249);
 				Expr(
-#line  2242 "VBNET.ATG" 
+#line  2249 "VBNET.ATG" 
 out expr);
 
-#line  2242 "VBNET.ATG" 
+#line  2249 "VBNET.ATG" 
 				if (expr != null) { if(name == "") positional.Add(expr);
 				else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; }
 				}
@@ -4797,10 +4859,10 @@ out expr);
 	}
 
 	void FormalParameter(
-#line  2311 "VBNET.ATG" 
+#line  2318 "VBNET.ATG" 
 out ParameterDeclarationExpression p) {
 
-#line  2313 "VBNET.ATG" 
+#line  2320 "VBNET.ATG" 
 		TypeReference type = null;
 		ParamModifiers mod = new ParamModifiers(this);
 		Expression expr = null;
@@ -4808,28 +4870,28 @@ out ParameterDeclarationExpression p) {
 		
 		while (StartOf(25)) {
 			ParameterModifier(
-#line  2318 "VBNET.ATG" 
+#line  2325 "VBNET.ATG" 
 mod);
 		}
 		Identifier();
 
-#line  2319 "VBNET.ATG" 
+#line  2326 "VBNET.ATG" 
 		string parameterName = t.val; 
 		if (
-#line  2320 "VBNET.ATG" 
+#line  2327 "VBNET.ATG" 
 IsDims()) {
 			ArrayTypeModifiers(
-#line  2320 "VBNET.ATG" 
+#line  2327 "VBNET.ATG" 
 out arrayModifiers);
 		}
 		if (la.kind == 48) {
 			lexer.NextToken();
 			TypeName(
-#line  2321 "VBNET.ATG" 
+#line  2328 "VBNET.ATG" 
 out type);
 		}
 
-#line  2323 "VBNET.ATG" 
+#line  2330 "VBNET.ATG" 
 		if(type != null) {
 		if (arrayModifiers != null) {
 			if (type.RankSpecifier != null) {
@@ -4845,45 +4907,45 @@ out type);
 		if (la.kind == 11) {
 			lexer.NextToken();
 			Expr(
-#line  2335 "VBNET.ATG" 
+#line  2342 "VBNET.ATG" 
 out expr);
 		}
 
-#line  2337 "VBNET.ATG" 
+#line  2344 "VBNET.ATG" 
 		mod.Check();
 		p = new ParameterDeclarationExpression(type, parameterName, mod.Modifier, expr);
 		
 	}
 
 	void ParameterModifier(
-#line  2950 "VBNET.ATG" 
+#line  2972 "VBNET.ATG" 
 ParamModifiers m) {
 		if (la.kind == 55) {
 			lexer.NextToken();
 
-#line  2951 "VBNET.ATG" 
+#line  2973 "VBNET.ATG" 
 			m.Add(ParamModifier.In); 
 		} else if (la.kind == 53) {
 			lexer.NextToken();
 
-#line  2952 "VBNET.ATG" 
+#line  2974 "VBNET.ATG" 
 			m.Add(ParamModifier.Ref); 
 		} else if (la.kind == 137) {
 			lexer.NextToken();
 
-#line  2953 "VBNET.ATG" 
+#line  2975 "VBNET.ATG" 
 			m.Add(ParamModifier.Optional); 
 		} else if (la.kind == 143) {
 			lexer.NextToken();
 
-#line  2954 "VBNET.ATG" 
+#line  2976 "VBNET.ATG" 
 			m.Add(ParamModifier.Params); 
-		} else SynErr(249);
+		} else SynErr(250);
 	}
 
 	void Statement() {
 
-#line  2364 "VBNET.ATG" 
+#line  2371 "VBNET.ATG" 
 		Statement stmt = null;
 		Point startPos = la.Location;
 		string label = String.Empty;
@@ -4891,34 +4953,34 @@ ParamModifiers m) {
 		
 		if (la.kind == 1 || la.kind == 13) {
 		} else if (
-#line  2370 "VBNET.ATG" 
+#line  2377 "VBNET.ATG" 
 IsLabel()) {
 			LabelName(
-#line  2370 "VBNET.ATG" 
+#line  2377 "VBNET.ATG" 
 out label);
 
-#line  2372 "VBNET.ATG" 
+#line  2379 "VBNET.ATG" 
 			compilationUnit.AddChild(new LabelStatement(t.val));
 			
 			Expect(13);
 			Statement();
 		} else if (StartOf(26)) {
 			EmbeddedStatement(
-#line  2375 "VBNET.ATG" 
+#line  2382 "VBNET.ATG" 
 out stmt);
 
-#line  2375 "VBNET.ATG" 
+#line  2382 "VBNET.ATG" 
 			compilationUnit.AddChild(stmt); 
 		} else if (StartOf(27)) {
 			LocalDeclarationStatement(
-#line  2376 "VBNET.ATG" 
+#line  2383 "VBNET.ATG" 
 out stmt);
 
-#line  2376 "VBNET.ATG" 
+#line  2383 "VBNET.ATG" 
 			compilationUnit.AddChild(stmt); 
-		} else SynErr(250);
+		} else SynErr(251);
 
-#line  2379 "VBNET.ATG" 
+#line  2386 "VBNET.ATG" 
 		if (stmt != null) {
 		stmt.StartLocation = startPos;
 		stmt.EndLocation = t.Location;
@@ -4927,30 +4989,30 @@ out stmt);
 	}
 
 	void LabelName(
-#line  2750 "VBNET.ATG" 
+#line  2757 "VBNET.ATG" 
 out string name) {
 
-#line  2752 "VBNET.ATG" 
+#line  2759 "VBNET.ATG" 
 		name = String.Empty;
 		
 		if (StartOf(12)) {
 			Identifier();
 
-#line  2754 "VBNET.ATG" 
+#line  2761 "VBNET.ATG" 
 			name = t.val; 
 		} else if (la.kind == 5) {
 			lexer.NextToken();
 
-#line  2755 "VBNET.ATG" 
+#line  2762 "VBNET.ATG" 
 			name = t.val; 
-		} else SynErr(251);
+		} else SynErr(252);
 	}
 
 	void EmbeddedStatement(
-#line  2418 "VBNET.ATG" 
+#line  2425 "VBNET.ATG" 
 out Statement statement) {
 
-#line  2420 "VBNET.ATG" 
+#line  2427 "VBNET.ATG" 
 		Statement embeddedStatement = null;
 		statement = null;
 		Expression expr = null;
@@ -4961,103 +5023,103 @@ out Statement statement) {
 		case 94: {
 			lexer.NextToken();
 
-#line  2426 "VBNET.ATG" 
+#line  2433 "VBNET.ATG" 
 			ExitType exitType = ExitType.None; 
 			switch (la.kind) {
 			case 167: {
 				lexer.NextToken();
 
-#line  2428 "VBNET.ATG" 
+#line  2435 "VBNET.ATG" 
 				exitType = ExitType.Sub; 
 				break;
 			}
 			case 100: {
 				lexer.NextToken();
 
-#line  2430 "VBNET.ATG" 
+#line  2437 "VBNET.ATG" 
 				exitType = ExitType.Function; 
 				break;
 			}
 			case 146: {
 				lexer.NextToken();
 
-#line  2432 "VBNET.ATG" 
+#line  2439 "VBNET.ATG" 
 				exitType = ExitType.Property; 
 				break;
 			}
 			case 83: {
 				lexer.NextToken();
 
-#line  2434 "VBNET.ATG" 
+#line  2441 "VBNET.ATG" 
 				exitType = ExitType.Do; 
 				break;
 			}
 			case 98: {
 				lexer.NextToken();
 
-#line  2436 "VBNET.ATG" 
+#line  2443 "VBNET.ATG" 
 				exitType = ExitType.For; 
 				break;
 			}
 			case 174: {
 				lexer.NextToken();
 
-#line  2438 "VBNET.ATG" 
+#line  2445 "VBNET.ATG" 
 				exitType = ExitType.Try; 
 				break;
 			}
 			case 181: {
 				lexer.NextToken();
 
-#line  2440 "VBNET.ATG" 
+#line  2447 "VBNET.ATG" 
 				exitType = ExitType.While; 
 				break;
 			}
 			case 155: {
 				lexer.NextToken();
 
-#line  2442 "VBNET.ATG" 
+#line  2449 "VBNET.ATG" 
 				exitType = ExitType.Select; 
 				break;
 			}
-			default: SynErr(252); break;
+			default: SynErr(253); break;
 			}
 
-#line  2444 "VBNET.ATG" 
+#line  2451 "VBNET.ATG" 
 			statement = new ExitStatement(exitType); 
 			break;
 		}
 		case 174: {
 			TryStatement(
-#line  2445 "VBNET.ATG" 
+#line  2452 "VBNET.ATG" 
 out statement);
 			break;
 		}
 		case 186: {
 			lexer.NextToken();
 
-#line  2446 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 			ContinueType continueType = ContinueType.None; 
 			if (la.kind == 83 || la.kind == 98 || la.kind == 181) {
 				if (la.kind == 83) {
 					lexer.NextToken();
 
-#line  2446 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 					continueType = ContinueType.Do; 
 				} else if (la.kind == 98) {
 					lexer.NextToken();
 
-#line  2446 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 					continueType = ContinueType.For; 
 				} else {
 					lexer.NextToken();
 
-#line  2446 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 					continueType = ContinueType.While; 
 				}
 			}
 
-#line  2446 "VBNET.ATG" 
+#line  2453 "VBNET.ATG" 
 			statement = new ContinueStatement(continueType); 
 			break;
 		}
@@ -5065,11 +5127,11 @@ out statement);
 			lexer.NextToken();
 			if (StartOf(21)) {
 				Expr(
-#line  2448 "VBNET.ATG" 
+#line  2455 "VBNET.ATG" 
 out expr);
 			}
 
-#line  2448 "VBNET.ATG" 
+#line  2455 "VBNET.ATG" 
 			statement = new ThrowStatement(expr); 
 			break;
 		}
@@ -5077,27 +5139,27 @@ out expr);
 			lexer.NextToken();
 			if (StartOf(21)) {
 				Expr(
-#line  2450 "VBNET.ATG" 
+#line  2457 "VBNET.ATG" 
 out expr);
 			}
 
-#line  2450 "VBNET.ATG" 
+#line  2457 "VBNET.ATG" 
 			statement = new ReturnStatement(expr); 
 			break;
 		}
 		case 168: {
 			lexer.NextToken();
 			Expr(
-#line  2452 "VBNET.ATG" 
+#line  2459 "VBNET.ATG" 
 out expr);
 			EndOfStmt();
 			Block(
-#line  2452 "VBNET.ATG" 
+#line  2459 "VBNET.ATG" 
 out embeddedStatement);
 			Expect(88);
 			Expect(168);
 
-#line  2453 "VBNET.ATG" 
+#line  2460 "VBNET.ATG" 
 			statement = new LockStatement(expr, embeddedStatement); 
 			break;
 		}
@@ -5105,42 +5167,42 @@ out embeddedStatement);
 			lexer.NextToken();
 			Identifier();
 
-#line  2455 "VBNET.ATG" 
+#line  2462 "VBNET.ATG" 
 			name = t.val; 
 			if (la.kind == 24) {
 				lexer.NextToken();
 				if (StartOf(20)) {
 					ArgumentList(
-#line  2456 "VBNET.ATG" 
+#line  2463 "VBNET.ATG" 
 out p);
 				}
 				Expect(25);
 			}
 
-#line  2457 "VBNET.ATG" 
+#line  2464 "VBNET.ATG" 
 			statement = new RaiseEventStatement(name, p); 
 			break;
 		}
 		case 182: {
 			WithStatement(
-#line  2459 "VBNET.ATG" 
+#line  2466 "VBNET.ATG" 
 out statement);
 			break;
 		}
 		case 42: {
 			lexer.NextToken();
 
-#line  2461 "VBNET.ATG" 
+#line  2468 "VBNET.ATG" 
 			Expression handlerExpr = null; 
 			Expr(
-#line  2462 "VBNET.ATG" 
+#line  2469 "VBNET.ATG" 
 out expr);
 			Expect(12);
 			Expr(
-#line  2462 "VBNET.ATG" 
+#line  2469 "VBNET.ATG" 
 out handlerExpr);
 
-#line  2464 "VBNET.ATG" 
+#line  2471 "VBNET.ATG" 
 			statement = new AddHandlerStatement(expr, handlerExpr);
 			
 			break;
@@ -5148,17 +5210,17 @@ out handlerExpr);
 		case 152: {
 			lexer.NextToken();
 
-#line  2467 "VBNET.ATG" 
+#line  2474 "VBNET.ATG" 
 			Expression handlerExpr = null; 
 			Expr(
-#line  2468 "VBNET.ATG" 
+#line  2475 "VBNET.ATG" 
 out expr);
 			Expect(12);
 			Expr(
-#line  2468 "VBNET.ATG" 
+#line  2475 "VBNET.ATG" 
 out handlerExpr);
 
-#line  2470 "VBNET.ATG" 
+#line  2477 "VBNET.ATG" 
 			statement = new RemoveHandlerStatement(expr, handlerExpr);
 			
 			break;
@@ -5166,16 +5228,16 @@ out handlerExpr);
 		case 181: {
 			lexer.NextToken();
 			Expr(
-#line  2473 "VBNET.ATG" 
+#line  2480 "VBNET.ATG" 
 out expr);
 			EndOfStmt();
 			Block(
-#line  2474 "VBNET.ATG" 
+#line  2481 "VBNET.ATG" 
 out embeddedStatement);
 			Expect(88);
 			Expect(181);
 
-#line  2476 "VBNET.ATG" 
+#line  2483 "VBNET.ATG" 
 			statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start);
 			
 			break;
@@ -5183,23 +5245,23 @@ out embeddedStatement);
 		case 83: {
 			lexer.NextToken();
 
-#line  2481 "VBNET.ATG" 
+#line  2488 "VBNET.ATG" 
 			ConditionType conditionType = ConditionType.None;
 			
 			if (la.kind == 177 || la.kind == 181) {
 				WhileOrUntil(
-#line  2484 "VBNET.ATG" 
+#line  2491 "VBNET.ATG" 
 out conditionType);
 				Expr(
-#line  2484 "VBNET.ATG" 
+#line  2491 "VBNET.ATG" 
 out expr);
 				EndOfStmt();
 				Block(
-#line  2485 "VBNET.ATG" 
+#line  2492 "VBNET.ATG" 
 out embeddedStatement);
 				Expect(118);
 
-#line  2488 "VBNET.ATG" 
+#line  2495 "VBNET.ATG" 
 				statement = new DoLoopStatement(expr, 
 				                               embeddedStatement, 
 				                               conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, 
@@ -5208,28 +5270,28 @@ out embeddedStatement);
 			} else if (la.kind == 1 || la.kind == 13) {
 				EndOfStmt();
 				Block(
-#line  2495 "VBNET.ATG" 
+#line  2502 "VBNET.ATG" 
 out embeddedStatement);
 				Expect(118);
 				if (la.kind == 177 || la.kind == 181) {
 					WhileOrUntil(
-#line  2496 "VBNET.ATG" 
+#line  2503 "VBNET.ATG" 
 out conditionType);
 					Expr(
-#line  2496 "VBNET.ATG" 
+#line  2503 "VBNET.ATG" 
 out expr);
 				}
 
-#line  2498 "VBNET.ATG" 
+#line  2505 "VBNET.ATG" 
 				statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End);
 				
-			} else SynErr(253);
+			} else SynErr(254);
 			break;
 		}
 		case 98: {
 			lexer.NextToken();
 
-#line  2503 "VBNET.ATG" 
+#line  2510 "VBNET.ATG" 
 			Expression group = null;
 			TypeReference typeReference;
 			string        typeName;
@@ -5238,24 +5300,24 @@ out expr);
 			if (la.kind == 85) {
 				lexer.NextToken();
 				LoopControlVariable(
-#line  2510 "VBNET.ATG" 
+#line  2517 "VBNET.ATG" 
 out typeReference, out typeName);
 				Expect(109);
 				Expr(
-#line  2511 "VBNET.ATG" 
+#line  2518 "VBNET.ATG" 
 out group);
 				EndOfStmt();
 				Block(
-#line  2512 "VBNET.ATG" 
+#line  2519 "VBNET.ATG" 
 out embeddedStatement);
 				Expect(128);
 				if (StartOf(21)) {
 					Expr(
-#line  2513 "VBNET.ATG" 
+#line  2520 "VBNET.ATG" 
 out expr);
 				}
 
-#line  2515 "VBNET.ATG" 
+#line  2522 "VBNET.ATG" 
 				statement = new ForeachStatement(typeReference, 
 				                                typeName,
 				                                group, 
@@ -5267,84 +5329,84 @@ out expr);
 				
 			} else if (StartOf(12)) {
 
-#line  2526 "VBNET.ATG" 
+#line  2533 "VBNET.ATG" 
 				Expression start = null;
 				Expression end = null;
 				Expression step = null;
 				Expression nextExpr = null;List<Expression> nextExpressions = null;
 				
 				LoopControlVariable(
-#line  2531 "VBNET.ATG" 
+#line  2538 "VBNET.ATG" 
 out typeReference, out typeName);
 				Expect(11);
 				Expr(
-#line  2532 "VBNET.ATG" 
+#line  2539 "VBNET.ATG" 
 out start);
 				Expect(172);
 				Expr(
-#line  2532 "VBNET.ATG" 
+#line  2539 "VBNET.ATG" 
 out end);
 				if (la.kind == 162) {
 					lexer.NextToken();
 					Expr(
-#line  2532 "VBNET.ATG" 
+#line  2539 "VBNET.ATG" 
 out step);
 				}
 				EndOfStmt();
 				Block(
-#line  2533 "VBNET.ATG" 
+#line  2540 "VBNET.ATG" 
 out embeddedStatement);
 				Expect(128);
 				if (StartOf(21)) {
 					Expr(
-#line  2536 "VBNET.ATG" 
+#line  2543 "VBNET.ATG" 
 out nextExpr);
 
-#line  2536 "VBNET.ATG" 
+#line  2543 "VBNET.ATG" 
 					nextExpressions = new List<Expression>(); nextExpressions.Add(nextExpr); 
 					while (la.kind == 12) {
 						lexer.NextToken();
 						Expr(
-#line  2537 "VBNET.ATG" 
+#line  2544 "VBNET.ATG" 
 out nextExpr);
 
-#line  2537 "VBNET.ATG" 
+#line  2544 "VBNET.ATG" 
 						nextExpressions.Add(nextExpr); 
 					}
 				}
 
-#line  2540 "VBNET.ATG" 
+#line  2547 "VBNET.ATG" 
 				statement = new ForNextStatement(typeReference, typeName, start, end, step, embeddedStatement, nextExpressions);
 				
-			} else SynErr(254);
+			} else SynErr(255);
 			break;
 		}
 		case 92: {
 			lexer.NextToken();
 			Expr(
-#line  2544 "VBNET.ATG" 
+#line  2551 "VBNET.ATG" 
 out expr);
 
-#line  2544 "VBNET.ATG" 
+#line  2551 "VBNET.ATG" 
 			statement = new ErrorStatement(expr); 
 			break;
 		}
 		case 151: {
 			lexer.NextToken();
 
-#line  2546 "VBNET.ATG" 
+#line  2553 "VBNET.ATG" 
 			bool isPreserve = false; 
 			if (la.kind == 144) {
 				lexer.NextToken();
 
-#line  2546 "VBNET.ATG" 
+#line  2553 "VBNET.ATG" 
 				isPreserve = true; 
 			}
 			Expr(
-#line  2547 "VBNET.ATG" 
+#line  2554 "VBNET.ATG" 
 out expr);
 
-#line  2549 "VBNET.ATG" 
+#line  2556 "VBNET.ATG" 
 			ReDimStatement reDimStatement = new ReDimStatement(isPreserve);
 			statement = reDimStatement;
 			InvocationExpression redimClause = expr as InvocationExpression;
@@ -5353,13 +5415,13 @@ out expr);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				Expr(
-#line  2554 "VBNET.ATG" 
+#line  2561 "VBNET.ATG" 
 out expr);
 
-#line  2555 "VBNET.ATG" 
+#line  2562 "VBNET.ATG" 
 				redimClause = expr as InvocationExpression; 
 
-#line  2556 "VBNET.ATG" 
+#line  2563 "VBNET.ATG" 
 				if (redimClause != null) { reDimStatement.ReDimClauses.Add(redimClause); } 
 			}
 			break;
@@ -5367,10 +5429,10 @@ out expr);
 		case 91: {
 			lexer.NextToken();
 			Expr(
-#line  2560 "VBNET.ATG" 
+#line  2567 "VBNET.ATG" 
 out expr);
 
-#line  2561 "VBNET.ATG" 
+#line  2568 "VBNET.ATG" 
 			List<Expression> arrays = new List<Expression>();
 			if (expr != null) { arrays.Add(expr);}
 			EraseStatement eraseStatement = new EraseStatement(arrays);
@@ -5379,53 +5441,53 @@ out expr);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				Expr(
-#line  2566 "VBNET.ATG" 
+#line  2573 "VBNET.ATG" 
 out expr);
 
-#line  2566 "VBNET.ATG" 
+#line  2573 "VBNET.ATG" 
 				if (expr != null) { arrays.Add(expr); }
 			}
 
-#line  2567 "VBNET.ATG" 
+#line  2574 "VBNET.ATG" 
 			statement = eraseStatement; 
 			break;
 		}
 		case 163: {
 			lexer.NextToken();
 
-#line  2569 "VBNET.ATG" 
+#line  2576 "VBNET.ATG" 
 			statement = new StopStatement(); 
 			break;
 		}
 		case 106: {
 			lexer.NextToken();
 			Expr(
-#line  2571 "VBNET.ATG" 
+#line  2578 "VBNET.ATG" 
 out expr);
 			if (la.kind == 170) {
 				lexer.NextToken();
 			}
 			if (
-#line  2573 "VBNET.ATG" 
+#line  2580 "VBNET.ATG" 
 IsEndStmtAhead()) {
 				Expect(88);
 
-#line  2573 "VBNET.ATG" 
+#line  2580 "VBNET.ATG" 
 				statement = new IfElseStatement(expr, new EndStatement()); 
 			} else if (la.kind == 1 || la.kind == 13) {
 				EndOfStmt();
 				Block(
-#line  2576 "VBNET.ATG" 
+#line  2583 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2578 "VBNET.ATG" 
+#line  2585 "VBNET.ATG" 
 				IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement);
 				
 				while (la.kind == 87 || 
-#line  2582 "VBNET.ATG" 
+#line  2589 "VBNET.ATG" 
 IsElseIf()) {
 					if (
-#line  2582 "VBNET.ATG" 
+#line  2589 "VBNET.ATG" 
 IsElseIf()) {
 						Expect(86);
 						Expect(106);
@@ -5433,20 +5495,20 @@ IsElseIf()) {
 						lexer.NextToken();
 					}
 
-#line  2585 "VBNET.ATG" 
+#line  2592 "VBNET.ATG" 
 					Expression condition = null; Statement block = null; 
 					Expr(
-#line  2586 "VBNET.ATG" 
+#line  2593 "VBNET.ATG" 
 out condition);
 					if (la.kind == 170) {
 						lexer.NextToken();
 					}
 					EndOfStmt();
 					Block(
-#line  2587 "VBNET.ATG" 
+#line  2594 "VBNET.ATG" 
 out block);
 
-#line  2589 "VBNET.ATG" 
+#line  2596 "VBNET.ATG" 
 					ifStatement.ElseIfSections.Add(new ElseIfSection(condition, block));
 					
 				}
@@ -5454,61 +5516,61 @@ out block);
 					lexer.NextToken();
 					EndOfStmt();
 					Block(
-#line  2594 "VBNET.ATG" 
+#line  2601 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2596 "VBNET.ATG" 
+#line  2603 "VBNET.ATG" 
 					ifStatement.FalseStatement.Add(embeddedStatement);
 					
 				}
 				Expect(88);
 				Expect(106);
 
-#line  2600 "VBNET.ATG" 
+#line  2607 "VBNET.ATG" 
 				statement = ifStatement;
 				
 			} else if (StartOf(26)) {
 				EmbeddedStatement(
-#line  2603 "VBNET.ATG" 
+#line  2610 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2605 "VBNET.ATG" 
+#line  2612 "VBNET.ATG" 
 				IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement);
 				
 				while (la.kind == 13) {
 					lexer.NextToken();
 					EmbeddedStatement(
-#line  2607 "VBNET.ATG" 
+#line  2614 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2607 "VBNET.ATG" 
+#line  2614 "VBNET.ATG" 
 					ifStatement.TrueStatement.Add(embeddedStatement); 
 				}
 				if (la.kind == 86) {
 					lexer.NextToken();
 					if (StartOf(26)) {
 						EmbeddedStatement(
-#line  2609 "VBNET.ATG" 
+#line  2616 "VBNET.ATG" 
 out embeddedStatement);
 					}
 
-#line  2611 "VBNET.ATG" 
+#line  2618 "VBNET.ATG" 
 					ifStatement.FalseStatement.Add(embeddedStatement);
 					
 					while (la.kind == 13) {
 						lexer.NextToken();
 						EmbeddedStatement(
-#line  2614 "VBNET.ATG" 
+#line  2621 "VBNET.ATG" 
 out embeddedStatement);
 
-#line  2615 "VBNET.ATG" 
+#line  2622 "VBNET.ATG" 
 						ifStatement.FalseStatement.Add(embeddedStatement); 
 					}
 				}
 
-#line  2618 "VBNET.ATG" 
+#line  2625 "VBNET.ATG" 
 				statement = ifStatement; 
-			} else SynErr(255);
+			} else SynErr(256);
 			break;
 		}
 		case 155: {
@@ -5517,43 +5579,43 @@ out embeddedStatement);
 				lexer.NextToken();
 			}
 			Expr(
-#line  2621 "VBNET.ATG" 
+#line  2628 "VBNET.ATG" 
 out expr);
 			EndOfStmt();
 
-#line  2622 "VBNET.ATG" 
+#line  2629 "VBNET.ATG" 
 			List<SwitchSection> selectSections = new List<SwitchSection>();
 			Statement block = null;
 			
 			while (la.kind == 57) {
 
-#line  2626 "VBNET.ATG" 
+#line  2633 "VBNET.ATG" 
 				List<CaseLabel> caseClauses = null; 
 				lexer.NextToken();
 				CaseClauses(
-#line  2627 "VBNET.ATG" 
+#line  2634 "VBNET.ATG" 
 out caseClauses);
 				if (
-#line  2627 "VBNET.ATG" 
+#line  2634 "VBNET.ATG" 
 IsNotStatementSeparator()) {
 					lexer.NextToken();
 				}
 				EndOfStmt();
 
-#line  2629 "VBNET.ATG" 
+#line  2636 "VBNET.ATG" 
 				SwitchSection selectSection = new SwitchSection(caseClauses);
 				
 				Block(
-#line  2631 "VBNET.ATG" 
+#line  2638 "VBNET.ATG" 
 out block);
 
-#line  2633 "VBNET.ATG" 
+#line  2640 "VBNET.ATG" 
 				selectSection.Children = block.Children;
 				selectSections.Add(selectSection);
 				
 			}
 
-#line  2637 "VBNET.ATG" 
+#line  2644 "VBNET.ATG" 
 			statement = new SwitchStatement(expr, selectSections); 
 			Expect(88);
 			Expect(155);
@@ -5561,43 +5623,43 @@ out block);
 		}
 		case 135: {
 
-#line  2639 "VBNET.ATG" 
+#line  2646 "VBNET.ATG" 
 			OnErrorStatement onErrorStatement = null; 
 			OnErrorStatement(
-#line  2640 "VBNET.ATG" 
+#line  2647 "VBNET.ATG" 
 out onErrorStatement);
 
-#line  2640 "VBNET.ATG" 
+#line  2647 "VBNET.ATG" 
 			statement = onErrorStatement; 
 			break;
 		}
 		case 104: {
 
-#line  2641 "VBNET.ATG" 
+#line  2648 "VBNET.ATG" 
 			GotoStatement goToStatement = null; 
 			GotoStatement(
-#line  2642 "VBNET.ATG" 
+#line  2649 "VBNET.ATG" 
 out goToStatement);
 
-#line  2642 "VBNET.ATG" 
+#line  2649 "VBNET.ATG" 
 			statement = goToStatement; 
 			break;
 		}
 		case 153: {
 
-#line  2643 "VBNET.ATG" 
+#line  2650 "VBNET.ATG" 
 			ResumeStatement resumeStatement = null; 
 			ResumeStatement(
-#line  2644 "VBNET.ATG" 
+#line  2651 "VBNET.ATG" 
 out resumeStatement);
 
-#line  2644 "VBNET.ATG" 
+#line  2651 "VBNET.ATG" 
 			statement = resumeStatement; 
 			break;
 		}
-		case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 24: case 43: case 47: case 49: case 50: case 51: case 52: case 54: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 68: case 69: case 70: case 72: case 73: case 74: case 75: case 76: case 77: case 82: case 84: case 96: case 102: case 111: case 117: case 119: case 124: case 125: case 127: case 130: case 144: case 159: case 160: case 165: case 169: case 173: case 175: case 176: case 177: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: {
+		case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 24: case 43: case 47: case 49: case 50: case 51: case 52: case 54: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 68: case 69: case 70: case 72: case 73: case 74: case 75: case 76: case 77: case 82: case 84: case 96: case 102: case 111: case 117: case 119: case 124: case 125: case 127: case 130: case 144: case 159: case 160: case 165: case 169: case 173: case 175: case 176: case 177: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 204: {
 
-#line  2647 "VBNET.ATG" 
+#line  2654 "VBNET.ATG" 
 			Expression val = null;
 			AssignmentOperatorType op;
 			
@@ -5605,25 +5667,25 @@ out resumeStatement);
 			                        la.kind == Tokens.Not   || la.kind == Tokens.Times;
 			
 			SimpleExpr(
-#line  2653 "VBNET.ATG" 
+#line  2660 "VBNET.ATG" 
 out expr);
 			if (StartOf(28)) {
 				AssignmentOperator(
-#line  2655 "VBNET.ATG" 
+#line  2662 "VBNET.ATG" 
 out op);
 				Expr(
-#line  2655 "VBNET.ATG" 
+#line  2662 "VBNET.ATG" 
 out val);
 
-#line  2655 "VBNET.ATG" 
+#line  2662 "VBNET.ATG" 
 				expr = new AssignmentExpression(expr, op, val); 
 			} else if (la.kind == 1 || la.kind == 13 || la.kind == 86) {
 
-#line  2656 "VBNET.ATG" 
+#line  2663 "VBNET.ATG" 
 				if (mustBeAssignment) Error("error in assignment."); 
-			} else SynErr(256);
+			} else SynErr(257);
 
-#line  2659 "VBNET.ATG" 
+#line  2666 "VBNET.ATG" 
 			// a field reference expression that stands alone is a
 			// invocation expression without parantheses and arguments
 			if(expr is FieldReferenceExpression || expr is IdentifierExpression) {
@@ -5636,49 +5698,49 @@ out val);
 		case 56: {
 			lexer.NextToken();
 			SimpleExpr(
-#line  2666 "VBNET.ATG" 
+#line  2673 "VBNET.ATG" 
 out expr);
 
-#line  2666 "VBNET.ATG" 
+#line  2673 "VBNET.ATG" 
 			statement = new StatementExpression(expr); 
 			break;
 		}
 		case 188: {
 			lexer.NextToken();
 
-#line  2668 "VBNET.ATG" 
+#line  2675 "VBNET.ATG" 
 			LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifier.None); 
 
-#line  2669 "VBNET.ATG" 
+#line  2676 "VBNET.ATG" 
 			Statement block;  
 			VariableDeclarator(
-#line  2670 "VBNET.ATG" 
+#line  2677 "VBNET.ATG" 
 resourceAquisition.Variables);
 			while (la.kind == 12) {
 				lexer.NextToken();
 				VariableDeclarator(
-#line  2672 "VBNET.ATG" 
+#line  2679 "VBNET.ATG" 
 resourceAquisition.Variables);
 			}
 			Block(
-#line  2674 "VBNET.ATG" 
+#line  2681 "VBNET.ATG" 
 out block);
 			Expect(88);
 			Expect(188);
 
-#line  2676 "VBNET.ATG" 
+#line  2683 "VBNET.ATG" 
 			statement = new UsingStatement(resourceAquisition, block); 
 			break;
 		}
-		default: SynErr(257); break;
+		default: SynErr(258); break;
 		}
 	}
 
 	void LocalDeclarationStatement(
-#line  2387 "VBNET.ATG" 
+#line  2394 "VBNET.ATG" 
 out Statement statement) {
 
-#line  2389 "VBNET.ATG" 
+#line  2396 "VBNET.ATG" 
 		Modifiers m = new Modifiers();
 		LocalVariableDeclaration localVariableDeclaration;
 		bool dimfound = false;
@@ -5687,22 +5749,22 @@ out Statement statement) {
 			if (la.kind == 71) {
 				lexer.NextToken();
 
-#line  2395 "VBNET.ATG" 
+#line  2402 "VBNET.ATG" 
 				m.Add(Modifier.Const, t.Location); 
 			} else if (la.kind == 161) {
 				lexer.NextToken();
 
-#line  2396 "VBNET.ATG" 
+#line  2403 "VBNET.ATG" 
 				m.Add(Modifier.Static, t.Location); 
 			} else {
 				lexer.NextToken();
 
-#line  2397 "VBNET.ATG" 
+#line  2404 "VBNET.ATG" 
 				dimfound = true; 
 			}
 		}
 
-#line  2400 "VBNET.ATG" 
+#line  2407 "VBNET.ATG" 
 		if(dimfound && (m.Modifier & Modifier.Const) != 0) {
 		Error("Dim is not allowed on constants.");
 		}
@@ -5715,137 +5777,137 @@ out Statement statement) {
 		localVariableDeclaration.StartLocation = t.Location;
 		
 		VariableDeclarator(
-#line  2411 "VBNET.ATG" 
+#line  2418 "VBNET.ATG" 
 localVariableDeclaration.Variables);
 		while (la.kind == 12) {
 			lexer.NextToken();
 			VariableDeclarator(
-#line  2412 "VBNET.ATG" 
+#line  2419 "VBNET.ATG" 
 localVariableDeclaration.Variables);
 		}
 
-#line  2414 "VBNET.ATG" 
+#line  2421 "VBNET.ATG" 
 		statement = localVariableDeclaration;
 		
 	}
 
 	void TryStatement(
-#line  2862 "VBNET.ATG" 
+#line  2869 "VBNET.ATG" 
 out Statement tryStatement) {
 
-#line  2864 "VBNET.ATG" 
+#line  2871 "VBNET.ATG" 
 		Statement blockStmt = null, finallyStmt = null;List<CatchClause> catchClauses = null;
 		
 		Expect(174);
 		EndOfStmt();
 		Block(
-#line  2867 "VBNET.ATG" 
+#line  2874 "VBNET.ATG" 
 out blockStmt);
 		if (la.kind == 58 || la.kind == 88 || la.kind == 97) {
 			CatchClauses(
-#line  2868 "VBNET.ATG" 
+#line  2875 "VBNET.ATG" 
 out catchClauses);
 		}
 		if (la.kind == 97) {
 			lexer.NextToken();
 			EndOfStmt();
 			Block(
-#line  2869 "VBNET.ATG" 
+#line  2876 "VBNET.ATG" 
 out finallyStmt);
 		}
 		Expect(88);
 		Expect(174);
 
-#line  2872 "VBNET.ATG" 
+#line  2879 "VBNET.ATG" 
 		tryStatement = new TryCatchStatement(blockStmt, catchClauses, finallyStmt);
 		
 	}
 
 	void WithStatement(
-#line  2840 "VBNET.ATG" 
+#line  2847 "VBNET.ATG" 
 out Statement withStatement) {
 
-#line  2842 "VBNET.ATG" 
+#line  2849 "VBNET.ATG" 
 		Statement blockStmt = null;
 		Expression expr = null;
 		
 		Expect(182);
 
-#line  2845 "VBNET.ATG" 
+#line  2852 "VBNET.ATG" 
 		Point start = t.Location; 
 		Expr(
-#line  2846 "VBNET.ATG" 
+#line  2853 "VBNET.ATG" 
 out expr);
 		EndOfStmt();
 
-#line  2848 "VBNET.ATG" 
+#line  2855 "VBNET.ATG" 
 		withStatement = new WithStatement(expr);
 		withStatement.StartLocation = start;
 		withStatements.Push(withStatement);
 		
 		Block(
-#line  2852 "VBNET.ATG" 
+#line  2859 "VBNET.ATG" 
 out blockStmt);
 
-#line  2854 "VBNET.ATG" 
+#line  2861 "VBNET.ATG" 
 		((WithStatement)withStatement).Body = (BlockStatement)blockStmt;
 		withStatements.Pop();
 		
 		Expect(88);
 		Expect(182);
 
-#line  2858 "VBNET.ATG" 
+#line  2865 "VBNET.ATG" 
 		withStatement.EndLocation = t.Location; 
 	}
 
 	void WhileOrUntil(
-#line  2833 "VBNET.ATG" 
+#line  2840 "VBNET.ATG" 
 out ConditionType conditionType) {
 
-#line  2834 "VBNET.ATG" 
+#line  2841 "VBNET.ATG" 
 		conditionType = ConditionType.None; 
 		if (la.kind == 181) {
 			lexer.NextToken();
 
-#line  2835 "VBNET.ATG" 
+#line  2842 "VBNET.ATG" 
 			conditionType = ConditionType.While; 
 		} else if (la.kind == 177) {
 			lexer.NextToken();
 
-#line  2836 "VBNET.ATG" 
+#line  2843 "VBNET.ATG" 
 			conditionType = ConditionType.Until; 
-		} else SynErr(258);
+		} else SynErr(259);
 	}
 
 	void LoopControlVariable(
-#line  2680 "VBNET.ATG" 
+#line  2687 "VBNET.ATG" 
 out TypeReference type, out string name) {
 
-#line  2681 "VBNET.ATG" 
+#line  2688 "VBNET.ATG" 
 		ArrayList arrayModifiers = null;
 		type = null;
 		
 		Qualident(
-#line  2685 "VBNET.ATG" 
+#line  2692 "VBNET.ATG" 
 out name);
 		if (
-#line  2686 "VBNET.ATG" 
+#line  2693 "VBNET.ATG" 
 IsDims()) {
 			ArrayTypeModifiers(
-#line  2686 "VBNET.ATG" 
+#line  2693 "VBNET.ATG" 
 out arrayModifiers);
 		}
 		if (la.kind == 48) {
 			lexer.NextToken();
 			TypeName(
-#line  2687 "VBNET.ATG" 
+#line  2694 "VBNET.ATG" 
 out type);
 
-#line  2687 "VBNET.ATG" 
+#line  2694 "VBNET.ATG" 
 			if (name.IndexOf('.') > 0) { Error("No type def for 'for each' member indexer allowed."); } 
 		}
 
-#line  2689 "VBNET.ATG" 
+#line  2696 "VBNET.ATG" 
 		if (type != null) {
 		if(type.RankSpecifier != null && arrayModifiers != null) {
 			Error("array rank only allowed one time");
@@ -5857,48 +5919,48 @@ out type);
 	}
 
 	void CaseClauses(
-#line  2793 "VBNET.ATG" 
+#line  2800 "VBNET.ATG" 
 out List<CaseLabel> caseClauses) {
 
-#line  2795 "VBNET.ATG" 
+#line  2802 "VBNET.ATG" 
 		caseClauses = new List<CaseLabel>();
 		CaseLabel caseClause = null;
 		
 		CaseClause(
-#line  2798 "VBNET.ATG" 
+#line  2805 "VBNET.ATG" 
 out caseClause);
 
-#line  2798 "VBNET.ATG" 
+#line  2805 "VBNET.ATG" 
 		if (caseClause != null) { caseClauses.Add(caseClause); } 
 		while (la.kind == 12) {
 			lexer.NextToken();
 			CaseClause(
-#line  2799 "VBNET.ATG" 
+#line  2806 "VBNET.ATG" 
 out caseClause);
 
-#line  2799 "VBNET.ATG" 
+#line  2806 "VBNET.ATG" 
 			if (caseClause != null) { caseClauses.Add(caseClause); } 
 		}
 	}
 
 	void OnErrorStatement(
-#line  2700 "VBNET.ATG" 
+#line  2707 "VBNET.ATG" 
 out OnErrorStatement stmt) {
 
-#line  2702 "VBNET.ATG" 
+#line  2709 "VBNET.ATG" 
 		stmt = null;
 		GotoStatement goToStatement = null;
 		
 		Expect(135);
 		Expect(92);
 		if (
-#line  2708 "VBNET.ATG" 
+#line  2715 "VBNET.ATG" 
 IsNegativeLabelName()) {
 			Expect(104);
 			Expect(15);
 			Expect(5);
 
-#line  2710 "VBNET.ATG" 
+#line  2717 "VBNET.ATG" 
 			long intLabel = Int64.Parse(t.val);
 			if(intLabel != 1) {
 				Error("invalid label in on error statement.");
@@ -5907,10 +5969,10 @@ IsNegativeLabelName()) {
 			
 		} else if (la.kind == 104) {
 			GotoStatement(
-#line  2716 "VBNET.ATG" 
+#line  2723 "VBNET.ATG" 
 out goToStatement);
 
-#line  2718 "VBNET.ATG" 
+#line  2725 "VBNET.ATG" 
 			string val = goToStatement.Label;
 			
 			// if value is numeric, make sure that is 0
@@ -5927,63 +5989,63 @@ out goToStatement);
 			lexer.NextToken();
 			Expect(128);
 
-#line  2732 "VBNET.ATG" 
+#line  2739 "VBNET.ATG" 
 			stmt = new OnErrorStatement(new ResumeStatement(true));
 			
-		} else SynErr(259);
+		} else SynErr(260);
 	}
 
 	void GotoStatement(
-#line  2738 "VBNET.ATG" 
+#line  2745 "VBNET.ATG" 
 out ICSharpCode.NRefactory.Parser.AST.GotoStatement goToStatement) {
 
-#line  2740 "VBNET.ATG" 
+#line  2747 "VBNET.ATG" 
 		string label = String.Empty;
 		
 		Expect(104);
 		LabelName(
-#line  2743 "VBNET.ATG" 
+#line  2750 "VBNET.ATG" 
 out label);
 
-#line  2745 "VBNET.ATG" 
+#line  2752 "VBNET.ATG" 
 		goToStatement = new ICSharpCode.NRefactory.Parser.AST.GotoStatement(label);
 		
 	}
 
 	void ResumeStatement(
-#line  2782 "VBNET.ATG" 
+#line  2789 "VBNET.ATG" 
 out ResumeStatement resumeStatement) {
 
-#line  2784 "VBNET.ATG" 
+#line  2791 "VBNET.ATG" 
 		resumeStatement = null;
 		string label = String.Empty;
 		
 		if (
-#line  2787 "VBNET.ATG" 
+#line  2794 "VBNET.ATG" 
 IsResumeNext()) {
 			Expect(153);
 			Expect(128);
 
-#line  2788 "VBNET.ATG" 
+#line  2795 "VBNET.ATG" 
 			resumeStatement = new ResumeStatement(true); 
 		} else if (la.kind == 153) {
 			lexer.NextToken();
 			if (StartOf(29)) {
 				LabelName(
-#line  2789 "VBNET.ATG" 
+#line  2796 "VBNET.ATG" 
 out label);
 			}
 
-#line  2789 "VBNET.ATG" 
+#line  2796 "VBNET.ATG" 
 			resumeStatement = new ResumeStatement(label); 
-		} else SynErr(260);
+		} else SynErr(261);
 	}
 
 	void CaseClause(
-#line  2803 "VBNET.ATG" 
+#line  2810 "VBNET.ATG" 
 out CaseLabel caseClause) {
 
-#line  2805 "VBNET.ATG" 
+#line  2812 "VBNET.ATG" 
 		Expression expr = null;
 		Expression sexpr = null;
 		BinaryOperatorType op = BinaryOperatorType.None;
@@ -5992,7 +6054,7 @@ out CaseLabel caseClause) {
 		if (la.kind == 86) {
 			lexer.NextToken();
 
-#line  2811 "VBNET.ATG" 
+#line  2818 "VBNET.ATG" 
 			caseClause = new CaseLabel(); 
 		} else if (StartOf(30)) {
 			if (la.kind == 113) {
@@ -6002,76 +6064,76 @@ out CaseLabel caseClause) {
 			case 27: {
 				lexer.NextToken();
 
-#line  2815 "VBNET.ATG" 
+#line  2822 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThan; 
 				break;
 			}
 			case 26: {
 				lexer.NextToken();
 
-#line  2816 "VBNET.ATG" 
+#line  2823 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThan; 
 				break;
 			}
 			case 30: {
 				lexer.NextToken();
 
-#line  2817 "VBNET.ATG" 
+#line  2824 "VBNET.ATG" 
 				op = BinaryOperatorType.LessThanOrEqual; 
 				break;
 			}
 			case 29: {
 				lexer.NextToken();
 
-#line  2818 "VBNET.ATG" 
+#line  2825 "VBNET.ATG" 
 				op = BinaryOperatorType.GreaterThanOrEqual; 
 				break;
 			}
 			case 11: {
 				lexer.NextToken();
 
-#line  2819 "VBNET.ATG" 
+#line  2826 "VBNET.ATG" 
 				op = BinaryOperatorType.Equality; 
 				break;
 			}
 			case 28: {
 				lexer.NextToken();
 
-#line  2820 "VBNET.ATG" 
+#line  2827 "VBNET.ATG" 
 				op = BinaryOperatorType.InEquality; 
 				break;
 			}
-			default: SynErr(261); break;
+			default: SynErr(262); break;
 			}
 			Expr(
-#line  2822 "VBNET.ATG" 
+#line  2829 "VBNET.ATG" 
 out expr);
 
-#line  2824 "VBNET.ATG" 
+#line  2831 "VBNET.ATG" 
 			caseClause = new CaseLabel(op, expr);
 			
 		} else if (StartOf(21)) {
 			Expr(
-#line  2826 "VBNET.ATG" 
+#line  2833 "VBNET.ATG" 
 out expr);
 			if (la.kind == 172) {
 				lexer.NextToken();
 				Expr(
-#line  2826 "VBNET.ATG" 
+#line  2833 "VBNET.ATG" 
 out sexpr);
 			}
 
-#line  2828 "VBNET.ATG" 
+#line  2835 "VBNET.ATG" 
 			caseClause = new CaseLabel(expr, sexpr);
 			
-		} else SynErr(262);
+		} else SynErr(263);
 	}
 
 	void CatchClauses(
-#line  2877 "VBNET.ATG" 
+#line  2884 "VBNET.ATG" 
 out List<CatchClause> catchClauses) {
 
-#line  2879 "VBNET.ATG" 
+#line  2886 "VBNET.ATG" 
 		catchClauses = new List<CatchClause>();
 		TypeReference type = null;
 		Statement blockStmt = null;
@@ -6083,27 +6145,27 @@ out List<CatchClause> catchClauses) {
 			if (StartOf(12)) {
 				Identifier();
 
-#line  2887 "VBNET.ATG" 
+#line  2894 "VBNET.ATG" 
 				name = t.val; 
 				if (la.kind == 48) {
 					lexer.NextToken();
 					TypeName(
-#line  2887 "VBNET.ATG" 
+#line  2894 "VBNET.ATG" 
 out type);
 				}
 			}
 			if (la.kind == 180) {
 				lexer.NextToken();
 				Expr(
-#line  2888 "VBNET.ATG" 
+#line  2895 "VBNET.ATG" 
 out expr);
 			}
 			EndOfStmt();
 			Block(
-#line  2890 "VBNET.ATG" 
+#line  2897 "VBNET.ATG" 
 out blockStmt);
 
-#line  2891 "VBNET.ATG" 
+#line  2898 "VBNET.ATG" 
 			catchClauses.Add(new CatchClause(type, name, blockStmt, expr)); 
 		}
 	}
@@ -6387,39 +6449,40 @@ out blockStmt);
 			case 227: s = "invalid InterfaceMemberDecl"; break;
 			case 228: s = "invalid InterfaceMemberDecl"; break;
 			case 229: s = "invalid Charset"; break;
-			case 230: s = "invalid VariableDeclarator"; break;
-			case 231: s = "invalid AccessorDecls"; break;
-			case 232: s = "invalid EventAccessorDeclaration"; break;
-			case 233: s = "invalid OverloadableOperator"; break;
-			case 234: s = "invalid VariableInitializer"; break;
-			case 235: s = "invalid EventMemberSpecifier"; break;
+			case 230: s = "invalid IdentifierForFieldDeclaration"; break;
+			case 231: s = "invalid VariableDeclaratorPartAfterIdentifier"; break;
+			case 232: s = "invalid AccessorDecls"; break;
+			case 233: s = "invalid EventAccessorDeclaration"; break;
+			case 234: s = "invalid OverloadableOperator"; break;
+			case 235: s = "invalid VariableInitializer"; break;
 			case 236: s = "invalid EventMemberSpecifier"; break;
-			case 237: s = "invalid AssignmentOperator"; break;
-			case 238: s = "invalid SimpleExpr"; break;
+			case 237: s = "invalid EventMemberSpecifier"; break;
+			case 238: s = "invalid AssignmentOperator"; break;
 			case 239: s = "invalid SimpleExpr"; break;
 			case 240: s = "invalid SimpleExpr"; break;
-			case 241: s = "invalid PrimitiveTypeName"; break;
-			case 242: s = "invalid CastTarget"; break;
-			case 243: s = "invalid InvocationOrMemberReferenceExpression"; break;
-			case 244: s = "invalid InvocationExpression"; break;
+			case 241: s = "invalid SimpleExpr"; break;
+			case 242: s = "invalid PrimitiveTypeName"; break;
+			case 243: s = "invalid CastTarget"; break;
+			case 244: s = "invalid InvocationOrMemberReferenceExpression"; break;
 			case 245: s = "invalid InvocationExpression"; break;
-			case 246: s = "invalid Argument"; break;
-			case 247: s = "invalid QualIdentAndTypeArguments"; break;
-			case 248: s = "invalid AttributeArguments"; break;
-			case 249: s = "invalid ParameterModifier"; break;
-			case 250: s = "invalid Statement"; break;
-			case 251: s = "invalid LabelName"; break;
-			case 252: s = "invalid EmbeddedStatement"; break;
+			case 246: s = "invalid InvocationExpression"; break;
+			case 247: s = "invalid Argument"; break;
+			case 248: s = "invalid QualIdentAndTypeArguments"; break;
+			case 249: s = "invalid AttributeArguments"; break;
+			case 250: s = "invalid ParameterModifier"; break;
+			case 251: s = "invalid Statement"; break;
+			case 252: s = "invalid LabelName"; break;
 			case 253: s = "invalid EmbeddedStatement"; break;
 			case 254: s = "invalid EmbeddedStatement"; break;
 			case 255: s = "invalid EmbeddedStatement"; break;
 			case 256: s = "invalid EmbeddedStatement"; break;
 			case 257: s = "invalid EmbeddedStatement"; break;
-			case 258: s = "invalid WhileOrUntil"; break;
-			case 259: s = "invalid OnErrorStatement"; break;
-			case 260: s = "invalid ResumeStatement"; break;
-			case 261: s = "invalid CaseClause"; break;
+			case 258: s = "invalid EmbeddedStatement"; break;
+			case 259: s = "invalid WhileOrUntil"; break;
+			case 260: s = "invalid OnErrorStatement"; break;
+			case 261: s = "invalid ResumeStatement"; break;
 			case 262: s = "invalid CaseClause"; break;
+			case 263: s = "invalid CaseClause"; break;
 
 			default: s = "error " + errorNumber; break;
 		}
@@ -6436,32 +6499,32 @@ out blockStmt);
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,T,x, x,x,x,x, x,x,x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,T,x, x,x,x,x, T,x,x},
 	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,T, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, T,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,T, T,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,x,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,T, T,T,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x},
+	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, x,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
-	{x,T,T,T, T,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, T,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
+	{x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, x,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
+	{x,T,T,T, T,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, T,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
+	{x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,T, T,x,x,x, x,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, x,x,x},
-	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
+	{x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,T, T,x,x,x, x,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x},
+	{x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
-	{x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x},
+	{x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x},
 	{x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}
 
 	};
diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
index 9897e2d01c..cfe90ec601 100644
--- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
+++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
@@ -957,9 +957,10 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 		Statement stmt = null;
 		List<VariableDeclaration> variableDeclarators = new List<VariableDeclaration>();
 		List<TemplateDefinition> templates = new List<TemplateDefinition>();
-	.)=
+	.)
+=
 	NonModuleDeclaration<m, attributes>
-	| /* 9.2.1 */
+| /* 9.2.1 */
 	"Sub"
 	(.
 		Point startPos = t.Location;
@@ -1038,7 +1039,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 			compilationUnit.AddChild(cd);
 		.)
 	)
-	|
+|
 	/* 9.2.1 */
 	"Function"
 	(.
@@ -1112,7 +1113,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 			.)
 			EOL
 	)
-	|
+|
 	/* 9.2.2. */
 	"Declare"
 	(.
@@ -1152,7 +1153,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 				compilationUnit.AddChild(declareDeclaration);
 			.)
 		)
-	|
+|
 	/* 9. 4 */
 	"Event"
 	(.
@@ -1176,14 +1177,15 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 		compilationUnit.AddChild(eventDeclaration);
 	.)
 	EOL
-	| /* 9.6 */
+| /* 9.6 */
 	(. Point startPos = t.Location; .)
 	(.
 		m.Check(Modifier.Fields);
 		FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
 		fd.StartLocation = m.GetDeclarationLocation(startPos); 
 	.)
-	VariableDeclarator<variableDeclarators>
+	IdentifierForFieldDeclaration (. string name = t.val; .)
+	VariableDeclaratorPartAfterIdentifier<variableDeclarators, name>
 	{ "," VariableDeclarator<variableDeclarators> }
 	EOL
 	(.
@@ -1210,7 +1212,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 		fd.EndLocation = t.EndLocation;
 		compilationUnit.AddChild(fd);
 	.)
-	| /* 9.7 */
+| /* 9.7 */
 	"Property"
 	(.
 		m.Check(Modifier.VBProperties);
@@ -1261,7 +1263,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 			compilationUnit.AddChild(pDecl);
 		.)
 	)
-	|
+|
 	"Custom" (. Point startPos = t.Location; .) "Event"
 	(.
 		m.Check(Modifier.VBCustomEvents);
@@ -1317,9 +1319,9 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 		decl.RaiseRegion = raiseEventAccessorDeclaration;
 		compilationUnit.AddChild(decl);
 	.)
-	|  (. ConversionType opConversionType = ConversionType.None; .)
-		[ "Widening"		(. opConversionType = ConversionType.Implicit; .)
-		| "Narrowing"		(. opConversionType = ConversionType.Explicit;.) ]
+|   (. ConversionType opConversionType = ConversionType.None; .)
+	[ "Widening"		(. opConversionType = ConversionType.Implicit; .)
+	| "Narrowing"		(. opConversionType = ConversionType.Explicit;.) ]
 	"Operator"
 	(.
 		m.Check(Modifier.VBOperators);
@@ -1363,7 +1365,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
 		operatorDeclaration.Body.EndLocation = t.Location;
 		compilationUnit.AddChild(operatorDeclaration);
 	.)
-	.
+.
 
 OverloadableOperator<out OverloadableOperatorType operatorType>
 	(. operatorType = OverloadableOperatorType.None; .)
@@ -1536,13 +1538,18 @@ ConstantDeclarator<List<VariableDeclaration> constantDeclaration>
 
 /* 9.6 */
 VariableDeclarator<List<VariableDeclaration> fieldDeclaration>
+=
+	Identifier (. string name = t.val; .)
+	VariableDeclaratorPartAfterIdentifier<fieldDeclaration, name>
+.
+
+VariableDeclaratorPartAfterIdentifier<List<VariableDeclaration> fieldDeclaration, string name>
 	(.
 		Expression expr = null;
 		TypeReference type = null;
 		ArrayList rank = null;
 		List<Expression> dimension = null;
 	.) =
-	Identifier (. string name = t.val; .)
 	[ IF(IsSize() && !IsDims()) ArrayInitializationModifier<out dimension> ]
 	[ IF(IsDims())              ArrayNameModifier<out rank> ]
 	(
@@ -2911,13 +2918,28 @@ Identifier	=
 	| "Text"
 	| "Binary"
 	| "Compare"
+	| "Custom"
 	| "Assembly"
 	| "Ansi"
 	| "Auto"
 	| "Preserve"
 	| "Unicode"
 	| "Until"
-	.
+.
+
+IdentifierForFieldDeclaration =
+	ident
+	| "Text"
+	| "Binary"
+	| "Compare"
+	/*| "Custom" Custom is not valid for field declaration */
+	| "Assembly"
+	| "Ansi"
+	| "Auto"
+	| "Preserve"
+	| "Unicode"
+	| "Until"
+.
 
 /* 2.2 */
 
diff --git a/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs b/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs
index e473a20caf..7423894195 100644
--- a/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs
+++ b/src/Libraries/NRefactory/Test/Output/VBNet/VBNetOutputTest.cs
@@ -184,7 +184,8 @@ End Using");
 		public void SpecialIdentifiers()
 		{
 			// Assembly, Ansi and Until are contextual keywords
-			TestExpression("Assembly = Ansi * [For] + Until");
+			// Custom is valid inside methods, but not valid for field names
+			TestExpression("Assembly = Ansi * [For] + Until - [Custom]");
 		}
 		
 		[Test]
diff --git a/src/Libraries/NRefactory/Test/Parser/Expressions/IdentifierExpressionTests.cs b/src/Libraries/NRefactory/Test/Parser/Expressions/IdentifierExpressionTests.cs
index 4aa5e00096..c4d08be7f5 100644
--- a/src/Libraries/NRefactory/Test/Parser/Expressions/IdentifierExpressionTests.cs
+++ b/src/Libraries/NRefactory/Test/Parser/Expressions/IdentifierExpressionTests.cs
@@ -50,10 +50,9 @@ namespace ICSharpCode.NRefactory.Tests.AST
 		[Test]
 		public void VBNetAssemblyIdentifierExpressionTest()
 		{
-			IdentifierExpression ie = ParseUtilVBNet.ParseExpression<IdentifierExpression>("Assembly");
-			Assert.AreEqual("Assembly", ie.Identifier);
+			Assert.AreEqual("Assembly", ParseUtilVBNet.ParseExpression<IdentifierExpression>("Assembly").Identifier);
+			Assert.AreEqual("Custom", ParseUtilVBNet.ParseExpression<IdentifierExpression>("Custom").Identifier);
 		}
 		#endregion
-		
 	}
 }
diff --git a/src/Main/Base/Project/Src/Commands/VBConverter/CSharpConvertBuffer.cs b/src/Main/Base/Project/Src/Commands/VBConverter/CSharpConvertBuffer.cs
index 7938c046b4..1933e31619 100644
--- a/src/Main/Base/Project/Src/Commands/VBConverter/CSharpConvertBuffer.cs
+++ b/src/Main/Base/Project/Src/Commands/VBConverter/CSharpConvertBuffer.cs
@@ -36,7 +36,7 @@ namespace ICSharpCode.SharpDevelop.Commands
 				p.Parse();
 
 				if (p.Errors.count > 0) {
-					MessageService.ShowError("Correct source code errors first (only correct source code would convert).");
+					MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Convert.CorrectSourceCodeErrors}\n" + p.Errors.ErrorOutput);
 					return;
 				}
 				ICSharpCode.NRefactory.PrettyPrinter.CSharpOutputVisitor output = new ICSharpCode.NRefactory.PrettyPrinter.CSharpOutputVisitor();
diff --git a/src/Main/Base/Project/Src/Commands/VBConverter/ConvertBuffer.cs b/src/Main/Base/Project/Src/Commands/VBConverter/ConvertBuffer.cs
index 6e2e99b02d..abf38ace8c 100644
--- a/src/Main/Base/Project/Src/Commands/VBConverter/ConvertBuffer.cs
+++ b/src/Main/Base/Project/Src/Commands/VBConverter/ConvertBuffer.cs
@@ -36,8 +36,7 @@ namespace ICSharpCode.SharpDevelop.Commands
 				ICSharpCode.NRefactory.Parser.IParser p = ICSharpCode.NRefactory.Parser.ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(((IEditable)window.ViewContent).Text));
 				p.Parse();
 				if (p.Errors.count > 0) {
-					
-					MessageService.ShowError("Correct source code errors first (only correct source code would convert).");
+					MessageService.ShowError("${res:ICSharpCode.SharpDevelop.Commands.Convert.CorrectSourceCodeErrors}\n" + p.Errors.ErrorOutput);
 					return;
 				}