diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp
index 0638807..bc6d1b6 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Support/GraphWriter.h"
 #include "llvm/System/Path.h"
+#include "llvm/System/Program.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Config/config.h"
 #include <fstream>
@@ -126,9 +127,13 @@
 void SelectionDAG::viewGraph() {
 // This code is only for debugging!
 #ifndef NDEBUG
+  char pathsuff[9];
+
+  sprintf(pathsuff, "%06u", unsigned(rand()));
+
   sys::Path TempDir = sys::Path::GetTemporaryDirectory();
   sys::Path Filename = TempDir;
-  Filename.appendComponent("dag." + getMachineFunction().getFunction()->getName() + ".dot");
+  Filename.appendComponent("dag." + getMachineFunction().getFunction()->getName() + "." + pathsuff + ".dot");
   std::cerr << "Writing '" << Filename.toString() << "'... ";
   std::ofstream F(Filename.toString().c_str());
 
@@ -141,32 +146,70 @@
   F.close();
   std::cerr << "\n";
 
-#ifdef HAVE_GRAPHVIZ
+#if HAVE_GRAPHVIZ
+  sys::Path Graphviz(LLVM_PATH_GRAPHVIZ);
+  std::vector<const char*> args;
+  args.push_back(Graphviz.c_str());
+  args.push_back(Filename.c_str());
+  args.push_back(0);
+  
   std::cerr << "Running 'Graphviz' program... " << std::flush;
-  if (system((LLVM_PATH_GRAPHVIZ " " + Filename.toString()).c_str())) {
+  if (sys::Program::ExecuteAndWait(Graphviz, &args[0])) {
     std::cerr << "Error viewing graph: 'Graphviz' not in path?\n";
   } else {
-	Filename.eraseFromDisk();
+    Filename.eraseFromDisk();
     return;
   }
-#endif  // HAVE_GRAPHVIZ
-
-#ifdef HAVE_GV
-  std::cerr << "Running 'dot' program... " << std::flush;
+#elif (HAVE_GV && HAVE_DOT)
   sys::Path PSFilename = TempDir;
-  PSFilename.appendComponent("dag.tempgraph.ps");
-  if (system(("dot -Tps -Nfontname=Courier -Gsize=7.5,10 " + Filename.toString()
-              + " > " + PSFilename.toString()).c_str())) {
+  PSFilename.appendComponent(std::string("dag.tempgraph") + "." + pathsuff + ".ps");
+
+  sys::Path dot(LLVM_PATH_DOT);
+  std::vector<const char*> args;
+  args.push_back(dot.c_str());
+  args.push_back("-Tps");
+  args.push_back("-Nfontname=Courier");
+  args.push_back("-Gsize=7.5,10");
+  args.push_back(Filename.c_str());
+  args.push_back("-o");
+  args.push_back(PSFilename.c_str());
+  args.push_back(0);
+  
+  std::cerr << "Running 'dot' program... " << std::flush;
+  if (sys::Program::ExecuteAndWait(dot, &args[0])) {
     std::cerr << "Error viewing graph: 'dot' not in path?\n";
   } else {
     std::cerr << "\n";
-    system((LLVM_PATH_GV " " + PSFilename.toString()).c_str());
-    system((LLVM_PATH_GV " "+TempDir.toString()+ "dag.tempgraph.ps").c_str());
+
+    sys::Path gv(LLVM_PATH_GV);
+    args.clear();
+    args.push_back(gv.c_str());
+    args.push_back(PSFilename.c_str());
+    args.push_back(0);
+    
+    sys::Program::ExecuteAndWait(gv, &args[0]);
   }
   Filename.eraseFromDisk();
   PSFilename.eraseFromDisk();
   return;
-#endif  // HAVE_GV
+#elif HAVE_DOTTY
+  sys::Path dotty(LLVM_PATH_DOTTY);
+  std::vector<const char*> args;
+  args.push_back(dotty.c_str());
+  args.push_back(Filename.c_str());
+  args.push_back(0);
+  
+  std::cerr << "Running 'dotty' program... " << std::flush;
+  if (sys::Program::ExecuteAndWait(dotty, &args[0])) {
+    std::cerr << "Error viewing graph: 'dotty' not in path?\n";
+  } else {
+#ifndef __MINGW32__ // Dotty spawns another app and doesn't wait until it returns
+    Filename.eraseFromDisk();
+#endif
+    return;
+  }
+#endif
+  
 #endif  // NDEBUG
   std::cerr << "SelectionDAG::viewGraph is only available in debug builds on "
             << "systems with Graphviz or gv!\n";
