Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision f0121d7b1fdcae6c3362d9920d387c2a83a180d7)
+++ src/InitTweak/FixInit.cc	(revision 8780e30b2d0cf8d3c7765ec0c68824494b453871)
@@ -18,4 +18,6 @@
 #include <iterator>
 #include <algorithm>
+#include <unordered_map>
+#include <unordered_set>
 #include "InitTweak.h"
 #include "FixInit.h"
@@ -445,5 +447,8 @@
 				impCpCtorExpr->get_returnDecls().push_back( ret );
 				CP_CTOR_PRINT( std::cerr << "makeCtorDtor for a return" << std::endl; )
-				destructRet( new VariableExpr( ret ) , impCpCtorExpr );
+				if ( ! result->get_isLvalue() ) {
+					// destructing lvalue returns is bad because it can cause multiple destructor calls to the same object - the returned object is not a temporary
+					destructRet( new VariableExpr( ret ), impCpCtorExpr );
+				}
 			} // for
 			CP_CTOR_PRINT( std::cerr << "after Resolving: " << impCpCtorExpr << std::endl; )
