diff --git a/erp5/util/zodbanalyze/__init__.py b/erp5/util/zodbanalyze/__init__.py
index a3e4706909a24389e3182185f1de57884295dca3..112a11fe3ff45e1b515eb6570aa2fc40339aaf7f 100644
--- a/erp5/util/zodbanalyze/__init__.py
+++ b/erp5/util/zodbanalyze/__init__.py
@@ -2,22 +2,9 @@
 
 # Based on a transaction analyzer by Matt Kromer.
 
-import pickle
-import re
 import sys
-import types
 from ZODB.FileStorage import FileStorage
-from cStringIO import StringIO
-
-class FakeError(Exception):
-    def __init__(self, module, name):
-        Exception.__init__(self)
-        self.module = module
-        self.name = name
-
-class FakeUnpickler(pickle.Unpickler):
-    def find_class(self, module, name):
-        raise FakeError(module, name)
+from ZODB.utils import get_pickle_metadata
 
 class Report:
     def __init__(self):
@@ -97,18 +84,8 @@ def analyze_trans(report, txn):
         analyze_rec(report, rec)
 
 def get_type(record):
-    try:
-        unpickled = FakeUnpickler(StringIO(record.data)).load()
-    except FakeError, err:
-        return "%s.%s" % (err.module, err.name)
-    except:
-        raise
-    classinfo = unpickled[0]
-    if isinstance(classinfo, types.TupleType):
-        mod, klass = classinfo
-        return "%s.%s" % (mod, klass)
-    else:
-        return str(classinfo)
+    mod, klass = get_pickle_metadata(record.data)
+    return "%s.%s" % (mod, klass)
 
 def analyze_rec(report, record):
     oid = record.oid