diff --git a/src/sbbs3/mqtt.c b/src/sbbs3/mqtt.c
index 25893d4d719c324d72ab975fe1cbaaf528a50eeb..d89ee668e405db37eaef27bce30eb6e80545b796 100644
--- a/src/sbbs3/mqtt.c
+++ b/src/sbbs3/mqtt.c
@@ -476,29 +476,30 @@ int mqtt_startup(struct startup* startup, scfg_t* cfg, const char* version
 	if(startup == NULL)
 		return MQTT_FAILURE;
 
-	if(cfg->mqtt.enabled) {
-		result = mqtt_init(startup, cfg);
+	if(!cfg->mqtt.enabled)
+		return MQTT_SUCCESS;
+
+	result = mqtt_init(startup, cfg);
+	if(result != MQTT_SUCCESS) {
+		lprintf(lputs, LOG_INFO, "MQTT init failure: %d", result);
+	} else {
+		lprintf(lputs, LOG_INFO, "MQTT lib: %s", mqtt_libver(str, sizeof(str)));
+		result = mqtt_open(startup);
 		if(result != MQTT_SUCCESS) {
-			lprintf(lputs, LOG_INFO, "MQTT init failure: %d", result);
+			lprintf(lputs, LOG_ERR, "MQTT open failure: %d", result);
 		} else {
-			lprintf(lputs, LOG_INFO, "MQTT lib: %s", mqtt_libver(str, sizeof(str)));
-			result = mqtt_open(startup);
+			result = mqtt_thread_start(startup);
 			if(result != MQTT_SUCCESS) {
-				lprintf(lputs, LOG_ERR, "MQTT open failure: %d", result);
+				lprintf(lputs, LOG_ERR, "Error %d starting pub/sub thread", result);
+				mqtt_close(startup);
 			} else {
-				result = mqtt_thread_start(startup);
-				if(result != MQTT_SUCCESS) {
-					lprintf(lputs, LOG_ERR, "Error %d starting pub/sub thread", result);
-					mqtt_close(startup);
+				lprintf(lputs, LOG_INFO, "MQTT connecting to broker %s:%u", cfg->mqtt.broker_addr, cfg->mqtt.broker_port);
+				result = mqtt_connect(startup, /* bind_address: */NULL);
+				if(result == MQTT_SUCCESS) {
+					lprintf(lputs, LOG_INFO, "MQTT broker-connect (%s:%d) successful", cfg->mqtt.broker_addr, cfg->mqtt.broker_port);
 				} else {
-					lprintf(lputs, LOG_INFO, "MQTT connecting to broker %s:%u", cfg->mqtt.broker_addr, cfg->mqtt.broker_port);
-					result = mqtt_connect(startup, /* bind_address: */NULL);
-					if(result == MQTT_SUCCESS) {
-						lprintf(lputs, LOG_INFO, "MQTT broker-connect (%s:%d) successful", cfg->mqtt.broker_addr, cfg->mqtt.broker_port);
-					} else {
-						lprintf(lputs, LOG_ERR, "MQTT broker-connect (%s:%d) failure: %d", cfg->mqtt.broker_addr, cfg->mqtt.broker_port, result);
-						mqtt_close(startup);
-					}
+					lprintf(lputs, LOG_ERR, "MQTT broker-connect (%s:%d) failure: %d", cfg->mqtt.broker_addr, cfg->mqtt.broker_port, result);
+					mqtt_close(startup);
 				}
 			}
 		}
@@ -588,6 +589,9 @@ int mqtt_client_on(struct startup* startup, BOOL on, int sock, client_t* client,
 	if(startup == NULL)
 		return MQTT_FAILURE;
 
+	if(!startup->mqtt.cfg->mqtt.enabled)
+		return MQTT_SUCCESS;
+
 	listLock(&startup->mqtt.client_list);
 	if(on) {
 		if(update) {
@@ -638,8 +642,10 @@ int mqtt_terminating(struct startup* startup)
 
 void mqtt_shutdown(struct startup* startup)
 {
-	mqtt_pub_strval(startup, TOPIC_HOST, "status", "offline");
-	mqtt_disconnect(startup);
-	mqtt_thread_stop(startup);
-	mqtt_close(startup);
+	if(startup != NULL && startup->mqtt.cfg->mqtt.enabled) {
+		mqtt_pub_strval(startup, TOPIC_HOST, "status", "offline");
+		mqtt_disconnect(startup);
+		mqtt_thread_stop(startup);
+		mqtt_close(startup);
+	}
 }