diff --git a/lib/Bytecode/Reader/InstructionReader.cpp b/lib/Bytecode/Reader/InstructionReader.cpp
index 979b394..1f1485e 100644
--- a/lib/Bytecode/Reader/InstructionReader.cpp
+++ b/lib/Bytecode/Reader/InstructionReader.cpp
@@ -116,7 +116,8 @@
 
 
 bool BytecodeParser::ParseInstruction(const uchar *&Buf, const uchar *EndBuf,
-				      Instruction *&Res) {
+				      Instruction *&Res,
+                                      BasicBlock *BB /*HACK*/) {
   RawInst Raw;
   if (ParseRawInst(Buf, EndBuf, Raw))
     return true;
@@ -388,9 +389,18 @@
     }
 
     if (Raw.Opcode == Instruction::Load) {
-      assert(MemAccessInst::getIndexedType(Raw.Ty, Idx) && 
-             "Bad indices for Load!");
-      Res = new LoadInst(getValue(Raw.Ty, Raw.Arg1), Idx);
+      Value *Src = getValue(Raw.Ty, Raw.Arg1);
+      if (!Idx.empty()) {
+        cerr << "WARNING: Bytecode contains load instruction with indices.  "
+             << "Replacing with getelementptr/load pair\n";
+        assert(MemAccessInst::getIndexedType(Raw.Ty, Idx) && 
+               "Bad indices for Load!");
+        Src = new GetElementPtrInst(Src, Idx);
+        // FIXME: Remove this compatibility code and the BB parameter to this
+        // method.
+        BB->getInstList().push_back(cast<Instruction>(Src));
+      }
+      Res = new LoadInst(Src);
     } else if (Raw.Opcode == Instruction::GetElementPtr)
       Res = new GetElementPtrInst(getValue(Raw.Ty, Raw.Arg1), Idx);
     else
@@ -429,10 +439,22 @@
       break;
     }
 
-    const Type *ElType = StoreInst::getIndexedType(Raw.Ty, Idx);
-    if (ElType == 0) return true;
-    Res = new StoreInst(getValue(ElType, Raw.Arg1), getValue(Raw.Ty, Raw.Arg2),
-			Idx);
+    Value *Ptr = getValue(Raw.Ty, Raw.Arg2);
+    if (!Idx.empty()) {
+      cerr << "WARNING: Bytecode contains load instruction with indices.  "
+           << "Replacing with getelementptr/load pair\n";
+
+      const Type *ElType = StoreInst::getIndexedType(Raw.Ty, Idx);
+      if (ElType == 0) return true;
+
+      Ptr = new GetElementPtrInst(Ptr, Idx);
+      // FIXME: Remove this compatibility code and the BB parameter to this
+      // method.
+      BB->getInstList().push_back(cast<Instruction>(Ptr));
+    }
+
+    const Type *ValTy = cast<PointerType>(Ptr->getType())->getElementType();
+    Res = new StoreInst(getValue(ValTy, Raw.Arg1), Ptr);
     return false;
   }
   }  // end switch(Raw.Opcode) 
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index bbffb17..dd75d7f 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -168,7 +168,8 @@
 
   while (Buf < EndBuf) {
     Instruction *Inst;
-    if (ParseInstruction(Buf, EndBuf, Inst)) {
+    if (ParseInstruction(Buf, EndBuf, Inst,
+                         /*HACK*/BB)) {
       delete BB;
       return true;
     }
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index fdaf13d..c156f51 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -94,7 +94,8 @@
   bool ParseSymbolTable   (const uchar *&Buf, const uchar *End, SymbolTable *);
   bool ParseMethod        (const uchar *&Buf, const uchar *End, Module *);
   bool ParseBasicBlock    (const uchar *&Buf, const uchar *End, BasicBlock *&);
-  bool ParseInstruction   (const uchar *&Buf, const uchar *End, Instruction *&);
+  bool ParseInstruction   (const uchar *&Buf, const uchar *End, Instruction *&,
+                           BasicBlock *BB /*HACK*/);
   bool ParseRawInst       (const uchar *&Buf, const uchar *End, RawInst &);
 
   bool ParseConstantPool(const uchar *&Buf, const uchar *EndBuf,
