Index: src/Tuples/Explode.h
===================================================================
--- src/Tuples/Explode.h	(revision 8a1289fd023271a69d12e542e9e6b150d99e2c6a)
+++ src/Tuples/Explode.h	(revision 75308bcc1e9eee8d871b17db8841634a08cd0141)
@@ -84,5 +84,5 @@
 				// tuple type, but not tuple expr - recursively index into its components.
 				// if expr type is reference, convert to value type
-				Expression * arg = expr->clone();
+				Expression * arg = expr;
 				if ( Tuples::maybeImpureIgnoreUnique( arg ) ) {
 					// expressions which may contain side effects require a single unique instance of the expression.
@@ -94,11 +94,11 @@
 				}
 				for ( unsigned int i = 0; i < tupleType->size(); i++ ) {
-					TupleIndexExpr * idx = new TupleIndexExpr( arg->clone(), i );
+					TupleIndexExpr * idx = new TupleIndexExpr( arg, i );
 					explodeUnique( idx, alt, indexer, std::forward<Output>(out), isTupleAssign );
 				}
 			}
 		} else {
-			// atomic (non-tuple) type - output a clone of the expression in a new alternative
-			append( std::forward<Output>(out), expr->clone(), alt.env, alt.cost, alt.cvtCost );
+			// atomic (non-tuple) type - output the expression in a new alternative
+			append( std::forward<Output>(out), expr, alt.env, alt.cost, alt.cvtCost );
 		}
 	}
