diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h
index 2454dca..0398e43 100644
--- a/include/llvm/Bitcode/Deserialize.h
+++ b/include/llvm/Bitcode/Deserialize.h
@@ -153,6 +153,8 @@
   void RegisterPtr(const void* Ptr) {
     RegisterPtr(ReadInt(),Ptr);
   }
+  
+  bool AtEnd();
 
 private:
   void ReadRecord();  
diff --git a/include/llvm/Bitcode/Serialize.h b/include/llvm/Bitcode/Serialize.h
index a465bec..74637f5 100644
--- a/include/llvm/Bitcode/Serialize.h
+++ b/include/llvm/Bitcode/Serialize.h
@@ -25,7 +25,7 @@
 class Serializer {
   BitstreamWriter& Stream;
   SmallVector<uint64_t,10> Record;
-  bool inBlock;
+  unsigned BlockLevel;
   
   typedef DenseMap<const void*,unsigned> MapTy;
   MapTy PtrMap;
@@ -56,6 +56,9 @@
 
   void Flush() { if (inRecord()) EmitRecord(); }
   
+  void EnterBlock(unsigned BlockID = 8, unsigned CodeLen = 3);
+  void ExitBlock();    
+  
 private:
   void EmitRecord();
   inline bool inRecord() { return Record.size() > 0; }
diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp
index 31d180f..ef4e4f7 100644
--- a/lib/Bitcode/Reader/Deserialize.cpp
+++ b/lib/Bitcode/Reader/Deserialize.cpp
@@ -47,10 +47,15 @@
   // FIXME: Check if we haven't run off the edge of the stream.
   // FIXME: Handle abbreviations.
 
+  assert (Record.size() == 0);
+  
   unsigned Code;
 
   while (true) {
     
+    if (Stream.AtEndOfStream())
+      return;
+    
     Code = Stream.ReadCode();
   
     if (Code == bitc::ENTER_SUBBLOCK) {
@@ -71,7 +76,16 @@
   
   assert (Record.size() == 0);  
   Stream.ReadRecord(Code,Record);  
-  assert (Record.size() > 0);
+  assert (Record.size() > 0 || Stream.AtEndOfStream());
+}
+
+bool Deserializer::AtEnd() {
+  if (inRecord())
+    return false;
+  
+  ReadRecord();
+  
+  return Stream.AtEndOfStream();
 }
 
 uint64_t Deserializer::ReadInt() {
diff --git a/lib/Bitcode/Writer/Serialize.cpp b/lib/Bitcode/Writer/Serialize.cpp
index 58baf10..f25a154 100644
--- a/lib/Bitcode/Writer/Serialize.cpp
+++ b/lib/Bitcode/Writer/Serialize.cpp
@@ -17,16 +17,17 @@
 using namespace llvm;
 
 Serializer::Serializer(BitstreamWriter& stream, unsigned BlockID)
-  : Stream(stream), inBlock(BlockID >= 8) {
+  : Stream(stream), BlockLevel(0) {
     
-  if (inBlock) Stream.EnterSubblock(8,3);
+  if (BlockID >= 8)
+    EnterBlock(8,3);
 }
 
 Serializer::~Serializer() {
   if (inRecord())
     EmitRecord();
 
-  if (inBlock)
+  while (BlockLevel > 0)
     Stream.ExitBlock();
   
   Stream.FlushToWord();
@@ -38,7 +39,21 @@
   Record.clear();
 }
 
+void Serializer::EnterBlock(unsigned BlockID,unsigned CodeLen) {
+  Flush();
+  Stream.EnterSubblock(BlockID,CodeLen);
+  ++BlockLevel;
+}
+
+void Serializer::ExitBlock() {
+  assert (BlockLevel > 0);
+  --BlockLevel;
+  Flush();
+  Stream.ExitBlock();
+}
+
 void Serializer::EmitInt(unsigned X) {
+  assert (BlockLevel > 0);
   Record.push_back(X);
 }
 
@@ -71,6 +86,7 @@
   else return I->second;
 }
 
+
 #define INT_EMIT(TYPE)\
 void SerializeTrait<TYPE>::Emit(Serializer&S, TYPE X) { S.EmitInt(X); }
 
