diff --git a/ATxCommon/Monitoring/Cpu.cs b/ATxCommon/Monitoring/Cpu.cs
index 2a78338f64a8d536009784f7855973bc5d8a628a..de4d9558690b40de77b551adb3137a9111b2520b 100644
--- a/ATxCommon/Monitoring/Cpu.cs
+++ b/ATxCommon/Monitoring/Cpu.cs
@@ -12,6 +12,10 @@ namespace ATxCommon.Monitoring
     {
         private static readonly Logger Log = LogManager.GetCurrentClassLogger();
 
+        public delegate void EventHandler(object sender, EventArgs e);
+        public event EventHandler LoadAboveLimit;
+        public event EventHandler LoadBelowLimit;
+
         private readonly Timer _monitoringTimer;
         private readonly PerformanceCounter _cpuCounter;
         private readonly float[] _loadReadings = {0F, 0F, 0F, 0F};
@@ -111,8 +115,8 @@ namespace ATxCommon.Monitoring
                 _load = _loadReadings.Average();
                 if (_loadReadings[3] > _limit) {
                     if (_behaving > _probation) {
-                        // this means the load was considered as "low" before
-                        // TODO: fire callback for violating load limit
+                        // this means the load was considered as "low" before, so raise an event:
+                        OnLoadAboveLimit();
                         Log.Debug("CPU load ({0}) violating limit ({1})!", _loadReadings[3], _limit);
                     } else if (_behaving > 0) {
                         // this means we were still in probation, so no need to trigger again...
@@ -123,7 +127,7 @@ namespace ATxCommon.Monitoring
                     _behaving++;
                     if (_behaving == _probation) {
                         Log.Debug("CPU load below limit for {0} cycles, passing probation!", _probation);
-                        // TODO: fire callback for load behaving well
+                        OnLoadBelowLimit();
                     } else if (_behaving > _probation) {
                         Log.Trace("CPU load behaving well since {0} cycles.", _behaving);
                     } else if (_behaving < 0) {
@@ -142,5 +146,18 @@ namespace ATxCommon.Monitoring
                 _loadReadings[3] < Limit ? " [" + _behaving + "]" : "");
         }
 
+        /// <summary>
+        /// Raise the "LoadAboveLimit" event.
+        /// </summary>
+        protected virtual void OnLoadAboveLimit() {
+            LoadAboveLimit?.Invoke(this, EventArgs.Empty);
+        }
+
+        /// <summary>
+        /// Raise the "LoadBelowLimit" event.
+        /// </summary>
+        protected virtual void OnLoadBelowLimit() {
+            LoadBelowLimit?.Invoke(this, EventArgs.Empty);
+        }
     }
 }