diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index c3f7eb6..29812da 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -176,33 +176,6 @@
 }
 
 
-void BytecodeParser::postResolveValues(ValueTable &ValTab) {
-  while (!ValTab.empty()) {
-    ValueList &VL = *ValTab.back();
-    ValTab.pop_back();    
-
-    while (!VL.empty()) {
-      Value *V = VL.back();
-      unsigned IDNumber = getValueIDNumberFromPlaceHolder(V);
-      VL.pop_back();
-
-      Value *NewVal = getValue(V->getType(), IDNumber, false);
-      if (NewVal == 0)
-        throw std::string("Unresolvable reference found: <" +
-                          V->getType()->getDescription() + ">:" + 
-                          utostr(IDNumber) + ".");
-
-      // Fixup all of the uses of this placeholder def...
-      V->replaceAllUsesWith(NewVal);
-      
-      // Now that all the uses are gone, delete the placeholder...
-      // If we couldn't find a def (error case), then leak a little
-      delete V;  // memory, 'cause otherwise we can't remove all uses!
-    }
-    delete &VL;
-  }
-}
-
 std::auto_ptr<BasicBlock>
 BytecodeParser::ParseBasicBlock(const unsigned char *&Buf,
                                 const unsigned char *EndBuf) {
@@ -381,9 +354,31 @@
   }
 
   // Check for unresolvable references
-  postResolveValues(LateResolveValues);
+  while (!LateResolveValues.empty()) {
+    ValueList &VL = *LateResolveValues.back();
+    LateResolveValues.pop_back();    
 
-  //ResolveReferencesToValue(F, FunctionSlot);
+    while (!VL.empty()) {
+      Value *V = VL.back();
+      unsigned IDNumber = getValueIDNumberFromPlaceHolder(V);
+      VL.pop_back();
+
+      Value *NewVal = getValue(V->getType(), IDNumber, false);
+      if (NewVal == 0)
+        throw std::string("Unresolvable reference found: <" +
+                          V->getType()->getDescription() + ">:" + 
+                          utostr(IDNumber) + ".");
+
+      // Fixup all of the uses of this placeholder def...
+      V->replaceAllUsesWith(NewVal);
+      
+      // Now that all the uses are gone, delete the placeholder...
+      // If we couldn't find a def (error case), then leak a little
+      // memory, because otherwise we can't remove all uses!
+      delete V;
+    }
+    delete &VL;
+  }
 
   // Clear out function-level types...
   FunctionTypeValues.clear();
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index c022519..8825df7 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -77,11 +77,9 @@
     std::cerr << "BytecodeParser instance!\n";
   }
 
-private:          // All of this data is transient across calls to ParseBytecode
+private:
   struct ValueList : public User {
-    ValueList() : User(Type::TypeTy, Value::TypeVal) {
-    }
-    ~ValueList() {}
+    ValueList() : User(Type::TypeTy, Value::TypeVal) {}
 
     // vector compatibility methods
     unsigned size() const { return getNumOperands(); }
@@ -185,7 +183,6 @@
 
   int insertValue(Value *V, ValueTable &Table);  // -1 = Failure
   void setValueTo(ValueTable &D, unsigned Slot, Value *V);
-  void postResolveValues(ValueTable &ValTab);
 
   unsigned getTypeSlot(const Type *Ty);
 
