diff --git a/Lib/pickle.py b/Lib/pickle.py
index 954da4e..a8b2b51 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -188,14 +188,13 @@
 
         return GET + `i` + '\n'
 
-    def save(self, object, pers_save = 0):
+    def save(self, object):
         memo = self.memo
 
-        if not pers_save:
-            pid = self.persistent_id(object)
-            if pid is not None:
-                self.save_pers(pid)
-                return
+        pid = self.persistent_id(object)
+        if pid is not None:
+            self.save_pers(pid)
+            return
 
         d = id(object)
 
@@ -215,11 +214,6 @@
         try:
             f = self.dispatch[t]
         except KeyError:
-            pid = self.inst_persistent_id(object)
-            if pid is not None:
-                self.save_pers(pid)
-                return
-
             try:
                 issc = issubclass(t, TypeType)
             except TypeError: # t is not a class
@@ -279,14 +273,11 @@
     def persistent_id(self, object):
         return None
 
-    def inst_persistent_id(self, object):
-        return None
-
     def save_pers(self, pid):
         if not self.bin:
             self.write(PERSID + str(pid) + '\n')
         else:
-            self.save(pid, 1)
+            self.save(pid)
             self.write(BINPERSID)
 
     def save_reduce(self, callable, arg_tup, state = None):
diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py
index 87c73c2..d61f29b 100644
--- a/Lib/test/test_pickle.py
+++ b/Lib/test/test_pickle.py
@@ -1,7 +1,8 @@
 import pickle
 import unittest
 from cStringIO import StringIO
-from test.pickletester import AbstractPickleTests, AbstractPickleModuleTests
+from test.pickletester import AbstractPickleTests, AbstractPickleModuleTests, \
+     AbstractPersistentPicklerTests
 from test import test_support
 
 class PickleTests(AbstractPickleTests, AbstractPickleModuleTests):
@@ -29,11 +30,32 @@
         u = pickle.Unpickler(f)
         return u.load()
 
+class PersPicklerTests(AbstractPersistentPicklerTests):
+
+    def dumps(self, arg, bin=0):
+        class PersPickler(pickle.Pickler):
+            def persistent_id(subself, obj):
+                return self.persistent_id(obj)
+        f = StringIO()
+        p = PersPickler(f, bin)
+        p.dump(arg)
+        f.seek(0)
+        return f.read()
+
+    def loads(self, buf):
+        class PersUnpickler(pickle.Unpickler):
+            def persistent_load(subself, obj):
+                return self.persistent_load(obj)
+        f = StringIO(buf)
+        u = PersUnpickler(f)
+        return u.load()
+
 def test_main():
     loader = unittest.TestLoader()
     suite = unittest.TestSuite()
     suite.addTest(loader.loadTestsFromTestCase(PickleTests))
     suite.addTest(loader.loadTestsFromTestCase(PicklerTests))
+    suite.addTest(loader.loadTestsFromTestCase(PersPicklerTests))
     test_support.run_suite(suite)
 
 if __name__ == "__main__":
