--- gencode.orig	Wed Apr 20 11:50:54 2005
+++ gencode.c	Wed Apr 20 13:42:29 2005
@@ -4194,7 +4194,8 @@ static void generateVirtualHandler(sipSp
 
 		generateResultType(&res_noconstref,fp);
 
-		prcode(fp," *sipResOrig;\n");
+		/* James - initialise to NULL */
+		prcode(fp," *sipResOrig = NULL;\n");
 	}
 
 	/* Call the method. */
@@ -4264,11 +4265,26 @@ static void generateVirtualHandler(sipSp
 		);
 
 	/* Make a copy if needed. */
+	/* James - clean up the original to plug memory leak 
+	     What if this was not allocated with new? */
 	if (copy)
+	{
 		prcode(fp,
 "	else\n"
 "		sipRes = *sipResOrig;\n"
-			);
+				);
+		if( res->atype == class_type )
+			prcode(fp,
+"\n"
+"	if( sipResOrig && sipGetCppPtr((sipWrapper*)sipResObj, sipClass_%T) != sipResOrig )\n"
+"		delete sipResOrig;\n"
+				,res);
+		else
+			prcode(fp,
+"\n"
+"	delete sipResOrig;\n"
+				);
+	}
 
 	if (isTransferVH(vhd))
 		prcode(fp,
