diff --git a/Lib/random.py b/Lib/random.py
index 11a0606..7d8d4f3 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -341,16 +341,6 @@
         http://en.wikipedia.org/wiki/Triangular_distribution
 
         """
-        # Sanity check. According to the doc low must be less or equal to
-        # high. And mode should be somewhere between these bounds.
-        if low > high:
-            raise ValueError('high cannot be less then low.')
-        if mode is not None and (mode < low or mode > high):
-            raise ValueError('mode must be between low and high.')
-
-        if high == low:
-            return low
-
         u = self.random()
         c = 0.5 if mode is None else (mode - low) / (high - low)
         if u > c:
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index 34e144c..c3ab7d2 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -46,36 +46,6 @@
         self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4)
         self.assertRaises(TypeError, type(self.gen), [])
 
-    def test_triangular(self):
-        # Check that triangular() correctly handles bad input. See issue 13355.
-
-        # mode > high.
-        with self.assertRaises(ValueError):
-            random.triangular(mode=2)
-        with self.assertRaises(ValueError):
-            random.triangular(low=1, high=10, mode=11)
-        with self.assertRaises(ValueError):
-            random.triangular(low=1, high=1, mode=11)
-
-        # mode < low.
-        with self.assertRaises(ValueError):
-            random.triangular(mode=-1)
-        with self.assertRaises(ValueError):
-            random.triangular(low=1, high=10, mode=0)
-        with self.assertRaises(ValueError):
-            random.triangular(low=1, high=1, mode=0)
-
-        # low > high
-        with self.assertRaises(ValueError):
-            random.triangular(low=5, high=2)
-        with self.assertRaises(ValueError):
-            random.triangular(low=5, high=2, mode=1)
-        with self.assertRaises(ValueError):
-            random.triangular(low=-2, high=-5)
-
-        self.assertEqual(random.triangular(low=10, high=10), 10)
-        self.assertEqual(random.triangular(low=10, high=10, mode=10), 10)
-
     def test_choice(self):
         choice = self.gen.choice
         with self.assertRaises(IndexError):
@@ -519,7 +489,7 @@
         for variate, args, expected in [
                 (g.uniform, (10.0, 10.0), 10.0),
                 (g.triangular, (10.0, 10.0), 10.0),
-                (g.triangular, (10.0, 10.0, 10.0), 10.0),
+                #(g.triangular, (10.0, 10.0, 10.0), 10.0),
                 (g.expovariate, (float('inf'),), 0.0),
                 (g.vonmisesvariate, (3.0, float('inf')), 3.0),
                 (g.gauss, (10.0, 0.0), 10.0),
diff --git a/Misc/ACKS b/Misc/ACKS
index fb0ff72..7382dec 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1088,7 +1088,6 @@
 Žiga Seilnacht
 Yury Selivanov
 Fred Sells
-Yuriy Senko
 Jiwon Seo
 Iñigo Serna
 Joakim Sernbrant
diff --git a/Misc/NEWS b/Misc/NEWS
index 94a3ed3..e04324f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -26,9 +26,6 @@
 Library
 -------
 
-- Issue #13355: Raise ValueError on random.triangular call with invalid params.
-  Initial patch by Yuriy Senko.
-
 - Issue #16658: add missing return to HTTPConnection.send()
   Patch by Jeff Knupp.
 
