diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py
index 1a2ab6c5451354f3b1231f90c30098c00fb77db5..ce470bc4caca1a025e7977ee592fba5a0e9c7f6a 100644
--- a/pi_mqtt_gpio/server.py
+++ b/pi_mqtt_gpio/server.py
@@ -291,6 +291,16 @@ def init_mqtt(config, digital_outputs):
             _LOG.info(
                 "Connected to the MQTT broker with protocol v%s.",
                 config["protocol"])
+            status_topic = "%s/%s" % (topic_prefix, config["status_topic"])
+            client.will_set(
+                status_topic,
+                payload=config["status_payload_dead"],
+                qos=1,
+                retain=True)
+            _LOG.debug(
+                "Last will set on %r as %r.",
+                status_topic,
+                config["status_payload_dead"])
             for out_conf in digital_outputs:
                 for suffix in (SET_TOPIC, SET_ON_MS_TOPIC, SET_OFF_MS_TOPIC):
                     topic = "%s/%s/%s/%s" % (
@@ -300,6 +310,11 @@ def init_mqtt(config, digital_outputs):
                         suffix)
                     client.subscribe(topic, qos=1)
                     _LOG.info("Subscribed to topic: %r", topic)
+            client.publish(
+                status_topic,
+                config["status_payload_running"],
+                qos=1,
+                retain=True)
         elif rc == 1:
             _LOG.fatal(
                 "Incorrect protocol version used to connect to MQTT broker.")
@@ -486,6 +501,9 @@ if __name__ == "__main__":
     except KeyboardInterrupt:
         print("")
     finally:
+        client.publish(
+            "%s/%s" % (topic_prefix, config["mqtt"]["status_topic"]),
+            config["mqtt"]["status_payload_stopped"], qos=1, retain=True)
         client.disconnect()
         client.loop_stop()
         for name, gpio in GPIO_MODULES.items():