diff --git a/lib/ExecutionEngine/JIT/Intercept.cpp b/lib/ExecutionEngine/JIT/Intercept.cpp
index 5d256f9..0b1b976 100644
--- a/lib/ExecutionEngine/JIT/Intercept.cpp
+++ b/lib/ExecutionEngine/JIT/Intercept.cpp
@@ -28,7 +28,7 @@
 /// calls to atexit(3), which we intercept and store in
 /// AtExitHandlers.
 ///
-void JIT::runAtExitHandlers() {
+static void runAtExitHandlers() {
   while (!AtExitHandlers.empty()) {
     void (*Fn)() = AtExitHandlers.back();
     AtExitHandlers.pop_back();
@@ -45,7 +45,7 @@
 
 // jit_exit - Used to intercept the "exit" library call.
 static void jit_exit(int Status) {
-  JIT::runAtExitHandlers();   // Run atexit handlers...
+  runAtExitHandlers();   // Run atexit handlers...
   exit(Status);
 }
 
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp
index d397414..6a067fd 100644
--- a/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/lib/ExecutionEngine/JIT/JIT.cpp
@@ -51,22 +51,31 @@
 
 /// run - Start execution with the specified function and arguments.
 ///
-GenericValue JIT::run(Function *F, const std::vector<GenericValue> &ArgValues) {
+GenericValue JIT::runFunction(Function *F,
+                              const std::vector<GenericValue> &ArgValues) {
   assert (F && "Function *F was null at entry to run()");
+    GenericValue rv;
 
-  int (*PF)(int, char **, const char **) =
-    (int(*)(int, char **, const char **))getPointerToFunction(F);
-  assert(PF != 0 && "Pointer to fn's code was null after getPointerToFunction");
+  if (ArgValues.size() == 3) {
+    int (*PF)(int, char **, const char **) =
+      (int(*)(int, char **, const char **))getPointerToFunction(F);
+    assert(PF && "Pointer to fn's code was null after getPointerToFunction");
+    
+    // Call the function.
+    int ExitCode = PF(ArgValues[0].IntVal, (char **) GVTOP (ArgValues[1]),
+                      (const char **) GVTOP (ArgValues[2]));
+    
+    rv.IntVal = ExitCode;
+  } else {
+    // FIXME: This code should handle a couple of common cases efficiently, but
+    // it should also implement the general case by code-gening a new anonymous
+    // nullary function to call.
+    assert(ArgValues.size() == 1);
+    void (*PF)(int) = (void(*)(int))getPointerToFunction(F);
+    assert(PF && "Pointer to fn's code was null after getPointerToFunction");
+    PF(ArgValues[0].IntVal);
+  }
 
-  // Call the function.
-  int ExitCode = PF(ArgValues[0].IntVal, (char **) GVTOP (ArgValues[1]),
-		    (const char **) GVTOP (ArgValues[2]));
-
-  // Run any atexit handlers now!
-  runAtExitHandlers();
-
-  GenericValue rv;
-  rv.IntVal = ExitCode;
   return rv;
 }
 
diff --git a/lib/ExecutionEngine/JIT/JIT.h b/lib/ExecutionEngine/JIT/JIT.h
index 76d2b7a..53e8738 100644
--- a/lib/ExecutionEngine/JIT/JIT.h
+++ b/lib/ExecutionEngine/JIT/JIT.h
@@ -50,8 +50,8 @@
 
   /// run - Start execution with the specified function and arguments.
   ///
-  virtual GenericValue run(Function *F,
-			   const std::vector<GenericValue> &ArgValues);
+  virtual GenericValue runFunction(Function *F,
+                                   const std::vector<GenericValue> &ArgValues);
 
   /// getPointerToNamedFunction - This method returns the address of the
   /// specified function by using the dlsym function call.  As such it is only
@@ -64,11 +64,6 @@
   // 
   static void CompilationCallback();
 
-  /// runAtExitHandlers - Before exiting the program, at_exit functions must be
-  /// called.  This method calls them.
-  ///
-  static void runAtExitHandlers();
-
   /// getPointerToFunction - This returns the address of the specified function,
   /// compiling it if necessary.
   ///
