diff --git a/CHANGELOG.md b/CHANGELOG.md
index 09878285214202b5156052a1bcdd2c6dfcb97ea6..cdc9ff3f2e9854fd728789518039a72ab04558f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,2 +1,3 @@
 # v2.21.4
 
+* moar tests for CPManager
\ No newline at end of file
diff --git a/satella/__init__.py b/satella/__init__.py
index 1e35c5c53d7723b17f98a53396d027c67599b563..68faeb8bf0bc18a23e81f9b28c929371d2c42b51 100644
--- a/satella/__init__.py
+++ b/satella/__init__.py
@@ -1 +1 @@
-__version__ = '2.21.4a1'
+__version__ = '2.21.4a2'
diff --git a/satella/coding/resources/cp_manager.py b/satella/coding/resources/cp_manager.py
index ab4c48f4f03254182b145cfb84a9220751bb0212..600f59bc0ba63551417cb2c3e76b30b5a598d6b5 100644
--- a/satella/coding/resources/cp_manager.py
+++ b/satella/coding/resources/cp_manager.py
@@ -98,7 +98,7 @@ class CPManager(Monitor, Closeable, tp.Generic[T], metaclass=abc.ABCMeta):
         :param connection: connection to release
         """
         obj_id = id(connection)
-        if self.id_to_times[obj_id] == self.max_cycle_no:
+        if self.id_to_times[obj_id] >= self.max_cycle_no:
             self._kill_connection(connection)
         else:
             try:
diff --git a/tests/test_coding/test_resources.py b/tests/test_coding/test_resources.py
index d819b2c18f66246b36d12a25af789724541cfce4..c10c67da845c072d22166a4f285483672ef1e229 100644
--- a/tests/test_coding/test_resources.py
+++ b/tests/test_coding/test_resources.py
@@ -28,6 +28,8 @@ class TestResources(unittest.TestCase):
                 if self.i == 3:
                     self.value_error_emitted = True
                     raise ValueError()
+                elif self.i > 3:
+                    raise RuntimeError('called too often')
 
             def close(self):
                 self.closed = True
@@ -48,9 +50,6 @@ class TestResources(unittest.TestCase):
                 self.already_acquired.add(v.id)
                 return v
 
-            def fail_connection(self, connection) -> None:
-                super().fail_connection(connection)
-
             def release_connection(self, connection) -> None:
                 print(f'Releasing connection {connection.id}')
                 self.already_acquired.remove(connection.id)
@@ -81,6 +80,13 @@ class TestResources(unittest.TestCase):
         cp.release_connection(conns.pop())
         ret.result(timeout=20)
         ret2.result(timeout=20)
+        for i in range(20):
+            conn = cp.acquire_connection()
+            try:
+                conn.do()
+            except ValueError:
+                cp.fail_connection(conn)
+            cp.release_connection(conn)
 
         while conns:
             cp.release_connection(conns.pop())