diff --git a/ATxService/AutoTx.cs b/ATxService/AutoTx.cs
index 53cf4a23737f3064c1c7de7775b2bd8485e3605c..92e44682ba99f91d50d34448353619a97a77ee30 100644
--- a/ATxService/AutoTx.cs
+++ b/ATxService/AutoTx.cs
@@ -45,6 +45,7 @@ namespace ATxService
         private int _txCurFileProgress;
         private int _waitCyclesBeforeNextTx;
         private Cpu _cpu;
+        private bool _cpuLoadHigh;
 
         private DateTime _lastUserDirCheck = DateTime.MinValue;
 
@@ -98,6 +99,8 @@ namespace ATxService
                     Probation = 16,
                     Enabled = true
                 };
+                _cpu.LoadAboveLimit += OnLoadAboveLimit;
+                _cpu.LoadBelowLimit += OnLoadBelowLimit;
             }
             catch (UnauthorizedAccessException ex) {
                 Log.Error("Not enough permissions to monitor the CPU load.\nMake sure the " +
@@ -518,6 +521,22 @@ namespace ATxService
 
         #region general methods
 
+        /// <summary>
+        /// Event handler for CPU load dropping below the configured limit.
+        /// </summary>
+        private void OnLoadBelowLimit(object sender, EventArgs e) {
+            Log.Warn("CPU load is below given limit.");
+            _cpuLoadHigh = false;
+        }
+
+        /// <summary>
+        /// Event handler for CPU load exceeding the configured limit.
+        /// </summary>
+        private void OnLoadAboveLimit(object sender, EventArgs e) {
+            Log.Warn("High CPU load detected!");
+            _cpuLoadHigh = true;
+        }
+
         /// <summary>
         /// Check system parameters for valid ranges and update the global service state accordingly.
         /// </summary>
@@ -526,7 +545,7 @@ namespace ATxService
 
             // check all system parameters for valid ranges and remember the reason in a string
             // if one of them is failing (to report in the log why we're suspended)
-            if (_cpu.Load() >= _config.MaxCpuUsage)
+            if (_cpuLoadHigh)
                 limitReason = "CPU usage";
             else if (SystemChecks.GetFreeMemory() < _config.MinAvailableMemory)
                 limitReason = "RAM usage";