Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision c9d5c4fc564e6fd2f36a376096f2933eddc3d787)
+++ src/CodeGen/FixNames.cc	(revision 6d611fbad907e655df57704c865a57c64b6c6756)
@@ -56,5 +56,5 @@
 		auto && name = SymTab::Mangler::mangle( mainDecl.get() );
 		// std::cerr << name << std::endl;
-		return name;
+		return std::move(name);
 	}
 	std::string mangle_main_args() {
@@ -79,5 +79,5 @@
 		auto&& name = SymTab::Mangler::mangle( mainDecl.get() );
 		// std::cerr << name << std::endl;
-		return name;
+		return std::move(name);
 	}
 
Index: src/Common/Heap.cc
===================================================================
--- src/Common/Heap.cc	(revision c9d5c4fc564e6fd2f36a376096f2933eddc3d787)
+++ src/Common/Heap.cc	(revision 6d611fbad907e655df57704c865a57c64b6c6756)
@@ -14,7 +14,44 @@
 //
 
-namespace HeapStats{
-  void newPass( const char * const name ) {}
-  void printStats() {}
+#include <cstddef>
+#include <cassert>
+#include <iomanip>
+#include <iostream>
+
+namespace HeapStats {
+	#if !defined( WITH_HEAP_STATISTICS )
+		void newPass( const char * const ) {}
+
+		void printStats() {}
+	#else
+		struct StatBlock {
+			const char * name = nullptr;
+			size_t mallocs    = 0;
+			size_t frees      = 0;
+		};
+
+		StatBlock    passes[100];
+		const size_t passes_size = sizeof(passes) / sizeof(passes[0]);
+		size_t       passes_cnt = 0;
+
+		void newPass( const char * const name ) {
+			passes[passes_cnt].name    = name;
+			passes[passes_cnt].mallocs = 0;
+			passes[passes_cnt].frees   = 0;
+			passes_cnt++;
+
+			assertf(passes_cnt < passes_size, "Too many passes for HeapStats, increase the size of the array in Heap.h");
+		}
+
+		void printStats() {
+			std::cerr << "Heap usage statistic:" << std::endl;
+			std::cerr << "Pass                 | Malloc Count |   Free Count" << std::endl;
+			for(size_t i = 0; i < passes_cnt; i++) {
+				std::cerr << std::setw(20) << passes[i].name    << " | ";
+				std::cerr << std::setw(12) << passes[i].mallocs << " | ";
+				std::cerr << std::setw(12) << passes[i].frees   << "\n";
+			}
+		}
+	#endif
 }
 
Index: src/Common/Heap.h
===================================================================
--- src/Common/Heap.h	(revision c9d5c4fc564e6fd2f36a376096f2933eddc3d787)
+++ src/Common/Heap.h	(revision 6d611fbad907e655df57704c865a57c64b6c6756)
@@ -17,5 +17,5 @@
 
 namespace HeapStats {
-  void newPass( const char * const name );
-  void printStats();
+	void newPass( const char * const name );
+	void printStats();
 }
Index: src/main.cc
===================================================================
--- src/main.cc	(revision c9d5c4fc564e6fd2f36a376096f2933eddc3d787)
+++ src/main.cc	(revision 6d611fbad907e655df57704c865a57c64b6c6756)
@@ -390,5 +390,5 @@
 
 	deleteAll( translationUnit );
-	HeapStats::printStats();
+	if(!libcfap && !treep) HeapStats::printStats();
 	return 0;
 } // main
