diff --git a/.monadid b/.monadid
index 1b9289d9832df62328d9f72b20ae8f9520b98c7a..ad36d09d9f2bc038be8822789aff65d95a021bc1 100644
--- a/.monadid
+++ b/.monadid
@@ -1,4 +1,4 @@
 monad identification file
 This file is used for monad directory identification
-Built by toole1 on linux3.ews.illinois.edu
-Build Date: Fri Dec 9 15:37:13 CST 2011
+Built by toole1 on linux1.ews.illinois.edu
+Build Date: Sat Dec 10 03:45:14 CST 2011
diff --git a/ccmonad b/ccmonad
index 2f30386c2038018567a99c42d31f7adb8cf5cb9f..51c29927999d7a1d519ea5a7ed8e3f40e732a07b 100755
Binary files a/ccmonad and b/ccmonad differ
diff --git a/ccmonad.cpp b/ccmonad.cpp
index 90f011c187533b243fb08e246144984078add98a..91836bdf7671f0361f93da6db1c7bf319e0088fc 100644
--- a/ccmonad.cpp
+++ b/ccmonad.cpp
@@ -77,7 +77,7 @@ int main(int argc, const char * const * argv)
 			string line;
 			getline(input, line);
 			vector<string> tokens = tokenize(line, " \t");
-			if (tokens.size() == 2 && tokens[0] == "#if" && tokens[1] == "MONAD_SPLIT")
+			if (tokens.size() >= 2 && tokens[0] == "#if" && tokens[1] == "MONAD_SPLIT")
 				splits.push_back(line_i);
 		}
 
@@ -92,6 +92,14 @@ int main(int argc, const char * const * argv)
 			args.push_back("-DMONAD_SPLIT_LINE_NUMBER=" + lexical_cast<string>(splits[split_i]));
 			args.push_back("-o");
 			args.push_back(outputFile + "." + split_i);
+		
+#if 0
+			cout << "\tmonacc: " << compiler;
+			for (size_t i = 0; i < args.size(); i++)
+				cout << ' ' << args[i];
+			cout << endl;
+#endif
+
 			int8_t result2 = exec(compiler, args);
 			if (result2 == 0)
 				intermediate_outputs.push_back(outputFile + "." + split_i);
diff --git a/monad b/monad
index a1c239b0f760c6da99cb47d73f6d8beab7cd4497..18e6bde8a9a4c5b7752eb290d09c3c3836746b67 100755
Binary files a/monad and b/monad differ
diff --git a/monad.cpp b/monad.cpp
index 4820d4e6d851cd1030e135f8ec9a5d460a2ec956..4e17d0cfe7a42a632befbbe7bb63e1e9295b0a3d 100644
--- a/monad.cpp
+++ b/monad.cpp
@@ -38,6 +38,7 @@ bool newtests = false;
 bool provided = false;
 
 bool verbose  = false;
+bool buffer   = true;
 bool valgrind = false;
 bool parallel = false;
 
@@ -139,9 +140,11 @@ int main(int argc, const char * const * argv)
 	// TODO exec("make", "--quiet", "--warn-undefined-variables", 
 
 	cout << endl << endl;
-	const char * verboseflag  = (opts::verbose  ? "--verbose"  : NULL);
-	const char * valgrindflag = (opts::valgrind ? "--valgrind" : NULL);
-	int score = exec("./proxy", verboseflag, valgrindflag);
+	vector<string> args;
+	if (opts::verbose) args.push_back("--verbose");
+	if (opts::valgrind) args.push_back("--valgrind");
+	if (!opts::buffer) args.push_back("--noredirect");
+	int score = exec("./proxy", args);
 
 	// TODO (toole1): this causes weird output when scores are like 200
 	if (score < 0)
@@ -187,6 +190,7 @@ void monad::processArgs(int argc, const char * const * argv)
 	
 	options.addOption("optimize", opts::optimize);
 	options.addOption("verbose",  opts::verbose);
+	options.addOption("buffer",   opts::buffer);
 	options.addOption("valgrind", opts::valgrind);
 	options.addOption("parallel", opts::parallel);
 
diff --git a/proxy.cpp b/proxy.cpp
index 73cec1e3f41e41b19c9613c30d824479f1e41381..a5c47306b6879496da5f4d076754b032a86f3dce 100644
--- a/proxy.cpp
+++ b/proxy.cpp
@@ -305,7 +305,7 @@ int RunTests::run_all_tests()
 
 	cout << endl << endl;
 	output_detailed_info_if_any_failed(results, score);
-	output::total_score(score, get_sum_points());
+	output::total_score(score, -1);
 	
 	return score;
 }
@@ -352,7 +352,7 @@ void RunTests::output_detailed_info_if_any_failed(const vector<unit_test_result>
 	
 void RunTests::output_detailed_tests_info(const vector<unit_test_result> & results, int32_t score)
 {
-	output::total_score(score, get_sum_points());
+	output::total_score(score, -1);
 	cout << endl << endl;
 	
 	output::header("Detailed test output");