Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 01d433e240fc8d7981952c4466b62350e4df4263)
+++ src/AST/Convert.cpp	(revision bb9924c1b60075c589a791e23516d610a7027f04)
@@ -1041,18 +1041,16 @@
 
 	const ast::Expr * visit( const ast::StmtExpr * node ) override final {
-		auto stmts = node->stmts;
-		// disable sharing between multiple StmtExprs explicitly.
-		// this should no longer be true.
-
 		auto rslt = new StmtExpr(
-			get<CompoundStmt>().accept1(stmts)
+			get<CompoundStmt>().accept1(node->stmts)
 		);
 
 		rslt->returnDecls = get<ObjectDecl>().acceptL(node->returnDecls);
 		rslt->dtors       = get<Expression>().acceptL(node->dtors);
-		if (node->resultExpr) {
-			// this MUST be found by children visit
-			rslt->resultExpr  = strict_dynamic_cast<ExprStmt *>(readonlyCache.at(node->resultExpr));
-		}
+
+		// is this even used after convert?
+		//if (tmp->resultExpr) {
+		//	// this MUST be found by children visit
+		//	rslt->resultExpr  = strict_dynamic_cast<ExprStmt *>(readonlyCache.at(tmp->resultExpr));
+		//}
 
 		auto expr = visitBaseExpr( node, rslt );
Index: src/Tuples/TupleExpansionNew.cpp
===================================================================
--- src/Tuples/TupleExpansionNew.cpp	(revision 01d433e240fc8d7981952c4466b62350e4df4263)
+++ src/Tuples/TupleExpansionNew.cpp	(revision bb9924c1b60075c589a791e23516d610a7027f04)
@@ -22,5 +22,5 @@
 	struct UniqueExprExpander final : public ast::WithDeclsToAdd<> {
 		const ast::Expr * postvisit( const ast::UniqueExpr * unqExpr );
-		std::map< int, const ast::Expr * > decls; // not vector, because order added may not be increasing order
+		std::map< int, ast::ptr<ast::Expr> > decls; // not vector, because order added may not be increasing order
 	};
 } // namespace
@@ -39,13 +39,12 @@
 		if ( ! decls.count( id ) ) {
 			ast::ptr< ast::Expr > assignUnq;
-			ast::ptr< ast::VariableExpr > var = unqExpr->var;
+			const ast::VariableExpr * var = unqExpr->var;
 			if ( unqExpr->object ) {
 				// an object was generated to represent this unique expression -- it should be added to the list of declarations now
 				declsToAddBefore.push_back( unqExpr->object.as< ast::Decl >() );
 				// deep copy required due to unresolved issues with UniqueExpr
-				assignUnq = ast::UntypedExpr::createAssign( loc, var, ast::deepCopy( unqExpr->expr.get() ) );
+				assignUnq = ast::UntypedExpr::createAssign( loc, var, unqExpr->expr );
 			} else {
-				ast::ptr< ast::Expr > expr = unqExpr->expr;
-				ast::ptr< ast::CommaExpr > commaExpr = expr.strict_as< ast::CommaExpr >();
+				const auto commaExpr = unqExpr->expr.strict_as< ast::CommaExpr >();
 				assignUnq = commaExpr->arg1;
 			}
@@ -64,5 +63,5 @@
 		}
 		//delete unqExpr;
-		return decls[id];
+		return ast::deepCopy(decls[id].get());
 	}
 } // namespace
