diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp
index 4ff41bd9f2..e09ae95409 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -177,21 +177,6 @@ frontend::Application * createApplication(int & argc, char * argv[])
 	AllowSetForegroundWindow(ASFW_ANY);
 #endif
 
-
-#if defined(Q_OS_MAC)
-	int const cursor_time_on = NSTextInsertionPointBlinkPeriodOn();
-	int const cursor_time_off = NSTextInsertionPointBlinkPeriodOff();
-	if (cursor_time_on > 0 && cursor_time_off > 0) {
-		QApplication::setCursorFlashTime(cursor_time_on + cursor_time_off);
-	} else if (cursor_time_on <= 0 && cursor_time_off > 0) {
-		// Off is set and On is undefined of zero
-		QApplication::setCursorFlashTime(0);
-	} else if (cursor_time_off <= 0 && cursor_time_on > 0) {
-		// On is set and Off is undefined of zero
-		QApplication::setCursorFlashTime(0);
-	}
-#endif
-
 // Setup high DPI handling. This is a bit complicated, but will be default in Qt6.
 // macOS does it by itself.
 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && !defined(Q_OS_MAC)
diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp
index 22d0971b82..d033d0fe23 100644
--- a/src/frontends/qt/GuiWorkArea.cpp
+++ b/src/frontends/qt/GuiWorkArea.cpp
@@ -53,6 +53,7 @@
 #include <QInputMethod>
 #ifdef Q_OS_MAC
 #include <QProxyStyle>
+#include "support/AppleSupport.h"
 #endif
 #include <QMenu>
 #include <QPainter>
@@ -339,7 +340,24 @@ void GuiWorkArea::startBlinkingCaret()
 	// Avoid blinking when debugging PAINTING, since it creates too much noise
 	if (!lyxerr.debugging(Debug::PAINTING)) {
 		// we are not supposed to cache this value.
-		int const time = QApplication::cursorFlashTime() / 2;
+		int time = QApplication::cursorFlashTime() / 2;
+#if defined(Q_OS_MAC)
+		int const cursor_time_on = NSTextInsertionPointBlinkPeriodOn();
+		int const cursor_time_off = NSTextInsertionPointBlinkPeriodOff();
+		if (cursor_time_on > 0 && cursor_time_off > 0) {
+			// Off and On are set and valid
+			time = cursor_time_on + cursor_time_off;
+		} else if (cursor_time_on <= 0 && cursor_time_off > 0) {
+			// Off is set and On is undefined or zero
+			time = 0;
+		} else if (cursor_time_off <= 0 && cursor_time_on > 0) {
+			// On is set and Off is undefined or zero
+			time = 0;
+		} else if (PrefersNonBlinkingCursorIndicator()) {
+			// system preference set
+			time = 0;
+		}
+#endif
 		if (time <= 0)
 			return;
 		d->caret_timeout_.setInterval(time);
diff --git a/src/support/AppleSupport.h b/src/support/AppleSupport.h
index 0d2e41adae..ccbb5e39cf 100644
--- a/src/support/AppleSupport.h
+++ b/src/support/AppleSupport.h
@@ -26,6 +26,7 @@ extern "C" {
 	// and return the integer part of it - return -1 in case of unset value
 	int NSTextInsertionPointBlinkPeriodOn();
 	int NSTextInsertionPointBlinkPeriodOff();
+	bool PrefersNonBlinkingCursorIndicator();
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/support/AppleSupport.m b/src/support/AppleSupport.m
index 4278564a45..4c11b28182 100644
--- a/src/support/AppleSupport.m
+++ b/src/support/AppleSupport.m
@@ -13,17 +13,16 @@
 
 
 void appleCleanupEditMenu() {
-
+	NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
 	// Remove (disable) the "Start Dictation..." and "Emoji & Symbols" menu items
 	// from the "Edit" menu
 
-	[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledDictationMenuItem"];
-	[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"];
+	[prefs setBool:YES forKey:@"NSDisabledDictationMenuItem"];
+	[prefs setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"];
 }
 
 
 void appleCleanupViewMenu() {
-
 #if defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && (__MAC_OS_X_VERSION_MAX_ALLOWED >= 101200)
 	// Remove the "Show Tab Bar" menu item from the "View" menu, if supported
 	// See the Apple developer release notes:
@@ -36,7 +35,6 @@ void appleCleanupViewMenu() {
 
 	// Remove the "Enter Full Screen" menu item from the "View" menu
 	[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSFullScreenMenuItemEverywhere"];
-
 #endif
 }
 
@@ -65,3 +63,15 @@ int NSTextInsertionPointBlinkPeriodOff() {
 	return [prefs objectForKey:@"NSTextInsertionPointBlinkPeriodOff"] == nil ?
 			-1 : [prefs floatForKey:@"NSTextInsertionPointBlinkPeriodOff"];
 }
+
+bool PrefersNonBlinkingCursorIndicator() {
+	NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
+	bool haspref = [prefs objectForKey:@"PrefersNonBlinkingCursorIndicator"] != nil;
+
+	if (haspref) return [prefs boolForKey:@"PrefersNonBlinkingCursorIndicator"];
+
+	NSDictionary * accessibility = [prefs persistentDomainForName:@"com.apple.Accessibility"];
+	id value = accessibility[@"PrefersNonBlinkingCursorIndicator"];
+
+	return value == nil ? NO : [value boolValue];
+}
