diff --git a/examples/ros3rag.coordinator b/examples/ros3rag.coordinator
index 5cd11c2b229025dc91ebc233e155e2a400c5dd96..e8b53fffcbb1e689b1200c9b498769ca8928c170 100644
--- a/examples/ros3rag.coordinator
+++ b/examples/ros3rag.coordinator
@@ -1,11 +1,11 @@
 components {
-  component robotCtrlA, docker compose = "ros_place_a",      mqtt topic = "ros-place-a", status "ready" after 1 sec
-  component robotCtrlB, docker compose = "ros_place_b",      mqtt topic = "ros-place-b", status "ready" after 1 sec
-  component ragA,       docker compose = "rag_place_a",      mqtt topic = "rag-a"
-  component ragB,       docker compose = "rag_place_b",      mqtt topic = "rag-b"
-  component random,     docker compose = "cgv_random_dummy", status "ready" after 1 sec, start as up
-  component rosCore,    docker compose = "ros_core",         status "ready" after 2 sec
-  component mosquitto,  docker compose = "mosquitto",        status "ready" after 1 sec
+  component robotCtrlA, start using docker compose "ros_place_a", report using mqtt "ros-place-a", status "ready" after 1 sec
+  component robotCtrlB, start using docker compose "ros_place_b", report using mqtt "ros-place-b", status "ready" after 1 sec
+  component ragA,       start using script "./place.sh a" in "ros3rag", report using mqtt "rag-a"
+  component ragB,       start using script "./place.sh b" in "ros3rag", report using mqtt "rag-b"
+  component random,     start using docker compose "cgv_random_dummy", status "ready" after 1 sec, start after reqs
+  component rosCore,    start using docker compose "ros_core", status "ready" after 2 sec
+  component mosquitto,  start using docker compose "mosquitto", status "ready" after 1 sec
 
   // ros core needed for all other ros nodes
   rosCore < robotCtrlA, robotCtrlB, random
diff --git a/src/main/jastadd/Coordinator.flex b/src/main/jastadd/Coordinator.flex
index 6129b5a9f2558b3065001e40c8e6afce2fe2362a..7df1cb3162cc465a485384c20126c04edd1a19d7 100644
--- a/src/main/jastadd/Coordinator.flex
+++ b/src/main/jastadd/Coordinator.flex
@@ -55,9 +55,8 @@ Comment = "//" [^\n\r]+
 "in"                 { return sym(Terminals.IN); }
 "start"              { return sym(Terminals.START); }
 "using"              { return sym(Terminals.USING); }
-"after reqs"         { return sym(Terminals.AFTER_REQS); }
+"reqs"               { return sym(Terminals.REQS); }
 
-"="                  { return sym(Terminals.EQUALS); }
 ","                  { return sym(Terminals.COMMA); }
 "<"                  { return sym(Terminals.LT); }
 "{"                  { return sym(Terminals.LB_CURLY); }
diff --git a/src/main/jastadd/Coordinator.jrag b/src/main/jastadd/Coordinator.jrag
index d2ac7291ea4c2bc928c8ff7b670a182ced9f72a6..cdd6a2160c9d695a12fe3036dccf90882dac826a 100644
--- a/src/main/jastadd/Coordinator.jrag
+++ b/src/main/jastadd/Coordinator.jrag
@@ -60,7 +60,7 @@ aspect Manipulation {
   //--- start ---
   public abstract boolean StartStrategy.start() throws IOException, InterruptedException;
   @Override
-  public boolean DockerComposeStrategy.start() throws IOException, InterruptedException {
+  public boolean DockerComposeStartStrategy.start() throws IOException, InterruptedException {
     if (!getName().isBlank()) {
       String[] args = { "docker-compose", "up", "-d", getName() };
       if (coordinator().DRY_RUN) {
@@ -91,7 +91,7 @@ aspect Manipulation {
   }
 
   @Override
-  public boolean ScriptStrategy.start() throws IOException, InterruptedException {
+  public boolean ScriptStartStrategy.start() throws IOException, InterruptedException {
     String[] command = getCommand().split(" ");
     if (coordinator().DRY_RUN) {
       System.out.println("Would start script " + Arrays.toString(command));
@@ -120,6 +120,7 @@ aspect Manipulation {
 aspect Navigation {
   inh Coordinator Component.coordinator();
   inh Coordinator ParsedPrecedenceRelation.coordinator();
+  inh Coordinator StartStrategy.coordinator();
   eq Coordinator.getChild().coordinator() = this;
 
   inh Component StartStrategy.containingComponent();
@@ -128,13 +129,13 @@ aspect Navigation {
   syn boolean StartStrategy.isDockerComposeStartStrategy() = false;
   eq DockerComposeStartStrategy.isDockerComposeStartStrategy() = true;
 
-  syn boolean StartStrategy.asDockerComposeStartStrategy() = null;
+  syn DockerComposeStartStrategy StartStrategy.asDockerComposeStartStrategy() = null;
   eq DockerComposeStartStrategy.asDockerComposeStartStrategy() = this;
 
   syn boolean ReportStrategy.isMqttReportStrategy() = false;
   eq MqttReportStrategy.isMqttReportStrategy() = true;
 
-  syn boolean ReportStrategy.asMqttReportStrategy() = null;
+  syn MqttReportStrategy ReportStrategy.asMqttReportStrategy() = null;
   eq MqttReportStrategy.asMqttReportStrategy() = this;
 }
 
@@ -203,8 +204,8 @@ aspect Printing {
     return "[" + getStatus() + " after " + getDelayInSeconds() + " sec]";
   }
   syn String StartStrategy.details();
-  eq DockerComposeStrategy.details() = "docker compose (name: " + getName() + ")";
-  eq ScriptStrategy.details() = "script (cmd: '" + getCommand() + "'" + (getCwd().isBlank() ? "" : "cwd: '" + getCwd() + "'") + ")";
+  eq DockerComposeStartStrategy.details() = "docker compose (name: " + getName() + ")";
+  eq ScriptStartStrategy.details() = "script (cmd: '" + getCommand() + "'" + (getCwd().isBlank() ? "" : "cwd: '" + getCwd() + "'") + ")";
   eq ManualStartStrategy.details() = "manual";
   syn String ReportStrategy.details();
   eq MqttReportStrategy.details() = "mqtt (topic: " + getTopicPrefix() + ")";
@@ -232,7 +233,8 @@ aspect Resolving {
 
   syn Optional<Component> Coordinator.resolveComponentByDockerComposeName(String dockerComposeName) {
     for (Component comp : getComponentList()) {
-      if (comp.getDockerComposeName().equals(dockerComposeName)) {
+      if (comp.getStartStrategy().isDockerComposeStartStrategy() &&
+          comp.getStartStrategy().asDockerComposeStartStrategy().getName().equals(dockerComposeName)) {
         return Optional.of(comp);
       }
     }
diff --git a/src/main/jastadd/Coordinator.parser b/src/main/jastadd/Coordinator.parser
index 7ac691b9c2f920ccc174bfbc032c78a058962dcf..4d28fc103140e4c22dc5aa18041621aa9d055a0c 100644
--- a/src/main/jastadd/Coordinator.parser
+++ b/src/main/jastadd/Coordinator.parser
@@ -47,18 +47,18 @@ 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 START AFTER_REQS component_body.c                          {: c.setStartAsUp(true); return c; :}
+  | COMMA START AFTER REQS component_body.c                          {: c.setStartAsUp(true); return c; :}
   |                                                             {: Component c = new Component(); c.setStartStrategy(new ManualStartStrategy()); return c; :}
   ;
 
 StartStrategy start_strategy =
-    DOCKER_COMPOSE TEXT.dc component_body.c    {: return new DockerComposeStrategy().setName(dc); :}
-  | SCRIPT TEXT.cmd                            {: return new ScriptStrategy().setCommand(cmd); :}
-  | SCRIPT TEXT.cmd IN TEXT.cwd                {: return new ScriptStrategy().setCommand(cmd).setCwd(cwd); :}
+    DOCKER_COMPOSE TEXT.dc component_body.c    {: return new DockerComposeStartStrategy().setName(dc); :}
+  | SCRIPT TEXT.cmd                            {: return new ScriptStartStrategy().setCommand(cmd); :}
+  | SCRIPT TEXT.cmd IN TEXT.cwd                {: return new ScriptStartStrategy().setCommand(cmd).setCwd(cwd); :}
   ;
 
 ReportStrategy report_strategy =
-    MQTT TEXT.topic component_body.c    {: return new ReportStrategy().setMqttTopicPrefix(topic); return c; :}
+    MQTT TEXT.topic component_body.c    {: return new MqttReportStrategy().setTopicPrefix(topic); :}
   ;
 
 StringList string_list =
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 c9356642291dcca6ab319af7e8d21e094d93fdc6..ede4051963c6f322e4209408691ce98c9a1a8097 100644
--- a/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java
+++ b/src/main/java/de/tudresden/inf/st/coordinator/MainCoordinator.java
@@ -4,6 +4,7 @@ import beaver.Parser;
 import de.tudresden.inf.st.coordinator.ast.Component;
 import de.tudresden.inf.st.coordinator.ast.Coordinator;
 import de.tudresden.inf.st.coordinator.ast.MqttHandler;
+import de.tudresden.inf.st.coordinator.ast.MqttReportStrategy;
 import de.tudresden.inf.st.coordinator.parser.CoordinatorParser;
 import de.tudresden.inf.st.coordinator.scanner.CoordinatorScanner;
 import picocli.CommandLine;