diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index eff26f9..e1aec69 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -261,24 +261,9 @@
     EmitGlobalVar(D);
 }
 
-void CodeGenModule::EmitType(const TypeDecl *D) {
-  if (isa<TypedefDecl>(D)) {
-    // TODO: Emit debug info.
-    return;
-  }
-  
-  assert(!isa<ObjCInterfaceDecl>(D) && "FIXME: ADD OBJC SUPPORT");
-  
-  // This must be a tag decl.
-  const TagDecl *TD = cast<TagDecl>(D);
-  
-  // Get the LLVM type for this TagDecl.  If it is non-opaque or if this decl
-  // is still a forward declaration, just return.
-  QualType NewTy = Context.getTagDeclType(const_cast<TagDecl *>(TD));
-  const llvm::Type *T = Types.ConvertType(NewTy);
-  if (isa<llvm::OpaqueType>(T) && TD->isDefinition())
-    // Make sure that this type is translated.
-    Types.ForceTypeCompilation(NewTy);
+void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
+  // Make sure that this type is translated.
+  Types.UpdateCompletedType(TD);
 }
 
 
diff --git a/CodeGen/CodeGenModule.h b/CodeGen/CodeGenModule.h
index 900ddf4..7c236e0 100644
--- a/CodeGen/CodeGenModule.h
+++ b/CodeGen/CodeGenModule.h
@@ -88,7 +88,7 @@
   void EmitFunction(const FunctionDecl *FD);
   void EmitGlobalVar(const FileVarDecl *D);
   void EmitGlobalVarDeclarator(const FileVarDecl *D);
-  void EmitType(const TypeDecl *D);
+  void UpdateCompletedType(const TagDecl *D);
   llvm::Constant *EmitGlobalInit(const Expr *E);
   llvm::Constant *EmitConstantExpr(const Expr *E);
     
diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp
index 2e10cfc..6ef11db 100644
--- a/CodeGen/CodeGenTypes.cpp
+++ b/CodeGen/CodeGenTypes.cpp
@@ -125,11 +125,15 @@
   
 }
 
-/// ForceTypeCompilation - When we find the definition for a type, we require
-/// it to be recompiled, to update the lazy understanding of what it is in our
-/// maps.
-void CodeGenTypes::ForceTypeCompilation(QualType T) {
-  const TagDecl *TD = cast<TagType>(T)->getDecl();
+/// UpdateCompletedType - When we find the full definition for a TagDecl,
+/// replace the 'opaque' type we previously made for it if applicable.
+void CodeGenTypes::UpdateCompletedType(const TagDecl *TD) {
+  // Get the LLVM type for this TagDecl.  If it is non-opaque or if this decl
+  // is still a forward declaration, just return.
+  QualType NewTy = Context.getTagDeclType(const_cast<TagDecl *>(TD));
+  const llvm::Type *T = ConvertType(NewTy);
+  if (!isa<llvm::OpaqueType>(T))
+    return;
 
   // Remember the opaque LLVM type for this tagdecl.
   llvm::DenseMap<const TagDecl*, llvm::PATypeHolder>::iterator TDTI = 
@@ -141,7 +145,7 @@
   // Remove it from TagDeclTypes so that it will be regenerated.
   TagDeclTypes.erase(TDTI);
 
-  const llvm::Type *NT = ConvertNewType(T);
+  const llvm::Type *NT = ConvertNewType(NewTy);
 
   // If getting the type didn't itself refine it, refine it to its actual type
   // now.
diff --git a/CodeGen/CodeGenTypes.h b/CodeGen/CodeGenTypes.h
index b60b9ba..2ce7185 100644
--- a/CodeGen/CodeGenTypes.h
+++ b/CodeGen/CodeGenTypes.h
@@ -138,10 +138,9 @@
   unsigned getLLVMFieldNo(const FieldDecl *FD);
     
   
-  /// ForceTypeCompilation - When we find the definition for a type, we require
-  /// it to be recompiled, to update the lazy understanding of what it is in our
-  /// maps.
-  void ForceTypeCompilation(QualType T);
+  /// UpdateCompletedType - When we find the full definition for a TagDecl,
+  /// replace the 'opaque' type we previously made for it if applicable.
+  void UpdateCompletedType(const TagDecl *TD);
   
 public:  // These are internal details of CGT that shouldn't be used externally.
   void DecodeArgumentTypes(const FunctionTypeProto &FTP, 
diff --git a/CodeGen/ModuleBuilder.cpp b/CodeGen/ModuleBuilder.cpp
index 8d3207a..50d6fed 100644
--- a/CodeGen/ModuleBuilder.cpp
+++ b/CodeGen/ModuleBuilder.cpp
@@ -81,7 +81,7 @@
     /// hack on the type, which can occur at any point in the file (because these
     /// can be defined in declspecs).
     virtual void HandleTagDeclDefinition(TagDecl *D) {
-      Builder->EmitType(D);
+      Builder->UpdateCompletedType(D);
     }
     
   };
