diff --git a/Lib/json/tool.py b/Lib/json/tool.py
index 1adea31..9ab6d65 100644
--- a/Lib/json/tool.py
+++ b/Lib/json/tool.py
@@ -18,19 +18,21 @@
         infile = sys.stdin
         outfile = sys.stdout
     elif len(sys.argv) == 2:
-        infile = open(sys.argv[1], 'rb')
+        infile = open(sys.argv[1], 'r')
         outfile = sys.stdout
     elif len(sys.argv) == 3:
-        infile = open(sys.argv[1], 'rb')
-        outfile = open(sys.argv[2], 'wb')
+        infile = open(sys.argv[1], 'r')
+        outfile = open(sys.argv[2], 'w')
     else:
         raise SystemExit(sys.argv[0] + " [infile [outfile]]")
-    try:
-        obj = json.load(infile)
-    except ValueError as e:
-        raise SystemExit(e)
-    json.dump(obj, outfile, sort_keys=True, indent=4)
-    outfile.write('\n')
+    with infile:
+        try:
+            obj = json.load(infile)
+        except ValueError as e:
+            raise SystemExit(e)
+    with outfile:
+        json.dump(obj, outfile, sort_keys=True, indent=4)
+        outfile.write('\n')
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/json_tests/test_tool.py b/Lib/test/json_tests/test_tool.py
new file mode 100644
index 0000000..8a3cc6f
--- /dev/null
+++ b/Lib/test/json_tests/test_tool.py
@@ -0,0 +1,69 @@
+import os
+import sys
+import textwrap
+import unittest
+import subprocess
+from test import support
+from test.script_helper import assert_python_ok
+
+class TestTool(unittest.TestCase):
+    data = """
+
+        [["blorpie"],[ "whoops" ] , [
+                                 ],\t"d-shtaeou",\r"d-nthiouh",
+        "i-vhbjkhnth", {"nifty":87}, {"morefield" :\tfalse,"field"
+            :"yes"}  ]
+           """
+
+    expect = textwrap.dedent("""\
+    [
+        [
+            "blorpie"
+        ], 
+        [
+            "whoops"
+        ], 
+        [], 
+        "d-shtaeou", 
+        "d-nthiouh", 
+        "i-vhbjkhnth", 
+        {
+            "nifty": 87
+        }, 
+        {
+            "field": "yes", 
+            "morefield": false
+        }
+    ]
+    """)
+
+    def test_stdin_stdout(self):
+        with subprocess.Popen(
+                (sys.executable, '-m', 'json.tool'),
+                stdin=subprocess.PIPE, stdout=subprocess.PIPE) as proc:
+            out, err = proc.communicate(self.data.encode())
+        self.assertEqual(out, self.expect.encode())
+        self.assertEqual(err, None)
+
+    def _create_infile(self):
+        infile = support.TESTFN
+        with open(infile, "w") as fp:
+            self.addCleanup(os.remove, infile)
+            fp.write(self.data)
+        return infile
+
+    def test_infile_stdout(self):
+        infile = self._create_infile()
+        rc, out, err = assert_python_ok('-m', 'json.tool', infile)
+        self.assertEqual(out, self.expect.encode())
+        self.assertEqual(err, b'')
+
+    def test_infile_outfile(self):
+        infile = self._create_infile()
+        outfile = support.TESTFN + '.out'
+        rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile)
+        self.addCleanup(os.remove, outfile)
+        with open(outfile, "r") as fp:
+            self.assertEqual(fp.read(), self.expect)
+        self.assertEqual(out, b'')
+        self.assertEqual(err, b'')
diff --git a/Misc/ACKS b/Misc/ACKS
index 1f51fbd..640287d 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -807,6 +807,7 @@
 Dan Parisien
 William Park
 Harri Pasanen
+Berker Peksag
 Bo Peng
 Joe Peterson
 Randy Pausch
diff --git a/Misc/NEWS b/Misc/NEWS
index 5fe7fc2..48c5111 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -167,6 +167,9 @@
 Library
 -------
 
+- Issue #16549: Make json.tool work again on Python 3 and add tests.
+  Initial patch by Berker Peksag and Serhiy Storchaka.
+
 - Issue #12848: The pure Python pickle implementation now treats object
   lengths as unsigned 32-bit integers, like the C implementation does.
   Patch by Serhiy Storchaka.
