Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 4a8c8752b2846dd89aff5883d03ff72a840d09fa)
+++ src/SynTree/Initializer.cc	(revision 70f89d00f25700f0fc226d5210840f0199c6d9f0)
@@ -20,4 +20,7 @@
 
 Initializer::Initializer( bool maybeConstructed ) : maybeConstructed( maybeConstructed ) {}
+Initializer::Initializer( const Initializer & other ) : maybeConstructed( other.maybeConstructed ) {
+}
+
 
 Initializer::~Initializer() {}
@@ -39,7 +42,7 @@
 }
 
-SingleInit::~SingleInit() {}
-
-SingleInit *SingleInit::clone() const { return new SingleInit( *this); }
+SingleInit::~SingleInit() {
+	deleteAll(designators);
+}
 
 void SingleInit::print( std::ostream &os, int indent ) {
@@ -58,11 +61,10 @@
 
 ListInit::ListInit( const std::list<Initializer*> &_initializers, const std::list<Expression *> &_designators, bool maybeConstructed )
-	: Initializer( maybeConstructed), initializers( _initializers ), designators( _designators ) {
+	: Initializer( maybeConstructed ), initializers( _initializers ), designators( _designators ) {
 }
 
-ListInit::~ListInit() {}
-
-ListInit *ListInit::clone() const {
-	return new ListInit( *this );
+ListInit::~ListInit() {
+	deleteAll( initializers );
+	deleteAll( designators );
 }
 
@@ -84,12 +86,12 @@
 
 
-ConstructorInit::ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init ) : Initializer( true ), ctor( ctor ), dtor( dtor ), init( init ) {}
+ConstructorInit::ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init, ObjectDecl * object, Type::Qualifiers qualifiers ) : Initializer( true ), ctor( ctor ), dtor( dtor ), init( init ), object( object ), qualifiers( qualifiers ) {}
+ConstructorInit::ConstructorInit( const ConstructorInit &other ) : Initializer( other ), ctor( maybeClone( other.ctor ) ), dtor( maybeClone( other.dtor ) ), init( maybeClone( other.init ) ), object( other.object ), qualifiers( other.qualifiers ) {
+}
+
 ConstructorInit::~ConstructorInit() {
 	delete ctor;
+	delete dtor;
 	delete init;
-}
-
-ConstructorInit *ConstructorInit::clone() const {
-	return new ConstructorInit( *this );
 }
 
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision 4a8c8752b2846dd89aff5883d03ff72a840d09fa)
+++ src/SynTree/Initializer.h	(revision 70f89d00f25700f0fc226d5210840f0199c6d9f0)
@@ -20,4 +20,5 @@
 #include "Visitor.h"
 #include "Mutator.h"
+#include "Type.h"
 
 #include <cassert>
@@ -28,4 +29,5 @@
 	//	Initializer( std::string _name = std::string(""), int _pos = 0 );
 	Initializer( bool maybeConstructed );
+	Initializer( const Initializer & other );
 	virtual ~Initializer();
 
@@ -68,5 +70,5 @@
 	std::list<Expression *> &get_designators() { return designators; }
 
-	virtual SingleInit *clone() const;
+	virtual SingleInit *clone() const { return new SingleInit( *this); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
@@ -94,5 +96,5 @@
 	std::list<Initializer*>::iterator end_initializers() { return initializers.end(); }
 
-	virtual ListInit *clone() const;
+	virtual ListInit *clone() const { return new ListInit( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
@@ -107,5 +109,6 @@
 class ConstructorInit : public Initializer {
   public:
-	ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init );
+	ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init, ObjectDecl * objectDecl, Type::Qualifiers qualifiers );
+	ConstructorInit( const ConstructorInit &other );
 	virtual ~ConstructorInit();
 
@@ -116,6 +119,10 @@
 	void set_init( Initializer * newValue ) { init = newValue; }
 	Initializer * get_init() const { return init; }
+	void set_object( ObjectDecl * newValue ) { object = newValue; }
+	ObjectDecl * get_object() const { return object; }
+	void set_qualifiers( Type::Qualifiers newValue ) { qualifiers = newValue; }
+	Type::Qualifiers get_qualifiers() { return qualifiers; }
 
-	virtual ConstructorInit *clone() const;
+	ConstructorInit *clone() const { return new ConstructorInit( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
@@ -128,4 +135,9 @@
 	// if an appropriate constructor definition is not found by the resolver
 	Initializer * init;
+	// Non-owned pointer back to the object being constructed
+	ObjectDecl * object;
+	// to construct const objects, need to first remove type qualifiers, then resolve
+	// then add qualifiers back onto object
+	Type::Qualifiers qualifiers;
 };
 
