Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision b5b09071113f2e9f4fb6ed95bf2a6b23f0f3c912)
+++ src/CodeGen/CodeGenerator.cc	(revision 94b43648ada29b4df3c583a8997f2d37cd298768)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Mon Jun 15 12:43:21 2015
-// Update Count     : 138
+// Last Modified On : Mon Jun 15 12:47:16 2015
+// Update Count     : 142
 //
 
@@ -71,5 +71,5 @@
 		} // if
 	}
- 
+
 	//*** Declarations
 	void CodeGenerator::visit( FunctionDecl *functionDecl ) {
@@ -113,5 +113,5 @@
 
 		if ( ! memb.empty() ) {
-			output << endl << indent << "{" << endl;
+			output << " {" << endl;
 
 			cur_indent += CodeGenerator::tabsize; 
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision b5b09071113f2e9f4fb6ed95bf2a6b23f0f3c912)
+++ src/ResolvExpr/Resolver.cc	(revision 94b43648ada29b4df3c583a8997f2d37cd298768)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:17:01 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jun 10 16:11:19 2015
-// Update Count     : 77
+// Last Modified On : Tue Jun 16 14:50:11 2015
+// Update Count     : 154
 //
 
@@ -37,4 +37,5 @@
 		virtual void visit( ObjectDecl *functionDecl );
 		virtual void visit( TypeDecl *typeDecl );
+
 		virtual void visit( ArrayType * at );
 
@@ -51,4 +52,9 @@
 		virtual void visit( ListInit *listInit );
 	  private:
+  	typedef std::list< Initializer * >::iterator InitIterator;
+
+	  void resolveAggrInit( AggregateDecl *, InitIterator &, InitIterator & );
+	  void resolveSingleAggrInit( Declaration *, InitIterator &, InitIterator & );
+
 		std::list< Type * > functionReturn;
 		Type *initContext;
@@ -167,9 +173,8 @@
 			delete at->get_dimension();
 			at->set_dimension( newExpr );
-
 		}
 		Visitor::visit( at );
 	}
-  
+
 	void Resolver::visit( TypeDecl *typeDecl ) {
 		if ( typeDecl->get_base() ) {
@@ -179,5 +184,5 @@
 		SymTab::Indexer::visit( typeDecl );
 	}
-  
+
 	void Resolver::visit( FunctionDecl *functionDecl ) {
 #if 0
@@ -329,15 +334,53 @@
 	}
 
-	void Resolver::visit( ListInit *listInit ) {
+	void Resolver::resolveSingleAggrInit( Declaration * dcl, InitIterator & init, InitIterator & initEnd ) {
+		DeclarationWithType * dt = dynamic_cast< DeclarationWithType * >( dcl );
+		assert( dt );
+		initContext = dt->get_type();
+		try {
+			if ( init == initEnd ) return; // stop when there are no more initializers
+			(*init)->accept( *this );
+			++init; // made it past an initializer
+		} catch( SemanticError & ) {
+			// need to delve deeper, if you can
+			if ( StructInstType * sit = dynamic_cast< StructInstType * >( dt->get_type() ) ) {
+				resolveAggrInit( sit->get_baseStruct(), init, initEnd );
+			} else if ( UnionInstType * uit = dynamic_cast< UnionInstType * >( dt->get_type() ) ) {
+				resolveAggrInit( uit->get_baseUnion(), init, initEnd );
+			} else {
+				// might need to rethink what is being thrown
+				throw;
+			} // if
+		}
+	}
+
+	void Resolver::resolveAggrInit( AggregateDecl * aggr, InitIterator & init, InitIterator & initEnd ) {
+		if ( StructDecl * st = dynamic_cast< StructDecl * >( aggr ) ) {
+			// want to resolve each initializer to the members of the struct,
+			// but if there are more initializers than members we should stop
+			list< Declaration * >::iterator it = st->get_members().begin();
+			for ( ; it != st->get_members().end(); ++it) {
+				resolveSingleAggrInit( *it, init, initEnd );
+			}
+		} else if ( UnionDecl * un = dynamic_cast< UnionDecl * >( aggr ) ) {
+			// only resolve to the first member of a union
+			resolveSingleAggrInit( *un->get_members().begin(), init, initEnd );
+		} // if
+	}
+
+	void Resolver::visit( ListInit * listInit ) {
+		InitIterator iter = listInit->begin_initializers();
+		InitIterator end = listInit->end_initializers();
+
 		if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) {
-			std::list< Initializer * >::iterator iter( listInit->begin_initializers() );
-			for ( ; iter != listInit->end_initializers(); ++iter ) {
+			// resolve each member to the base type of the array
+			for ( ; iter != end; ++iter ) {
 				initContext = at->get_base();
 				(*iter)->accept( *this );
 			} // for
+		} else if ( StructInstType * st = dynamic_cast< StructInstType * >( initContext ) ) {
+			resolveAggrInit( st->get_baseStruct(), iter, end );
 		} else if ( UnionInstType *st = dynamic_cast< UnionInstType * >( initContext ) ) {
-			DeclarationWithType *dt = dynamic_cast< DeclarationWithType * >( *st->get_baseUnion()->get_members().begin() );
-			initContext = dt->get_type();
-			(*listInit->begin_initializers())->accept( *this );
+			resolveAggrInit( st->get_baseUnion(), iter, end );
 		} else {
 			// basic types are handled here
