diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index e9b18e0..a36aa99 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -32,17 +32,15 @@
 using namespace llvm;
 
 namespace {
-
-/// @brief A class for maintaining the slot number definition
-/// as a placeholder for the actual definition for forward constants defs.
-class ConstantPlaceHolder : public ConstantExpr {
-  ConstantPlaceHolder();                       // DO NOT IMPLEMENT
-  void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT
-public:
-  ConstantPlaceHolder(const Type *Ty) 
-    : ConstantExpr(Instruction::UserOp1, Constant::getNullValue(Ty), Ty) {}
-};
-
+  /// @brief A class for maintaining the slot number definition
+  /// as a placeholder for the actual definition for forward constants defs.
+  class ConstantPlaceHolder : public ConstantExpr {
+    ConstantPlaceHolder();                       // DO NOT IMPLEMENT
+    void operator=(const ConstantPlaceHolder &); // DO NOT IMPLEMENT
+  public:
+    ConstantPlaceHolder(const Type *Ty) 
+      : ConstantExpr(Ty, Instruction::UserOp1, 0, 0) {}
+  };
 }
 
 // Provide some details on error
@@ -671,7 +669,7 @@
       error("Invalid phi node encountered!");
 
     PHINode *PN = new PHINode(InstTy);
-    PN->op_reserve(Oprnds.size());
+    PN->reserveOperandSpace(Oprnds.size());
     for (unsigned i = 0, e = Oprnds.size(); i != e; i += 2)
       PN->addIncoming(getValue(iType, Oprnds[i]), getBasicBlock(Oprnds[i+1]));
     Result = PN;
@@ -707,7 +705,8 @@
       error("Switch statement with odd number of arguments!");
 
     SwitchInst *I = new SwitchInst(getValue(iType, Oprnds[0]),
-                                   getBasicBlock(Oprnds[1]));
+                                   getBasicBlock(Oprnds[1]),
+                                   Oprnds.size()/2-1);
     for (unsigned i = 2, e = Oprnds.size(); i != e; i += 2)
       I->addCase(cast<Constant>(getValue(iType, Oprnds[i])),
                  getBasicBlock(Oprnds[i+1]));
diff --git a/lib/Bytecode/Reader/Reader.h b/lib/Bytecode/Reader/Reader.h
index 06e021d..c63fcc7 100644
--- a/lib/Bytecode/Reader/Reader.h
+++ b/lib/Bytecode/Reader/Reader.h
@@ -77,18 +77,23 @@
   /// constants with global variables at the end of reading the
   /// globals section.
   /// @brief A list of values as a User of those Values.
-  struct ValueList : public User {
-    ValueList() : User(Type::VoidTy, Value::ValueListVal) {}
+  class ValueList : public User {
+    std::vector<Use> Uses;
+  public:
+    ValueList() : User(Type::VoidTy, Value::ValueListVal, 0, 0) {}
 
     // vector compatibility methods
     unsigned size() const { return getNumOperands(); }
-    void push_back(Value *V) { Operands.push_back(Use(V, this)); }
-    Value *back() const { return Operands.back(); }
-    void pop_back() { Operands.pop_back(); }
-    bool empty() const { return Operands.empty(); }
-    // must override this 
+    void push_back(Value *V) {
+      Uses.push_back(Use(V, this));
+      OperandList = &Uses[0];
+      ++NumOperands;
+    }
+    Value *back() const { return Uses.back(); }
+    void pop_back() { Uses.pop_back(); --NumOperands; }
+    bool empty() const { return NumOperands == 0; }
     virtual void print(std::ostream& os) const {
-      for ( unsigned i = 0; i < size(); i++ ) {
+      for (unsigned i = 0; i < size(); ++i) {
         os << i << " ";
         getOperand(i)->print(os);
         os << "\n";
