diff --git a/src/main/jastadd/backend/Generation.jadd b/src/main/jastadd/backend/Generation.jadd
index 75be20c251f171af965eda685e00e489e3de023d..b74743d183fd56390537348e3be580090b77e3f3 100644
--- a/src/main/jastadd/backend/Generation.jadd
+++ b/src/main/jastadd/backend/Generation.jadd
@@ -50,15 +50,13 @@ aspect AspectGeneration {
   public void Ros2Rag.generateMqttAspect(StringBuilder sb, TypeDecl rootNode) {
     String rootNodeName = rootNode.getName();
     sb.append("aspect MQTT {\n");
-    sb.append(ind(1)).append("private static final int ")
-      .append(rootNodeName).append("._MQTT_DEFAULT_PORT = 1883;\n");
     sb.append(ind(1)).append("private MqttUpdater ").append(rootNodeName)
       .append(".").append(mqttUpdaterField()).append(" = new MqttUpdater();\n");
 
     // mqttSetHost(String host)
     sb.append(ind(1)).append("public void ").append(rootNodeName).append(".")
       .append(mqttSetHostMethod()).append("(String host) throws java.io.IOException {\n");
-    sb.append(ind(2)).append("MqttSetHost(host, _MQTT_DEFAULT_PORT);\n");
+    sb.append(ind(2)).append(mqttUpdaterField()).append(".setHost(host);\n");
     sb.append(ind(1)).append("}\n");
 
     // mqttSetHost(String host, int port)
diff --git a/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java b/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
index 7cd97a36113ca9af2566321f77b59e929f70b0cd..af1076eb7ff423f9e6e4e2ac7715bb8668332d2a 100644
--- a/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
+++ b/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
@@ -24,6 +24,7 @@ public class Compiler {
   private StringOption optionRootNode;
   private StringOption optionInputRos2Rag;
   private FlagOption optionHelp;
+  private FlagOption optionVerbose;
 
   private ArrayList<Option<?>> options;
   private CommandLine commandLine;
@@ -44,6 +45,19 @@ public class Compiler {
       return;
     }
 
+    if (optionVerbose.isSet()) {
+      try {
+        run();
+      } catch (CompilerException e) {
+        e.printStackTrace();
+        throw e;
+      }
+    } else {
+      run();
+    }
+  }
+
+  private void run() throws CompilerException {
     String outputDir;
     if (optionOutputDir.isSet()) {
       outputDir = optionOutputDir.getValue();
@@ -129,6 +143,7 @@ public class Compiler {
     optionRootNode = addOption(new StringOption("rootNode", "root node in the base grammar."));
     optionInputRos2Rag = addOption(new StringOption("inputRos2Rag", "ros2rag definition file."));
     optionHelp = addOption(new FlagOption("help", "Print usage and exit."));
+    optionVerbose = addOption(new FlagOption("verbose", "Print more messages."));
   }
 
   private <OptionType extends Option<?>> OptionType addOption(OptionType option) {
@@ -145,7 +160,9 @@ public class Compiler {
       Ros2RagScanner scanner = new Ros2RagScanner(reader);
       Ros2RagParser parser = new Ros2RagParser();
       inputGrammar = (GrammarFile) parser.parse(scanner);
-      inputGrammar.dumpTree(System.out);
+      if (optionVerbose.isSet()) {
+        inputGrammar.dumpTree(System.out);
+      }
       program.addGrammarFile(inputGrammar);
       inputGrammar.treeResolveAll();
     } catch (IOException | Parser.Exception e) {
diff --git a/src/main/resources/MqttUpdater.jadd b/src/main/resources/MqttUpdater.jadd
index 6e986f2df4fc44f67e28b0015e524e1455f5e5fd..394735cc78595ad0ebe15b5ab1fa6e73ef435b13 100644
--- a/src/main/resources/MqttUpdater.jadd
+++ b/src/main/resources/MqttUpdater.jadd
@@ -1,9 +1,11 @@
+aspect MqttUpdater {
 /**
  * Helper class to receive updates via MQTT and use callbacks to handle those messages.
  *
  * @author rschoene - Initial contribution
  */
 public class MqttUpdater {
+  private static final int DEFAULT_PORT = 1883;
 
   private final org.apache.logging.log4j.Logger logger;
   private final String name;
@@ -16,6 +18,7 @@ public class MqttUpdater {
   private final java.util.concurrent.locks.Condition readyCondition;
   private final java.util.concurrent.locks.Lock readyLock;
   private boolean ready;
+  private boolean sendWelcomeMessage = true;
   private org.fusesource.mqtt.client.QoS qos;
   /** Dispatch knowledge */
   private final java.util.Map<String, java.util.function.Consumer<byte[]>> callbacks;
@@ -34,16 +37,31 @@ public class MqttUpdater {
     this.qos = org.fusesource.mqtt.client.QoS.AT_LEAST_ONCE;
   }
 
+  public MqttUpdater dontSendWelcomeMessage() {
+    this.sendWelcomeMessage = false;
+    return this;
+  }
+
+  /**
+   * Sets the host (with default port) to receive messages from, and connects to it.
+   * @throws IOException if could not connect, or could not subscribe to a topic
+   * @return self
+   */
+  public MqttUpdater setHost(String host) throws java.io.IOException {
+    return setHost(host, DEFAULT_PORT);
+  }
+
   /**
    * Sets the host to receive messages from, and connects to it.
    * @throws IOException if could not connect, or could not subscribe to a topic
    * @return self
    */
   public MqttUpdater setHost(String host, int port) throws java.io.IOException {
+    java.util.Objects.requireNonNull(host, "Host need to be set!");
+
     this.host = java.net.URI.create("tcp://" + host + ":" + port);
     logger.debug("Host for {} is {}", this.name, this.host);
 
-    java.util.Objects.requireNonNull(this.host, "Host need to be set!");
     org.fusesource.mqtt.client.MQTT mqtt = new org.fusesource.mqtt.client.MQTT();
     mqtt.setHost(this.host);
     connection = mqtt.callbackConnection();
@@ -91,24 +109,22 @@ public class MqttUpdater {
     connection.connect(new org.fusesource.mqtt.client.Callback<Void>() {
       @Override
       public void onSuccess(Void value) {
-        connection.publish("components", (name + " is connected").getBytes(), org.fusesource.mqtt.client.QoS.AT_LEAST_ONCE, false, new org.fusesource.mqtt.client.Callback<Void>() {
-          @Override
-          public void onSuccess(Void value) {
-            logger.debug("success sending welcome message");
-            try {
-              readyLock.lock();
-              ready = true;
-              readyCondition.signalAll();
-            } finally {
-              readyLock.unlock();
+        if (MqttUpdater.this.sendWelcomeMessage) {
+          connection.publish("components", (name + " is connected").getBytes(), org.fusesource.mqtt.client.QoS.AT_LEAST_ONCE, false, new org.fusesource.mqtt.client.Callback<Void>() {
+            @Override
+            public void onSuccess(Void value) {
+              logger.debug("success sending welcome message");
+              setReady();
             }
-          }
 
-          @Override
-          public void onFailure(Throwable value) {
-            logger.debug("failure sending welcome message", value);
-          }
-        });
+            @Override
+            public void onFailure(Throwable value) {
+              logger.debug("failure sending welcome message", value);
+            }
+          });
+        } else {
+          setReady();
+        }
       }
 
       @Override
@@ -125,6 +141,16 @@ public class MqttUpdater {
     return host;
   }
 
+  private void setReady() {
+    try {
+      readyLock.lock();
+      ready = true;
+      readyCondition.signalAll();
+    } finally {
+      readyLock.unlock();
+    }
+  }
+
   private void throwIf(java.util.concurrent.atomic.AtomicReference<Throwable> error) throws java.io.IOException {
     if (error.get() != null) {
       throw new java.io.IOException(error.get());
@@ -220,3 +246,4 @@ public class MqttUpdater {
     });
   }
 }
+}