diff --git a/satella/__init__.py b/satella/__init__.py
index 722cddc193ea0a2109391803d45c107513ae4e82..ef462e13f96fd3a9dc4ad386140d8c622f2268f4 100644
--- a/satella/__init__.py
+++ b/satella/__init__.py
@@ -1 +1 @@
-__version__ = '2.17.11a3'
+__version__ = '2.17.11a4'
diff --git a/satella/instrumentation/memory/memthread.py b/satella/instrumentation/memory/memthread.py
index 94d79c02117d9974ccabe104c1e2b827fa888e6a..f412bb181a020668ba33c36eae771fdd47500468 100644
--- a/satella/instrumentation/memory/memthread.py
+++ b/satella/instrumentation/memory/memthread.py
@@ -5,8 +5,8 @@ import typing as tp
 
 import psutil
 
-from satella.coding.concurrent import CallableGroup, CallNoOftenThan, CancellableCallback
-from satella.coding.concurrent import TerminableThread
+from satella.coding.concurrent import CallableGroup, CallNoOftenThan, CancellableCallback, \
+    IntervalTerminableThread
 from satella.coding.structures import Singleton
 from satella.time import measure
 from .conditions import BaseCondition, ZerothSeverity
@@ -17,7 +17,7 @@ __all__ = ['MemoryPressureManager']
 
 
 @Singleton
-class MemoryPressureManager(TerminableThread):
+class MemoryPressureManager(IntervalTerminableThread):
     """
     Manager of the memory pressure.
 
@@ -41,7 +41,8 @@ class MemoryPressureManager(TerminableThread):
     :param maximum_available: maximum amount of memory that this program can use
     :param severity_levels: this defines the levels of severity. A level is reached when program's
         consumption is other this many percent of it's maximum_available amount of memory.
-    :param check_interval: amount of seconds of pause between consecutive checks
+    :param check_interval: amount of seconds of pause between consecutive checks, or
+        a time string
     :param log_transitions: whether to log to logger when a transition takes place
 
     :ivar severity_level: current severity level (int)
@@ -50,9 +51,9 @@ class MemoryPressureManager(TerminableThread):
 
     def __init__(self, maximum_available: tp.Optional[int] = None,
                  severity_levels: tp.List[BaseCondition] = None,
-                 check_interval: int = 10,
+                 check_interval: tp.Union[str, int] = 10,
                  log_transitions: bool = True):
-        super().__init__(name='memory pressure manager', daemon=True)
+        super().__init__(check_interval, name='memory pressure manager', daemon=True)
         self.log_transitions = log_transitions  # type: bool
         self.process = psutil.Process(os.getpid())  # type: psutil.Process
         self.maximum_available = maximum_available  # type: int
@@ -71,7 +72,6 @@ class MemoryPressureManager(TerminableThread):
         self.callbacks_on_memory_normal = CallableGroup(gather=False)
         self.severity_level = 0  # type: int
         self.stopped = False  # type: bool
-        self.check_interval = check_interval  # type: int
         self.start()
 
     def advance_to_severity_level(self, target_level: int):
@@ -104,7 +104,7 @@ class MemoryPressureManager(TerminableThread):
 
     def loop(self) -> None:
         if self.stopped:
-            return time.sleep(self.check_interval)
+            return
 
         self.callbacks_on_memory_normal.remove_cancelled()
 
@@ -117,16 +117,11 @@ class MemoryPressureManager(TerminableThread):
         for cg in self.callbacks_on_remains:
             cg.remove_cancelled()
 
-        with measure() as measurement:
-            severity_level = self.calculate_severity_level()
-            if self.severity_level != severity_level:
-                self.advance_to_severity_level(severity_level)
-            else:
-                self.callbacks_on_remains[severity_level]()
-
-        elapsed = measurement()
-        if elapsed < self.check_interval:
-            time.sleep(self.check_interval - elapsed)
+        severity_level = self.calculate_severity_level()
+        if self.severity_level != severity_level:
+            self.advance_to_severity_level(severity_level)
+        else:
+            self.callbacks_on_remains[severity_level]()
 
     def calculate_severity_level(self) -> int:
         """