Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 64eae5636740bd0793ff27432eb02ade2386bec3)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 907eccb29a08fe51aa5e5c20aa28f841482b4436)
@@ -351,13 +351,12 @@
 		if ( TupleType * tupleType = dynamic_cast< TupleType * >( formalType ) ) {
 			// formalType is a TupleType - group actuals into a TupleExpr whose type unifies with the TupleType
-			TupleExpr * tupleExpr = new TupleExpr();
+			std::list< Expression * > exprs;
 			for ( Type * type : *tupleType ) {
-				if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( tupleExpr->get_exprs() ) ) ) {
-					delete tupleExpr;
+				if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( exprs ) ) ) {
+					deleteAll( exprs );
 					return false;
 				}
 			}
-			tupleExpr->set_result( Tuples::makeTupleType( tupleExpr->get_exprs() ) );
-			*out++ = tupleExpr;
+			*out++ = new TupleExpr( exprs );
 		} else if ( actualIt != actualEnd ) {
 			if ( TypeInstType * ttype = Tuples::isTtype( formalType ) ) {
@@ -1058,5 +1057,5 @@
 	}
 
-	void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
+	void AlternativeFinder::visit( UntypedTupleExpr *tupleExpr ) {
 		std::list< AlternativeFinder > subExprAlternatives;
 		findSubExprs( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end(), back_inserter( subExprAlternatives ) );
@@ -1064,12 +1063,15 @@
 		combos( subExprAlternatives.begin(), subExprAlternatives.end(), back_inserter( possibilities ) );
 		for ( std::list< AltList >::const_iterator i = possibilities.begin(); i != possibilities.end(); ++i ) {
-			TupleExpr *newExpr = new TupleExpr;
-			makeExprList( *i, newExpr->get_exprs() );
-			newExpr->set_result( Tuples::makeTupleType( newExpr->get_exprs() ) );
+			std::list< Expression * > exprs;
+			makeExprList( *i, exprs );
 
 			TypeEnvironment compositeEnv;
 			simpleCombineEnvironments( i->begin(), i->end(), compositeEnv );
-			alternatives.push_back( Alternative( newExpr, compositeEnv, sumCost( *i ) ) );
+			alternatives.push_back( Alternative( new TupleExpr( exprs ) , compositeEnv, sumCost( *i ) ) );
 		} // for
+	}
+
+	void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
+		alternatives.push_back( Alternative( tupleExpr->clone(), env, Cost::zero ) );
 	}
 
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision 64eae5636740bd0793ff27432eb02ade2386bec3)
+++ src/ResolvExpr/AlternativeFinder.h	(revision 907eccb29a08fe51aa5e5c20aa28f841482b4436)
@@ -64,7 +64,8 @@
 		virtual void visit( ConditionalExpr *conditionalExpr );
 		virtual void visit( CommaExpr *commaExpr );
-		virtual void visit( TupleExpr *tupleExpr );
 		virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr );
 		virtual void visit( ConstructorExpr * ctorExpr );
+		virtual void visit( UntypedTupleExpr *tupleExpr );
+		virtual void visit( TupleExpr *tupleExpr );
 		virtual void visit( TupleIndexExpr *tupleExpr );
 		virtual void visit( TupleAssignExpr *tupleExpr );
