diff --git a/src/ZODB/DemoStorage.py b/src/ZODB/DemoStorage.py
index dd5e0069c2b15e7fc4c3fa16c542c86b54ebe693..ad68a011a8b2891c00e40b30f72b19b3f3fd4b75 100644
--- a/src/ZODB/DemoStorage.py
+++ b/src/ZODB/DemoStorage.py
@@ -79,7 +79,7 @@ method::
 and call it to monitor the storage.
 
 """
-__version__='$Revision: 1.12 $'[11:-2]
+__version__='$Revision: 1.13 $'[11:-2]
 
 import base64, time, string
 from ZODB import POSException, BaseStorage, utils
@@ -137,6 +137,7 @@ class DemoStorage(BaseStorage.BaseStorage):
             v=self._vindex.get(src, None)
             if not v: return
 
+            newserial = self._serial
             tindex=self._tindex
             oids=[]
             for r in v.values():
@@ -144,7 +145,7 @@ class DemoStorage(BaseStorage.BaseStorage):
                 if nv:
                     oids.append(oid)
                     oid, serial, pre, vdata, p = nv
-                    tindex.append([oid, serial, r, None, p])
+                    tindex.append([oid, newserial, r, None, p])
                 else:
                     # effectively, delete the thing
                     tindex.append([oid, None, r, None, None])
@@ -168,6 +169,7 @@ class DemoStorage(BaseStorage.BaseStorage):
             v=self._vindex.get(src, None)
             if v is None: return
 
+            newserial = self._serial
             tindex=self._tindex
             oids=[]
             for r in v.values():
@@ -178,7 +180,7 @@ class DemoStorage(BaseStorage.BaseStorage):
                     new_vdata = dest, vdata[1]
                 else:
                     new_vdata = None
-                tindex.append([oid, serial, r, new_vdata, p])
+                tindex.append([oid, newserial, r, new_vdata, p])
 
 
             return oids
diff --git a/src/ZODB/FileStorage.py b/src/ZODB/FileStorage.py
index f0d1e2777966393b3a55ad6a64ae8905212c5a0b..c16ef82e2b08d0f001b9c24f07d095aee7d56730 100644
--- a/src/ZODB/FileStorage.py
+++ b/src/ZODB/FileStorage.py
@@ -115,7 +115,7 @@
 #   may have a back pointer to a version record or to a non-version
 #   record.
 #
-__version__='$Revision: 1.95 $'[11:-2]
+__version__='$Revision: 1.96 $'[11:-2]
 
 import base64
 from cPickle import Pickler, Unpickler, loads
@@ -483,6 +483,7 @@ class FileStorage(BaseStorage.BaseStorage,
         current_oids = {}
         t = None
         tstatus = ' '
+        newserial = self._serial
 
         while srcpos:
             self._file.seek(srcpos)
@@ -494,7 +495,7 @@ class FileStorage(BaseStorage.BaseStorage,
                 # This is a current record!
                 self._tindex[oid] = here
                 oids.append(oid)
-                self._tfile.write(h[:16] + spos + middle)
+                self._tfile.write(oid + newserial + spos + middle)
                 if dest:
                     self._tvindex[dest] = here
                     self._tfile.write(pnv + sd + dest)
diff --git a/src/ZODB/tests/VersionStorage.py b/src/ZODB/tests/VersionStorage.py
index c178576670ae0c29280d5767ee5bcc02c8b3c1dc..6e025fb78e2cf887bc5c8321c451a3a49c4a0af0 100644
--- a/src/ZODB/tests/VersionStorage.py
+++ b/src/ZODB/tests/VersionStorage.py
@@ -206,6 +206,71 @@ class VersionStorage:
         finally:
             self._storage.tpc_abort(t)
 
+
+    def checkNewSerialOnAbortVersion(self):
+        eq = self.assertEqual
+        oid, version = self._setup_version()
+        data, vserial = self._storage.load(oid, version)
+        data, nserial = self._storage.load(oid, '')
+
+        # Now abort the version
+        t = Transaction()
+        self._storage.tpc_begin(t)
+        oids = self._storage.abortVersion(version, t)
+        self._storage.tpc_vote(t)
+        self._storage.tpc_finish(t)
+        
+        # Now check the new serial
+        data, serial = self._storage.load(oid, version)
+
+        self.failUnless(serial != vserial and serial != nserial,
+                        "New serial, %r, should be different from the old "
+                        "version, %r, and non-version, %r, serials."
+                        % (serial, vserial, nserial))
+
+    def checkNewSerialOnCommitVersion(self):
+        eq = self.assertEqual
+        oid, version = self._setup_version()
+        data, vserial = self._storage.load(oid, version)
+        data, nserial = self._storage.load(oid, '')
+
+        # Now commit the version
+        t = Transaction()
+        self._storage.tpc_begin(t)
+        oids = self._storage.commitVersion(version, '', t)
+        self._storage.tpc_vote(t)
+        self._storage.tpc_finish(t)
+        
+        # Now check the new serial
+        data, serial = self._storage.load(oid, '')
+
+        self.failUnless(serial != vserial and serial != nserial,
+                        "New serial, %r, should be different from the old "
+                        "version, %r, and non-version, %r, serials."
+                        % (serial, vserial, nserial))
+
+    def checkNewSerialOnCommitVersionToVersion(self):
+        eq = self.assertEqual
+        oid, version = self._setup_version()
+        data, vserial = self._storage.load(oid, version)
+        data, nserial = self._storage.load(oid, '')
+
+        # Now commit the version
+        t = Transaction()
+        self._storage.tpc_begin(t)
+        version2 = 'test version 2'
+        oids = self._storage.commitVersion(version, version2, t)
+        self._storage.tpc_vote(t)
+        self._storage.tpc_finish(t)
+        
+        # Now check the new serial
+        data, serial = self._storage.load(oid, version2)
+
+        self.failUnless(serial != vserial and serial != nserial,
+                        "New serial, %r, should be different from the old "
+                        "version, %r, and non-version, %r, serials."
+                        % (serial, vserial, nserial))
+
     def checkModifyAfterAbortVersion(self):
         eq = self.assertEqual
         oid, version = self._setup_version()