diff --git a/Driver/SerializationTest.cpp b/Driver/SerializationTest.cpp
index 76dde11..4a7137d 100644
--- a/Driver/SerializationTest.cpp
+++ b/Driver/SerializationTest.cpp
@@ -102,6 +102,19 @@
   llvm::Serializer Sezr(Stream);
   
   // ===---------------------------------------------------===/
+  //      Serialize the top-level decls.
+  // ===---------------------------------------------------===/  
+  
+  Sezr.EnterBlock(DeclBlock);
+  
+  for (std::list<Decl*>::iterator I=Decls.begin(), E=Decls.end(); I!=E; ++I) {
+    llvm::cerr << "Serializing: Decl.\n";    
+    Sezr.EmitOwnedPtr(*I);
+  }
+  
+  Sezr.ExitBlock();
+  
+  // ===---------------------------------------------------===/
   //      Serialize the "Translation Unit" metadata.
   // ===---------------------------------------------------===/
 
@@ -130,19 +143,6 @@
   Sezr.ExitBlock();  
   
   // ===---------------------------------------------------===/
-  //      Serialize the top-level decls.
-  // ===---------------------------------------------------===/  
-  
-  Sezr.EnterBlock(DeclBlock);
-  
-  for (std::list<Decl*>::iterator I=Decls.begin(), E=Decls.end(); I!=E; ++I) {
-    llvm::cerr << "Serializing: Decl.\n";    
-    Sezr.EmitOwnedPtr(*I);
-  }
-
-  Sezr.ExitBlock();
-  
-  // ===---------------------------------------------------===/
   //      Finalize serialization: write the bits to disk.
   // ===---------------------------------------------------===/ 
   
@@ -191,15 +191,19 @@
   if (ReadPreamble(Stream)) {
     llvm::cerr << "ERROR: Invalid AST-bitcode signature.\n";
     return;
-  }  
-  
-  // Create the Dezr.
+  }
+    
+  // Create the deserializer.
   llvm::Deserializer Dezr(Stream);
   
   // ===---------------------------------------------------===/
   //      Deserialize the "Translation Unit" metadata.
   // ===---------------------------------------------------===/
   
+  // Skip to the block that has the SourceManager, etc.
+  bool FoundBlock = Dezr.SkipToBlock(ContextBlock);
+  assert (FoundBlock);
+  
   // "Fake" read the SourceManager.
   llvm::cerr << "Faux-Deserializing: SourceManager.\n";
   Dezr.RegisterPtr(&Context->SourceMgr);
@@ -224,8 +228,14 @@
   ASTConsumer* Printer = CreateASTPrinter();
   Janitor<ASTConsumer> PrinterJanitor(Printer);  
   
+  // "Rewind" the stream.  Find the block with the serialized top-level decls.
+  Dezr.Rewind();
+  FoundBlock = Dezr.SkipToBlock(DeclBlock);
+  assert (FoundBlock);
+  llvm::Deserializer::Location DeclBlockLoc = Dezr.getCurrentBlockLocation();
+  
   // The remaining objects in the file are top-level decls.
-  while (!Dezr.AtEnd()) {
+  while (!Dezr.FinishedBlock(DeclBlockLoc)) {
     llvm::cerr << "Deserializing: Decl.\n";
     Decl* decl = Dezr.ReadOwnedPtr<Decl>();
     Printer->HandleTopLevelDecl(decl);    
