diff --git a/src/main/jastadd/Coordinator.flex b/src/main/jastadd/Coordinator.flex
index 7df1cb3162cc465a485384c20126c04edd1a19d7..cd60a203473a77aa0a16e4477f04e3c6a7a16838 100644
--- a/src/main/jastadd/Coordinator.flex
+++ b/src/main/jastadd/Coordinator.flex
@@ -53,6 +53,7 @@ Comment = "//" [^\n\r]+
 "after"              { return sym(Terminals.AFTER); }
 "sec"                { return sym(Terminals.SEC); }
 "in"                 { return sym(Terminals.IN); }
+"if"                 { return sym(Terminals.IF); }
 "start"              { return sym(Terminals.START); }
 "using"              { return sym(Terminals.USING); }
 "reqs"               { return sym(Terminals.REQS); }
diff --git a/src/main/jastadd/Coordinator.jrag b/src/main/jastadd/Coordinator.jrag
index 064b2c96d372e1372c3b74890e94cab4e0002681..2ce1a9718918a0d4443bb9f6ffe1a5acee39c11b 100644
--- a/src/main/jastadd/Coordinator.jrag
+++ b/src/main/jastadd/Coordinator.jrag
@@ -134,6 +134,18 @@ aspect Navigation {
 
   syn boolean Component.isUnknownComponent() = false;
   eq UnknownComponent.isUnknownComponent() = true;
+
+  syn boolean AutoSetStatus.isDelayAutoSetStatus() = false;
+  eq DelayAutoSetStatus.isDelayAutoSetStatus() = true;
+
+  syn boolean AutoSetStatus.isMqttAutoSetStatus() = false;
+  eq MqttAutoSetStatus.isMqttAutoSetStatus() = true;
+
+  syn DelayAutoSetStatus AutoSetStatus.asDelayAutoSetStatus() = null;
+  eq DelayAutoSetStatus.asDelayAutoSetStatus() = this;
+
+  syn MqttAutoSetStatus AutoSetStatus.asMqttAutoSetStatus() = null;
+  eq MqttAutoSetStatus.asMqttAutoSetStatus() = this;
 }
 
 aspect Printing {
@@ -197,9 +209,13 @@ aspect Printing {
       (getStartAsUp() ? ", StartAsUp = true" : "") +
       ">";
   }
-  syn String AutoSetStatus.details() {
+  syn String AutoSetStatus.details();
+  eq DelayAutoSetStatus.details() {
     return "[" + getStatus() + " after " + getDelayInSeconds() + " sec]";
   }
+  syn String MqttAutoSetStatus.details() {
+    return "[" + getStatus() + " if sth. on " + getTopic() + " ]";
+  }
   syn String StartStrategy.details();
   eq DockerComposeStartStrategy.details() = "docker compose (name: " + getName() + ")";
   eq ScriptStartStrategy.details() = "script (cmd: '" + getCommand() + "'" + (getCwd().isBlank() ? "" : "cwd: '" + getCwd() + "'") + ")";
diff --git a/src/main/jastadd/Coordinator.parser b/src/main/jastadd/Coordinator.parser
index 1b5e9d8f5dd5fe9e489d4e9882e29c46aad4be7f..674f48c9ecfd249b02ed978de2464a1d8c6384d7 100644
--- a/src/main/jastadd/Coordinator.parser
+++ b/src/main/jastadd/Coordinator.parser
@@ -48,8 +48,9 @@ Component component =
 Component component_body =
     COMMA START USING start_strategy.s component_body.c         {: c.setStartStrategy(s); return c; :}
   | COMMA REPORT USING report_strategy.r component_body.c       {: c.setReportStrategy(r); return c; :}
-  | COMMA STATUS TEXT.s AFTER INTEGER.i SEC component_body.c    {: c.setAutoSetStatus(new AutoSetStatus(s, Integer.parseInt(i))); return c; :}
+  | COMMA STATUS TEXT.s AFTER INTEGER.i SEC component_body.c    {: c.setAutoSetStatus(new DelayAutoSetStatus(s, Integer.parseInt(i))); return c; :}
   | COMMA START AFTER REQS component_body.c                {: c.setStartAsUp(true); return c; :}
+  | COMMA STATUS TEXT.s IF MQTT TEXT.topic component_body.c    {: c.setAutoSetStatus(new MqttAutoSetStatus(s, topic)); return c; :}
   |                                                             {: Component c = new Component(); c.setStartStrategy(new ManualStartStrategy()); return c; :}
   ;
 
diff --git a/src/main/jastadd/Coordinator.relast b/src/main/jastadd/Coordinator.relast
index 3eb491c327cfa7f3268e7a88d33a4326724126fb..fc6a2537f49bfd562a6e4ac1be62318f2fc04597 100644
--- a/src/main/jastadd/Coordinator.relast
+++ b/src/main/jastadd/Coordinator.relast
@@ -10,7 +10,9 @@ ManualStartStrategy : StartStrategy ;
 abstract ReportStrategy ;
 MqttReportStrategy : ReportStrategy ::= <TopicPrefix:String> ;
 
-AutoSetStatus ::= <Status:String> <DelayInSeconds:int> ;
+abstract AutoSetStatus ::= <Status:String> ;
+DelayAutoSetStatus : AutoSetStatus ::= <DelayInSeconds:int> ;
+MqttAutoSetStatus : AutoSetStatus ::= <Topic:String> ;
 
 ParsedPrecedenceRelation ;
 rel ParsedPrecedenceRelation.Predecessor* -> Component ;
diff --git a/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java b/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java
index 8b277caaab0190feac1e19092cf30f131b678001..76aaf4417de47eb0428e16724d8ad4116637d58a 100644
--- a/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java
+++ b/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java
@@ -142,10 +142,16 @@ public class MainCoordinator implements Callable<Integer> {
   }
 
   private void scheduleAutoSetStatus(Component comp) {
-    executor.schedule(() -> {
-      System.out.println("Setting status of " + comp.getName() + " to " + comp.getAutoSetStatus().getStatus());
-      comp.setStatus(comp.getAutoSetStatus().getStatus());
-    }, comp.getAutoSetStatus().getDelayInSeconds(), TimeUnit.SECONDS);
+    if (comp.getAutoSetStatus().isDelayAutoSetStatus()) {
+      executor.schedule(() -> {
+        System.out.println("Setting status of " + comp.getName() + " to " + comp.getAutoSetStatus().getStatus());
+        comp.setStatus(comp.getAutoSetStatus().getStatus());
+      }, comp.getAutoSetStatus().asDelayAutoSetStatus().getDelayInSeconds(), TimeUnit.SECONDS);
+    } else if (comp.getAutoSetStatus().isMqttAutoSetStatus()) {
+      mainHandler.newConnection(comp.getAutoSetStatus().asMqttAutoSetStatus().getTopic(), bytes -> {
+        comp.setStatus(comp.getAutoSetStatus().getStatus());
+      });
+    }
   }
 
   private void printStatus(String message) {