diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py
index 683a2f87b48835b86adc2b77868e9ce5e8bc0289..f8adba4c0a20ff484267a4a39c7f4e5ce2999b57 100644
--- a/addons/auth_oauth/controllers/main.py
+++ b/addons/auth_oauth/controllers/main.py
@@ -1,7 +1,7 @@
 import functools
 import logging
 
-import simplejson
+import json
 import urlparse
 import werkzeug.utils
 from werkzeug.exceptions import BadRequest
@@ -62,7 +62,7 @@ class OAuthLogin(Home):
                 client_id=provider['client_id'],
                 redirect_uri=return_url,
                 scope=provider['scope'],
-                state=simplejson.dumps(state),
+                state=json.dumps(state),
             )
             provider['auth_link'] = provider['auth_endpoint'] + '?' + werkzeug.url_encode(params)
 
@@ -132,7 +132,7 @@ class OAuthController(http.Controller):
     @http.route('/auth_oauth/signin', type='http', auth='none')
     @fragment_to_query_string
     def signin(self, **kw):
-        state = simplejson.loads(kw['state'])
+        state = json.loads(kw['state'])
         dbname = state['d']
         provider = state['p']
         context = state.get('c', {})
@@ -195,5 +195,5 @@ class OAuthController(http.Controller):
             'c': {'no_user_creation': True},
         }
 
-        kw['state'] = simplejson.dumps(state)
+        kw['state'] = json.dumps(state)
         return self.signin(**kw)
diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py
index cada7d51a26430193e1da600e411aa55486d8b9b..7b3e1a3a0d57e67f2fe7e6305043979a990bfd24 100644
--- a/addons/auth_oauth/res_users.py
+++ b/addons/auth_oauth/res_users.py
@@ -3,7 +3,7 @@ import logging
 import werkzeug.urls
 import urlparse
 import urllib2
-import simplejson
+import json
 
 import openerp
 from openerp.addons.auth_signup.res_users import SignupError
@@ -33,7 +33,7 @@ class res_users(osv.Model):
             url = endpoint + '?' + params
         f = urllib2.urlopen(url)
         response = f.read()
-        return simplejson.loads(response)
+        return json.loads(response)
 
     def _auth_oauth_validate(self, cr, uid, provider, access_token, context=None):
         """ return the validation data corresponding to the access token """
@@ -82,7 +82,7 @@ class res_users(osv.Model):
         except openerp.exceptions.AccessDenied, access_denied_exception:
             if context and context.get('no_user_creation'):
                 return None
-            state = simplejson.loads(params['state'])
+            state = json.loads(params['state'])
             token = state.get('t')
             values = self._generate_signup_values(cr, uid, provider, validation, params, context=context)
             try:
diff --git a/addons/base_geolocalize/models/res_partner.py b/addons/base_geolocalize/models/res_partner.py
index d99b9942dcfbb576d08f3d1aabb35ec42e63febe..e30ee0715078e815d4df56c7da044d116da647e0 100644
--- a/addons/base_geolocalize/models/res_partner.py
+++ b/addons/base_geolocalize/models/res_partner.py
@@ -1,10 +1,7 @@
 # -*- coding: utf-8 -*-
 # Part of Odoo. See LICENSE file for full copyright and licensing details.
 
-try:
-    import simplejson as json
-except ImportError:
-    import json     # noqa
+import json
 import urllib
 
 from openerp.osv import osv, fields
diff --git a/addons/base_import/controllers.py b/addons/base_import/controllers.py
index afaf06e99e05203634809a0c6ff3ee72754a2a54..0cf3996ec09aa8404a0618d818ede6b9b2f32033 100644
--- a/addons/base_import/controllers.py
+++ b/addons/base_import/controllers.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-import simplejson
+import json
 
 from openerp.http import Controller, route
 
@@ -15,4 +15,4 @@ class ImportController(Controller):
         }, req.context)
 
         return 'window.top.%s(%s)' % (
-            jsonp, simplejson.dumps({'result': written}))
+            jsonp, json.dumps({'result': written}))
diff --git a/addons/base_setup/base_setup.py b/addons/base_setup/base_setup.py
index fdcc98be2b922616c395a1406f25a83e4555b8a2..c953587b6c57b40c6e77a06639bb483377ebb4d1 100644
--- a/addons/base_setup/base_setup.py
+++ b/addons/base_setup/base_setup.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 # Part of Odoo. See LICENSE file for full copyright and licensing details.
 
-import simplejson
+import json
 import cgi
 from openerp import tools
 from openerp.osv import fields, osv
diff --git a/addons/bus/models/bus.py b/addons/bus/models/bus.py
index b7d39b05ea3aac915cde22f3ebadc43fcb032471..82d8131061d1ce38c556cb562c55281321b20ae9 100644
--- a/addons/bus/models/bus.py
+++ b/addons/bus/models/bus.py
@@ -4,7 +4,6 @@ import json
 import logging
 import random
 import select
-import simplejson
 import threading
 import time
 
@@ -21,7 +20,7 @@ TIMEOUT = 50
 # Bus
 #----------------------------------------------------------
 def json_dump(v):
-    return simplejson.dumps(v, separators=(',', ':'))
+    return json.dumps(v, separators=(',', ':'))
 
 def hashable(key):
     if isinstance(key, list):
@@ -79,8 +78,8 @@ class ImBus(models.Model):
         for notif in notifications:
             result.append({
                 'id': notif['id'],
-                'channel': simplejson.loads(notif['channel']),
-                'message': simplejson.loads(notif['message']),
+                'channel': json.loads(notif['channel']),
+                'message': json.loads(notif['message']),
             })
         return result
 
diff --git a/addons/calendar/controllers/main.py b/addons/calendar/controllers/main.py
index 6831e9a130d278a18e20894398b8e0626c3186d7..770c73bd41c65d1a00293b4ffa7ea868b0d73e12 100644
--- a/addons/calendar/controllers/main.py
+++ b/addons/calendar/controllers/main.py
@@ -1,4 +1,4 @@
-import simplejson
+import json
 import openerp
 import openerp.http as http
 from openerp.http import request
diff --git a/addons/google_account/controllers/main.py b/addons/google_account/controllers/main.py
index 2a3a4ae586f44249302a90f98c159a797b290e99..504a9933fea3af2cff2783d15320fbdf3a7ae54c 100644
--- a/addons/google_account/controllers/main.py
+++ b/addons/google_account/controllers/main.py
@@ -1,4 +1,4 @@
-import simplejson
+import json
 import urllib
 import openerp
 from openerp import http
@@ -14,7 +14,7 @@ class google_auth(http.Controller):
     def oauth2callback(self, **kw):
         """ This route/function is called by Google when user Accept/Refuse the consent of Google """
         
-        state = simplejson.loads(kw['state'])
+        state = json.loads(kw['state'])
         dbname = state.get('d')
         service = state.get('s')
         url_return = state.get('f')
diff --git a/addons/google_account/google_account.py b/addons/google_account/google_account.py
index ea1482d692546ecf868a9b2bc1a9772aa31e493c..53c02e08ad3944b98e698b1e7c7d0cb1e5ed0608 100644
--- a/addons/google_account/google_account.py
+++ b/addons/google_account/google_account.py
@@ -10,7 +10,7 @@ from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
 
 import werkzeug.urls
 import urllib2
-import simplejson
+import json
 
 import logging
 _logger = logging.getLogger(__name__)
@@ -37,7 +37,7 @@ class google_service(osv.osv_memory):
             error_msg = "Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired"
             raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
 
-        content = simplejson.loads(content)
+        content = json.loads(content)
         return content.get('refresh_token')
 
     def _get_google_token_uri(self, cr, uid, service, scope, context=None):
@@ -63,7 +63,7 @@ class google_service(osv.osv_memory):
         params = {
             'response_type': 'code',
             'client_id': client_id,
-            'state': simplejson.dumps(state_obj),
+            'state': json.dumps(state_obj),
             'scope': scope or 'https://www.googleapis.com/auth/%s' % (service,),
             'redirect_uri': base_url + '/google_account/authentication',
             'approval_prompt': 'force',
@@ -123,7 +123,7 @@ class google_service(osv.osv_memory):
                 registry = openerp.modules.registry.RegistryManager.get(request.session.db)
                 with registry.cursor() as cur:
                     self.pool['res.users'].write(cur, uid, [uid], {'google_%s_rtoken' % service: False}, context=context)
-            error_key = simplejson.loads(e.read()).get("error", "nc")
+            error_key = json.loads(e.read()).get("error", "nc")
             _logger.exception("Bad google request : %s !" % error_key)
             error_msg = "Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired [%s]" % error_key
             raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
@@ -156,7 +156,7 @@ class google_service(osv.osv_memory):
                 response = False
             else:
                 content = request.read()
-                response = simplejson.loads(content)
+                response = json.loads(content)
 
             try:
                 ask_time = datetime.strptime(request.headers.get('date'), "%a, %d %b %Y %H:%M:%S %Z")
diff --git a/addons/google_calendar/google_calendar.py b/addons/google_calendar/google_calendar.py
index c9dabe9ec9ebb0aa33bae2f9f61a728af20227ef..7e17d1aaf4598d19afa39d8f9c1073abe1ae94d6 100644
--- a/addons/google_calendar/google_calendar.py
+++ b/addons/google_calendar/google_calendar.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import operator
-import simplejson
+import json
 import urllib2
 
 import openerp
@@ -267,7 +267,7 @@ class google_calendar(osv.AbstractModel):
 
         url = "/calendar/v3/calendars/%s/events?fields=%s&access_token=%s" % ('primary', urllib2.quote('id,updated'), self.get_token(cr, uid, context))
         headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
-        data_json = simplejson.dumps(data)
+        data_json = json.dumps(data)
 
         return gs_pool._do_request(cr, uid, url, data_json, headers, type='POST', context=context)
 
@@ -368,7 +368,7 @@ class google_calendar(osv.AbstractModel):
         headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
         data = self.generate_data(cr, uid, oe_event, context=context)
         data['sequence'] = google_event.get('sequence', 0)
-        data_json = simplejson.dumps(data)
+        data_json = json.dumps(data)
 
         status, content, ask_time = self.pool['google.service']._do_request(cr, uid, url, data_json, headers, type='PATCH', context=context)
 
@@ -402,7 +402,7 @@ class google_calendar(osv.AbstractModel):
 
         data['sequence'] = self.get_sequence(cr, uid, instance_id, context)
 
-        data_json = simplejson.dumps(data)
+        data_json = json.dumps(data)
         return gs_pool._do_request(cr, uid, url, data_json, headers, type='PUT', context=context)
 
     def update_from_google(self, cr, uid, event, single_event_dict, type, context):
@@ -697,7 +697,7 @@ class google_calendar(osv.AbstractModel):
                     registry = openerp.modules.registry.RegistryManager.get(request.session.db)
                     with registry.cursor() as cur:
                         self.pool['res.users'].write(cur, SUPERUSER_ID, [uid], {'google_calendar_last_sync_date': False}, context=context)
-                error_key = simplejson.loads(str(e))
+                error_key = json.loads(str(e))
                 error_key = error_key.get('error', {}).get('message', 'nc')
                 error_msg = "Google is lost... the next synchro will be a full synchro. \n\n %s" % error_key
                 raise self.pool.get('res.config.settings').get_config_warning(cr, _(error_msg), context=context)
@@ -858,7 +858,7 @@ class google_calendar(osv.AbstractModel):
                         try:
                             self.delete_an_event(cr, uid, current_event[0], context=context)
                         except Exception, e:
-                            error = simplejson.loads(e.read())
+                            error = json.loads(e.read())
                             error_nr = error.get('error', {}).get('code')
                             # if already deleted from gmail or never created
                             if error_nr in (404, 410,):
diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py
index d90963632bd185c4adc2288a1d1383c4bda1609b..a30e08bbb7c69c97134db3de6d8b858c69c594fe 100644
--- a/addons/google_spreadsheet/google_spreadsheet.py
+++ b/addons/google_spreadsheet/google_spreadsheet.py
@@ -1,7 +1,7 @@
 # Part of Odoo. See LICENSE file for full copyright and licensing details.
 
 import cgi
-import simplejson
+import json
 import logging
 from lxml import etree
 import re
@@ -28,7 +28,7 @@ class config(osv.osv):
         display_fields = []
         for node in doc.xpath("//field"):
             if node.get('modifiers'):
-                modifiers = simplejson.loads(node.get('modifiers'))
+                modifiers = json.loads(node.get('modifiers'))
                 if not modifiers.get('invisible') and not modifiers.get('tree_invisible'):
                     display_fields.append(node.get('name'))
         fields = " ".join(display_fields)
diff --git a/addons/hw_escpos/controllers/main.py b/addons/hw_escpos/controllers/main.py
index d3635e47d0bc829860c0a69a50d5b18315022a92..7c8760d37f864b17c4ea672ecaaeb17807cfb11e 100644
--- a/addons/hw_escpos/controllers/main.py
+++ b/addons/hw_escpos/controllers/main.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 import commands
 import logging
-import simplejson
+import json
 import os
 import os.path
 import io
diff --git a/addons/hw_proxy/controllers/main.py b/addons/hw_proxy/controllers/main.py
index 173cfd599fe4e215c6dfe96da48c1595331589a5..0a75d114edb07f4a4f82ede6acac83d636e843a3 100644
--- a/addons/hw_proxy/controllers/main.py
+++ b/addons/hw_proxy/controllers/main.py
@@ -1,14 +1,14 @@
 # -*- coding: utf-8 -*-
 import logging
 import commands
-import simplejson
+import json
 import os
 import os.path
 import openerp
 import time
 import random
 import subprocess
-import simplejson
+import json
 import werkzeug
 import werkzeug.wrappers
 _logger = logging.getLogger(__name__)
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index 5a42590105fb6c6415e3356f38aef37d69bd477e..50cc5c8f4c0c4b07170d68cb4cab4acc23a2c709 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -4,10 +4,7 @@ import base64
 import datetime
 import dateutil
 import email
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 from lxml import etree
 import logging
 import pytz
diff --git a/addons/payment_adyen/controllers/main.py b/addons/payment_adyen/controllers/main.py
index 63b8c9a8fb5a476adbe8e10403ba5441de2873a4..6301b5a343b55ae095c939b5942783f0f474fc14 100644
--- a/addons/payment_adyen/controllers/main.py
+++ b/addons/payment_adyen/controllers/main.py
@@ -1,9 +1,6 @@
 # -*- coding: utf-8 -*-
 
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 import logging
 import pprint
 import werkzeug
diff --git a/addons/payment_adyen/models/adyen.py b/addons/payment_adyen/models/adyen.py
index 7c89a53e39096303eedfe61d493f20a8e5ae3005..4d28bbb4d03cd12706150d7973906c877f8213c8 100644
--- a/addons/payment_adyen/models/adyen.py
+++ b/addons/payment_adyen/models/adyen.py
@@ -1,10 +1,7 @@
 # -*- coding: utf-'8' "-*-"
 
 import base64
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 from hashlib import sha1
 import hmac
 import logging
diff --git a/addons/payment_buckaroo/controllers/main.py b/addons/payment_buckaroo/controllers/main.py
index d3fe5b196fc1fe5358790d5a48db15be40c61f55..dec20f3de0428aa89267e056a2af746ff6fd3248 100644
--- a/addons/payment_buckaroo/controllers/main.py
+++ b/addons/payment_buckaroo/controllers/main.py
@@ -1,9 +1,5 @@
 # -*- coding: utf-8 -*-
-try:
-    import simplejson as json
-except ImportError:
-    import json
-
+import json
 import logging
 import pprint
 import werkzeug
diff --git a/addons/payment_paypal/controllers/main.py b/addons/payment_paypal/controllers/main.py
index 67f89a8e6347e189c340841c15fc6b802b43b0b1..cd2523bba4d15874d5ffe8c98ccf3b2b9a67beb5 100644
--- a/addons/payment_paypal/controllers/main.py
+++ b/addons/payment_paypal/controllers/main.py
@@ -1,9 +1,6 @@
 # -*- coding: utf-8 -*-
 
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 import logging
 import pprint
 import urllib2
diff --git a/addons/payment_paypal/models/paypal.py b/addons/payment_paypal/models/paypal.py
index 29676fc263667455568f1bbb076788ea5af625b1..1e3b896a2c4d16d3fd46d703bd747dd53d78967a 100644
--- a/addons/payment_paypal/models/paypal.py
+++ b/addons/payment_paypal/models/paypal.py
@@ -1,10 +1,7 @@
 # -*- coding: utf-'8' "-*-"
 
 import base64
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 import logging
 import urlparse
 import werkzeug.urls
diff --git a/addons/payment_sips/controllers/main.py b/addons/payment_sips/controllers/main.py
index 47c9c8d0f0e5e406b510167fe26ea521dc75689d..4cc2a858bfa05b2c47c56037313088236f89f180 100644
--- a/addons/payment_sips/controllers/main.py
+++ b/addons/payment_sips/controllers/main.py
@@ -1,9 +1,6 @@
 # -*- coding: utf-8 -*-
 
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 import logging
 import werkzeug
 
diff --git a/addons/payment_sips/models/sips.py b/addons/payment_sips/models/sips.py
index 0b76ff5ddf610ae051e38c594b3c1b32a3102c95..9c74bf5ef06813f5a11c2773ded3f35121a8b87d 100644
--- a/addons/payment_sips/models/sips.py
+++ b/addons/payment_sips/models/sips.py
@@ -1,9 +1,6 @@
 # -*- coding: utf-'8' "-*-"
 
-try:
-    import simplejson as json
-except ImportError:
-    import json
+import json
 import logging
 from hashlib import sha256
 import urlparse
diff --git a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh
index 6838f7fa78cca9fb7babb6340f6fc6da8f28fc50..6071af92ebd9195daed088e78aa21eaed675fdb9 100755
--- a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh
+++ b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh
@@ -31,7 +31,7 @@ apt-get -y autoremove
 apt-get update
 apt-get -y dist-upgrade
 
-PKGS_TO_INSTALL="adduser postgresql-client python python-dateutil python-decorator python-docutils python-feedparser python-imaging python-jinja2 python-ldap python-libxslt1 python-lxml python-mako python-mock python-openid python-passlib python-psutil python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-pypdf python-reportlab python-requests python-simplejson python-tz python-unittest2 python-vatnumber python-vobject python-werkzeug python-xlwt python-yaml postgresql python-gevent python-serial python-pip python-dev localepurge vim mc mg screen"
+PKGS_TO_INSTALL="adduser postgresql-client python python-dateutil python-decorator python-docutils python-feedparser python-imaging python-jinja2 python-ldap python-libxslt1 python-lxml python-mako python-mock python-openid python-passlib python-psutil python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-pypdf python-reportlab python-requests python-tz python-vatnumber python-vobject python-werkzeug python-xlwt python-yaml postgresql python-gevent python-serial python-pip python-dev localepurge vim mc mg screen"
 
 apt-get -y install ${PKGS_TO_INSTALL}
 
diff --git a/addons/report/controllers/main.py b/addons/report/controllers/main.py
index db1747e66abcd3b99c9d37be4ee0f717aabfc423..5620819c1a1bfe26d4189dc204f2f95c105545f6 100644
--- a/addons/report/controllers/main.py
+++ b/addons/report/controllers/main.py
@@ -5,7 +5,7 @@ from openerp.addons.web.http import Controller, route, request
 from openerp.addons.web.controllers.main import _serialize_exception, content_disposition
 from openerp.tools import html_escape
 
-import simplejson
+import json
 from werkzeug import exceptions, url_decode
 from werkzeug.test import Client
 from werkzeug.wrappers import BaseResponse
@@ -29,11 +29,11 @@ class ReportController(Controller):
         if docids:
             docids = [int(i) for i in docids.split(',')]
         if data.get('options'):
-            data.update(simplejson.loads(data.pop('options')))
+            data.update(json.loads(data.pop('options')))
         if data.get('context'):
             # Ignore 'lang' here, because the context in data is the one from the webclient *but* if
             # the user explicitely wants to change the lang, this mechanism overwrites it.
-            data['context'] = simplejson.loads(data['context'])
+            data['context'] = json.loads(data['context'])
             if data['context'].get('lang'):
                 del data['context']['lang']
             context.update(data['context'])
@@ -86,7 +86,7 @@ class ReportController(Controller):
         type [1]
         :returns: Response with a filetoken cookie and an attachment header
         """
-        requestcontent = simplejson.loads(data)
+        requestcontent = json.loads(data)
         url, type = requestcontent[0], requestcontent[1]
         try:
             if type == 'qweb-pdf':
@@ -124,7 +124,7 @@ class ReportController(Controller):
                 'message': "Odoo Server Error",
                 'data': se
             }
-            return request.make_response(html_escape(simplejson.dumps(error)))
+            return request.make_response(html_escape(json.dumps(error)))
 
     @route(['/report/check_wkhtmltopdf'], type='json', auth="user")
     def check_wkhtmltopdf(self):
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 29d168af5983802f0054810e7e8822d7e056dd09..77975d110063770cf1ce2e20ed2baa8a6f600e64 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -12,7 +12,7 @@ import datetime
 import hashlib
 import os
 import re
-import simplejson
+import json
 import sys
 import time
 import urllib2
@@ -53,7 +53,7 @@ else:
     loader = jinja2.PackageLoader('openerp.addons.web', "views")
 
 env = jinja2.Environment(loader=loader, autoescape=True)
-env.filters["json"] = simplejson.dumps
+env.filters["json"] = json.dumps
 
 # 1 week cache for asset bundles as advised by Google Page Speed
 BUNDLE_MAXAGE = 60 * 60 * 24 * 7
@@ -79,7 +79,7 @@ def serialize_exception(f):
                 'message': "Odoo Server Error",
                 'data': se
             }
-            return werkzeug.exceptions.InternalServerError(simplejson.dumps(error))
+            return werkzeug.exceptions.InternalServerError(json.dumps(error))
     return wrap
 
 def redirect_with_hash(*args, **kw):
@@ -1121,7 +1121,7 @@ class Binary(http.Controller):
                     ufile.content_type, base64.b64encode(data)]
         except Exception, e:
             args = [False, e.message]
-        return out % (simplejson.dumps(callback), simplejson.dumps(args))
+        return out % (json.dumps(callback), json.dumps(args))
 
     @http.route('/web/binary/upload_attachment', type='http', auth="user")
     @serialize_exception
@@ -1147,7 +1147,7 @@ class Binary(http.Controller):
         except Exception:
             args = {'error': "Something horrible happened"}
             _logger.exception("Fail to upload attachment %s" % ufile.filename)
-        return out % (simplejson.dumps(callback), simplejson.dumps(args))
+        return out % (json.dumps(callback), json.dumps(args))
 
     @http.route([
         '/web/binary/company_logo',
@@ -1395,7 +1395,7 @@ class ExportFormat(object):
         raise NotImplementedError()
 
     def base(self, data, token):
-        params = simplejson.loads(data)
+        params = json.loads(data)
         model, fields, ids, domain, import_compat = \
             operator.itemgetter('model', 'fields', 'ids', 'domain',
                                 'import_compat')(
@@ -1521,7 +1521,7 @@ class Reports(http.Controller):
     @http.route('/web/report', type='http', auth="user")
     @serialize_exception
     def index(self, action, token):
-        action = simplejson.loads(action)
+        action = json.loads(action)
 
         report_srv = request.session.proxy("report")
         context = dict(request.context)
diff --git a/addons/web/controllers/pivot.py b/addons/web/controllers/pivot.py
index 3ec3dbd91be8b7531323202df41ded6ea8d985a6..571cff942291e85b99a86a0982878bbf384cb0f5 100644
--- a/addons/web/controllers/pivot.py
+++ b/addons/web/controllers/pivot.py
@@ -1,5 +1,5 @@
 from openerp import http
-import simplejson
+import json
 from openerp.http import request, serialize_exception as _serialize_exception
 from cStringIO import StringIO
 from collections import deque
@@ -18,7 +18,7 @@ class TableExporter(http.Controller):
 
     @http.route('/web/pivot/export_xls', type='http', auth="user")
     def export_xls(self, data, token):
-        jdata = simplejson.loads(data)
+        jdata = json.loads(data)
         nbr_measures = jdata['nbr_measures']
         workbook = xlwt.Workbook()
         worksheet = workbook.add_sheet(jdata['title'][:30])
diff --git a/addons/web_editor/models/ir_qweb.py b/addons/web_editor/models/ir_qweb.py
index ab8b87969a45d10c70c9cbef168c63256ad30b67..e491087a86aff0691eeffa86a1a19dcad57fe8f9 100644
--- a/addons/web_editor/models/ir_qweb.py
+++ b/addons/web_editor/models/ir_qweb.py
@@ -9,12 +9,12 @@ Also, adds methods to convert values back to openerp models.
 import cStringIO
 import datetime
 import itertools
+import json
 import logging
 import os
 import urllib2
 import urlparse
 import re
-import simplejson
 import hashlib
 
 import pytz
@@ -165,7 +165,7 @@ class Contact(orm.AbstractModel):
             cr, uid, field_name, record, options, source_element, g_att, t_att,
             qweb_context, context=context)
         if getattr(record, field_name):
-            return itertools.chain(attrs, [('data-oe-contact-options', simplejson.dumps(options))])
+            return itertools.chain(attrs, [('data-oe-contact-options', json.dumps(options))])
         else:
             return attrs
 
diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py
index b004215e1ff3158c06b5bd0af11c6b68afa4d17c..ff5829beae396abcb79e55835a0930794895e87d 100644
--- a/addons/website_forum/controllers/main.py
+++ b/addons/website_forum/controllers/main.py
@@ -3,7 +3,7 @@ from datetime import datetime
 import werkzeug.exceptions
 import werkzeug.urls
 import werkzeug.wrappers
-import simplejson
+import json
 import lxml
 from urllib2 import urlopen, URLError
 import base64
@@ -177,7 +177,7 @@ class WebsiteForum(http.Controller):
             fields=['id', 'name'],
             limit=int(l),
         )
-        return simplejson.dumps(data)
+        return json.dumps(data)
 
     @http.route(['/forum/<model("forum.forum"):forum>/tag', '/forum/<model("forum.forum"):forum>/tag/<string:tag_char>'], type='http', auth="public", website=True)
     def tags(self, forum, tag_char=None, **post):
@@ -367,7 +367,7 @@ class WebsiteForum(http.Controller):
     @http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/edit', type='http', auth="user", website=True)
     def post_edit(self, forum, post, **kwargs):
         tags = [dict(id=tag.id, name=tag.name) for tag in post.tag_ids]
-        tags = simplejson.dumps(tags)
+        tags = json.dumps(tags)
         values = self._prepare_forum_values(forum=forum)
         values.update({
             'tags': tags,
diff --git a/debian/control b/debian/control
index 75e40dfe59d5631753e8a6e09235dccd809ac9ae..f641e01c3dd72d8c7ed9c5778a26223c00ff7872 100644
--- a/debian/control
+++ b/debian/control
@@ -41,7 +41,6 @@ Depends:
  python-pypdf,
  python-reportlab,
  python-requests,
- python-simplejson,
  python-suds,
  python-tz,
  python-vatnumber,
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index f06a7952165f10c78b4c44a4342cc1eb890e9b4e..b691abba1f41122afb2d5ed2ce3a7756d517d0a4 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -11,7 +11,7 @@ import re
 import time
 from operator import itemgetter
 
-import simplejson
+import json
 import werkzeug
 import HTMLParser
 from lxml import etree
@@ -1048,7 +1048,7 @@ class view(osv.osv):
             keep_query=keep_query,
             request=request, # might be unbound if we're not in an httprequest context
             debug=request.debug if request else False,
-            json=simplejson,
+            json=json,
             quote_plus=werkzeug.url_quote_plus,
             time=time,
             datetime=datetime,
@@ -1062,7 +1062,7 @@ class view(osv.osv):
         def get_modules_order():
             if request:
                 from openerp.addons.web.controllers.main import module_boot
-                return simplejson.dumps(module_boot())
+                return json.dumps(module_boot())
             return '[]'
         qcontext['get_modules_order'] = get_modules_order
 
diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py
index b5256847e5c3528df2326c650eb33e6bf8194417..6f890b5d4eed172ced2e4de398a568182a224758 100644
--- a/openerp/addons/base/res/res_currency.py
+++ b/openerp/addons/base/res/res_currency.py
@@ -9,7 +9,7 @@ from openerp import api, fields as fields2
 from openerp import tools
 from openerp.osv import fields, osv
 from openerp.tools import float_round, float_is_zero, float_compare
-import simplejson as json
+import json
 
 CURRENCY_DISPLAY_PATTERN = re.compile(r'(\w+)\s*(?:\((.*)\))?')
 
diff --git a/openerp/http.py b/openerp/http.py
index 106ed4f625f4b4108f15d31ba68dfc4a59a0b363..b3b243e4367271aa6bf7452f0cffd25e21860196 100644
--- a/openerp/http.py
+++ b/openerp/http.py
@@ -27,7 +27,7 @@ from zlib import adler32
 
 import babel.core
 import psycopg2
-import simplejson
+import json
 import werkzeug.contrib.sessions
 import werkzeug.datastructures
 import werkzeug.exceptions
@@ -529,10 +529,10 @@ class JsonRequest(WebRequest):
             # We need then to manage http sessions manually.
             response['session_id'] = self.session_id
             mime = 'application/javascript'
-            body = "%s(%s);" % (self.jsonp, simplejson.dumps(response),)
+            body = "%s(%s);" % (self.jsonp, json.dumps(response),)
         else:
             mime = 'application/json'
-            body = simplejson.dumps(response)
+            body = json.dumps(response)
 
         return Response(
                     body, headers=[('Content-Type', mime),
diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py
index a59708af082582130fba36455804ff1aaabea22a..0a474115d204d22534ba279fbc050f1aa48eec75 100644
--- a/openerp/osv/fields.py
+++ b/openerp/osv/fields.py
@@ -32,7 +32,7 @@ import openerp
 import openerp.tools as tools
 from openerp.tools.translate import _
 from openerp.tools import float_repr, float_round, frozendict, html_sanitize
-import simplejson
+import json
 from openerp import SUPERUSER_ID, registry
 
 @contextmanager
@@ -1674,10 +1674,10 @@ class serialized(_column):
     __slots__ = []
 
     def _symbol_set_struct(val):
-        return simplejson.dumps(val)
+        return json.dumps(val)
 
     def _symbol_get_struct(self, val):
-        return simplejson.loads(val or '{}')
+        return json.loads(val or '{}')
 
     _symbol_c = '%s'
     _symbol_f = _symbol_set_struct
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 835e29da7f910b40eca102508fda373506ca01a8..7b4c983bcb04052bbae83826bf84e8a6dab22d83 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -1,4 +1,4 @@
-import simplejson
+import json
 from lxml import etree
 
 from ..exceptions import except_orm
@@ -83,7 +83,7 @@ def simplify_modifiers(modifiers):
 def transfer_modifiers_to_node(modifiers, node):
     if modifiers:
         simplify_modifiers(modifiers)
-        node.set('modifiers', simplejson.dumps(modifiers))
+        node.set('modifiers', json.dumps(modifiers))
 
 def setup_modifiers(node, field=None, context=None, in_tree_view=False):
     """ Processes node attributes and field descriptors to generate
@@ -118,12 +118,12 @@ def test_modifiers(what, expected):
         node = etree.fromstring(what)
         transfer_node_to_modifiers(node, modifiers)
         simplify_modifiers(modifiers)
-        json = simplejson.dumps(modifiers)
+        json = json.dumps(modifiers)
         assert json == expected, "%s != %s" % (json, expected)
     elif isinstance(what, dict):
         transfer_field_to_modifiers(what, modifiers)
         simplify_modifiers(modifiers)
-        json = simplejson.dumps(modifiers)
+        json = json.dumps(modifiers)
         assert json == expected, "%s != %s" % (json, expected)
 
 
diff --git a/requirements.txt b/requirements.txt
index 215b9ac13fba1cc2946ae7c03d3cf767802d6a87..a78b49ef51b5a7b5ca20630da0ca0a7fd696f9e0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -33,7 +33,6 @@ pyusb==1.0.0b2
 qrcode==5.1
 reportlab==3.1.44
 requests==2.6.0
-simplejson==3.6.5
 six==1.9.0
 suds-jurko==0.6
 vatnumber==1.2
diff --git a/setup.cfg b/setup.cfg
index 816d63a8304a271ec5e5ba64508993963b58e8da..cccec6c615c14772e324e81b5907cf6476c5961b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -25,7 +25,6 @@ requires =
   python-psycopg2
   python-reportlab
   python-requests
-  python-simplejson
   python-vobject
   python-werkzeug
   python-yaml
diff --git a/setup.py b/setup.py
index 824c8075c803e321ebf994e49863099c31fe8245..bbb801133a4d7144eb86444168cd21ac61dd4a65 100644
--- a/setup.py
+++ b/setup.py
@@ -96,7 +96,6 @@ def py2exe_options():
                         'reportlab',
                         'requests',
                         'select',
-                        'simplejson',
                         'smtplib',
                         'suds',
                         'uuid',
@@ -160,7 +159,6 @@ setup(
         'qrcode',
         'reportlab',  # windows binary pypi.python.org/pypi/reportlab
         'requests',
-        'simplejson',
         'suds-jurko',
         'vatnumber',
         'vobject',
diff --git a/setup/package.dfcentos b/setup/package.dfcentos
index 8917a7cce434a07d02a50fd72ed866b01b42545c..d0f95a349ffd59096ee52e41e7cd234e141fb2ea 100644
--- a/setup/package.dfcentos
+++ b/setup/package.dfcentos
@@ -29,7 +29,6 @@ RUN yum install -d 0 -e 0 epel-release -y && \
 		python-psycopg2 \
 		python-reportlab \
 		python-requests \
-		python-simplejson \
 		python-vobject \
 		python-werkzeug \
 		python-yaml \
diff --git a/setup/package.dfdebian b/setup/package.dfdebian
index b84e7191aaa96697e93d501ceb2c8cee08c1ea90..00cd63f9f2599735cfee2c287c44e7b0fdeb8bcb 100644
--- a/setup/package.dfdebian
+++ b/setup/package.dfdebian
@@ -45,7 +45,6 @@ RUN apt-get update -qq &&  \
 		python-pypdf \
 		python-reportlab \
 		python-requests \
-		python-simplejson \
 		python-suds \
 		python-tz \
 		python-vatnumber \