diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 01c26d9..ba584a3 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -266,7 +266,8 @@
     return loads(fp.read(),
         encoding=encoding, cls=cls, object_hook=object_hook,
         parse_float=parse_float, parse_int=parse_int,
-        parse_constant=parse_constant, object_pairs_hook=None, **kw)
+        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook,
+        **kw)
 
 
 def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
diff --git a/Lib/json/scanner.py b/Lib/json/scanner.py
index 00c5470..74e6805 100644
--- a/Lib/json/scanner.py
+++ b/Lib/json/scanner.py
@@ -23,6 +23,7 @@
     parse_int = context.parse_int
     parse_constant = context.parse_constant
     object_hook = context.object_hook
+    object_pairs_hook = context.object_pairs_hook
 
     def _scan_once(string, idx):
         try:
@@ -34,7 +35,7 @@
             return parse_string(string, idx + 1, encoding, strict)
         elif nextchar == '{':
             return parse_object((string, idx + 1), encoding, strict,
-                _scan_once, object_hook)
+                _scan_once, object_hook, object_pairs_hook)
         elif nextchar == '[':
             return parse_array((string, idx + 1), _scan_once)
         elif nextchar == 'n' and string[idx:idx + 4] == 'null':
diff --git a/Lib/json/tests/test_decode.py b/Lib/json/tests/test_decode.py
index 0744b52..7109527 100644
--- a/Lib/json/tests/test_decode.py
+++ b/Lib/json/tests/test_decode.py
@@ -1,5 +1,6 @@
 import decimal
 from unittest import TestCase
+from StringIO import StringIO
 
 import json
 from collections import OrderedDict
@@ -27,12 +28,14 @@
         p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4),
              ("qrt", 5), ("pad", 6), ("hoy", 7)]
         self.assertEqual(json.loads(s), eval(s))
-        self.assertEqual(json.loads(s, object_pairs_hook = lambda x: x), p)
-        od = json.loads(s, object_pairs_hook = OrderedDict)
+        self.assertEqual(json.loads(s, object_pairs_hook=lambda x: x), p)
+        self.assertEqual(json.load(StringIO(s),
+                                   object_pairs_hook=lambda x: x), p)
+        od = json.loads(s, object_pairs_hook=OrderedDict)
         self.assertEqual(od, OrderedDict(p))
         self.assertEqual(type(od), OrderedDict)
         # the object_pairs_hook takes priority over the object_hook
         self.assertEqual(json.loads(s,
-                                    object_pairs_hook = OrderedDict,
-                                    object_hook = lambda x: None),
+                                    object_pairs_hook=OrderedDict,
+                                    object_hook=lambda x: None),
                          OrderedDict(p))
diff --git a/Lib/json/tests/test_float.py b/Lib/json/tests/test_float.py
index 20d41d9..15e7913 100644
--- a/Lib/json/tests/test_float.py
+++ b/Lib/json/tests/test_float.py
@@ -5,11 +5,15 @@
 
 class TestFloat(TestCase):
     def test_floats(self):
-        for num in [1617161771.7650001, math.pi, math.pi**100, math.pi**-100, 3.1]:
+        for num in [1617161771.7650001, math.pi, math.pi**100,
+                    math.pi**-100, 3.1]:
             self.assertEquals(float(json.dumps(num)), num)
             self.assertEquals(json.loads(json.dumps(num)), num)
+            self.assertEquals(json.loads(unicode(json.dumps(num))), num)
 
     def test_ints(self):
         for num in [1, 1L, 1<<32, 1<<64]:
             self.assertEquals(json.dumps(num), str(num))
             self.assertEquals(int(json.dumps(num)), num)
+            self.assertEquals(json.loads(json.dumps(num)), num)
+            self.assertEquals(json.loads(unicode(json.dumps(num))), num)
