diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 3be3677e114db274e75afff89d4df86ae134424b..c022e9a7a5c5c2b8b0ab79ce8454b34682da1c6c 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -2482,7 +2482,7 @@ void output_thread(void* arg)
 			}
 			/* Spy on the user remotely */
 			if(sbbs->cfg.mqtt.enabled) {
-				int result = mqtt_pub_message(&mqtt, TOPIC_BBS, spy_topic, buf+bufbot, i);
+				int result = mqtt_pub_message(&mqtt, TOPIC_BBS, spy_topic, buf+bufbot, i, /* retain: */false);
 				if(result != MQTT_SUCCESS)
 					lprintf(LOG_WARNING, "%s ERROR %d (%d) publishing node output (%u bytes): %s"
 						,node, result, errno, i, spy_topic);
diff --git a/src/sbbs3/mqtt.c b/src/sbbs3/mqtt.c
index 72ae2c17f63dd357cb32d7d00fe81177d49264a5..8028e9ccd272b46ab97a4919d692bd5b0a4f7e46 100644
--- a/src/sbbs3/mqtt.c
+++ b/src/sbbs3/mqtt.c
@@ -174,7 +174,7 @@ int mqtt_lputs(struct mqtt* mqtt, enum topic_depth depth, int level, const char*
 			/* payloadlen */strlen(str),
 			/* payload */str,
 			/* qos */mqtt->cfg->mqtt.publish_qos,
-			/* retain */false,
+			/* retain */true,
 			/* properties */NULL);
 		mqtt_topic(mqtt, depth, sub, sizeof(sub), "log");
 		mosquitto_property* props = NULL;
@@ -185,7 +185,7 @@ int mqtt_lputs(struct mqtt* mqtt, enum topic_depth depth, int level, const char*
 			/* payloadlen */strlen(str),
 			/* payload */str,
 			/* qos */mqtt->cfg->mqtt.publish_qos,
-			/* retain */false,
+			/* retain */true,
 			/* properties */props);
 		mosquitto_property_free_all(&props);
 		return result;
@@ -266,7 +266,7 @@ int mqtt_pub_uintval(struct mqtt* mqtt, enum topic_depth depth, const char* key,
 	return MQTT_FAILURE;
 }
 
-int mqtt_pub_message(struct mqtt* mqtt, enum topic_depth depth, const char* key, const void* buf, size_t len)
+int mqtt_pub_message(struct mqtt* mqtt, enum topic_depth depth, const char* key, const void* buf, size_t len, BOOL retain)
 {
 	if(mqtt == NULL || mqtt->cfg == NULL)
 		return MQTT_FAILURE;
@@ -282,7 +282,7 @@ int mqtt_pub_message(struct mqtt* mqtt, enum topic_depth depth, const char* key,
 			/* payloadlen */len,
 			/* payload */buf,
 			/* qos */mqtt->cfg->mqtt.publish_qos,
-			/* retain */false,
+			/* retain */retain,
 			/* properties */NULL);
 	}
 #endif
diff --git a/src/sbbs3/mqtt.h b/src/sbbs3/mqtt.h
index 1bfd57ecc65fda6186408bed5679eadce13d6617..9a0010d69f8ff88a4dd2e9c64e25d053177bad39 100644
--- a/src/sbbs3/mqtt.h
+++ b/src/sbbs3/mqtt.h
@@ -53,14 +53,14 @@ struct mqtt {
 
 enum topic_depth {
 	TOPIC_OTHER,
-	TOPIC_ROOT,				// sbbs/*
-	TOPIC_BBS,			// sbbs/BBS-ID/*
-	TOPIC_BBS_LEVEL,	// sbbs/BBS-ID
-	TOPIC_HOST,			// sbbs/BBS-ID/hostname/*
-	TOPIC_HOST_LEVEL,	// sbbs/BBS-DI/hostname
-	TOPIC_EVENT,		// sbbs/BBS-ID/event/*
-	TOPIC_SERVER,		// sbbs/BBS-ID/server/*
-	TOPIC_SERVER_LEVEL, // sbbs/BBS-ID/server
+	TOPIC_ROOT,			// sbbs/*
+	TOPIC_BBS,			// sbbs/BBSID/*
+	TOPIC_BBS_LEVEL,	// sbbs/BBSID
+	TOPIC_HOST,			// sbbs/BBSID/host/HOSTNAME/*
+	TOPIC_HOST_LEVEL,	// sbbs/BBSID/host/HOSTNAME
+	TOPIC_EVENT,		// sbbs/BBSID/event/*
+	TOPIC_SERVER,		// sbbs/BBSID/server/SERVER/*
+	TOPIC_SERVER_LEVEL, // sbbs/BBSID/server/SERVER
 };
 
 #define MQTT_SUCCESS 0 // Same as MOSQ_ERR_SUCCESS
@@ -85,7 +85,7 @@ DLLEXPORT int mqtt_lputs(struct mqtt*, enum topic_depth, int level, const char*
 DLLEXPORT int mqtt_pub_noval(struct mqtt*, enum topic_depth, const char* key);
 DLLEXPORT int mqtt_pub_strval(struct mqtt*, enum topic_depth, const char* key, const char* str);
 DLLEXPORT int mqtt_pub_uintval(struct mqtt*, enum topic_depth, const char* key, ulong value);
-DLLEXPORT int mqtt_pub_message(struct mqtt*, enum topic_depth, const char* key, const void* buf, size_t len);
+DLLEXPORT int mqtt_pub_message(struct mqtt*, enum topic_depth, const char* key, const void* buf, size_t len, BOOL retain);
 DLLEXPORT int mqtt_open(struct mqtt*);
 DLLEXPORT void mqtt_close(struct mqtt*);
 DLLEXPORT int mqtt_connect(struct mqtt*, const char* bind_address);