diff --git a/tools/llvmc2/Action.cpp b/tools/llvmc2/Action.cpp
index 8d34910..fdbfb88 100644
--- a/tools/llvmc2/Action.cpp
+++ b/tools/llvmc2/Action.cpp
@@ -20,12 +20,13 @@
 #include <stdexcept>
 
 using namespace llvm;
+using namespace llvmc;
 
 extern cl::opt<bool> VerboseMode;
 
 namespace {
   int ExecuteProgram(const std::string& name,
-                     const std::vector<std::string>& args) {
+                     const StringVector& args) {
     sys::Path prog = sys::Program::FindProgramByName(name);
 
     if (prog.isEmpty())
@@ -33,14 +34,27 @@
     if (!prog.canExecute())
       throw std::runtime_error("Program '" + name + "' is not executable.");
 
-    // Invoke the program
-    std::vector<const char*> argv((args.size()+2));
-    argv[0] = name.c_str();
-    for (unsigned i = 1; i <= args.size(); ++i)
-      argv[i] = args[i-1].c_str();
-    argv[args.size()+1] = 0;  // null terminate list.
+    const sys::Path* redirects[3] = {0,0,0};
+    sys::Path stdout_redirect;
 
-    return sys::Program::ExecuteAndWait(prog, &argv[0]);
+    std::vector<const char*> argv;
+    argv.reserve((args.size()+2));
+    argv.push_back(name.c_str());
+
+    for (StringVector::const_iterator B = args.begin(), E = args.end();
+         B!=E; ++B) {
+      if (*B == ">") {
+        ++B;
+        stdout_redirect.set(*B);
+        redirects[1] = &stdout_redirect;
+      }
+      else {
+        argv.push_back((*B).c_str());
+      }
+    }
+    argv.push_back(0);  // null terminate list.
+
+    return sys::Program::ExecuteAndWait(prog, &argv[0], 0, &redirects[0]);
   }
 
   void print_string (const std::string& str) {
@@ -48,7 +62,7 @@
   }
 }
 
-int llvmcc::Action::Execute() const {
+int llvmc::Action::Execute() const {
   if (VerboseMode) {
     std::cerr << Command_ << " ";
     std::for_each(Args_.begin(), Args_.end(), print_string);
diff --git a/tools/llvmc2/Action.h b/tools/llvmc2/Action.h
index 3f7b33b..7aaf470 100644
--- a/tools/llvmc2/Action.h
+++ b/tools/llvmc2/Action.h
@@ -17,14 +17,16 @@
 #include <string>
 #include <vector>
 
-namespace llvmcc {
+namespace llvmc {
+
+  typedef std::vector<std::string> StringVector;
 
   class Action {
     std::string Command_;
     std::vector<std::string> Args_;
   public:
-    Action (std::string const& C,
-            std::vector<std::string> const& A)
+    Action (const std::string& C,
+            const StringVector& A)
       : Command_(C), Args_(A)
     {}
 
diff --git a/tools/llvmc2/AutoGenerated.cpp b/tools/llvmc2/AutoGenerated.cpp
index 327e8e7..9b0255c 100644
--- a/tools/llvmc2/AutoGenerated.cpp
+++ b/tools/llvmc2/AutoGenerated.cpp
@@ -20,7 +20,7 @@
 #include <stdexcept>
 
 using namespace llvm;
-using namespace llvmcc;
+using namespace llvmc;
 
 // The auto-generated file
 #include "AutoGenerated.inc"
diff --git a/tools/llvmc2/AutoGenerated.h b/tools/llvmc2/AutoGenerated.h
index 686ae3f..49248d9 100644
--- a/tools/llvmc2/AutoGenerated.h
+++ b/tools/llvmc2/AutoGenerated.h
@@ -18,7 +18,7 @@
 
 #include <string>
 
-namespace llvmcc {
+namespace llvmc {
 
   typedef llvm::StringMap<std::string> LanguageMap;
   class CompilationGraph;
diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp
index a130ee5..817e0fb 100644
--- a/tools/llvmc2/CompilationGraph.cpp
+++ b/tools/llvmc2/CompilationGraph.cpp
@@ -24,7 +24,7 @@
 #include <stdexcept>
 
 using namespace llvm;
-using namespace llvmcc;
+using namespace llvmc;
 
 extern cl::list<std::string> InputFilenames;
 extern cl::opt<std::string> OutputFilename;
@@ -215,6 +215,9 @@
   return &getNode(ChooseEdge(TV)->ToolName());
 }
 
+// TOFIX: merge some parts with PassThroughGraph.
+// Build the targets. Command-line options are passed through
+// temporary variables.
 int CompilationGraph::Build (const sys::Path& TempDir) {
 
   // For each input file:
@@ -234,12 +237,13 @@
   // For all join nodes in topological order:
   for (std::vector<const Node*>::iterator B = JTV.begin(), E = JTV.end();
        B != E; ++B) {
-    // TOFIX: more testing, merge some parts with PassThroughGraph.
+
     sys::Path Out;
     const Node* CurNode = *B;
     JoinTool* JT = &dynamic_cast<JoinTool&>(*CurNode->ToolPtr.getPtr());
     bool IsLast = false;
 
+    // Has files pending?
     if (JT->JoinListEmpty())
       continue;
 
@@ -277,7 +281,7 @@
 
 namespace llvm {
   template <>
-  struct DOTGraphTraits<llvmcc::CompilationGraph*>
+  struct DOTGraphTraits<llvmc::CompilationGraph*>
     : public DefaultDOTGraphTraits
   {
 
diff --git a/tools/llvmc2/CompilationGraph.h b/tools/llvmc2/CompilationGraph.h
index dc388d0..7d949e6 100644
--- a/tools/llvmc2/CompilationGraph.h
+++ b/tools/llvmc2/CompilationGraph.h
@@ -26,7 +26,7 @@
 
 #include <string>
 
-namespace llvmcc {
+namespace llvmc {
 
   // An edge in the graph.
   class Edge : public llvm::RefCountedBaseVPTR<Edge> {
@@ -255,10 +255,10 @@
 
 namespace llvm {
   template <>
-  struct GraphTraits<llvmcc::CompilationGraph*> {
-    typedef llvmcc::CompilationGraph GraphType;
-    typedef llvmcc::Node NodeType;
-    typedef llvmcc::NodeChildIterator ChildIteratorType;
+  struct GraphTraits<llvmc::CompilationGraph*> {
+    typedef llvmc::CompilationGraph GraphType;
+    typedef llvmc::Node NodeType;
+    typedef llvmc::NodeChildIterator ChildIteratorType;
 
     static NodeType* getEntryNode(GraphType* G) {
       return &G->getNode("root");
@@ -271,7 +271,7 @@
       return ChildIteratorType(N, N->OutEdges.end());
     }
 
-    typedef llvmcc::NodesIterator nodes_iterator;
+    typedef llvmc::NodesIterator nodes_iterator;
     static nodes_iterator nodes_begin(GraphType *G) {
       return GraphBegin(G);
     }
diff --git a/tools/llvmc2/Tool.cpp b/tools/llvmc2/Tool.cpp
index d0e703a..eea0145 100644
--- a/tools/llvmc2/Tool.cpp
+++ b/tools/llvmc2/Tool.cpp
@@ -15,7 +15,7 @@
 
 #include "llvm/ADT/StringExtras.h"
 
-void llvmcc::Tool::UnpackValues (const std::string& from,
+void llvmc::Tool::UnpackValues (const std::string& from,
                                  std::vector<std::string>& to) {
   llvm::SplitString(from, to, ",");
 }
diff --git a/tools/llvmc2/Tool.h b/tools/llvmc2/Tool.h
index b4478f9..1cac7ee 100644
--- a/tools/llvmc2/Tool.h
+++ b/tools/llvmc2/Tool.h
@@ -22,7 +22,7 @@
 #include <string>
 #include <vector>
 
-namespace llvmcc {
+namespace llvmc {
 
   typedef std::vector<llvm::sys::Path> PathVector;
 
diff --git a/tools/llvmc2/llvmc.cpp b/tools/llvmc2/llvmc.cpp
index 87c0e41..b4f0afe 100644
--- a/tools/llvmc2/llvmc.cpp
+++ b/tools/llvmc2/llvmc.cpp
@@ -1,4 +1,4 @@
-//===--- llvmcc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===//
+//===--- llvmc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -26,7 +26,7 @@
 
 namespace cl = llvm::cl;
 namespace sys = llvm::sys;
-using namespace llvmcc;
+using namespace llvmc;
 
 // Built-in command-line options.
 // External linkage here is intentional.
