diff --git a/openerp/addons/base/ir/ir_values.py b/openerp/addons/base/ir/ir_values.py
index bf0128dffd64550a059e84b811e57ab12756d310..5d8cb73373da3cc1da77ecc78d8cd9aa280d2801 100644
--- a/openerp/addons/base/ir/ir_values.py
+++ b/openerp/addons/base/ir/ir_values.py
@@ -18,11 +18,11 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-import pickle
 
 from openerp.osv import osv, fields
 from openerp.osv.orm import except_orm
 from openerp.tools.safe_eval import safe_eval as eval
+from openerp.tools import pickle
 
 EXCLUDED_FIELDS = set((
     'report_sxw_content', 'report_rml_content', 'report_sxw', 'report_rml',
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 06ef395afcd6008a6f3c0131b80780f6f937a32e..169e7ecb2ea18b02910eb9aca1107e86c379c721 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -49,7 +49,6 @@ import datetime
 import itertools
 import logging
 import operator
-import pickle
 import re
 import simplejson
 import time
@@ -65,7 +64,7 @@ import openerp
 import openerp.netsvc as netsvc
 import openerp.tools as tools
 from openerp.tools.config import config
-from openerp.tools.misc import CountingStream
+from openerp.tools.misc import CountingStream, pickle
 from openerp.tools.safe_eval import safe_eval as eval
 from openerp.tools.translate import _
 from openerp import SUPERUSER_ID
diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py
index bd7c214fd2464f84da4b567cfc2d892c8bec3dff..3cfc464ce8cd059008f478e3e05e9bd43b1d46f3 100644
--- a/openerp/tools/convert.py
+++ b/openerp/tools/convert.py
@@ -23,7 +23,6 @@ import cStringIO
 import csv
 import logging
 import os.path
-import pickle
 import re
 
 # for eval context:
@@ -53,7 +52,7 @@ from translate import _
 # List of etree._Element subclasses that we choose to ignore when parsing XML.
 from misc import SKIPPED_ELEMENT_TYPES
 
-from misc import unquote
+from misc import pickle, unquote
 
 # Import of XML records requires the unsafe eval as well,
 # almost everywhere, which is ok because it supposedly comes
diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py
index 0289e4c9d09faa85401bd66f780333db7cc4d8b4..90b89eeb99a3234107f7dfdec435f9f13098906a 100644
--- a/openerp/tools/misc.py
+++ b/openerp/tools/misc.py
@@ -27,6 +27,7 @@ Miscellaneous tools used by OpenERP.
 """
 
 from functools import wraps
+import cPickle
 import cProfile
 import subprocess
 import logging
@@ -36,6 +37,7 @@ import sys
 import threading
 import time
 import zipfile
+from cStringIO import StringIO
 from collections import defaultdict
 from datetime import datetime
 from itertools import islice, izip, groupby
@@ -1090,4 +1092,21 @@ def stripped_sys_argv(*strip_args):
 
     return [x for i, x in enumerate(args) if not strip(args, i)]
 
+class Pickle(object):
+    @classmethod
+    def load(cls, stream):
+        unpickler = cPickle.Unpickler(stream)
+        # pickle builtins: str/unicode, int/long, float, bool, tuple, list, dict, None
+        unpickler.find_global = None
+        return unpickler.load()
+
+    @classmethod
+    def loads(cls, text):
+        return cls.load(StringIO(text))
+
+    dumps = cPickle.dumps
+    dump = cPickle.dump
+
+pickle = Pickle
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: