diff --git a/lib/CodeGen/CGObjCEtoile.cpp b/lib/CodeGen/CGObjCEtoile.cpp
index 94471ad..8c59aad 100644
--- a/lib/CodeGen/CGObjCEtoile.cpp
+++ b/lib/CodeGen/CGObjCEtoile.cpp
@@ -243,11 +243,3 @@
   return Method;
 }
 
-/*
-clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime(
-    llvm::Module &M,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType) {
-  return new CGObjCEtoile(M, LLVMIntType, LLVMLongType);
-}
-*/
diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp
index 8eb4263..7d9a6aa 100644
--- a/lib/CodeGen/CGObjCGNU.cpp
+++ b/lib/CodeGen/CGObjCGNU.cpp
@@ -15,12 +15,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "CGObjCRuntime.h"
+#include "CodeGenModule.h"
+#include "clang/AST/ASTContext.h"
 #include "llvm/Module.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/IRBuilder.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
 #include <map>
+using namespace clang;
 
 // FIXME: Remove THIS!
 #include "llvm/Analysis/ValueTracking.h"
@@ -39,8 +42,9 @@
 static const int ProtocolVersion = 2;
 
 namespace {
-class CGObjCGNU : public clang::CodeGen::CGObjCRuntime {
+class CGObjCGNU : public CodeGen::CGObjCRuntime {
 private:
+  CodeGen::CodeGenModule &CGM;
   llvm::Module &TheModule;
   const llvm::StructType *SelStructTy;
   const llvm::Type *SelectorTy;
@@ -94,9 +98,7 @@
   llvm::Constant *MakeGlobal(const llvm::ArrayType *Ty,
       std::vector<llvm::Constant*> &V, const std::string &Name="");
 public:
-  CGObjCGNU(llvm::Module &Mp,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType);
+  CGObjCGNU(CodeGen::CodeGenModule &cgm);
   virtual llvm::Constant *GenerateConstantString(const char *String, 
       const size_t length);
   virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder &Builder,
@@ -172,13 +174,11 @@
             (isClassMethod ? "+" : "-") + MethodName;
 }
 
-CGObjCGNU::CGObjCGNU(llvm::Module &M,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType) : 
-  TheModule(M),
-  IntTy(LLVMIntType),
-  LongTy(LLVMLongType)
-{
+CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm)
+  : CGM(cgm), TheModule(CGM.getModule()) {
+  IntTy = CGM.getTypes().ConvertType(CGM.getContext().IntTy);
+  LongTy = CGM.getTypes().ConvertType(CGM.getContext().LongTy);
+    
   Zeros[0] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
   Zeros[1] = Zeros[0];
   NULLPtr = llvm::ConstantPointerNull::get(
@@ -928,9 +928,6 @@
   return Method;
 }
 
-clang::CodeGen::CGObjCRuntime *clang::CodeGen::CreateObjCRuntime(
-    llvm::Module &M,
-    const llvm::Type *LLVMIntType,
-    const llvm::Type *LLVMLongType) {
-  return new CGObjCGNU(M, LLVMIntType, LLVMLongType);
+CodeGen::CGObjCRuntime *CodeGen::CreateObjCRuntime(CodeGen::CodeGenModule &CGM){
+  return new CGObjCGNU(CGM);
 }
diff --git a/lib/CodeGen/CGObjCRuntime.h b/lib/CodeGen/CGObjCRuntime.h
index 94217dd..5375369 100644
--- a/lib/CodeGen/CGObjCRuntime.h
+++ b/lib/CodeGen/CGObjCRuntime.h
@@ -29,6 +29,7 @@
 
 namespace clang {
 namespace CodeGen {
+  class CodeGenModule;
 
 //FIXME Several methods should be pure virtual but aren't to avoid the
 //partially-implemented subclass breaking.
@@ -119,9 +120,7 @@
 
 /// Creates an instance of an Objective-C runtime class.  
 //TODO: This should include some way of selecting which runtime to target.
-CGObjCRuntime *CreateObjCRuntime(llvm::Module &M,
-                                 const llvm::Type *LLVMIntType,
-                                 const llvm::Type *LLVMLongType);
+CGObjCRuntime *CreateObjCRuntime(CodeGenModule &CGM);
 }
 }
 #endif
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 1d0001c..e235b60 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -39,9 +39,7 @@
     Types(C, M, TD), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
     CFConstantStringClassRef(0) {
   //TODO: Make this selectable at runtime
-  Runtime = CreateObjCRuntime(M,
-      getTypes().ConvertType(getContext().IntTy),
-      getTypes().ConvertType(getContext().LongTy));
+  Runtime = CreateObjCRuntime(*this);
 
   // If debug info generation is enabled, create the CGDebugInfo object.
   if (GenerateDebugInfo)
