diff --git a/include/llvm/ConstPoolVals.h b/include/llvm/ConstPoolVals.h
index 9a55b42..3142bbb 100644
--- a/include/llvm/ConstPoolVals.h
+++ b/include/llvm/ConstPoolVals.h
@@ -304,20 +304,20 @@
 };
 
 
-// ConstPoolPointerReference - a constant pointer value that is initialized to
+// ConstPoolPointerRef - a constant pointer value that is initialized to
 // point to a global value, which lies at a constant, fixed address.
 //
-class ConstPoolPointerReference : public ConstPoolPointer {
+class ConstPoolPointerRef : public ConstPoolPointer {
   friend class Module;   // Modules maintain these references
-  ConstPoolPointerReference(const ConstPoolPointerReference &); // DNI!
+  ConstPoolPointerRef(const ConstPoolPointerRef &); // DNI!
 
 protected:
-  ConstPoolPointerReference(GlobalValue *GV);
-  ~ConstPoolPointerReference() {}
+  ConstPoolPointerRef(GlobalValue *GV);
+  ~ConstPoolPointerRef() {}
 
   virtual void destroyConstant() { destroyConstantImpl(); }
 public:
-  static ConstPoolPointerReference *get(GlobalValue *GV);
+  static ConstPoolPointerRef *get(GlobalValue *GV);
 
   virtual string getStrValue() const;
 
@@ -329,7 +329,7 @@
   }
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
-  static inline bool classof(const ConstPoolPointerReference *) { return true; }
+  static inline bool classof(const ConstPoolPointerRef *) { return true; }
   static inline bool classof(const ConstPoolPointer *CPV) {
     return CPV->getNumOperands() == 1;
   }
diff --git a/include/llvm/Module.h b/include/llvm/Module.h
index abb91e0..6003247 100644
--- a/include/llvm/Module.h
+++ b/include/llvm/Module.h
@@ -18,7 +18,7 @@
 class Method;
 class GlobalVariable;
 class GlobalValueRefMap;   // Used by ConstPoolVals.cpp
-class ConstPoolPointerReference;
+class ConstPoolPointerRef;
 
 class Module : public Value, public SymTabValue {
 public:
@@ -44,10 +44,10 @@
   GlobalValueRefMap *GVRefMap;
 
   // Accessor for the underlying GlobalValRefMap... only through the
-  // ConstPoolPointerReference class...
-  friend class ConstPoolPointerReference;
-  void mutateConstPoolPointerReference(GlobalValue *OldGV, GlobalValue *NewGV);
-  ConstPoolPointerReference *getConstPoolPointerReference(GlobalValue *GV);
+  // ConstPoolPointerRef class...
+  friend class ConstPoolPointerRef;
+  void mutateConstPoolPointerRef(GlobalValue *OldGV, GlobalValue *NewGV);
+  ConstPoolPointerRef *getConstPoolPointerRef(GlobalValue *GV);
 
 public:
   Module();
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index cc8c1b0..994c223 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -61,7 +61,7 @@
   // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
   // references to global values.  Global values may be referenced before they
   // are defined, and if so, the temporary object that they represent is held
-  // here.  This is used for forward references of ConstPoolPointerReferences.
+  // here.  This is used for forward references of ConstPoolPointerRefs.
   //
   typedef map<pair<const PointerType *, ValID>, GlobalVariable*> GlobalRefsType;
   GlobalRefsType GlobalRefs;
@@ -102,11 +102,11 @@
       I->first.second.destroy();  // Free string memory if neccesary
       
       // Loop over all of the uses of the GlobalValue.  The only thing they are
-      // allowed to be at this point is ConstPoolPointerReference's.
+      // allowed to be at this point is ConstPoolPointerRef's.
       assert(OldGV->use_size() == 1 && "Only one reference should exist!");
       while (!OldGV->use_empty()) {
-	User *U = OldGV->use_back();  // Must be a ConstPoolPointerReference...
-	ConstPoolPointerReference *CPPR = cast<ConstPoolPointerReference>(U);
+	User *U = OldGV->use_back();  // Must be a ConstPoolPointerRef...
+	ConstPoolPointerRef *CPPR = cast<ConstPoolPointerRef>(U);
 	assert(CPPR->getValue() == OldGV && "Something isn't happy");
 	
 	// Change the const pool reference to point to the real global variable
@@ -987,7 +987,7 @@
     }
 
     GlobalValue *GV = cast<GlobalValue>(V);
-    $$ = ConstPoolPointerReference::get(GV);
+    $$ = ConstPoolPointerRef::get(GV);
     delete $1;            // Free the type handle
   }
 
diff --git a/lib/Bytecode/Reader/ConstantReader.cpp b/lib/Bytecode/Reader/ConstantReader.cpp
index 3865a5e..6b69b36 100644
--- a/lib/Bytecode/Reader/ConstantReader.cpp
+++ b/lib/Bytecode/Reader/ConstantReader.cpp
@@ -277,7 +277,7 @@
       V = ConstPoolPointerNull::get(PT);
       break;
 
-    case 1: {  // ConstPoolPointerReference value...
+    case 1: {  // ConstPoolPointerRef value...
       unsigned Slot;
       if (read_vbr(Buf, EndBuf, Slot)) return failure(true);
       BCR_TRACE(4, "CPPR: Type: '" << Ty << "'  slot: " << Slot << "\n");
@@ -308,7 +308,7 @@
 	}
       }
       
-      V = ConstPoolPointerReference::get(GV);
+      V = ConstPoolPointerRef::get(GV);
       break;
     }
     default:
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 5cb2079..80e048a 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -217,7 +217,7 @@
 }
 
 // DeclareNewGlobalValue - Patch up forward references to global values in the
-// form of ConstPoolPointerReferences.
+// form of ConstPoolPointerRef.
 //
 void BytecodeParser::DeclareNewGlobalValue(GlobalValue *GV, unsigned Slot) {
   // Check to see if there is a forward reference to this global variable...
@@ -229,11 +229,11 @@
     BCR_TRACE(3, "Mutating CPPR Forward Ref!\n");
       
     // Loop over all of the uses of the GlobalValue.  The only thing they are
-    // allowed to be at this point is ConstPoolPointerReference's.
+    // allowed to be at this point is ConstPoolPointerRef's.
     assert(OldGV->use_size() == 1 && "Only one reference should exist!");
     while (!OldGV->use_empty()) {
-      User *U = OldGV->use_back();  // Must be a ConstPoolPointerReference...
-      ConstPoolPointerReference *CPPR = cast<ConstPoolPointerReference>(U);
+      User *U = OldGV->use_back();  // Must be a ConstPoolPointerRef...
+      ConstPoolPointerRef *CPPR = cast<ConstPoolPointerRef>(U);
       assert(CPPR->getValue() == OldGV && "Something isn't happy");
       
       BCR_TRACE(4, "Mutating Forward Ref!\n");
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index a5b01c2..1d9903d 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -112,7 +112,7 @@
   bool getTypeSlot(const Type *Ty, unsigned &Slot);
 
   // DeclareNewGlobalValue - Patch up forward references to global values in the
-  // form of ConstPoolPointerReferences.
+  // form of ConstPoolPointerRefs.
   //
   void DeclareNewGlobalValue(GlobalValue *GV, unsigned Slot);
 
diff --git a/lib/Bytecode/Writer/ConstantWriter.cpp b/lib/Bytecode/Writer/ConstantWriter.cpp
index 8a252dd..4400290 100644
--- a/lib/Bytecode/Writer/ConstantWriter.cpp
+++ b/lib/Bytecode/Writer/ConstantWriter.cpp
@@ -145,8 +145,8 @@
     const ConstPoolPointer *CPP = cast<const ConstPoolPointer>(CPV);
     if (isa<ConstPoolPointerNull>(CPP)) {
       output_vbr((unsigned)0, Out);
-    } else if (const ConstPoolPointerReference *CPR = 
-	                dyn_cast<ConstPoolPointerReference>(CPP)) {
+    } else if (const ConstPoolPointerRef *CPR = 
+	                dyn_cast<ConstPoolPointerRef>(CPP)) {
       output_vbr((unsigned)1, Out);
       int Slot = Table.getValSlot((Value*)CPR->getValue());
       assert(Slot != -1 && "Global used but not available!!");
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index 9f36604..33acbb4 100644
--- a/lib/Linker/LinkModules.cpp
+++ b/lib/Linker/LinkModules.cpp
@@ -64,10 +64,9 @@
       Result = ConstPoolStruct::get(cast<StructType>(CPS->getType()), Operands);
     } else if (isa<ConstPoolPointerNull>(CPV)) {
       Result = CPV;
-    } else if (ConstPoolPointerReference *CPR = 
-               dyn_cast<ConstPoolPointerReference>(CPV)) {
+    } else if (ConstPoolPointerRef *CPR = dyn_cast<ConstPoolPointerRef>(CPV)) {
       Value *V = RemapOperand(CPR->getValue(), LocalMap, GlobalMap);
-      Result = ConstPoolPointerReference::get(cast<GlobalValue>(V));
+      Result = ConstPoolPointerRef::get(cast<GlobalValue>(V));
     } else {
       assert(0 && "Unknown type of derived type constant value!");
     }
diff --git a/lib/Transforms/Instrumentation/TraceValues.cpp b/lib/Transforms/Instrumentation/TraceValues.cpp
index 0cd395b..1c47f96 100644
--- a/lib/Transforms/Instrumentation/TraceValues.cpp
+++ b/lib/Transforms/Instrumentation/TraceValues.cpp
@@ -41,10 +41,10 @@
 
 #undef USE_PTRREF
 #ifdef USE_PTRREF
-static inline ConstPoolPointerReference*
+static inline ConstPoolPointerRef*
 GetStringRef(Module* module, const char* str)
 {
-  static hash_map<string, ConstPoolPointerReference*> stringRefCache;
+  static hash_map<string, ConstPoolPointerRef*> stringRefCache;
   static Module* lastModule = NULL;
   
   if (lastModule != module)
@@ -53,14 +53,14 @@
       lastModule = module;
     }
   
-  ConstPoolPointerReference* result = stringRefCache[str];
+  ConstPoolPointerRef* result = stringRefCache[str];
   if (result == NULL)
     {
       ConstPoolArray* charArray = ConstPoolArray::get(str);
       GlobalVariable* stringVar =
         new GlobalVariable(charArray->getType(),/*isConst*/true,charArray,str);
       module->getGlobalList().push_back(stringVar);
-      result = ConstPoolPointerReference::get(stringVar);
+      result = ConstPoolPointerRef::get(stringVar);
       assert(result && "Failed to create reference to string constant");
       stringRefCache[str] = result;
     }
@@ -89,7 +89,7 @@
         new GlobalVariable(charArray->getType(),/*isConst*/true,charArray);
       module->getGlobalList().push_back(stringVar);
       result = stringVar;
-      // result = ConstPoolPointerReference::get(stringVar);
+      // result = ConstPoolPointerRef::get(stringVar);
       assert(result && "Failed to create reference to string constant");
       stringRefCache[str] = result;
     }
diff --git a/lib/Transforms/Utils/Linker.cpp b/lib/Transforms/Utils/Linker.cpp
index 9f36604..33acbb4 100644
--- a/lib/Transforms/Utils/Linker.cpp
+++ b/lib/Transforms/Utils/Linker.cpp
@@ -64,10 +64,9 @@
       Result = ConstPoolStruct::get(cast<StructType>(CPS->getType()), Operands);
     } else if (isa<ConstPoolPointerNull>(CPV)) {
       Result = CPV;
-    } else if (ConstPoolPointerReference *CPR = 
-               dyn_cast<ConstPoolPointerReference>(CPV)) {
+    } else if (ConstPoolPointerRef *CPR = dyn_cast<ConstPoolPointerRef>(CPV)) {
       Value *V = RemapOperand(CPR->getValue(), LocalMap, GlobalMap);
-      Result = ConstPoolPointerReference::get(cast<GlobalValue>(V));
+      Result = ConstPoolPointerRef::get(cast<GlobalValue>(V));
     } else {
       assert(0 && "Unknown type of derived type constant value!");
     }
diff --git a/lib/VMCore/ConstPoolVals.cpp b/lib/VMCore/ConstPoolVals.cpp
index 3b543cb..e8d4f67 100644
--- a/lib/VMCore/ConstPoolVals.cpp
+++ b/lib/VMCore/ConstPoolVals.cpp
@@ -134,7 +134,7 @@
   }
 }
 
-ConstPoolPointerReference::ConstPoolPointerReference(GlobalValue *GV)
+ConstPoolPointerRef::ConstPoolPointerRef(GlobalValue *GV)
   : ConstPoolPointer(GV->getType()) {
   Operands.push_back(Use(GV, this));
 }
@@ -224,7 +224,7 @@
   return "null";
 }
 
-string ConstPoolPointerReference::getStrValue() const {
+string ConstPoolPointerRef::getStrValue() const {
   const GlobalValue *V = getValue();
   if (V->hasName()) return "%" + V->getName();
 
@@ -482,17 +482,17 @@
   return Result;
 }
 
-//---- ConstPoolPointerReference::get() implementation...
+//---- ConstPoolPointerRef::get() implementation...
 //
-ConstPoolPointerReference *ConstPoolPointerReference::get(GlobalValue *GV) {
+ConstPoolPointerRef *ConstPoolPointerRef::get(GlobalValue *GV) {
   assert(GV->getParent() && "Global Value must be attached to a module!");
 
   // The Module handles the pointer reference sharing...
-  return GV->getParent()->getConstPoolPointerReference(GV);
+  return GV->getParent()->getConstPoolPointerRef(GV);
 }
 
 
-void ConstPoolPointerReference::mutateReference(GlobalValue *NewGV) {
-  getValue()->getParent()->mutateConstPoolPointerReference(getValue(), NewGV);
+void ConstPoolPointerRef::mutateReference(GlobalValue *NewGV) {
+  getValue()->getParent()->mutateConstPoolPointerRef(getValue(), NewGV);
   Operands[0] = NewGV;
 }
diff --git a/lib/VMCore/Linker.cpp b/lib/VMCore/Linker.cpp
index 9f36604..33acbb4 100644
--- a/lib/VMCore/Linker.cpp
+++ b/lib/VMCore/Linker.cpp
@@ -64,10 +64,9 @@
       Result = ConstPoolStruct::get(cast<StructType>(CPS->getType()), Operands);
     } else if (isa<ConstPoolPointerNull>(CPV)) {
       Result = CPV;
-    } else if (ConstPoolPointerReference *CPR = 
-               dyn_cast<ConstPoolPointerReference>(CPV)) {
+    } else if (ConstPoolPointerRef *CPR = dyn_cast<ConstPoolPointerRef>(CPV)) {
       Value *V = RemapOperand(CPR->getValue(), LocalMap, GlobalMap);
-      Result = ConstPoolPointerReference::get(cast<GlobalValue>(V));
+      Result = ConstPoolPointerRef::get(cast<GlobalValue>(V));
     } else {
       assert(0 && "Unknown type of derived type constant value!");
     }
diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp
index fbe8586..7f5e3e2 100644
--- a/lib/VMCore/Module.cpp
+++ b/lib/VMCore/Module.cpp
@@ -23,7 +23,7 @@
 // Define the GlobalValueRefMap as a struct that wraps a map so that we don't
 // have Module.h depend on <map>
 //
-struct GlobalValueRefMap : public map<GlobalValue*, ConstPoolPointerReference*>{
+struct GlobalValueRefMap : public map<GlobalValue*, ConstPoolPointerRef*>{
 };
 
 
@@ -62,7 +62,7 @@
   if (GVRefMap) {
     for (GlobalValueRefMap::iterator I = GVRefMap->begin(), E = GVRefMap->end();
 	 I != E; ++I) {
-      // Delete the ConstPoolPointerReference node...
+      // Delete the ConstPoolPointerRef node...
       I->second->destroyConstant();
     }
 
@@ -88,25 +88,24 @@
 }
 
 // Accessor for the underlying GlobalValRefMap...
-ConstPoolPointerReference *Module::getConstPoolPointerReference(GlobalValue *V){
+ConstPoolPointerRef *Module::getConstPoolPointerRef(GlobalValue *V){
   // Create ref map lazily on demand...
   if (GVRefMap == 0) GVRefMap = new GlobalValueRefMap();
 
   GlobalValueRefMap::iterator I = GVRefMap->find(V);
   if (I != GVRefMap->end()) return I->second;
 
-  ConstPoolPointerReference *Ref = new ConstPoolPointerReference(V);
+  ConstPoolPointerRef *Ref = new ConstPoolPointerRef(V);
   GVRefMap->insert(make_pair(V, Ref));
 
   return Ref;
 }
 
-void Module::mutateConstPoolPointerReference(GlobalValue *OldGV, 
-					     GlobalValue *NewGV) {
+void Module::mutateConstPoolPointerRef(GlobalValue *OldGV, GlobalValue *NewGV) {
   GlobalValueRefMap::iterator I = GVRefMap->find(OldGV);
   assert(I != GVRefMap->end() && 
-	 "mutateConstPoolPointerReference; OldGV not in table!");
-  ConstPoolPointerReference *Ref = I->second;
+	 "mutateConstPoolPointerRef; OldGV not in table!");
+  ConstPoolPointerRef *Ref = I->second;
 
   // Remove the old entry...
   GVRefMap->erase(I);
