diff --git a/dependencies/external/mbedtls b/dependencies/external/mbedtls
index 1873d3bf..edb8fec9 160000
--- a/dependencies/external/mbedtls
+++ b/dependencies/external/mbedtls
@@ -1 +1 @@
-Subproject commit 1873d3bfc2da771672bd8e7e8f41f57e0af77f33
+Subproject commit edb8fec9882084344a314368ac7fd957a187519c
diff --git a/include/api/JsonAPI.h b/include/api/JsonAPI.h
index 04d43270..8e36b158 100644
--- a/include/api/JsonAPI.h
+++ b/include/api/JsonAPI.h
@@ -2,7 +2,7 @@
 
 // parent class
 #include <api/API.h>
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 // hyperion includes
 #include <utils/Components.h>
diff --git a/include/cec/CECHandler.h b/include/cec/CECHandler.h
index 6f2b7c5d..3d118a88 100644
--- a/include/cec/CECHandler.h
+++ b/include/cec/CECHandler.h
@@ -9,7 +9,7 @@
 #include <libcec/cec.h>
 
 #include <utils/settings.h>
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 using CECCallbacks         = CEC::ICECCallbacks;
 using CECAdapter           = CEC::ICECAdapter;
diff --git a/include/events/Event.h b/include/events/EventEnum.h
similarity index 95%
rename from include/events/Event.h
rename to include/events/EventEnum.h
index 9a0ea39b..54f9c2c8 100644
--- a/include/events/Event.h
+++ b/include/events/EventEnum.h
@@ -1,5 +1,5 @@
-#ifndef EVENT_H
-#define EVENT_H
+#ifndef EVENTENUM_H
+#define EVENTENUM_H
 
 #include <QString>
 
@@ -47,4 +47,4 @@ inline Event stringToEvent(const QString& event)
 }
 
 
-#endif // EVENT_H
+#endif // EVENTENUM_H
diff --git a/include/events/EventHandler.h b/include/events/EventHandler.h
index 3ad64420..794b08a7 100644
--- a/include/events/EventHandler.h
+++ b/include/events/EventHandler.h
@@ -2,24 +2,23 @@
 #define EVENTHANDLER_H
 
 #include <utils/settings.h>
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 #include <QObject>
 
 class Logger;
 
-class EventHandler : public QObject {
+class EventHandler : public QObject
+{
 	Q_OBJECT
 
 public:
-
 	EventHandler();
 	~EventHandler() override;
 
 	static EventHandler* getInstance();
 
 public slots:
-
 	virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
 
 	void suspend(bool sleep);
@@ -36,15 +35,12 @@ public slots:
 	void handleEvent(Event event);
 
 signals:
-
 	void signalEvent(Event event);
 
 protected:
-
 	Logger * _log {};
 
 private:
-
 	bool _isSuspended;
 	bool _isIdle;
 };
diff --git a/include/events/OsEventHandler.h b/include/events/OsEventHandler.h
index f3cd590b..3ca05c79 100644
--- a/include/events/OsEventHandler.h
+++ b/include/events/OsEventHandler.h
@@ -3,7 +3,7 @@
 #include <QObject>
 #include <QJsonDocument>
 
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 #if defined(_WIN32)
 #include <QAbstractNativeEventFilter>
@@ -16,7 +16,8 @@
 
 class Logger;
 
-class OsEventHandlerBase : public QObject {
+class OsEventHandlerBase : public QObject
+{
 	Q_OBJECT
 
 public:
@@ -24,18 +25,15 @@ public:
 	~OsEventHandlerBase() override;
 
 public slots:
-
 	void suspend(bool sleep);
 	void lock(bool isLocked);
 
 	virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
 
 signals:
-
 	void signalEvent(Event event);
 
 protected:
-
 	virtual bool registerOsEventHandler() { return true; }
 	virtual void unregisterOsEventHandler() {}
 	virtual bool registerLockHandler() { return true; }
@@ -49,14 +47,12 @@ protected:
 	bool _isLockRegistered;
 
 	Logger * _log {};
-
-private:
-
 };
 
 #if defined(_WIN32)
 
-class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter {
+class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter
+{
 
 public:
 	OsEventHandlerWindows();
@@ -70,7 +66,6 @@ protected:
 #endif
 
 private:
-
 	bool registerOsEventHandler() override;
 	void unregisterOsEventHandler() override;
 	bool registerLockHandler() override;
@@ -83,7 +78,8 @@ private:
 using OsEventHandler = OsEventHandlerWindows;
 
 #elif defined(__linux__)
-class OsEventHandlerLinux : public OsEventHandlerBase {
+class OsEventHandlerLinux : public OsEventHandlerBase
+{
 	Q_OBJECT
 
 	static void static_signaleHandler(int signum)
@@ -109,6 +105,33 @@ private:
 
 using OsEventHandler = OsEventHandlerLinux;
 
+#elif defined(__APPLE__)
+#include <CoreFoundation/CoreFoundation.h>
+
+class OsEventHandlerMacOS : public OsEventHandlerBase
+{
+	Q_OBJECT
+
+    static void notificationCenterCallBack(CFNotificationCenterRef center, void* observer, CFStringRef name, const void* object, CFDictionaryRef userInfo)
+	{
+		OsEventHandlerMacOS::getInstance()->handleSignal(name);
+	}
+
+public:
+	void handleSignal (CFStringRef lock_unlock);
+
+private:
+	static OsEventHandlerMacOS* getInstance();
+
+	CFStringRef lockSignal = CFSTR("com.apple.screenIsLocked");
+	CFStringRef unlockSignal = CFSTR("com.apple.screenIsUnlocked");
+	bool registerLockHandler() override;
+	void unregisterLockHandler() override;
+
+};
+
+using OsEventHandler = OsEventHandlerMacOS;
+
 #else
 using OsEventHandler = OsEventHandlerBase;
 #endif
diff --git a/include/grabber/V4L2Grabber.h b/include/grabber/V4L2Grabber.h
index b4e044f1..4d4c2cb7 100644
--- a/include/grabber/V4L2Grabber.h
+++ b/include/grabber/V4L2Grabber.h
@@ -24,7 +24,7 @@
 // Determine the cmake options
 #include <HyperionConfig.h>
 
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 ///
 /// Capture class for V4L2 devices
diff --git a/include/hyperion/Grabber.h b/include/hyperion/Grabber.h
index e3f12604..3408e3b8 100644
--- a/include/hyperion/Grabber.h
+++ b/include/hyperion/Grabber.h
@@ -11,7 +11,7 @@
 #include <utils/Logger.h>
 #include <utils/Components.h>
 
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 ///
 /// @brief The Grabber class is responsible to apply image resizes (with or without ImageResampler)
diff --git a/include/hyperion/GrabberWrapper.h b/include/hyperion/GrabberWrapper.h
index 742c7071..5254c011 100644
--- a/include/hyperion/GrabberWrapper.h
+++ b/include/hyperion/GrabberWrapper.h
@@ -18,7 +18,7 @@
 
 #include <grabber/GrabberType.h>
 
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 class Grabber;
 class GlobalSignals;
diff --git a/include/hyperion/HyperionIManager.h b/include/hyperion/HyperionIManager.h
index 5b628dc8..03e71690 100644
--- a/include/hyperion/HyperionIManager.h
+++ b/include/hyperion/HyperionIManager.h
@@ -5,7 +5,7 @@
 #include <utils/VideoMode.h>
 #include <utils/settings.h>
 #include <utils/Components.h>
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 // qt
 #include <QMap>
diff --git a/libsrc/api/JsonAPI.cpp b/libsrc/api/JsonAPI.cpp
index 9b787262..65eff139 100644
--- a/libsrc/api/JsonAPI.cpp
+++ b/libsrc/api/JsonAPI.cpp
@@ -22,7 +22,7 @@
 #include <grabber/QtGrabber.h>
 
 #include <utils/WeakConnect.h>
-#include <events/Event.h>
+#include <events/EventEnum.h>
 
 #if defined(ENABLE_MF)
 	#include <grabber/MFGrabber.h>
diff --git a/libsrc/events/CMakeLists.txt b/libsrc/events/CMakeLists.txt
index 9d239db4..a0d41ae6 100644
--- a/libsrc/events/CMakeLists.txt
+++ b/libsrc/events/CMakeLists.txt
@@ -3,7 +3,7 @@ SET(CURRENT_HEADER_DIR ${CMAKE_SOURCE_DIR}/include/events)
 SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/events)
 
 add_library(events
-	${CURRENT_HEADER_DIR}/Event.h
+	${CURRENT_HEADER_DIR}/EventEnum.h
 	${CURRENT_HEADER_DIR}/EventHandler.h
 	${CURRENT_SOURCE_DIR}/EventHandler.cpp
 	${CURRENT_HEADER_DIR}/OsEventHandler.h
diff --git a/libsrc/events/EventHandler.cpp b/libsrc/events/EventHandler.cpp
index e2181c88..5b4bf7ec 100644
--- a/libsrc/events/EventHandler.cpp
+++ b/libsrc/events/EventHandler.cpp
@@ -3,8 +3,6 @@
 #include <QJsonDocument>
 #include <QJsonObject>
 
-#include <events/Event.h>
-
 #include <utils/Logger.h>
 #include <utils/Process.h>
 #include <hyperion/HyperionIManager.h>
diff --git a/libsrc/events/OsEventHandler.cpp b/libsrc/events/OsEventHandler.cpp
index c4771439..c7ea0564 100644
--- a/libsrc/events/OsEventHandler.cpp
+++ b/libsrc/events/OsEventHandler.cpp
@@ -445,4 +445,61 @@ void OsEventHandlerLinux::unregisterLockHandler()
 }
 #endif // HYPERION_HAS_DBUS
 
-#endif // __linux__
+#elif defined(__APPLE__)
+
+OsEventHandlerMacOS* OsEventHandlerMacOS::getInstance()
+{
+	static OsEventHandlerMacOS instance;
+	return &instance;
+}
+
+void OsEventHandlerMacOS::handleSignal (CFStringRef lock_unlock)
+{
+	if (CFEqual(lock_unlock, CFSTR("com.apple.screenIsLocked")))
+	{
+		lock(true);
+	}
+	else if (CFEqual(lock_unlock, CFSTR("com.apple.screenIsUnlocked")))
+	{
+		lock(false);
+	}
+}
+
+bool OsEventHandlerMacOS::registerLockHandler()
+{
+	bool isRegistered{ _isLockRegistered };
+	if (!_isLockRegistered)
+	{
+		CFNotificationCenterRef distCenter;
+
+		distCenter = CFNotificationCenterGetDistributedCenter();
+		if (distCenter != nullptr)
+		{
+			CFNotificationCenterAddObserver(distCenter, this, &OsEventHandlerMacOS::notificationCenterCallBack, lockSignal, nullptr, CFNotificationSuspensionBehaviorDeliverImmediately);
+			CFNotificationCenterAddObserver(distCenter, this, &OsEventHandlerMacOS::notificationCenterCallBack, unlockSignal, nullptr, CFNotificationSuspensionBehaviorDeliverImmediately);
+			isRegistered = true;
+		}
+		else
+		{
+			Error(_log, "Could not register for lock/unlock events!");
+		}
+
+	}
+
+	if (isRegistered)
+	{
+		_isLockRegistered = true;
+	}
+	return isRegistered;
+}
+
+void OsEventHandlerMacOS::unregisterLockHandler()
+{
+	if (_isLockRegistered)
+	{
+		CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDistributedCenter(), this);
+		_isLockRegistered = false;
+	}
+}
+
+#endif