diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index 0150f00..f5ddd3f 100644
--- a/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -839,7 +839,7 @@
       unsigned Kind = Record[0];
       for (unsigned i = 1; i != RecordLength; ++i)
         Name[i-1] = Record[i];
-      Metadata &TheMetadata = Context.getMetadata();
+      MetadataContext &TheMetadata = Context.getMetadata();
       assert(TheMetadata.MDHandlerNames.find(Name.str())
              == TheMetadata.MDHandlerNames.end() &&
              "Already registered MDKind!");
@@ -1556,7 +1556,7 @@
   if (Stream.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID))
     return Error("Malformed block record");
 
-  Metadata &TheMetadata = Context.getMetadata();
+  MetadataContext &TheMetadata = Context.getMetadata();
   SmallVector<uint64_t, 64> Record;
   while(1) {
     unsigned Code = Stream.ReadCode();
diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp
index 3511dbc..5857c59 100644
--- a/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -562,15 +562,15 @@
 
   // Write metadata attachments
   // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
-  Metadata &TheMetadata = F.getContext().getMetadata();
+  MetadataContext &TheMetadata = F.getContext().getMetadata();
   for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
     for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
          I != E; ++I) {
-      const Metadata::MDMapTy *P = TheMetadata.getMDs(I);
+      const MetadataContext::MDMapTy *P = TheMetadata.getMDs(I);
       if (!P) continue;
       bool RecordedInstruction = false;
-      for (Metadata::MDMapTy::const_iterator PI = P->begin(), PE = P->end();
-           PI != PE; ++PI) {
+      for (MetadataContext::MDMapTy::const_iterator PI = P->begin(), 
+             PE = P->end(); PI != PE; ++PI) {
         if (MDNode *ND = dyn_cast_or_null<MDNode>(PI->second)) {
           if (RecordedInstruction == false) {
             Record.push_back(VE.getInstructionID(I));
@@ -601,7 +601,7 @@
 
   // Write metadata kinds
   // METADATA_KIND - [n x [id, name]]
-  Metadata &TheMetadata = M->getContext().getMetadata();
+  MetadataContext &TheMetadata = M->getContext().getMetadata();
   const StringMap<unsigned> *Kinds = TheMetadata.getHandlerNames();
   for (StringMap<unsigned>::const_iterator
          I = Kinds->begin(), E = Kinds->end(); I != E; ++I) {
diff --git a/lib/Bitcode/Writer/ValueEnumerator.cpp b/lib/Bitcode/Writer/ValueEnumerator.cpp
index 97219af..60253ad 100644
--- a/lib/Bitcode/Writer/ValueEnumerator.cpp
+++ b/lib/Bitcode/Writer/ValueEnumerator.cpp
@@ -86,7 +86,7 @@
          I != E; ++I)
       EnumerateType(I->getType());
 
-    Metadata &TheMetadata = F->getContext().getMetadata();
+    MetadataContext &TheMetadata = F->getContext().getMetadata();
     for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
       for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E;++I){
         for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
@@ -99,9 +99,9 @@
           EnumerateAttributes(II->getAttributes());
 
         // Enumerate metadata attached with this instruction.
-        const Metadata::MDMapTy *MDs = TheMetadata.getMDs(I);
+        const MetadataContext::MDMapTy *MDs = TheMetadata.getMDs(I);
         if (MDs)
-          for (Metadata::MDMapTy::const_iterator MI = MDs->begin(),
+          for (MetadataContext::MDMapTy::const_iterator MI = MDs->begin(),
                  ME = MDs->end(); MI != ME; ++MI)
             if (MDNode *MDN = dyn_cast_or_null<MDNode>(MI->second))
               EnumerateMetadata(MDN);
