diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h
index 3dc5881..62b75a7 100644
--- a/include/llvm/Constant.h
+++ b/include/llvm/Constant.h
@@ -54,6 +54,7 @@
 class Constant : public User {
   void operator=(const Constant &);     // Do not implement
   Constant(const Constant &);           // Do not implement
+  
 protected:
   Constant(const Type *ty, ValueTy vty, Use *Ops, unsigned NumOps)
     : User(ty, vty, Ops, NumOps) {}
diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h
index 199355b..487dd67 100644
--- a/include/llvm/Constants.h
+++ b/include/llvm/Constants.h
@@ -745,17 +745,13 @@
   MDString(const char *begin, const char *end);
 
   const char *StrBegin, *StrEnd;
+  friend class LLVMContextImpl;
 protected:
   // allocate space for exactly zero operands
   void *operator new(size_t s) {
     return User::operator new(s, 0);
   }
 public:
-  /// get() - Static factory methods - Return objects of the specified value.
-  ///
-  static MDString *get(const char *StrBegin, const char *StrEnd);
-  static MDString *get(const std::string &Str);
-
   /// size() - The length of this string.
   ///
   intptr_t size() const { return StrEnd - StrBegin; }
diff --git a/include/llvm/LLVMContext.h b/include/llvm/LLVMContext.h
index 4aa2c20..7578918 100644
--- a/include/llvm/LLVMContext.h
+++ b/include/llvm/LLVMContext.h
@@ -268,6 +268,9 @@
   // Other helpers
   /// @brief Create a result type for fcmp/icmp
   const Type* makeCmpResultType(const Type* opnd_type);
+  
+  // Methods for erasing constants
+  void erase(MDString *M);
 };
 
 /// FOR BACKWARDS COMPATIBILITY - Returns a global context.
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp
index 6092eb1..cf01a9f 100644
--- a/lib/VMCore/Constants.cpp
+++ b/lib/VMCore/Constants.cpp
@@ -1435,33 +1435,8 @@
   : Constant(Type::MetadataTy, MDStringVal, 0, 0),
     StrBegin(begin), StrEnd(end) {}
 
-static ManagedStatic<StringMap<MDString*> > MDStringCache;
-
-MDString *MDString::get(const char *StrBegin, const char *StrEnd) {
-  sys::SmartScopedWriter<true> Writer(*ConstantsLock);
-  StringMapEntry<MDString *> &Entry = MDStringCache->GetOrCreateValue(
-                                        StrBegin, StrEnd);
-  MDString *&S = Entry.getValue();
-  if (!S) S = new MDString(Entry.getKeyData(),
-                           Entry.getKeyData() + Entry.getKeyLength());
-
-  return S;
-}
-
-MDString *MDString::get(const std::string &Str) {
-  sys::SmartScopedWriter<true> Writer(*ConstantsLock);
-  StringMapEntry<MDString *> &Entry = MDStringCache->GetOrCreateValue(
-                                        Str.data(), Str.data() + Str.size());
-  MDString *&S = Entry.getValue();
-  if (!S) S = new MDString(Entry.getKeyData(),
-                           Entry.getKeyData() + Entry.getKeyLength());
-
-  return S;
-}
-
 void MDString::destroyConstant() {
-  sys::SmartScopedWriter<true> Writer(*ConstantsLock);
-  MDStringCache->erase(MDStringCache->find(StrBegin, StrEnd));
+  getType()->getContext().erase(this);
   destroyConstantImpl();
 }
 
diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp
index c869ab0..7bce6f5 100644
--- a/lib/VMCore/LLVMContext.cpp
+++ b/lib/VMCore/LLVMContext.cpp
@@ -548,11 +548,11 @@
 
 // MDString accessors
 MDString* LLVMContext::getMDString(const char *StrBegin, const char *StrEnd) {
-  return MDString::get(StrBegin, StrEnd);
+  return pImpl->getMDString(StrBegin, StrEnd);
 }
 
 MDString* LLVMContext::getMDString(const std::string &Str) {
-  return MDString::get(Str);
+  return getMDString(Str.data(), Str.data()+Str.size());
 }
 
 // FunctionType accessors
@@ -637,3 +637,7 @@
   }
   return Type::Int1Ty;
 }
+
+void LLVMContext::erase(MDString *M) {
+  pImpl->erase(M);
+}
\ No newline at end of file
diff --git a/lib/VMCore/LLVMContextImpl.cpp b/lib/VMCore/LLVMContextImpl.cpp
index 4c6319e..93b9e7d 100644
--- a/lib/VMCore/LLVMContextImpl.cpp
+++ b/lib/VMCore/LLVMContextImpl.cpp
@@ -78,4 +78,23 @@
   }
   
   return Slot;
-}
\ No newline at end of file
+}
+
+MDString *LLVMContextImpl::getMDString(const char *StrBegin,
+                                       const char *StrEnd) {
+  sys::SmartScopedWriter<true> Writer(ConstantsLock);
+  StringMapEntry<MDString *> &Entry = MDStringCache.GetOrCreateValue(
+                                        StrBegin, StrEnd);
+  MDString *&S = Entry.getValue();
+  if (!S) S = new MDString(Entry.getKeyData(),
+                           Entry.getKeyData() + Entry.getKeyLength());
+
+  return S;
+}
+
+// *** erase methods ***
+
+void LLVMContextImpl::erase(MDString *M) {
+  sys::SmartScopedWriter<true> Writer(ConstantsLock);
+  MDStringCache.erase(MDStringCache.find(M->StrBegin, M->StrEnd));
+}
diff --git a/lib/VMCore/LLVMContextImpl.h b/lib/VMCore/LLVMContextImpl.h
index 27bd451..3a5f7c1 100644
--- a/lib/VMCore/LLVMContextImpl.h
+++ b/lib/VMCore/LLVMContextImpl.h
@@ -19,11 +19,13 @@
 #include "llvm/ADT/APFloat.h"
 #include "llvm/ADT/APInt.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringMap.h"
 
 namespace llvm {
 
 class ConstantInt;
 class ConstantFP;
+class MDString;
 class LLVMContext;
 class Type;
 
@@ -90,6 +92,8 @@
                    DenseMapAPFloatKeyInfo> FPMapTy;
   FPMapTy FPConstants;
   
+  StringMap<MDString*> MDStringCache;
+  
   LLVMContext &Context;
   LLVMContextImpl();
   LLVMContextImpl(const LLVMContextImpl&);
@@ -101,6 +105,11 @@
   ConstantInt *getConstantInt(const APInt &V);
   
   ConstantFP *getConstantFP(const APFloat &V);
+  
+  MDString *getMDString(const char *StrBegin, const char *StrEnd);
+  
+  
+  void erase(MDString *M);
 };
 
 }
