Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/CodeGen/CodeGenerator.cc	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -63,5 +63,5 @@
 	} // extension
 
-	CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) {
+	CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::vector< Label > & l ) {
 		labels = &l;
 		return *this;
@@ -69,5 +69,5 @@
 
 	ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter & printLabels ) {
-		std::list< Label > & labs = *printLabels.labels;
+		std::vector< Label >  & labs = *printLabels.labels;
 		// l.unique(); // assumes a sorted list. Why not use set? Does order matter?
 		for ( Label & l : labs ) {
@@ -911,5 +911,5 @@
 		if ( ! asmStmt->get_gotolabels().empty() ) {
 			output << " : ";
-			for ( std::list<Label>::iterator begin = asmStmt->get_gotolabels().begin();; ) {
+			for ( std::vector< Label > ::iterator begin = asmStmt->get_gotolabels().begin();; ) {
 				output << *begin++;
 				if ( begin == asmStmt->get_gotolabels().end() ) break;
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/CodeGen/CodeGenerator.h	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -124,7 +124,7 @@
 		struct LabelPrinter {
 			LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {}
-			LabelPrinter & operator()( std::list< Label > & l );
+			LabelPrinter & operator()( std::vector< Label >  & l );
 			CodeGenerator & cg;
-			std::list< Label > * labels;
+			std::vector< Label >  * labels;
 		};
 
Index: src/ControlStruct/LabelFixer.cc
===================================================================
--- src/ControlStruct/LabelFixer.cc	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/ControlStruct/LabelFixer.cc	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -50,5 +50,5 @@
 	// prune to at most one label definition for each statement
 	void LabelFixer::previsit( Statement *stmt ) {
-		std::list< Label > &labels = stmt->get_labels();
+		std::vector< Label >  &labels = stmt->get_labels();
 
 		if ( ! labels.empty() ) {
@@ -77,5 +77,5 @@
 	// sets the definition of the labelTable entry to be the provided
 	// statement for every label in the list parameter. Happens for every kind of statement
-	Label LabelFixer::setLabelsDef( std::list< Label > &llabel, Statement *definition ) {
+	Label LabelFixer::setLabelsDef( std::vector< Label >  &llabel, Statement *definition ) {
 		assert( definition != 0 );
 		assert( llabel.size() > 0 );
@@ -83,5 +83,5 @@
 		Entry * e = new Entry( definition );
 
-		for ( std::list< Label >::iterator i = llabel.begin(); i != llabel.end(); i++ ) {
+		for ( std::vector< Label > ::iterator i = llabel.begin(); i != llabel.end(); i++ ) {
 			Label & l = *i;
 			l.set_statement( definition ); // attach statement to the label to be used later
Index: src/ControlStruct/LabelFixer.h
===================================================================
--- src/ControlStruct/LabelFixer.h	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/ControlStruct/LabelFixer.h	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -46,5 +46,5 @@
 		void previsit( LabelAddressExpr *addrExpr );
 
-		Label setLabelsDef( std::list< Label > &, Statement *definition );
+		Label setLabelsDef( std::vector< Label >  &, Statement *definition );
 		template< typename UsageNode >
 		void setLabelsUsg( Label, UsageNode *usage = 0 );
Index: src/ControlStruct/MLEMutator.cc
===================================================================
--- src/ControlStruct/MLEMutator.cc	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/ControlStruct/MLEMutator.cc	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -70,5 +70,5 @@
 			if ( ! get_breakLabel().empty() ) {
 				std::list< Statement * >::iterator next = k+1;
-				std::list<Label> ls; ls.push_back( get_breakLabel() );
+				std::vector< Label >  ls; ls.push_back( get_breakLabel() );
 				kids.insert( next, new NullStmt( ls ) );
 				set_breakLabel("");
@@ -242,5 +242,5 @@
 		if ( e.isContUsed() ) {
 			// continue label goes in the body as the last statement
-			std::list< Label > labels; labels.push_back( e.useContExit() );
+			std::vector< Label >  labels; labels.push_back( e.useContExit() );
 			newBody->get_kids().push_back( new NullStmt( labels ) );
 		} // if
@@ -336,5 +336,5 @@
 				assert( ! enclosingControlStructures.empty() );
 				if ( enclosingControlStructures.back().isFallUsed() ) {
-					std::list<Label> ls{ enclosingControlStructures.back().useFallExit() };
+					std::vector< Label >  ls{ enclosingControlStructures.back().useFallExit() };
 					caseStmt->stmts.push_back( new NullStmt( ls ) );
 				} // if
@@ -346,5 +346,5 @@
 			if ( enclosingControlStructures.back().isFallDefaultUsed() ) {
 				// add fallthrough default label if necessary
-				std::list<Label> ls{ enclosingControlStructures.back().useFallDefaultExit() };
+				std::vector< Label >  ls{ enclosingControlStructures.back().useFallDefaultExit() };
 				caseStmt->stmts.push_front( new NullStmt( ls ) );
 			} // if
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/InitTweak/GenInit.cc	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -45,5 +45,5 @@
 namespace InitTweak {
 	namespace {
-		const std::list<Label> noLabels;
+		const std::vector< Label >  noLabels;
 		const std::list<Expression *> noDesignators;
 	}
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/Parser/ParseNode.h	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -169,5 +169,5 @@
 
 struct LabelNode {
-	std::list< Label > labels;
+	std::vector< Label >  labels;
 };
 
Index: src/SynTree/Label.h
===================================================================
--- src/SynTree/Label.h	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/SynTree/Label.h	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -49,5 +49,5 @@
 inline std::ostream & operator<<( std::ostream & out, const Label & l ) { return out << l.get_name(); }
 
-static const std::list< Label > noLabels;
+static const std::vector< Label >  noLabels;
 
 // Local Variables: //
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/SynTree/Statement.cc	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -32,5 +32,5 @@
 using std::endl;
 
-Statement::Statement( const std::list<Label> & labels ) : labels( labels ) {}
+Statement::Statement( const std::vector< Label >  & labels ) : labels( labels ) {}
 
 void Statement::print( std::ostream & os, Indenter indent ) const {
@@ -60,5 +60,5 @@
 
 
-AsmStmt::AsmStmt( bool voltile, Expression *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ) : Statement(), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {}
+AsmStmt::AsmStmt( bool voltile, Expression *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::vector< Label >  gotolabels ) : Statement(), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {}
 
 AsmStmt::AsmStmt( const AsmStmt & other ) : Statement( other ), voltile( other.voltile ), instruction( maybeClone( other.instruction ) ), gotolabels( other.gotolabels ) {
@@ -223,5 +223,5 @@
 }
 
-CaseStmt * CaseStmt::makeDefault( const std::list<Label> & labels, std::list<Statement *> stmts ) {
+CaseStmt * CaseStmt::makeDefault( const std::vector< Label >  & labels, std::list<Statement *> stmts ) {
 	CaseStmt * stmt = new CaseStmt( nullptr, stmts, true );
 	stmt->labels = labels;
@@ -511,5 +511,5 @@
 
 
-NullStmt::NullStmt( const std::list<Label> & labels ) : Statement( labels ) {
+NullStmt::NullStmt( const std::vector< Label >  & labels ) : Statement( labels ) {
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 70a1c3aed5e5b84a329ddc71a02c60806fd80216)
+++ src/SynTree/Statement.h	(revision bee06942613823dfa3adc6451bf356922ada830e)
@@ -35,11 +35,11 @@
 class Statement : public BaseSyntaxNode {
   public:
-	std::list<Label> labels;
-
-	Statement( const std::list<Label> & labels = {} );
+	std::vector< Label >  labels;
+
+	Statement( const std::vector< Label >  & labels = {} );
 	virtual ~Statement();
 
-	std::list<Label> & get_labels() { return labels; }
-	const std::list<Label> & get_labels() const { return labels; }
+	std::vector< Label >  & get_labels() { return labels; }
+	const std::vector< Label >  & get_labels() const { return labels; }
 
 	virtual Statement *clone() const override = 0;
@@ -70,5 +70,5 @@
 class NullStmt : public Statement {
   public:
-	NullStmt( const std::list<Label> & labels = {} );
+	NullStmt( const std::vector< Label >  & labels = {} );
 
 	virtual NullStmt *clone() const override { return new NullStmt( *this ); }
@@ -101,7 +101,7 @@
 	std::list<Expression *> output, input;
 	std::list<ConstantExpr *> clobber;
-	std::list<Label> gotolabels;
-
-	AsmStmt( bool voltile, Expression *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels );
+	std::vector< Label >  gotolabels;
+
+	AsmStmt( bool voltile, Expression *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::vector< Label >  gotolabels );
 	AsmStmt( const AsmStmt &other );
 	virtual ~AsmStmt();
@@ -117,6 +117,6 @@
 	std::list<ConstantExpr *> & get_clobber() { return clobber; }
 	void set_clobber( const std::list<ConstantExpr *> &newValue ) { clobber = newValue; }
-	std::list<Label> & get_gotolabels() { return gotolabels; }
-	void set_gotolabels( const std::list<Label> &newValue ) { gotolabels = newValue; }
+	std::vector< Label >  & get_gotolabels() { return gotolabels; }
+	void set_gotolabels( const std::vector< Label >  &newValue ) { gotolabels = newValue; }
 
 	virtual AsmStmt * clone() const { return new AsmStmt( *this ); }
@@ -196,5 +196,5 @@
 	virtual ~CaseStmt();
 
-	static CaseStmt * makeDefault( const std::list<Label> & labels = {}, std::list<Statement *> stmts = std::list<Statement *>() );
+	static CaseStmt * makeDefault( const std::vector< Label >  & labels = {}, std::list<Statement *> stmts = std::list<Statement *>() );
 
 	bool isDefault() const { return _isDefault; }
