diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py
index d194b4b632293c7d4ae7cf1a7cc7cfb5382f2208..7070501125b16b7bc142131caf48d0fd817749de 100644
--- a/pi_mqtt_gpio/server.py
+++ b/pi_mqtt_gpio/server.py
@@ -504,8 +504,11 @@ if __name__ == "__main__":
         client.publish(
             "%s/%s" % (topic_prefix, config["mqtt"]["status_topic"]),
             config["mqtt"]["status_payload_stopped"], qos=1, retain=True)
-        # This should also quit the mqtt loop thread.
+
+        client.loop_stop()
         client.disconnect()
+        client.loop_forever()
+
         for name, gpio in GPIO_MODULES.items():
             if not GPIO_CONFIGS[name]["cleanup"]:
                 _LOG.info("Cleanup disabled for module %r.", name)