diff --git a/django/contrib/formtools/wizard/storage/cookie.py b/django/contrib/formtools/wizard/storage/cookie.py
index d1776de..e803610 100644
--- a/django/contrib/formtools/wizard/storage/cookie.py
+++ b/django/contrib/formtools/wizard/storage/cookie.py
@@ -1,6 +1,7 @@
+import json
+
 from django.core.exceptions import SuspiciousOperation
 from django.core.signing import BadSignature
-from django.utils import simplejson as json
 
 from django.contrib.formtools.wizard import storage
 
diff --git a/django/contrib/gis/geometry/test_data.py b/django/contrib/gis/geometry/test_data.py
index 4e07348..f927402 100644
--- a/django/contrib/gis/geometry/test_data.py
+++ b/django/contrib/gis/geometry/test_data.py
@@ -3,10 +3,10 @@ This module has the mock object definitions used to hold reference geometry
 for the GEOS and GDAL tests.
 """
 import gzip
+import json
 import os
 
 from django.contrib import gis
-from django.utils import simplejson
 
 
 # This global used to store reference geometry data.
@@ -100,6 +100,6 @@ class TestDataMixin(object):
         if GEOMETRIES is None:
             # Load up the test geometry data from fixture into global.
             gzf = gzip.GzipFile(os.path.join(TEST_DATA, 'geometries.json.gz'))
-            geometries = simplejson.loads(gzf.read())
+            geometries = json.loads(gzf.read())
             GEOMETRIES = TestGeomSet(**strconvert(geometries))
         return GEOMETRIES
diff --git a/django/contrib/messages/storage/cookie.py b/django/contrib/messages/storage/cookie.py
index c45dff4..0762005 100644
--- a/django/contrib/messages/storage/cookie.py
+++ b/django/contrib/messages/storage/cookie.py
@@ -1,7 +1,8 @@
+import json
+
 from django.conf import settings
 from django.contrib.messages.storage.base import BaseStorage, Message
 from django.http import SimpleCookie
-from django.utils import simplejson as json
 from django.utils.crypto import salted_hmac, constant_time_compare
 
 
diff --git a/django/contrib/messages/tests/cookie.py b/django/contrib/messages/tests/cookie.py
index 30aa6b5..2aef1db 100644
--- a/django/contrib/messages/tests/cookie.py
+++ b/django/contrib/messages/tests/cookie.py
@@ -1,10 +1,11 @@
+import json
+
 from django.contrib.messages import constants
 from django.contrib.messages.tests.base import BaseTest
 from django.contrib.messages.storage.cookie import (CookieStorage,
     MessageEncoder, MessageDecoder)
 from django.contrib.messages.storage.base import Message
 from django.test.utils import override_settings
-from django.utils import simplejson as json
 
 
 def set_cookie_data(storage, messages, invalid=False, encode_empty=False):
diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py
index 91af84e..5d71797 100644
--- a/django/core/serializers/json.py
+++ b/django/core/serializers/json.py
@@ -1,15 +1,17 @@
 """
 Serialize data to/from JSON
 """
+# We shadow the standard library json module
+from __future__ import absolute_import
 
 import datetime
 import decimal
+import json
 from StringIO import StringIO
 
 from django.core.serializers.base import DeserializationError
 from django.core.serializers.python import Serializer as PythonSerializer
 from django.core.serializers.python import Deserializer as PythonDeserializer
-from django.utils import simplejson
 from django.utils.timezone import is_aware
 
 class Serializer(PythonSerializer):
@@ -19,10 +21,10 @@ class Serializer(PythonSerializer):
     internal_use_only = False
 
     def end_serialization(self):
-        if simplejson.__version__.split('.') >= ['2', '1', '3']:
+        if json.__version__.split('.') >= ['2', '1', '3']:
             # Use JS strings to represent Python Decimal instances (ticket #16850)
             self.options.update({'use_decimal': False})
-        simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
+        json.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
 
     def getvalue(self):
         if callable(getattr(self.stream, 'getvalue', None)):
@@ -38,7 +40,7 @@ def Deserializer(stream_or_string, **options):
     else:
         stream = stream_or_string
     try:
-        for obj in PythonDeserializer(simplejson.load(stream), **options):
+        for obj in PythonDeserializer(json.load(stream), **options):
             yield obj
     except GeneratorExit:
         raise
@@ -47,7 +49,7 @@ def Deserializer(stream_or_string, **options):
         raise DeserializationError(e)
 
 
-class DjangoJSONEncoder(simplejson.JSONEncoder):
+class DjangoJSONEncoder(json.JSONEncoder):
     """
     JSONEncoder subclass that knows how to encode date/time and decimal types.
     """
diff --git a/django/core/signing.py b/django/core/signing.py
index 7f92d61..f2c79de 100644
--- a/django/core/signing.py
+++ b/django/core/signing.py
@@ -33,12 +33,13 @@ There are 65 url-safe characters: the 64 used by url-safe base64 and the ':'.
 These functions make use of all of them.
 """
 import base64
+import json
 import time
 import zlib
 
 from django.conf import settings
 from django.core.exceptions import ImproperlyConfigured
-from django.utils import baseconv, simplejson
+from django.utils import baseconv
 from django.utils.crypto import constant_time_compare, salted_hmac
 from django.utils.encoding import force_unicode, smart_str
 from django.utils.importlib import import_module
@@ -89,14 +90,14 @@ def get_cookie_signer(salt='django.core.signing.get_cookie_signer'):
 
 class JSONSerializer(object):
     """
-    Simple wrapper around simplejson to be used in signing.dumps and
+    Simple wrapper around json to be used in signing.dumps and
     signing.loads.
     """
     def dumps(self, obj):
-        return simplejson.dumps(obj, separators=(',', ':'))
+        return json.dumps(obj, separators=(',', ':'))
 
     def loads(self, data):
-        return simplejson.loads(data)
+        return json.loads(data)
 
 
 def dumps(obj, key=None, salt='django.core.signing', serializer=JSONSerializer, compress=False):
diff --git a/django/test/testcases.py b/django/test/testcases.py
index b5e1dc0..8f1068f 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -1,6 +1,7 @@
 from __future__ import with_statement
 
 import difflib
+import json
 import os
 import re
 import sys
@@ -35,7 +36,7 @@ from django.test.signals import template_rendered
 from django.test.utils import (get_warnings_state, restore_warnings_state,
     override_settings)
 from django.test.utils import ContextList
-from django.utils import simplejson, unittest as ut2
+from django.utils import unittest as ut2
 from django.utils.encoding import smart_str, force_unicode
 from django.utils.unittest.util import safe_repr
 from django.views.static import serve
@@ -191,8 +192,8 @@ class OutputChecker(doctest.OutputChecker):
         """
         want, got = self._strip_quotes(want, got)
         try:
-            want_json = simplejson.loads(want)
-            got_json = simplejson.loads(got)
+            want_json = json.loads(want)
+            got_json = json.loads(got)
         except Exception:
             return False
         return want_json == got_json
diff --git a/docs/_ext/djangodocs.py b/docs/_ext/djangodocs.py
index 3cf00a3..a2e916b 100644
--- a/docs/_ext/djangodocs.py
+++ b/docs/_ext/djangodocs.py
@@ -11,10 +11,7 @@ except ImportError:
     try:
         import simplejson as json
     except ImportError:
-        try:
-            from django.utils import simplejson as json
-        except ImportError:
-            json = None
+        json = None
 
 from sphinx import addnodes, roles, __version__ as sphinx_ver
 from sphinx.builders.html import StandaloneHTMLBuilder
diff --git a/tests/modeltests/field_subclassing/fields.py b/tests/modeltests/field_subclassing/fields.py
index f744706..4d809ba 100644
--- a/tests/modeltests/field_subclassing/fields.py
+++ b/tests/modeltests/field_subclassing/fields.py
@@ -1,5 +1,6 @@
+import json
+
 from django.db import models
-from django.utils import simplejson as json
 from django.utils.encoding import force_unicode
 
 
diff --git a/tests/modeltests/serializers/tests.py b/tests/modeltests/serializers/tests.py
index 309a83e..c92ee61 100644
--- a/tests/modeltests/serializers/tests.py
+++ b/tests/modeltests/serializers/tests.py
@@ -3,6 +3,7 @@
 from __future__ import with_statement, absolute_import
 
 # -*- coding: utf-8 -*-
+import json
 from datetime import datetime
 from xml.dom import minidom
 from StringIO import StringIO
@@ -11,7 +12,7 @@ from django.conf import settings
 from django.core import serializers
 from django.db import transaction, connection
 from django.test import TestCase, TransactionTestCase, Approximate
-from django.utils import simplejson, unittest
+from django.utils import unittest
 
 from .models import (Category, Author, Article, AuthorProfile, Actor, Movie,
     Score, Player, Team)
@@ -356,7 +357,7 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase):
     @staticmethod
     def _validate_output(serial_str):
         try:
-            simplejson.loads(serial_str)
+            json.loads(serial_str)
         except Exception:
             return False
         else:
@@ -365,7 +366,7 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase):
     @staticmethod
     def _get_pk_values(serial_str):
         ret_list = []
-        serial_list = simplejson.loads(serial_str)
+        serial_list = json.loads(serial_str)
         for obj_dict in serial_list:
             ret_list.append(obj_dict["pk"])
         return ret_list
@@ -373,7 +374,7 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase):
     @staticmethod
     def _get_field_values(serial_str, field_name):
         ret_list = []
-        serial_list = simplejson.loads(serial_str)
+        serial_list = json.loads(serial_str)
         for obj_dict in serial_list:
             if field_name in obj_dict["fields"]:
                 ret_list.append(obj_dict["fields"][field_name])
diff --git a/tests/regressiontests/file_uploads/tests.py b/tests/regressiontests/file_uploads/tests.py
index ffa2017..b6191ba 100644
--- a/tests/regressiontests/file_uploads/tests.py
+++ b/tests/regressiontests/file_uploads/tests.py
@@ -5,6 +5,7 @@ from __future__ import absolute_import
 import base64
 import errno
 import hashlib
+import json
 import os
 import shutil
 from StringIO import StringIO
@@ -13,7 +14,7 @@ from django.core.files import temp as tempfile
 from django.core.files.uploadedfile import SimpleUploadedFile
 from django.http.multipartparser import MultiPartParser
 from django.test import TestCase, client
-from django.utils import simplejson, unittest
+from django.utils import unittest
 
 from . import uploadhandler
 from .models import FileModel, temp_storage, UPLOAD_TO
@@ -78,7 +79,7 @@ class FileUploadTests(TestCase):
             'wsgi.input':     client.FakePayload(payload),
         }
         response = self.client.request(**r)
-        received = simplejson.loads(response.content)
+        received = json.loads(response.content)
 
         self.assertEqual(received['file'], test_string)
 
@@ -150,7 +151,7 @@ class FileUploadTests(TestCase):
         response = self.client.request(**r)
 
         # The filenames should have been sanitized by the time it got to the view.
-        recieved = simplejson.loads(response.content)
+        recieved = json.loads(response.content)
         for i, name in enumerate(scary_file_names):
             got = recieved["file%s" % i]
             self.assertEqual(got, "hax0rd.txt")
@@ -174,7 +175,7 @@ class FileUploadTests(TestCase):
             'REQUEST_METHOD': 'POST',
             'wsgi.input':     client.FakePayload(payload),
         }
-        got = simplejson.loads(self.client.request(**r).content)
+        got = json.loads(self.client.request(**r).content)
         self.assertTrue(len(got['file']) < 256, "Got a long file name (%s characters)." % len(got['file']))
 
     def test_truncated_multipart_handled_gracefully(self):
@@ -200,7 +201,7 @@ class FileUploadTests(TestCase):
             'REQUEST_METHOD': 'POST',
             'wsgi.input': client.FakePayload(payload),
         }
-        got = simplejson.loads(self.client.request(**r).content)
+        got = json.loads(self.client.request(**r).content)
         self.assertEquals(got, {})
 
     def test_empty_multipart_handled_gracefully(self):
@@ -215,7 +216,7 @@ class FileUploadTests(TestCase):
             'REQUEST_METHOD': 'POST',
             'wsgi.input': client.FakePayload(''),
         }
-        got = simplejson.loads(self.client.request(**r).content)
+        got = json.loads(self.client.request(**r).content)
         self.assertEquals(got, {})
 
     def test_custom_upload_handler(self):
@@ -231,12 +232,12 @@ class FileUploadTests(TestCase):
 
         # Small file posting should work.
         response = self.client.post('/file_uploads/quota/', {'f': smallfile})
-        got = simplejson.loads(response.content)
+        got = json.loads(response.content)
         self.assertTrue('f' in got)
 
         # Large files don't go through.
         response = self.client.post("/file_uploads/quota/", {'f': bigfile})
-        got = simplejson.loads(response.content)
+        got = json.loads(response.content)
         self.assertTrue('f' not in got)
 
     def test_broken_custom_upload_handler(self):
@@ -274,7 +275,7 @@ class FileUploadTests(TestCase):
             'field5': u'test7',
             'file2': (file2, file2a)
         })
-        got = simplejson.loads(response.content)
+        got = json.loads(response.content)
 
         self.assertEqual(got.get('file1'), 1)
         self.assertEqual(got.get('file2'), 2)
diff --git a/tests/regressiontests/file_uploads/views.py b/tests/regressiontests/file_uploads/views.py
index 9fd1a8d..ae6842d 100644
--- a/tests/regressiontests/file_uploads/views.py
+++ b/tests/regressiontests/file_uploads/views.py
@@ -1,11 +1,11 @@
 from __future__ import absolute_import
 
 import hashlib
+import json
 import os
 
 from django.core.files.uploadedfile import UploadedFile
 from django.http import HttpResponse, HttpResponseServerError
-from django.utils import simplejson
 
 from .models import FileModel, UPLOAD_TO
 from .tests import UNICODE_FILENAME
@@ -88,14 +88,14 @@ def file_upload_echo(request):
     Simple view to echo back info about uploaded files for tests.
     """
     r = dict([(k, f.name) for k, f in request.FILES.items()])
-    return HttpResponse(simplejson.dumps(r))
+    return HttpResponse(json.dumps(r))
 
 def file_upload_echo_content(request):
     """
     Simple view to echo back the content of uploaded files for tests.
     """
     r = dict([(k, f.read()) for k, f in request.FILES.items()])
-    return HttpResponse(simplejson.dumps(r))
+    return HttpResponse(json.dumps(r))
 
 def file_upload_quota(request):
     """
@@ -120,7 +120,7 @@ def file_upload_getlist_count(request):
 
     for key in request.FILES.keys():
         file_counts[key] = len(request.FILES.getlist(key))
-    return HttpResponse(simplejson.dumps(file_counts))
+    return HttpResponse(json.dumps(file_counts))
 
 def file_upload_errors(request):
     request.upload_handlers.insert(0, ErroringUploadHandler())
diff --git a/tests/regressiontests/test_client_regress/views.py b/tests/regressiontests/test_client_regress/views.py
index ebb68c4..ffd4166 100644
--- a/tests/regressiontests/test_client_regress/views.py
+++ b/tests/regressiontests/test_client_regress/views.py
@@ -1,3 +1,4 @@
+import json
 import warnings
 
 from django.conf import settings
@@ -5,7 +6,6 @@ from django.contrib.auth.decorators import login_required
 from django.http import HttpResponse, HttpResponseRedirect
 from django.core.exceptions import SuspiciousOperation
 from django.shortcuts import render_to_response
-from django.utils import simplejson
 from django.utils.encoding import smart_str
 from django.core.serializers.json import DjangoJSONEncoder
 from django.test.client import CONTENT_TYPE_RE
@@ -81,8 +81,8 @@ def return_json_file(request):
         charset = settings.DEFAULT_CHARSET
 
     # This just checks that the uploaded data is JSON
-    obj_dict = simplejson.loads(request.body.decode(charset))
-    obj_json = simplejson.dumps(obj_dict, encoding=charset,
+    obj_dict = json.loads(request.body.decode(charset))
+    obj_json = json.dumps(obj_dict, encoding=charset,
                                 cls=DjangoJSONEncoder,
                                 ensure_ascii=False)
     response = HttpResponse(smart_str(obj_json, encoding=charset), status=200,
