diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4e6d2269f56ad25431bd4f12161a0c2872bbe445..51934ab6b15dbd72e53d4338b446992e955e21a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
 # v2.14.42
 
 * added `terminating` property to `TerminableThread`
+* added `Closeable.closed`
diff --git a/satella/__init__.py b/satella/__init__.py
index 5a7b59359371caea46c32af6d8e2cbfcb22e0142..3c298eaaeac1d7a66e272142299e817b3516dfce 100644
--- a/satella/__init__.py
+++ b/satella/__init__.py
@@ -1 +1 @@
-__version__ = '2.14.42a2'
+__version__ = '2.14.42'
diff --git a/satella/coding/misc.py b/satella/coding/misc.py
index 5cfcd394f23a975b5413a68ba84f9ac7bfb939f2..1f3ff3f53f320875c91bd83f5d9e0114127e2629 100644
--- a/satella/coding/misc.py
+++ b/satella/coding/misc.py
@@ -66,6 +66,13 @@ class Closeable:
     def __init__(self):
         self.__finalized = False
 
+    @property
+    def closed(self) -> bool:
+        """
+        :return: whether this object is closed
+        """
+        return self.__finalized
+
     def close(self) -> bool:
         """
         Check if the resource needs cleanup, and clean up this resource.
diff --git a/tests/test_coding/test_misc.py b/tests/test_coding/test_misc.py
index 19f53ce79c49aa8a27e30c6f748c93f917d8047e..48a714921f0cee572ebd70f3f7ec8b8982a4498b 100644
--- a/tests/test_coding/test_misc.py
+++ b/tests/test_coding/test_misc.py
@@ -49,6 +49,7 @@ class TestCase(unittest.TestCase):
                     a['test'] = True
 
         b = MyClose()
+        self.assertFalse(b.closed)
         del b
         gc.collect()
         self.assertTrue(a['test'])