diff --git a/lib/Analysis/MemRegion.cpp b/lib/Analysis/MemRegion.cpp
index 94ffb3f..898aff0 100644
--- a/lib/Analysis/MemRegion.cpp
+++ b/lib/Analysis/MemRegion.cpp
@@ -51,18 +51,6 @@
   ID.AddPointer(superRegion);
 }
 
-QualType AnonPointeeRegion::getType(ASTContext& C) const {
-  return C.getCanonicalType(T);
-}
-
-void AnonPointeeRegion::ProfileRegion(llvm::FoldingSetNodeID& ID, 
-                                      SymbolRef Sym,
-                                      const MemRegion* superRegion) {
-  ID.AddInteger((unsigned) AnonPointeeRegionKind);
-  Sym.Profile(ID);
-  ID.AddPointer(superRegion);
-}
-
 void CompoundLiteralRegion::Profile(llvm::FoldingSetNodeID& ID) const {
   CompoundLiteralRegion::ProfileRegion(ID, CL, superRegion);
 }
@@ -106,9 +94,9 @@
   ElementRegion::ProfileRegion(ID, Index, superRegion);
 }
 
-QualType ElementRegion::getType(ASTContext& C) const {
-  QualType T = getArrayRegion()->getType(C);
-
+QualType ElementRegion::getRValueType(ASTContext& C) const {
+  QualType T = getArrayRegion()->getLValueType(C);
+  // FIXME: Should ArrayType be considered an LValue or RValue type?
   if (isa<ArrayType>(T.getTypePtr())) {
     ArrayType* AT = cast<ArrayType>(T.getTypePtr());
     return AT->getElementType();
@@ -121,6 +109,14 @@
 }
 
 //===----------------------------------------------------------------------===//
+// getLValueType() and getRValueType()
+//===----------------------------------------------------------------------===//
+
+QualType StringRegion::getRValueType(ASTContext& C) const {
+  return Str->getType();
+}
+
+//===----------------------------------------------------------------------===//
 // Region pretty-printing.
 //===----------------------------------------------------------------------===//
 
@@ -390,26 +386,6 @@
   return R;
 }
 
-AnonPointeeRegion* MemRegionManager::getAnonPointeeRegion(SymbolRef Sym,
-                                                          QualType T) {
-  llvm::FoldingSetNodeID ID;
-  MemRegion* superRegion = getUnknownRegion();
-
-  AnonPointeeRegion::ProfileRegion(ID, Sym, superRegion);
-
-  void* InsertPos;
-  MemRegion* data = Regions.FindNodeOrInsertPos(ID, InsertPos);
-  AnonPointeeRegion* R = cast_or_null<AnonPointeeRegion>(data);
-
-  if (!R) {
-    R = (AnonPointeeRegion*) A.Allocate<AnonPointeeRegion>();
-    new (R) AnonPointeeRegion(Sym, T, superRegion);
-    Regions.InsertNode(R, InsertPos);
-  }
-
-  return R;
-}
-
 AllocaRegion* MemRegionManager::getAllocaRegion(const Expr* E, unsigned cnt) {
   llvm::FoldingSetNodeID ID;
   AllocaRegion::ProfileRegion(ID, E, cnt);
