diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h
index 11f629a..2be3689 100644
--- a/include/clang/AST/ASTContext.h
+++ b/include/clang/AST/ASTContext.h
@@ -299,7 +299,7 @@
   /// getTypedefType - Return the unique reference to the type for the
   /// specified typename decl.
   QualType getTypedefType(TypedefDecl *Decl);
-  QualType getObjCInterfaceType(ObjCInterfaceDecl *Decl);
+  QualType getObjCInterfaceType(const ObjCInterfaceDecl *Decl);
 
   QualType getTemplateTypeParmType(unsigned Depth, unsigned Index, 
                                    IdentifierInfo *Name = 0);
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index 60bbd6f..ddcbb0c 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -368,7 +368,7 @@
 class ObjCInterfaceDecl : public ObjCContainerDecl {
   /// TypeForDecl - This indicates the Type object that represents this
   /// TypeDecl.  It is a cache maintained by ASTContext::getObjCInterfaceType
-  Type *TypeForDecl;
+  mutable Type *TypeForDecl;
   friend class ASTContext;
   
   /// Class's super class.
@@ -492,7 +492,7 @@
   
   // Low-level accessor
   Type *getTypeForDecl() const { return TypeForDecl; }
-  void setTypeForDecl(Type *TD) { TypeForDecl = TD; }
+  void setTypeForDecl(Type *TD) const { TypeForDecl = TD; }
 
   static bool classof(const Decl *D) { return D->getKind() == ObjCInterface; }
   static bool classof(const ObjCInterfaceDecl *D) { return true; }
diff --git a/include/clang/Analysis/PathSensitive/MemRegion.h b/include/clang/Analysis/PathSensitive/MemRegion.h
index 7397c92..290599d 100644
--- a/include/clang/Analysis/PathSensitive/MemRegion.h
+++ b/include/clang/Analysis/PathSensitive/MemRegion.h
@@ -463,8 +463,7 @@
   }
   
   QualType getRValueType(ASTContext& C) const {
-    ObjCInterfaceDecl* ID = const_cast<ObjCInterfaceDecl*>(getInterface());
-    return C.getObjCInterfaceType(ID);
+    return C.getObjCInterfaceType(getInterface());
   }
   
   static bool classof(const MemRegion* R) {
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index a3a2778..af7cf12 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -1383,10 +1383,11 @@
 
 /// getObjCInterfaceType - Return the unique reference to the type for the
 /// specified ObjC interface decl.
-QualType ASTContext::getObjCInterfaceType(ObjCInterfaceDecl *Decl) {
+QualType ASTContext::getObjCInterfaceType(const ObjCInterfaceDecl *Decl) {
   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
   
-  Decl->TypeForDecl = new(*this,8) ObjCInterfaceType(Type::ObjCInterface, Decl);
+  ObjCInterfaceDecl *OID = const_cast<ObjCInterfaceDecl*>(Decl);
+  Decl->TypeForDecl = new(*this,8) ObjCInterfaceType(Type::ObjCInterface, OID);
   Types.push_back(Decl->TypeForDecl);
   return QualType(Decl->TypeForDecl, 0);
 }
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp
index be23e30..de10230 100644
--- a/lib/AST/DeclObjC.cpp
+++ b/lib/AST/DeclObjC.cpp
@@ -277,7 +277,7 @@
     // There may be no interface context due to error in declaration
     // of the interface (which has been reported). Recover gracefully.
     if (OID) {
-      selfTy =Context.getObjCInterfaceType(const_cast<ObjCInterfaceDecl*>(OID));
+      selfTy = Context.getObjCInterfaceType(OID);
       selfTy = Context.getPointerType(selfTy);
     } else {
       selfTy = Context.getObjCIdType();
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp
index 984e49e..5d98b45 100644
--- a/lib/CodeGen/CodeGenTypes.cpp
+++ b/lib/CodeGen/CodeGenTypes.cpp
@@ -199,8 +199,7 @@
 
 void CodeGenTypes::UpdateCompletedType(const ObjCInterfaceDecl *OID) {
   // Check to see if we have already laid this type out, if not, just return.
-  QualType OIDTy = 
-    Context.getObjCInterfaceType(const_cast<ObjCInterfaceDecl*>(OID));
+  QualType OIDTy = Context.getObjCInterfaceType(OID);
   llvm::DenseMap<Type *, llvm::PATypeHolder>::iterator TCI =
     TypeCache.find(OIDTy.getTypePtr());
   if (TCI == TypeCache.end()) return;
