Index: attribute.dd
===================================================================
--- attribute.dd	(revision 1639)
+++ attribute.dd	(working copy)
@@ -15,12 +15,13 @@
     $(GLINK ProtectionAttribute)
     $(B static)
     $(B final)
+    $(B synchronized)
     $(LINK2 #override, $(B override))
     $(LINK2 #abstract, $(B abstract))
     $(LINK2 #const, $(B const))
     $(LINK2 #auto, $(B auto))
     $(LINK2 #scope, $(B scope))
-$(V2    $(LINK2 #gshared, $(B __gshared))
+    $(V2 $(LINK2 #gshared, $(B __gshared))
     $(LINK2 #shared, $(B shared))
     $(LINK2 #immutable, $(B immutable))
     $(LINK2 #inout, $(B inout))
@@ -144,7 +145,7 @@
 $(GRAMMAR
 $(GNAME AlignAttribute):
 	$(B align)
-	$(B align) $(B $(LPAREN)) $(I Integer) $(B $(RPAREN))
+	$(B align) $(B $(LPAREN)) $(LINK2 lex.html#integerliteral, $(I Integer)) $(B $(RPAREN))
 )
 
 	$(P Specifies the alignment of struct members. $(B align) by itself
Index: enum.dd
===================================================================
--- enum.dd	(revision 1639)
+++ enum.dd	(working copy)
@@ -13,7 +13,7 @@
 	$(I Identifier)
 
 $(GNAME EnumBaseType):
-	$(I Type)
+	$(LINK2 declaration.html#Type, $(I Type))
 
 $(GNAME EnumBody):
 	$(B ;)
@@ -27,8 +27,7 @@
 $(GNAME EnumMember):
 	$(I Identifier)
 	$(I Identifier) $(B =) $(ASSIGNEXPRESSION)
-$(V2
-	$(I Type) $(I Identifier) $(B =) $(ASSIGNEXPRESSION))
+        $(V2 $(LINK2 declaration.html#Type, $(I Type)) $(I Identifier) $(B =) $(ASSIGNEXPRESSION))
 )
 
 	$(P Enum declarations are used to define a group of constants.
Index: module.dd
===================================================================
--- module.dd	(revision 1639)
+++ module.dd	(working copy)
@@ -14,20 +14,19 @@
 $(GNAME DeclDef):
 	$(LINK2 attribute.html#AttributeSpecifier, $(I AttributeSpecifier))
 	$(GLINK ImportDeclaration)
-	$(I EnumDeclaration)
-	$(I ClassDeclaration)
-	$(I InterfaceDeclaration)
-	$(I AggregateDeclaration)
-	$(I Declaration)
-	$(I Constructor)
-	$(I Destructor)
-	$(I Invariant)
-	$(I UnitTest)
-	$(I StaticConstructor)
-	$(I StaticDestructor)
-$(V2
-	$(I SharedStaticConstructor)
-	$(I SharedStaticDestructor)
+	$(LINK2 enum.html#EnumDeclaration, $(I EnumDeclaration))
+	$(LINK2 class.html#ClassDeclaration, $(I ClassDeclaration))
+	$(LINK2 interface.html#InterfaceDeclaration, $(I InterfaceDeclaration))
+	$(LINK2 struct.html#AggregateDeclaration, $(I AggregateDeclaration))
+	$(LINK2 declaration.html#Declaration, $(I Declaration))
+	$(LINK2 class.html#Constructor, $(I Constructor))
+	$(LINK2 class.html#Destructor, $(I Destructor))
+	$(LINK2 class.html#Invariant, $(I Invariant))
+	$(LINK2 unittest.html#UnitTest, $(I UnitTest))
+	$(LINK2 class.html#StaticConstructor, $(I StaticConstructor))
+	$(LINK2 class.html#StaticDestructor, $(I StaticDestructor))
+        $(V2 $(LINK2 class.html#SharedStaticConstructor, $(I SharedStaticConstructor))
+	$(LINK2 class.html#SharedStaticDestructor, $(I SharedStaticDestructor))
 )	$(LINK2 version.html#ConditionalDeclaration, $(I ConditionalDeclaration))
 	$(LINK2 version.html#StaticAssert, $(I StaticAssert))
 	$(LINK2 template.html#TemplateDeclaration, $(I TemplateDeclaration))
Index: version.dd
===================================================================
--- version.dd	(revision 1639)
+++ version.dd	(working copy)
@@ -70,10 +70,9 @@
 
 $(GRAMMAR
 $(GNAME VersionCondition):
-	$(B version $(LPAREN)) $(I Integer) $(B $(RPAREN))
+	$(B version $(LPAREN)) $(LINK2 lex.html#integerliteral, $(I Integer)) $(B $(RPAREN))
 	$(B version $(LPAREN)) $(I Identifier) $(B $(RPAREN))
-$(V2
-	$(B version $(LPAREN)) $(B unittest) $(B $(RPAREN)))
+        $(V2 $(B version $(LPAREN)) $(B unittest) $(B $(RPAREN)))
 )
 
 	$(P The $(I VersionCondition) is satisfied if the $(I Integer)
@@ -125,7 +124,7 @@
 $(GRAMMAR
 $(GNAME VersionSpecification):
     $(B version =) $(I Identifier) $(B ;)
-    $(B version =) $(I Integer) $(B ;)
+    $(B version =) $(LINK2 lex.html#integerliteral, $(I Integer)) $(B ;)
 )
 
 	$(P The version specification makes it straightforward to group
@@ -302,7 +301,7 @@
 $(GRAMMAR
 $(GNAME DebugCondition):
     $(B debug)
-    $(B debug $(LPAREN)) $(I Integer) $(B $(RPAREN))
+    $(B debug $(LPAREN)) $(LINK2 lex.html#integerliteral, $(I Integer)) $(B $(RPAREN))
     $(B debug $(LPAREN)) $(I Identifier) $(B $(RPAREN))
 )
 
@@ -334,7 +333,7 @@
 $(GRAMMAR
 $(GNAME DebugSpecification):
     $(B debug =) $(I Identifier) $(B ;)
-    $(B debug =) $(I Integer) $(B ;)
+    $(B debug =) $(LINK2 lex.html#integerliteral, $(I Integer)) $(B ;)
 )
 
 	$(P Debug identifiers and levels are set either by the command line switch
Index: template-mixin.dd
===================================================================
--- template-mixin.dd	(revision 1639)
+++ template-mixin.dd	(working copy)
@@ -9,7 +9,7 @@
 $(GRAMMAR
 $(GNAME TemplateMixinDeclaration):
 	$(V2 $(B mixin)) $(B template) $(TEMPLATEIDENTIFIER) $(B $(LPAREN)) $(TEMPLATEPARAMETERLIST) $(B $(RPAREN)) $(V2 $(GLINK Constraint)$(SUB $(I opt)))
-		$(B {) DeclDefs $(B })
+		$(B {) $(LINK2 module.html#DeclDefs, $(I DeclDefs)) $(B })
 
 $(GNAME TemplateMixin):
 	$(B mixin) $(TEMPLATEIDENTIFIER) $(B ;)
Index: linux.mak
===================================================================
--- linux.mak	(revision 1639)
+++ linux.mak	(working copy)
@@ -24,7 +24,7 @@
 	howto-promote.html tuple.html template-comparison.html				\
 	template-mixin.html final-const-invariant.html const.html			\
 	traits.html COM.html cpp_interface.html hijack.html const3.html		\
-	features2.html
+	features2.html unittest.html
 
 DOC_OUTPUT_DIR = ../web/2.0
 
Index: struct.dd
===================================================================
--- struct.dd	(revision 1639)
+++ struct.dd	(working copy)
@@ -361,34 +361,9 @@
 
 $(GNAME StructBody):
 	$(B {) $(B })
-	$(B {) $(I StructBodyDeclarations) $(B })
-
-$(GNAME StructBodyDeclarations):
-	$(I StructBodyDeclaration)
-	$(I StructBodyDeclaration) $(I StructBodyDeclarations)
-
-$(GNAME StructBodyDeclaration):
-	$(I Declaration)
-	$(I StaticConstructor)
-	$(I StaticDestructor)
-	$(I Invariant)
-	$(I UnitTest)
-	$(I StructAllocator)
-	$(I StructDeallocator)
-	$(V2 $(GLINK StructConstructor)
-	$(GLINK StructPostblit)
-	$(GLINK StructDestructor))
-$(V2
-	$(LINK2 class.html#AliasThis, $(I AliasThis))
+	$(B {) $(LINK2 module.html#DeclDefs, $(I DeclDefs)) $(B })
 )
 
-$(GNAME StructAllocator):
-	$(I ClassAllocator)
-
-$(GNAME StructDeallocator):
-	$(I ClassDeallocator)
-)
-
 $(P They work like they do in C, with the following exceptions:)
 
 $(UL
@@ -575,7 +550,7 @@
 
 $(GRAMMAR
 $(GNAME StructConstructor):
-    $(B this( $(I ParameterList) )) $(I FunctionBody)
+    $(B this( $(I ParameterList) )) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	$(P Struct constructors are used to initialize an instance
@@ -592,7 +567,7 @@
 
 $(GRAMMAR
 $(GNAME StructPostblit):
-    $(B this(this)) $(I FunctionBody)
+    $(B this(this)) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	$(P $(I Copy construction) is defined as initializing
@@ -637,7 +612,7 @@
 
 $(GRAMMAR
 $(GNAME StructDestructor):
-    $(B ~this()) $(I FunctionBody)
+    $(B ~this()) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	$(P Destructors are called when an object goes out of scope.
Index: lex.dd
===================================================================
--- lex.dd	(revision 1639)
+++ lex.dd	(working copy)
@@ -300,6 +300,7 @@
 	$(B ^=)
 	$(B ~)
 	$(B ~=)
+        $(B @)
 )
 
 <h3>$(LNAME2 identifier, Identifiers)</h3>
Index: expression.dd
===================================================================
--- expression.dd	(revision 1639)
+++ expression.dd	(working copy)
@@ -637,7 +637,6 @@
 
 <h2>Mul Expressions</h2>
 
-$(V1
 $(GRAMMAR
 $(GNAME MulExpression):
 	$(GLINK UnaryExpression)
@@ -645,16 +644,6 @@
 	$(I MulExpression) $(B /) $(GLINK UnaryExpression)
 	$(I MulExpression) $(B %) $(GLINK UnaryExpression)
 )
-)
-$(V2
-$(GRAMMAR
-$(GNAME MulExpression):
-	$(GLINK PowExpression)
-	$(I MulExpression) $(B *) $(GLINK PowExpression)
-	$(I MulExpression) $(B /) $(GLINK PowExpression)
-	$(I MulExpression) $(B %) $(GLINK PowExpression)
-)
-)
 
 	$(P The operands must be arithmetic types. They undergo integral
 	promotions, and then are brought to a common type using the
@@ -682,25 +671,11 @@
 	$(P Mul expressions for floating point operands are not associative.
 	)
 
-$(V2
-<h2><a name="PowExpression">Pow Expressions</a></h2>
-
-$(GRAMMAR
-$(GNAME PowExpression):
-	$(GLINK UnaryExpression)
-	$(GLINK UnaryExpression) ^^ $(I PowExpression)
-)
-
-	$(P $(I PowExpression) raises its left operand to the power of its
-	right operand.
-	)
-)
-
 <h2><a name="UnaryExpression">Unary Expressions</a></h2>
 
 $(GRAMMAR
 $(GNAME UnaryExpression):
-	$(GLINK PostfixExpression)
+	$(GLINK PowExpression)
 	$(B &amp;) $(I UnaryExpression)
 	$(B ++) $(I UnaryExpression)
 	$(B --) $(I UnaryExpression)
@@ -709,7 +684,7 @@
 	$(B +) $(I UnaryExpression)
 	$(B !) $(I UnaryExpression)
 	$(B ~) $(I UnaryExpression)
-	$(B $(LPAREN)) $(I Type) $(B $(RPAREN) .) $(I Identifier)
+	$(B $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(B $(RPAREN) .) $(I Identifier)
 	$(GLINK NewExpression)
 	$(GLINK DeleteExpression)
 	$(GLINK CastExpression)
@@ -721,10 +696,10 @@
 
 $(GRAMMAR
 $(GNAME NewExpression):
-	$(I NewArguments) $(I Type) $(B [) $(GLINK AssignExpression) $(B ])
-	$(I NewArguments) $(I Type) $(B $(LPAREN)) $(GLINK ArgumentList) $(B $(RPAREN))
-	$(I NewArguments) $(I Type)
-	$(I NewArguments) $(I ClassArguments) $(I BaseClasslist)<sub>opt</sub> $(B {) $(I DeclDefs) $(B } )
+	$(I NewArguments) $(LINK2 declaration.html#Type, $(I Type)) $(B [) $(GLINK AssignExpression) $(B ])
+	$(I NewArguments) $(LINK2 declaration.html#Type, $(I Type)) $(B $(LPAREN)) $(GLINK ArgumentList) $(B $(RPAREN))
+	$(I NewArguments) $(LINK2 declaration.html#Type, $(I Type))
+	$(I NewArguments) $(I ClassArguments) $(GLINK BaseClasslist)$(OPT) $(B {) $(GLINK DeclDefs) $(B } )
 
 $(GNAME NewArguments):
 	$(B new $(LPAREN)) $(GLINK ArgumentList) $(B $(RPAREN))
@@ -840,7 +815,18 @@
 
 $(GRAMMAR
 $(GNAME CastExpression):
-	$(B cast $(LPAREN)) $(I Type) $(B $(RPAREN)) $(GLINK UnaryExpression)
+	$(B cast $(LPAREN)) $(I CastParam) $(B $(RPAREN)) $(GLINK UnaryExpression)
+
+$(GNAME CastParam):
+        $(LINK2 declaration.html#Type, $(I Type))
+	$(B const) 
+	$(B const shared) 
+	$(B shared const) 
+	$(B inout) 
+	$(B inout shared) 
+	$(B shared inout) 
+	$(B immutable) 
+	$(B shared) 
 )
 
 	$(P A $(I CastExpression) converts the $(I UnaryExpression)
@@ -917,19 +903,35 @@
 S(v)
 ---
 
+$(V2
+<h2><a name="PowExpression">Pow Expressions</a></h2>
+
+$(GRAMMAR
+$(GNAME PowExpression):
+	$(GLINK PostfixExpression)
+	$(GLINK PostfixExpression) ^^ $(I UnaryExpression)
+)
+
+	$(P $(I PowExpression) raises its left operand to the power of its
+	right operand.
+	)
+)
+
+
 <h2>Postfix Expressions</h2>
 
 $(GRAMMAR
 $(GNAME PostfixExpression):
 	$(GLINK PrimaryExpression)
 	$(I PostfixExpression) $(B .) $(I Identifier)
+        $(I PostfixExpression) $(B .) $(GLINK TemplateInstance)
 	$(I PostfixExpression) $(B .) $(GLINK NewExpression)
 	$(I PostfixExpression) $(B ++)
 	$(I PostfixExpression) $(B --)
 	$(I PostfixExpression) $(B ( ))
 	$(I PostfixExpression) $(B $(LPAREN)) $(GLINK ArgumentList) $(B $(RPAREN))
-	$(GLINK IndexExpression)
-	$(GLINK SliceExpression)
+	$(I PostfixExpression) $(GLINK IndexExpression)
+	$(I PostfixExpression) $(GLINK SliceExpression)
 )
 
 <h2>Index Expressions</h2>
@@ -1017,8 +1019,7 @@
 	$(B true)
 	$(B false)
 	$(B $)
-$(V2
-	$(B __FILE__)
+        $(V2 $(B __FILE__)
 	$(B __LINE__))
 	$(GLINK2 lex, IntegerLiteral)
 	$(GLINK2 lex, FloatLiteral)
@@ -1030,13 +1031,12 @@
 	$(GLINK AssertExpression)
 	$(GLINK MixinExpression)
 	$(GLINK ImportExpression)
-	$(I BasicType) $(B .) $(I Identifier)
+	$(GLINK BasicTypeX) $(B .) $(I Identifier)
 	$(LINK2 declaration.html#Typeof, $(I Typeof))
 	$(GLINK TypeidExpression)
 	$(GLINK IsExpression)
-	$(B $(LPAREN)) $(I Expression) $(B $(RPAREN))
-$(V2
-	$(LINK2 traits.html#TraitsExpression, $(I TraitsExpression)))
+	$(B $(LPAREN)) $(GLINK Expression) $(B $(RPAREN))
+        $(V2 $(LINK2 traits.html#TraitsExpression, $(I TraitsExpression)))
 )
 
 <h3>.Identifier</h3>
@@ -1231,10 +1231,10 @@
 	$(I KeyExpression) $(B :) $(I ValueExpression)
 
 $(GNAME KeyExpression):
-	$(GLINK ConditionalExpression)
+	$(GLINK AssignExpression)
 
 $(GNAME ValueExpression):
-	$(GLINK ConditionalExpression)
+	$(GLINK AssignExpression)
 )
 
 	$(P Associative array literals are a comma-separated list of
@@ -1265,17 +1265,15 @@
 
 $(GRAMMAR
 $(GNAME FunctionLiteral):
-	$(B function) $(I Type)<sub>opt</sub> $(I ParameterAttributes) <sub>opt</sub> $(I FunctionBody)
-	$(B delegate) $(I Type)<sub>opt</sub> $(I ParameterAttributes) <sub>opt</sub> $(I FunctionBody)
-	$(I ParameterAttributes) $(I FunctionBody)
-	$(I FunctionBody)
+	$(B function) $(LINK2 declaration.html#Type, $(I Type))$(OPT) $(I ParameterAttributes)$(OPT) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
+	$(B delegate) $(LINK2 declaration.html#Type, $(I Type))$(OPT) $(I ParameterAttributes)$(OPT) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
+	$(I ParameterAttributes) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
+	$(LINK2 function.html#FunctionBody, $(I FunctionBody))
 
 $(GNAME ParameterAttributes):
 	$(LINK2 declaration.html#Parameters, $(I Parameters))
-$(V2
-	$(LINK2 declaration.html#Parameters, $(I Parameters)) $(LINK2 declaration.html#FunctionAttributes, $(I FunctionAttributes))
+        $(V2 $(LINK2 declaration.html#Parameters, $(I Parameters)) $(LINK2 declaration.html#FunctionAttributes, $(I FunctionAttributes)))
 )
-)
 
 	$(I FunctionLiteral)s enable embedding anonymous functions
 	and anonymous delegates directly into expressions.
@@ -1487,8 +1485,8 @@
 
 $(GRAMMAR
 $(GNAME TypeidExpression):
-    $(B typeid $(LPAREN)) $(I Type) $(B $(RPAREN))
-$(V2      $(B typeid $(LPAREN)) $(I Expression) $(B $(RPAREN)))
+        $(B typeid $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(B $(RPAREN))
+        $(V2 $(B typeid $(LPAREN)) $(GLINK Expression) $(B $(RPAREN)))
 )
 
 $(V1
@@ -1535,18 +1533,18 @@
 
 $(GRAMMAR
 $(GNAME IsExpression):
-	$(B is $(LPAREN)) $(I Type) $(B $(RPAREN))
-	$(B is $(LPAREN)) $(I Type) $(B :) $(I TypeSpecialization) $(B $(RPAREN))
-	$(B is $(LPAREN)) $(I Type) $(B ==) $(I TypeSpecialization) $(B $(RPAREN))
-	$(B is $(LPAREN)) $(I Type) $(I Identifier) $(B $(RPAREN))
-	$(B is $(LPAREN)) $(I Type) $(I Identifier) $(B :) $(I TypeSpecialization) $(B $(RPAREN))
-	$(B is $(LPAREN)) $(I Type) $(I Identifier) $(B ==) $(I TypeSpecialization) $(B $(RPAREN))
-	$(V2 $(B is $(LPAREN)) $(I Type) $(I Identifier) $(B :) $(I TypeSpecialization) $(B ,) $(I TemplateParameterList) $(B $(RPAREN))
-	$(B is $(LPAREN)) $(I Type) $(I Identifier) $(B ==) $(I TypeSpecialization) $(B ,) $(I TemplateParameterList) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(B :) $(I TypeSpecialization) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(B ==) $(I TypeSpecialization) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(I Identifier) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(I Identifier) $(B :) $(I TypeSpecialization) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(I Identifier) $(B ==) $(I TypeSpecialization) $(B $(RPAREN))
+	$(V2 $(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(I Identifier) $(B :) $(I TypeSpecialization) $(B ,) $(LINK2 template.html#TemplateParameterList, $(I TemplateParameterList)) $(B $(RPAREN))
+	$(B is $(LPAREN)) $(LINK2 declaration.html#Type, $(I Type)) $(I Identifier) $(B ==) $(I TypeSpecialization) $(B ,) $(LINK2 template.html#TemplateParameterList, $(I TemplateParameterList)) $(B $(RPAREN))
 )
 
 $(GNAME TypeSpecialization):
-	$(I Type)
+	$(LINK2 declaration.html#Type, $(I Type))
 $(V1	$(B typedef)
 )	$(B struct)
 	$(B union)
@@ -1556,8 +1554,7 @@
 	$(B function)
 	$(B delegate)
 	$(B super)
-$(V2
-	$(B const)
+        $(V2 $(B const)
 	$(B immutable)
 	$(B inout)
 	$(B shared)
@@ -1911,6 +1908,7 @@
 Macros:
 	TITLE=Expressions
 	WIKI=Expression
+        OPT=<sub>opt</sub>
 	GLINK=$(LINK2 #$0, $(I $0))
 	GNAME=<a name=$0>$(I $0)</a>
 	DOLLAR=$
Index: interface.dd
===================================================================
--- interface.dd	(revision 1639)
+++ interface.dd	(working copy)
@@ -4,7 +4,7 @@
 
 $(GRAMMAR
 $(GNAME InterfaceDeclaration):
-	$(B interface) $(I Identifier) $(BaseInterfaceList) $(I InterfaceBody)
+	$(B interface) $(I Identifier) $(I BaseInterfaceList)$(OPT) $(I InterfaceBody)
 	$(LINK2 template.html#InterfaceTemplateDeclaration, $(I InterfaceTemplateDeclaration))
 
 $(GNAME BaseInterfaceList):
@@ -12,7 +12,7 @@
 	$(B :) $(LINK2 class.html#InterfaceClasses, $(I InterfaceClasses))
 
 $(GNAME InterfaceBody):
-	$(B {) DeclDefs $(B })
+	$(B {) $(LINK2 module.html#DeclDefs, $(I DeclDefs)) $(B })
 )
 
 	$(P Interfaces describe a list of functions that a class that inherits
@@ -299,5 +299,6 @@
 
 Macros:
 	TITLE=Interfaces
+        OPT=<sub>opt</sub>
 	WIKI=Interface
 
Index: statement.dd
===================================================================
--- statement.dd	(revision 1639)
+++ statement.dd	(working copy)
@@ -212,7 +212,7 @@
 $(GNAME IfCondition):
 	$(EXPRESSION)
 	$(B auto) $(I Identifier) $(B =) $(EXPRESSION)
-	$(I Declarator) $(B =) $(EXPRESSION)
+	$(LINK2 declaration.html$BasicType, $(I BasicType)) $(LINK2 declaration.html#Declarator, $(I Declarator)) $(B =) $(EXPRESSION)
 
 $(GNAME ThenStatement):
 	$(PSSCOPE)
@@ -326,19 +326,17 @@
 
 $(GRAMMAR
 $(I ForStatement):
-	$(B for $(LPAREN))$(I Initialize) $(I Test) $(B ;) $(I Increment)$(B $(RPAREN)) $(PSSCOPE)
+	$(B for $(LPAREN))$(I Initialize) $(I Test)$(OPT) $(B ;) $(I Increment)$(OPT)$(B $(RPAREN)) $(PSSCOPE)
 
 $(GNAME Initialize):
 	$(B ;)
 	$(PS0)
 
 $(GNAME Test):
-	$(I empty)
-	$(EXPRESSION)
+	$(GLINK Expression)
 
 $(GNAME Increment):
-	$(I empty)
-	$(EXPRESSION)
+	$(GLINK Expression)
 )
 
 	$(P $(I Initialize) is executed.
@@ -410,13 +408,13 @@
     $(I ForeachType) , $(I ForeachTypeList)
 
 $(GNAME ForeachType):
-    $(B ref) $(I Type) $(I Identifier)
-    $(I Type) $(I Identifier)
+    $(B ref) $(GLINK BasicType) $(GLINK Declarator)
+    $(GLINK BasicType) $(GLINK Declarator)
     $(B ref) $(I Identifier)
     $(I Identifier)
 
 $(GNAME Aggregate):
-    $(EXPRESSION)
+    $(GLINK Expression)
 )
 
 $(P
@@ -813,10 +811,10 @@
 	$(B case) $(I FirstExp) $(B : .. case) $(I LastExp) $(B :) $(PSSEMI_PSCURLYSCOPE)
 
 $(I FirstExp):
-	$(I AssignExpression)
+	$(LINK2 expression.html#AssignExpression, $(I AssignExpression))
 
 $(I LastExp):
-	$(I AssignExpression)
+	$(LINK2 expression.html#AssignExpression, $(I AssignExpression))
 )
 $(GNAME DefaultStatement):
 	$(B default :) $(PSSEMI_PSCURLYSCOPE)
@@ -1300,7 +1298,7 @@
 	$(B catch $(LPAREN)) $(I CatchParameter) $(B $(RPAREN)) $(PS0)
 
 $(GNAME CatchParameter):
-	$(I BasicType) $(I Identifier)
+	$(GLINK BasicType) $(I Identifier)
 
 $(GNAME FinallyStatement):
 	$(B finally) $(PS0)
Index: class.dd
===================================================================
--- class.dd	(revision 1639)
+++ class.dd	(working copy)
@@ -54,22 +54,7 @@
 
 $(GNAME ClassBody):
 	$(B {) $(B })
-	$(B {) $(I ClassBodyDeclarations) $(B })
-
-$(GNAME ClassBodyDeclarations):
-	$(I ClassBodyDeclaration)
-	$(I ClassBodyDeclaration) $(I ClassBodyDeclarations)
-
-$(GNAME ClassBodyDeclaration):
-	$(I Declaration)
-	$(GLINK Constructor)
-	$(GLINK Destructor)
-	$(GLINK StaticConstructor)
-	$(GLINK StaticDestructor)
-	$(GLINK Invariant)
-	$(GLINK UnitTest)
-	$(GLINK ClassAllocator)
-	$(GLINK ClassDeallocator)
+	$(B {) $(LINK2 module.html#DeclDefs, $(I DeclDefs)) $(B })
 )
 
 Classes consist of:
@@ -244,7 +229,8 @@
 
 $(GRAMMAR
 $(GNAME Constructor):
-	$(B this) $(I Parameters) $(I FunctionBody)
+        $(GLINK TemplatedConstructor)
+	$(B this) $(LINK2 declaration.html#Parameters, $(I Parameters)) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	$(P Members are always initialized to the
@@ -419,7 +405,7 @@
 
 $(GRAMMAR
 $(GNAME Destructor):
-	$(B ~this()) $(I FunctionBody)
+	$(B ~this()) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	The garbage collector calls the destructor function when the object
@@ -479,7 +465,7 @@
 
 $(GRAMMAR
 $(GNAME StaticConstructor):
-	$(B static this()) $(I FunctionBody)
+	$(B static this()) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	A static constructor is defined as a function that performs
@@ -573,7 +559,7 @@
 
 $(GRAMMAR
 $(GNAME StaticDestructor):
-	$(B static ~this()) $(I FunctionBody)
+	$(B static ~this()) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	A static destructor is defined as a special static function with the
@@ -618,7 +604,7 @@
 
 $(GRAMMAR
 $(GNAME SharedStaticConstructor):
-	$(B shared static this()) $(I FunctionBody)
+	$(B shared static this()) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	$(P Shared static constructors are executed before any $(GLINK StaticConstructor)s,
@@ -629,7 +615,7 @@
 
 $(GRAMMAR
 $(GNAME SharedStaticDestructor):
-	$(B shared static ~this()) $(I FunctionBody)
+	$(B shared static ~this()) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	$(P Shared static destructors are executed at program termination
@@ -642,7 +628,7 @@
 
 $(GRAMMAR
 $(GNAME Invariant):
-	$(B invariant()) $(I BlockStatement)
+	$(B invariant()) $(LINK2 statement.html#BlockStatement, $(I BlockStatement))
 )
 
     Class invariants are used to specify characteristics of a class that always
@@ -724,7 +710,7 @@
 
 $(GRAMMAR
 $(GNAME ClassAllocator):
-	$(B new) $(I Parameters) $(I FunctionBody)
+	$(B new) $(LINK2 declaration.html#Parameters, $(I Parameters)) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	A class member function of the form:
@@ -791,7 +777,7 @@
 
 $(GRAMMAR
 $(GNAME ClassDeallocator):
-	$(B delete) $(I Parameters) $(I FunctionBody)
+	$(B delete) $(LINK2 declaration.html#Parameters, $(I Parameters)) $(LINK2 function.html#FunctionBody, $(I FunctionBody))
 )
 
 	A class member function of the form:
@@ -1145,17 +1131,17 @@
 
 $(GRAMMAR
 $(GNAME NewAnonClassExpression):
-    $(B new) $(I PerenArgumentList)<sub>opt</sub> $(B class) $(I PerenArgumentList)<sub>opt</sub> $(I SuperClass)<sub>opt</sub> $(I InterfaceClasses)<sub>opt</sub> $(I ClassBody)
+    $(B new) $(I PerenArgumentList)$(OPT) $(B class) $(I PerenArgumentList)$(OPT) $(GLINK SuperClass)$(OPT) $(GLINK InterfaceClasses)$(OPT) $(GLINK ClassBody)
 
 $(GNAME PerenArgumentList):
-    $(B $(LPAREN))$(I ArgumentList)$(B $(RPAREN))
+    $(B $(LPAREN)) $(LINK2 expression.html#ArgumentList, $(I ArgumentList)) $(B $(RPAREN))
 )
 
 	$(P which is equivalent to:
 	)
 
 ------
-class $(I Identifier) : $(I SuperClass) $(I InterfaceClasses)
+class $(I Identifier) $(B :) $(I SuperClass) $(I InterfaceClasses)
 	$(I ClassBody)
 
 new ($(I ArgumentList)) $(I Identifier) ($(I ArgumentList));
@@ -1182,6 +1168,7 @@
 Macros:
 	TITLE=Classes
 	WIKI=Class
+        OPT=<sub>opt</sub>
 	GLINK=$(LINK2 #$0, $(I $0))
 	GNAME=<a name=$0>$(I $0)</a>
 	DOLLAR=$
Index: template.dd
===================================================================
--- template.dd	(revision 1639)
+++ template.dd	(working copy)
@@ -13,7 +13,7 @@
 $(GRAMMAR
 $(GNAME TemplateDeclaration):
 	$(B template) $(GLINK TemplateIdentifier) $(B $(LPAREN)) $(GLINK TemplateParameterList) $(B $(RPAREN)) $(V2 $(GLINK Constraint)$(SUB $(I opt)))
-		$(B {) DeclDefs $(B })
+		$(B {) $(LINK2 module.html#DeclDefs, $(I DeclDefs)) $(B })
 
 $(GNAME TemplateIdentifier):
 	$(I Identifier)
@@ -27,9 +27,8 @@
 	$(GLINK TemplateValueParameter)
 	$(GLINK TemplateAliasParameter)
 	$(GLINK TemplateTupleParameter)
-$(V2
-	$(GLINK TemplateThisParameter))
-)
+        $(V2
+	$(GLINK TemplateThisParameter)))
 
 $(P	The body of the $(I TemplateDeclaration) must be syntactically correct
 	even if never instantiated. Semantic analysis is not done until
@@ -66,16 +65,15 @@
 $(GRAMMAR
 $(GNAME TemplateInstance):
 	$(GLINK TemplateIdentifier) $(B !$(LPAREN)) $(GLINK TemplateArgumentList) $(B $(RPAREN))
-$(V2
-	$(GLINK TemplateIdentifier) $(B !) $(GLINK TemplateSingleArgument)
-)
+        $(V2
+	$(GLINK TemplateIdentifier) $(B !) $(GLINK TemplateSingleArgument))
 
 $(GNAME TemplateArgumentList):
 	$(GLINK TemplateArgument)
 	$(GLINK TemplateArgument) , $(I TemplateArgumentList)
 
 $(GNAME TemplateArgument):
-	$(I Type)
+	$(LINK2 declaration.html#Type, $(I Type))
 	$(ASSIGNEXPRESSION)
 	$(I Symbol)
 
@@ -332,10 +330,10 @@
 	$(I Identifier) $(I TemplateTypeParameterSpecialization) $(I TemplateTypeParameterDefault)
 
 $(GNAME TemplateTypeParameterSpecialization):
-	 $(B :) $(I Type)
+	 $(B :) $(LINK2 declaration.html#Type, $(I Type))
 
 $(GNAME TemplateTypeParameterDefault):
-	 $(B =) $(I Type)
+	 $(B =) $(LINK2 declaration.html#Type, $(I Type))
 )
 
 <h3>Specialization</h3>
@@ -412,19 +410,18 @@
 
 $(GRAMMAR
 $(GNAME TemplateValueParameter):
-    $(I Declaration)
-    $(I Declaration) $(I TemplateValueParameterSpecialization)
-    $(I Declaration) $(I TemplateValueParameterDefault)
-    $(I Declaration) $(I TemplateValueParameterSpecialization) $(I TemplateValueParameterDefault)
+    $(LINK2 declaration.html#BasicType, $(I BasicType)) $(LINK2 declaration.html#Declarator, $(I Declarator))
+    $(LINK2 declaration.html#BasicType, $(I BasicType)) $(LINK2 declaration.html#Declarator, $(I Declarator)) $(I TemplateValueParameterSpecialization)
+    $(LINK2 declaration.html#BasicType, $(I BasicType)) $(LINK2 declaration.html#Declarator, $(I Declarator)) $(I TemplateValueParameterDefault)
+    $(LINK2 declaration.html#BasicType, $(I BasicType)) $(LINK2 declaration.html#Declarator, $(I Declarator)) $(I TemplateValueParameterSpecialization) $(I TemplateValueParameterDefault)
 
 $(GNAME TemplateValueParameterSpecialization):
     $(B :) $(LINK2 expression.html#ConditionalExpression, $(I ConditionalExpression))
 
 $(GNAME TemplateValueParameterDefault):
-$(V2
-    $(B = __FILE__)
+    $(V2 $(B = __FILE__)
     $(B = __LINE__))
-    $(B =) $(LINK2 expression.html#ConditionalExpression, $(I ConditionalExpression))
+    $(B =) $(LINK2 expression.html#AssignExpression, $(I AssignExpression))
 )
 
 $(V2
@@ -471,13 +468,16 @@
 
 $(GRAMMAR
 $(GNAME TemplateAliasParameter):
-    $(B alias) $(I Identifier) $(I TemplateAliasParameterSpecialization)$(SUB $(I opt)) $(I TemplateAliasParameterDefault)$(SUB $(I opt))
+    $(B alias) $(I Identifier) $(I TemplateAliasParameterSpecialization)$(OPT) $(I TemplateAliasParameterDefault)$(OPT)
+    $(B alias) $(LINK2 declaration.html#BasicType, $(I BasicType)) $(LINK2 declaration.html#Declarator, $(I Declarator)) $(I TemplateAliasParameterSpecialization)$(OPT) $(I TemplateAliasParameterDefault)$(OPT)
 
 $(GNAME TemplateAliasParameterSpecialization):
-     $(B :) $(I Type)
+     $(B :) $(LINK2 declaration.html#Type, $(I Type))
+     $(B :) $(LINK2 expression.html#ConditionalExpression, $(I ConditionalExpression))
 
 $(GNAME TemplateAliasParameterDefault):
-     $(B =) $(I Type)
+     $(B =) $(LINK2 declaration.html#Type, $(I Type))
+     $(B =) $(LINK2 expression.html#ConditionalExpression, $(I ConditionalExpression))
 )
 
 	$(P Alias parameters enable templates to be parameterized with
@@ -781,7 +781,10 @@
 
 $(GRAMMAR
 $(GNAME ClassTemplateDeclaration):
-    $(B class) $(I Identifier) $(B $(LPAREN)) $(GLINK TemplateParameterList) $(B $(RPAREN)) $(I BaseClassList) $(I ClassBody)
+    $(B class) $(I Identifier) $(B $(LPAREN)) $(GLINK TemplateParameterList) $(B $(RPAREN)) $(GLINK Constraint)$(OPT) $(GLINK BaseClassList) $(GLINK ClassBody)
+
+$(GNAME TemplatedConstructor):
+    $(B this) $(GLINK TemplateParameterList) $(GLINK Parameters) $(GLINK Constraint)$(OPT) $(GLINK FunctionBody)
 )
 
 	$(P If a template declares exactly one member, and that member is a class
@@ -1048,6 +1051,7 @@
 
 Macros:
 	TITLE=Templates
+        OPT=<sub>opt</sub>
 	WIKI=Template
 	GLINK=$(LINK2 #$0, $(I $0))
 	GNAME=<a name=$0>$(I $0)</a>
Index: declaration.dd
===================================================================
--- declaration.dd	(revision 1639)
+++ declaration.dd	(working copy)
@@ -71,12 +71,13 @@
         $(B [ ])
         $(B [) $(VEXPRESSION) $(B ])
         $(B [) $(VEXPRESSION) .. $(VEXPRESSION) $(B ])
-        $(B [) $(I Type) $(B ])
+        $(B [) $(GLINK Type) $(B ])
         $(B delegate) $(GLINK Parameters) $(V2 $(GLINK FunctionAttributes)$(OPT))
         $(B function) $(GLINK Parameters) $(V2 $(GLINK FunctionAttributes)$(OPT))
 
 $(GNAME Declarator):
         $(GLINK BasicType2)$(OPT) $(I Declarator) $(GLINK DeclaratorSuffixes)$(OPT)
+        $(GLINK BasicType2)$(OPT) $(B $(LPAREN)) $(I Declarator) $(B $(RPAREN)) $(GLINK DeclaratorSuffixes)$(OPT)
         $(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK DeclaratorSuffixes)$(OPT)
 
 $(GNAME DeclaratorSuffixes):
@@ -86,14 +87,14 @@
 $(GNAME DeclaratorSuffix):
         $(B [ ])
         $(B [) $(VEXPRESSION) $(B ])
-        $(B [) $(I Type) $(B ])
-	$(LINK2 template.html#TemplateParameterList, $(I TemplateParameterList))$(OPT) $(GLINK Parameters) $(V2 $(GLINK MemberFunctionAttributes)<sub>opt</sub>)
+        $(B [) $(GLINK Type) $(B ])
+	$(LINK2 template.html#TemplateParameterList, $(I TemplateParameterList))$(OPT) $(GLINK Parameters) $(V2 $(GLINK MemberFunctionAttributes)$(OPT) $(V2 $(GLINK Constraint))$(OPT))
 
 $(GNAME IdentifierList):
         $(I Identifier)
         $(I Identifier) $(B .) $(I IdentifierList)
-        $(I TemplateInstance)
-        $(I TemplateInstance) $(B .) $(I IdentifierList)
+        $(LINK2 template.html#TemplateInstance, $(I TemplateInstance))
+        $(LINK2 template.html#TemplateInstance, $(I TemplateInstance)) $(B .) $(I IdentifierList)
 
 $(GNAME StorageClasses):
 	$(GLINK StorageClass)
@@ -102,29 +103,34 @@
 $(GNAME StorageClass):
         $(B abstract)
         $(B auto)
-        $(B const)
         $(B deprecated)
         $(B extern)
         $(B final)
-$(V2
+        $(V2 $(B const)
         $(B immutable)
+        $(B enum)
         $(B inout)
         $(B shared)
 	$(B nothrow)
         $(B override)
 	$(B pure)
-)        $(B scope)
+        $(B __gshared)
+        $(B __thread)
+        $(I Property))        
+        $(B scope)
         $(B static)
         $(B synchronized)
 
+$(GNAME Property):
+        $(B @) $(I Identifier)
+
 $(GNAME Type):
         $(GLINK BasicType)
         $(GLINK BasicType) $(GLINK Declarator2)
 
 $(GNAME Declarator2):
-        $(GLINK BasicType2) $(I Declarator2)
-        $(B $(LPAREN)) $(I Declarator2) $(B $(RPAREN))
-        $(B $(LPAREN)) $(I Declarator2) $(B $(RPAREN)) $(GLINK DeclaratorSuffixes)
+        $(GLINK BasicType2)$(OPT) $(I Declarator2)$(OPT) $(GLINK DeclaratorSuffixes)$(OPT)
+        $(GLINK BasicType2)$(OPT) $(B $(LPAREN)) $(I Declarator2) $(B $(RPAREN)) $(GLINK DeclaratorSuffixes)$(OPT)
 
 $(GNAME Parameters):
 	$(B $(LPAREN)) $(GLINK ParameterList) $(B $(RPAREN))
@@ -133,20 +139,31 @@
 $(GNAME ParameterList):
         $(GLINK Parameter)
         $(GLINK Parameter) $(B ,) $(I ParameterList)
-        $(GLINK Parameter) $(B ...)
         $(B ...)
 
 $(GNAME Parameter):
-        $(GLINK Declarator)
-        $(GLINK Declarator) = $(I DefaultInitializerExpression)
-        $(I InOut) $(GLINK Declarator)
-        $(I InOut) $(GLINK Declarator) = $(I DefaultInitializerExpression)
+        $(I InOut)$(OPT) $(GLINK BasicType) $(GLINK Declarator)
+        $(I InOut)$(OPT) $(GLINK BasicType) $(GLINK Declarator) $(B ...)
+        $(I InOut)$(OPT) $(GLINK BasicType) $(GLINK Declarator) = $(GLINK DefaultInitializerExpression)
+        $(I InOut)$(OPT) $(GLINK Type)
+        $(I InOut)$(OPT) $(GLINK Type) $(B ...)
 
 $(GNAME InOut):
+        $(I InOutX)
+        $(I InOut InOutX)
+
+$(GNAME InOutX):
+        $(B auto)
+        $(B const)
+        $(B final)
+        $(B immutable)
         $(B in)
+        $(B inout)
+        $(B lazy)
         $(B out)
         $(B ref)
-        $(B lazy)
+        $(B scope)
+        $(B shared)
 
 $(V2
 $(GNAME FunctionAttributes):
@@ -156,6 +173,7 @@
 $(GNAME FunctionAttribute):
 	$(B nothrow)
 	$(B pure)
+        $(GLINK Property)
 )
 $(GNAME MemberFunctionAttributes):
 	$(GLINK MemberFunctionAttribute)
@@ -170,7 +188,7 @@
 
 $(GNAME DefaultInitializerExpression):
 	$(ASSIGNEXPRESSION)
-$(V2
+        $(V2
 	$(B __FILE__)
 	$(B __LINE__))
 
@@ -273,7 +291,11 @@
 
 $(GRAMMAR
 $(GNAME AutoDeclaration):
-	$(I StorageClasses) $(I Identifier) $(B =) $(ASSIGNEXPRESSION) $(B ;)
+	$(GLINK StorageClasses) $(I AutoDeclarationX) $(B ;)
+
+$(GNAME AutoDeclarationX):
+        $(I Identifier) $(B =) $(GLINK Initializer)
+        $(I AutoDeclarationX) $(B ,) $(I Identifier) $(B =) $(GLINK Initializer)
 )
 
 	$(P If a declaration starts with a $(I StorageClass) and has
