Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
+++ src/Parser/DeclarationNode.cc	(revision 478b1d0d00fcef21da956b0b71fcee9f5c7968e4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 28 15:27:00 2017
-// Update Count     : 1019
+// Last Modified On : Fri Jul 14 16:55:00 2017
+// Update Count     : 1020
 //
 
@@ -253,4 +253,6 @@
 	newnode->type->aggregate.fields = fields;
 	newnode->type->aggregate.body = body;
+	newnode->type->aggregate.tagged = false;
+	newnode->type->aggregate.parent = nullptr;
 	return newnode;
 } // DeclarationNode::newAggregate
@@ -273,4 +275,18 @@
 	return newnode;
 } // DeclarationNode::newEnumConstant
+
+DeclarationNode * DeclarationNode::newTreeStruct( Aggregate kind, const string * name, const string * parent, ExpressionNode * actuals, DeclarationNode * fields, bool body ) {
+	assert( name );
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Aggregate );
+	newnode->type->aggregate.kind = kind;
+	newnode->type->aggregate.name = name;
+	newnode->type->aggregate.actuals = actuals;
+	newnode->type->aggregate.fields = fields;
+	newnode->type->aggregate.body = body;
+	newnode->type->aggregate.tagged = true;
+	newnode->type->aggregate.parent = parent;
+	return newnode;
+} // DeclarationNode::newTreeStruct
 
 DeclarationNode * DeclarationNode::newName( string * name ) {
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
+++ src/Parser/ParseNode.h	(revision 478b1d0d00fcef21da956b0b71fcee9f5c7968e4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Mon Jun 12 13:00:00 2017
-// Update Count     : 779
+// Last Modified On : Fri Jul 14 16:56:00 2017
+// Update Count     : 780
 //
 
@@ -248,4 +248,7 @@
 	static DeclarationNode * newAsmStmt( StatementNode * stmt ); // gcc external asm statement
 
+	// Perhaps this would best fold into newAggragate.
+	static DeclarationNode * newTreeStruct( Aggregate kind, const std::string * name, const std::string * parent, ExpressionNode * actuals, DeclarationNode * fields, bool body );
+
 	DeclarationNode();
 	~DeclarationNode();
@@ -332,4 +335,7 @@
 
 	static UniqueName anonymous;
+
+	// Temp to test TreeStruct
+	const std::string * parent_name;
 }; // DeclarationNode
 
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
+++ src/Parser/TypeData.cc	(revision 478b1d0d00fcef21da956b0b71fcee9f5c7968e4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 28 15:28:00 2017
-// Update Count     : 564
+// Last Modified On : Fri Jul 14 16:58:00 2017
+// Update Count     : 565
 //
 
@@ -63,4 +63,6 @@
 		aggregate.fields = nullptr;
 		aggregate.body = false;
+		aggregate.tagged = false;
+		aggregate.parent = nullptr;
 		break;
 	  case AggregateInst:
@@ -121,4 +123,5 @@
 		delete aggregate.actuals;
 		delete aggregate.fields;
+		delete aggregate.parent;
 		// delete aggregate;
 		break;
@@ -192,4 +195,6 @@
 		newtype->aggregate.kind = aggregate.kind;
 		newtype->aggregate.body = aggregate.body;
+		newtype->aggregate.tagged = aggregate.tagged;
+		newtype->aggregate.parent = aggregate.parent ? new string( *aggregate.parent ) : nullptr;
 		break;
 	  case AggregateInst:
@@ -619,4 +624,9 @@
 	switch ( td->aggregate.kind ) {
 	  case DeclarationNode::Struct:
+		if ( td->aggregate.tagged ) {
+			at = new StructDecl( *td->aggregate.name, td->aggregate.parent, attributes, linkage );
+			buildForall( td->aggregate.params, at->get_parameters() );
+			break;
+		}
 	  case DeclarationNode::Coroutine:
 	  case DeclarationNode::Monitor:
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
+++ src/Parser/TypeData.h	(revision 478b1d0d00fcef21da956b0b71fcee9f5c7968e4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 28 15:29:00 2017
-// Update Count     : 186
+// Last Modified On : Fri Jul 14 16:57:00 2017
+// Update Count     : 187
 //
 
@@ -31,4 +31,7 @@
 		DeclarationNode * fields;
 		bool body;
+
+		bool tagged;
+		const std::string * parent;
 	};
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
+++ src/Parser/parser.yy	(revision 478b1d0d00fcef21da956b0b71fcee9f5c7968e4)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 15 08:17:48 2017
-// Update Count     : 2450
+// Last Modified On : Sat Jul 15 09:46:26 2017
+// Update Count     : 2451
 //
 
@@ -1679,4 +1679,28 @@
 	| aggregate_key attribute_list_opt typegen_name		// CFA
 		{ $$ = $3->addQualifiers( $2 ); }
+
+// Temp, testing TreeStruct
+    | STRUCT TRY attribute_list_opt no_attr_identifier_or_type_name
+        {
+            typedefTable.makeTypedef( *$4 );            // create typedef
+            if ( forall ) typedefTable.changeKind( *$4, TypedefTable::TG ); // $
+            forall = false;                             // reset
+        }
+      '{' field_declaration_list '}'
+        {
+            $$ = DeclarationNode::newTreeStruct( DeclarationNode::Struct,
+                $4, nullptr, nullptr, $7, true )->addQualifiers( $3 );
+        }
+    | STRUCT TRY attribute_list_opt no_attr_identifier_or_type_name TYPEDEFname
+        {
+            typedefTable.makeTypedef( *$4 );            // create typedef
+            if ( forall ) typedefTable.changeKind( *$4, TypedefTable::TG ); // $
+            forall = false;                             // reset
+        }
+      '{' field_declaration_list '}'
+        {
+            $$ = DeclarationNode::newTreeStruct( DeclarationNode::Struct,
+                $4, $5, nullptr, $8, true )->addQualifiers( $3 );
+        }
 	;
 
