diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
index 4fdd6a1..950e6a5 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.cpp
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
@@ -7,27 +7,44 @@
 //===----------------------------------------------------------------------===//
 
 #include "Interpreter.h"
-#include "llvm/Target/TargetMachineImpls.h"
+#include "llvm/Module.h"
 
 /// createInterpreter - Create a new interpreter object.  This can never fail.
 ///
 ExecutionEngine *ExecutionEngine::createInterpreter(Module *M,
-						    unsigned Config,
 						    bool DebugMode,
 						    bool TraceMode) {
-  return new Interpreter(M, Config, DebugMode, TraceMode);
+  bool isLittleEndian;
+  switch (M->getEndianness()) {
+  case Module::LittleEndian: isLittleEndian = true; break;
+  case Module::BigEndian:    isLittleEndian = false; break;
+  case Module::AnyPointerSize:
+    int Test = 0;
+    *(char*)&Test = 1;    // Return true if the host is little endian
+    isLittleEndian = (Test == 1);
+    break;
+  }
+
+  bool isLongPointer;
+  switch (M->getPointerSize()) {
+  case Module::Pointer32: isLongPointer = false; break;
+  case Module::Pointer64: isLongPointer = true; break;
+  case Module::AnyPointerSize:
+    isLongPointer = (sizeof(void*) == 8);  // Follow host
+    break;
+  }
+
+  return new Interpreter(M, isLittleEndian, isLongPointer, DebugMode,TraceMode);
 }
 
 //===----------------------------------------------------------------------===//
 // Interpreter ctor - Initialize stuff
 //
-Interpreter::Interpreter(Module *M, unsigned Config,
-			 bool DebugMode, bool TraceMode)
+Interpreter::Interpreter(Module *M, bool isLittleEndian, bool isLongPointer,
+                         bool DebugMode, bool TraceMode)
   : ExecutionEngine(M), ExitCode(0), Debug(DebugMode), Trace(TraceMode),
-    CurFrame(-1), TD("lli", (Config & TM::EndianMask) == TM::LittleEndian,
-		     (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4,
-		     (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4,
-		     (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4) {
+    CurFrame(-1), TD("lli", isLittleEndian, isLongPointer ? 8 : 4,
+                     isLongPointer ? 8 : 4, isLongPointer ? 8 : 4) {
 
   setTargetData(TD);
   // Initialize the "backend"
diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h
index d3963ef..89581e0 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.h
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.h
@@ -87,7 +87,8 @@
   // AtExitHandlers - List of functions to call when the program exits.
   std::vector<Function*> AtExitHandlers;
 public:
-  Interpreter(Module *M, unsigned Config, bool DebugMode, bool TraceMode);
+  Interpreter(Module *M, bool isLittleEndian, bool isLongPointer,
+              bool DebugMode, bool TraceMode);
   inline ~Interpreter() { CW.setModule(0); }
 
   // getExitCode - return the code that should be the exit code for the lli
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp
index 7f4877b..57d7b89 100644
--- a/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/lib/ExecutionEngine/JIT/JIT.cpp
@@ -44,9 +44,9 @@
 /// createJIT - Create an return a new JIT compiler if there is one available
 /// for the current target.  Otherwise it returns null.
 ///
-ExecutionEngine *ExecutionEngine::createJIT(Module *M, unsigned Config) {
+ExecutionEngine *ExecutionEngine::createJIT(Module *M) {
   
-  TargetMachine* (*TargetMachineAllocator)(unsigned) = 0;
+  TargetMachine* (*TargetMachineAllocator)(const Module &) = 0;
 
   // Allow a command-line switch to override what *should* be the default target
   // machine for this platform. This allows for debugging a Sparc JIT on X86 --
@@ -71,7 +71,7 @@
   }
 
   // Allocate a target...
-  TargetMachine *Target = (*TargetMachineAllocator)(Config);
+  TargetMachine *Target = TargetMachineAllocator(*M);
   assert(Target && "Could not allocate target machine!");
   
   // Create the virtual machine object...
