diff --git a/tools/llvmc2/Action.cpp b/tools/llvmc2/Action.cpp
new file mode 100644
index 0000000..82a1e0c
--- /dev/null
+++ b/tools/llvmc2/Action.cpp
@@ -0,0 +1,58 @@
+//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Action class - implementation and auxiliary functions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Action.h"
+
+#include "llvm/Support/CommandLine.h"
+#include "llvm/System/Program.h"
+
+#include <iostream>
+#include <stdexcept>
+
+using namespace llvm;
+
+extern cl::opt<bool> VerboseMode;
+
+namespace {
+  int ExecuteProgram(const std::string& name,
+                     const std::vector<std::string>& args) {
+    sys::Path prog = sys::Program::FindProgramByName(name);
+
+    if (prog.isEmpty())
+      throw std::runtime_error("Can't find program '" + name + "'");
+    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.
+
+    return sys::Program::ExecuteAndWait(prog, &argv[0]);
+  }
+
+  void print_string (const std::string& str) {
+    std::cerr << str << ' ';
+  }
+}
+
+int llvmcc::Action::Execute() {
+  if (VerboseMode) {
+    std::cerr << Command_ << " ";
+    std::for_each(Args_.begin(), Args_.end(), print_string);
+    std::cerr << '\n';
+  }
+  return ExecuteProgram(Command_, Args_);
+}
diff --git a/tools/llvmc2/Action.h b/tools/llvmc2/Action.h
new file mode 100644
index 0000000..43495c4
--- /dev/null
+++ b/tools/llvmc2/Action.h
@@ -0,0 +1,36 @@
+//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Action - encapsulates a single shell command.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_ACTION_H
+#define LLVM_TOOLS_LLVMC2_ACTION_H
+
+#include <string>
+#include <vector>
+
+namespace llvmcc {
+
+  class Action {
+    std::string Command_;
+    std::vector<std::string> Args_;
+  public:
+    Action (std::string const& C,
+            std::vector<std::string> const& A)
+      : Command_(C), Args_(A)
+    {}
+
+    int Execute();
+  };
+
+}
+
+#endif // LLVM_TOOLS_LLVMC2_ACTION_H
diff --git a/tools/llvmc2/Tools.cpp b/tools/llvmc2/AutoGenerated.cpp
similarity index 71%
rename from tools/llvmc2/Tools.cpp
rename to tools/llvmc2/AutoGenerated.cpp
index 7a9921c..327e8e7 100644
--- a/tools/llvmc2/Tools.cpp
+++ b/tools/llvmc2/AutoGenerated.cpp
@@ -7,22 +7,20 @@
 //
 //===----------------------------------------------------------------------===//
 //
-//  Auto-generated tool descriptions.
+//  Auto-generated tool descriptions - implementation.
 //
 //===----------------------------------------------------------------------===//
 
-#include "Tools.h"
-#include "Core.h"
+#include "AutoGenerated.h"
+#include "CompilationGraph.h"
+#include "Tool.h"
 
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/Support/CommandLine.h"
 
 #include <stdexcept>
-#include <string>
-#include <vector>
 
 using namespace llvm;
 using namespace llvmcc;
 
-// Include the auto-generated file
-#include "Tools.inc"
+// The auto-generated file
+#include "AutoGenerated.inc"
diff --git a/tools/llvmc2/AutoGenerated.h b/tools/llvmc2/AutoGenerated.h
new file mode 100644
index 0000000..686ae3f
--- /dev/null
+++ b/tools/llvmc2/AutoGenerated.h
@@ -0,0 +1,30 @@
+//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Auto-generated tool descriptions - public interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_AUTOGENERATED_H
+#define LLVM_TOOLS_LLVMC2_AUTOGENERATED_H
+
+#include "llvm/ADT/StringMap.h"
+
+#include <string>
+
+namespace llvmcc {
+
+  typedef llvm::StringMap<std::string> LanguageMap;
+  class CompilationGraph;
+
+  void PopulateLanguageMap(LanguageMap& language_map);
+  void PopulateCompilationGraph(CompilationGraph& tools);
+}
+
+#endif // LLVM_TOOLS_LLVMC2_AUTOGENERATED_H
diff --git a/tools/llvmc2/Core.cpp b/tools/llvmc2/CompilationGraph.cpp
similarity index 76%
rename from tools/llvmc2/Core.cpp
rename to tools/llvmc2/CompilationGraph.cpp
index d08ee7c..36e5fc7 100644
--- a/tools/llvmc2/Core.cpp
+++ b/tools/llvmc2/CompilationGraph.cpp
@@ -1,4 +1,4 @@
-//===--- Core.cpp - The LLVM Compiler Driver --------------------*- C++ -*-===//
+//===--- CompilationGraph.cpp - The LLVM Compiler Driver --------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -7,42 +7,21 @@
 //
 //===----------------------------------------------------------------------===//
 //
-//  Core driver abstractions.
+//  Compilation graph - implementation.
 //
 //===----------------------------------------------------------------------===//
 
-#include "Core.h"
-#include "Utility.h"
+#include "CompilationGraph.h"
 
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/STLExtras.h"
 
-#include <algorithm>
-#include <iostream>
 #include <stdexcept>
 
 using namespace llvm;
-using namespace llvmcc;
 
 extern cl::list<std::string> InputFilenames;
 extern cl::opt<std::string> OutputFilename;
-extern cl::opt<bool> VerboseMode;
-
-namespace {
-  void print_string (const std::string& str) {
-    std::cerr << str << ' ';
-  }
-}
-
-int llvmcc::Action::Execute() {
-  if (VerboseMode) {
-    std::cerr << Command_ << " ";
-    std::for_each(Args_.begin(), Args_.end(), print_string);
-    std::cerr << '\n';
-  }
-  return ExecuteProgram(Command_, Args_);
-}
 
 int llvmcc::CompilationGraph::Build (const sys::Path& tempDir) const {
   sys::Path In(InputFilenames.at(0)), Out;
@@ -107,9 +86,3 @@
 
   return 0;
 }
-
-void llvmcc::Tool::UnpackValues (const std::string& from,
-                                 std::vector<std::string>& to) const {
-  SplitString(from, to, ",");
-}
-
diff --git a/tools/llvmc2/CompilationGraph.h b/tools/llvmc2/CompilationGraph.h
new file mode 100644
index 0000000..c34b58f
--- /dev/null
+++ b/tools/llvmc2/CompilationGraph.h
@@ -0,0 +1,36 @@
+//===--- CompilationGraph.h - The LLVM Compiler Driver ----------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Compilation graph - definition.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H
+#define LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H
+
+#include "AutoGenerated.h"
+#include "Tool.h"
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/System/Path.h"
+
+namespace llvmcc {
+
+  typedef std::vector<llvm::IntrusiveRefCntPtr<Tool> > ToolChain;
+  typedef llvm::StringMap<ToolChain> ToolChainMap;
+
+  struct CompilationGraph {
+    ToolChainMap ToolChains;
+    LanguageMap ExtsToLangs;
+
+    int Build(llvm::sys::Path const& tempDir) const;
+  };
+}
+
+#endif // LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H
diff --git a/tools/llvmc2/Core.h b/tools/llvmc2/Core.h
deleted file mode 100644
index f82e0fa9..0000000
--- a/tools/llvmc2/Core.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//===--- Core.h - The LLVM Compiler Driver ----------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Core driver abstractions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMCC_CORE_H
-#define LLVM_TOOLS_LLVMCC_CORE_H
-
-#include "Utility.h"
-
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/System/Path.h"
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-
-// Core functionality
-
-namespace llvmcc {
-
-  typedef std::vector<llvm::sys::Path> PathVector;
-  typedef llvm::StringMap<std::string> LanguageMap;
-
-  class Action {
-    std::string Command_;
-    std::vector<std::string> Args_;
-  public:
-    Action (std::string const& C,
-            std::vector<std::string> const& A)
-      : Command_(C), Args_(A)
-    {}
-
-    int Execute();
-  };
-
-  class Tool : public llvm::RefCountedBaseVPTR<Tool> {
-  public:
-    virtual Action GenerateAction (PathVector const& inFiles,
-                                  llvm::sys::Path const& outFile) const = 0;
-
-    virtual Action GenerateAction (llvm::sys::Path const& inFile,
-                                  llvm::sys::Path const& outFile) const = 0;
-
-    virtual std::string Name() const = 0;
-    virtual std::string InputLanguage() const = 0;
-    virtual std::string OutputLanguage() const = 0;
-    virtual std::string OutputSuffix() const = 0;
-
-    virtual bool IsLast() const = 0;
-    virtual bool IsJoin() const = 0;
-
-    // Helper function that is called by the auto-generated code
-    // Splits strings of the form ",-foo,-bar,-baz"
-    // TOFIX: find a better name
-    void UnpackValues (std::string const& from,
-                       std::vector<std::string>& to) const;
-
-    virtual ~Tool()
-    {}
-  };
-
-  typedef std::vector<llvm::IntrusiveRefCntPtr<Tool> > ToolChain;
-  typedef llvm::StringMap<ToolChain> ToolChainMap;
-
-  struct CompilationGraph {
-    ToolChainMap ToolChains;
-    LanguageMap ExtsToLangs;
-
-    int Build(llvm::sys::Path const& tempDir) const;
-  };
-}
-
-#endif // LLVM_TOOLS_LLVMCC_CORE_H
diff --git a/tools/llvmc2/Makefile b/tools/llvmc2/Makefile
index ab8ff47..8fe1e81 100644
--- a/tools/llvmc2/Makefile
+++ b/tools/llvmc2/Makefile
@@ -8,7 +8,7 @@
 ##===----------------------------------------------------------------------===##
 LEVEL = ../..
 TOOLNAME = llvmc2
-BUILT_SOURCES = Tools.inc
+BUILT_SOURCES = AutoGenerated.inc
 LINK_COMPONENTS = support system
 REQUIRES_EH := 1
 
@@ -23,10 +23,10 @@
 
 # TOFIX: integrate this part into Makefile.rules?
 # The degree of horrorshowness in that file is too much for me atm.
-$(ObjDir)/Tools.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir
+$(ObjDir)/AutoGenerated.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir
 	$(Echo) "Building LLVMCC configuration library with tblgen"
 	$(Verb) $(TableGen) -gen-llvmcc -o $(call SYSPATH, $@) $<
 
-Tools.inc : $(ObjDir)/Tools.inc.tmp
+AutoGenerated.inc : $(ObjDir)/AutoGenerated.inc.tmp
 	$(Verb) $(CMP) -s $@ $< || $(CP) $< $@
 
diff --git a/tools/llvmc2/Tool.cpp b/tools/llvmc2/Tool.cpp
new file mode 100644
index 0000000..d0e703a
--- /dev/null
+++ b/tools/llvmc2/Tool.cpp
@@ -0,0 +1,21 @@
+//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Tool abstract base class - implementation of the auxiliary functions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Tool.h"
+
+#include "llvm/ADT/StringExtras.h"
+
+void llvmcc::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
new file mode 100644
index 0000000..b0cd237
--- /dev/null
+++ b/tools/llvmc2/Tool.h
@@ -0,0 +1,57 @@
+//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Tool abstract base class - an interface to tool descriptions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_TOOL_H
+#define LLVM_TOOLS_LLVMC2_TOOL_H
+
+#include "Action.h"
+
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/System/Path.h"
+
+#include <string>
+#include <vector>
+
+namespace llvmcc {
+
+  typedef std::vector<llvm::sys::Path> PathVector;
+
+  class Tool : public llvm::RefCountedBaseVPTR<Tool> {
+  public:
+    virtual Action GenerateAction (PathVector const& inFiles,
+                                  llvm::sys::Path const& outFile) const = 0;
+
+    virtual Action GenerateAction (llvm::sys::Path const& inFile,
+                                  llvm::sys::Path const& outFile) const = 0;
+
+    virtual std::string Name() const = 0;
+    virtual std::string InputLanguage() const = 0;
+    virtual std::string OutputLanguage() const = 0;
+    virtual std::string OutputSuffix() const = 0;
+
+    virtual bool IsLast() const = 0;
+    virtual bool IsJoin() const = 0;
+
+    // Helper function that is called by the auto-generated code
+    // Splits strings of the form ",-foo,-bar,-baz"
+    // TOFIX: find a better name
+    static void UnpackValues (std::string const& from,
+                              std::vector<std::string>& to);
+
+    virtual ~Tool()
+    {}
+  };
+
+}
+
+#endif //LLVM_TOOLS_LLVMC2_TOOL_H
diff --git a/tools/llvmc2/Tools.h b/tools/llvmc2/Tools.h
deleted file mode 100644
index ba8f06d..0000000
--- a/tools/llvmc2/Tools.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Auto-generated tool descriptions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMCC_TOOLS_H
-#define LLVM_TOOLS_LLVMCC_TOOLS_H
-
-#include "Core.h"
-
-namespace llvmcc {
-
-  void PopulateLanguageMap(LanguageMap& language_map);
-  void PopulateCompilationGraph(CompilationGraph& tools);
-
-}
-
-#endif //LLVM_TOOLS_LLVMCC_TOOLS_H
diff --git a/tools/llvmc2/Utility.cpp b/tools/llvmc2/Utility.cpp
deleted file mode 100644
index c53578a..0000000
--- a/tools/llvmc2/Utility.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//===--- Utility.cpp - The LLVM Compiler Driver -----------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Various helper and utility functions - implementation.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Utility.h"
-
-#include "llvm/System/Program.h"
-
-#include <stdexcept>
-
-using namespace llvm;
-
-int llvmcc::ExecuteProgram(const std::string& name,
-                           const std::vector<std::string>& args) {
-  sys::Path prog = sys::Program::FindProgramByName(name);
-
-  if (prog.isEmpty())
-    throw std::runtime_error("Can't find program '" + name + "'");
-  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.
-
-  return sys::Program::ExecuteAndWait(prog, &argv[0]);
-}
diff --git a/tools/llvmc2/Utility.h b/tools/llvmc2/Utility.h
deleted file mode 100644
index 3c985a4..0000000
--- a/tools/llvmc2/Utility.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//===--- Utility.h - The LLVM Compiler Driver -------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Various helper and utility functions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMCC_UTILITY_H
-#define LLVM_TOOLS_LLVMCC_UTILITY_H
-
-#include <string>
-#include <vector>
-
-namespace llvmcc {
-
-  int ExecuteProgram (const std::string& name,
-                      const std::vector<std::string>& arguments);
-
-}
-
-#endif // LLVM_TOOLS_LLVMCC_UTILITY_H
diff --git a/tools/llvmc2/llvmcc.cpp b/tools/llvmc2/llvmc.cpp
similarity index 91%
rename from tools/llvmc2/llvmcc.cpp
rename to tools/llvmc2/llvmc.cpp
index c5edac9..feed61f 100644
--- a/tools/llvmc2/llvmcc.cpp
+++ b/tools/llvmc2/llvmc.cpp
@@ -14,9 +14,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "Core.h"
-#include "Utility.h"
-#include "Tools.h"
+#include "CompilationGraph.h"
+#include "Tool.h"
 
 #include "llvm/System/Path.h"
 #include "llvm/Support/CommandLine.h"
@@ -25,11 +24,11 @@
 #include <stdexcept>
 #include <string>
 
-using namespace llvm;
+namespace cl = llvm::cl;
+namespace sys = llvm::sys;
 using namespace llvmcc;
 
-// These variables are also used in Core.cpp,
-// so they should have external linkage.
+// External linkage here is intentional.
 cl::list<std::string> InputFilenames(cl::Positional,
                                      cl::desc("<input file>"), cl::OneOrMore);
 cl::opt<std::string> OutputFilename("o", cl::desc("Output file name"),
diff --git a/utils/TableGen/LLVMCCConfigurationEmitter.cpp b/utils/TableGen/LLVMCCConfigurationEmitter.cpp
index 9c6f064..7723ed9 100644
--- a/utils/TableGen/LLVMCCConfigurationEmitter.cpp
+++ b/utils/TableGen/LLVMCCConfigurationEmitter.cpp
@@ -623,10 +623,10 @@
         << "::iterator B = " << D.GenVariableName() << ".begin(),\n"
         << Indent3 << "E = " << D.GenVariableName()
         << ".end(); B != E; ++B)\n"
-        << Indent4 << "UnpackValues(*B, vec);\n";
+        << Indent4 << "Tool::UnpackValues(*B, vec);\n";
     }
     else if (D.Type == OptionType::Prefix || D.Type == OptionType::Parameter){
-      O << Indent3 << "UnpackValues("
+      O << Indent3 << "Tool::UnpackValues("
         << D.GenVariableName() << ", vec);\n";
     }
     else {
