Index: src/CompilationState.cc
===================================================================
--- src/CompilationState.cc	(revision be30a90e535d46200414e55c3556dce1615e449c)
+++ src/CompilationState.cc	(revision ebcc940320da7c6999e01f5f3cb048ff07113844)
@@ -38,5 +38,7 @@
 	codegenp = false,
 	prettycodegenp = false,
-	linemarks = false;
+	linemarks = false,
+	stats_heap = false,
+	stats_counters = false;
 
 // Local Variables: //
Index: src/CompilationState.h
===================================================================
--- src/CompilationState.h	(revision be30a90e535d46200414e55c3556dce1615e449c)
+++ src/CompilationState.h	(revision ebcc940320da7c6999e01f5f3cb048ff07113844)
@@ -39,5 +39,7 @@
 	codegenp,
 	prettycodegenp,
-	linemarks;
+	linemarks,
+	stats_heap,
+	stats_counters;
 
 // is the compiler building prelude or libcfa?
Index: src/main.cc
===================================================================
--- src/main.cc	(revision be30a90e535d46200414e55c3556dce1615e449c)
+++ src/main.cc	(revision ebcc940320da7c6999e01f5f3cb048ff07113844)
@@ -378,6 +378,6 @@
 	deleteAll( translationUnit );
 	if(!libcfap && !treep) {
-		Stats::Counters::print();
-		Stats::Heap::print();
+		if(stats_counters) Stats::Counters::print();
+		if(stats_heap) Stats::Heap::print();
 	}
 
@@ -386,5 +386,5 @@
 
 void parse_cmdline( int argc, char * argv[], const char *& filename ) {
-	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, ResolvProto, Symbol, Tree, TupleExpansion, Validate, };
+	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, ResolvProto, Stats, Symbol, Tree, TupleExpansion, Validate};
 
 	static struct option long_opts[] = {
@@ -406,4 +406,5 @@
 		{ "resolver", no_argument, 0, Resolver },
 		{ "resolv-proto", no_argument, 0, ResolvProto },
+		{ "stats", required_argument, 0, Stats },
 		{ "symbol", no_argument, 0, Symbol },
 		{ "tree", no_argument, 0, Tree },
@@ -493,4 +494,24 @@
 		  case 'R':										// dump resolv-proto instance
 			resolvprotop = true;
+			break;
+		  case Stats:
+			{
+				std::stringstream ss(optarg);
+				while(ss.good()) {
+					std::string substr;
+					getline( ss, substr, ',' );
+					if(substr == "counters") {
+						stats_counters = true;
+					} else if(substr == "heap") {
+						stats_heap = true;
+					} else if(substr == "none") {
+						stats_counters = false;
+						stats_heap = false;
+					} else {
+						std::cerr << "Ignoring unknown statistic " << substr << std::endl;
+					}
+				}
+
+			}
 			break;
 		  case Symbol:
