diff --git a/eraser-base/src/main/jastadd/eraser.parser b/eraser-base/src/main/jastadd/eraser.parser
index 0cc98445f2d2ad28c4288ed20435c5e1dea6acc4..5c275fa8c16d8a694608581b08640ae8a9db5451 100644
--- a/eraser-base/src/main/jastadd/eraser.parser
+++ b/eraser-base/src/main/jastadd/eraser.parser
@@ -227,6 +227,8 @@ MqttRoot mqtt_root_body =
      INCOMING EQUALS TEXT.n mqtt_root_body.mrb          {: mrb.setIncomingPrefix(n); return mrb; :}
   |  OUTGOING EQUALS TEXT.n mqtt_root_body.mrb          {: mrb.setOutgoingPrefix(n); return mrb; :}
   |  HOST EQUALS TEXT.n mqtt_root_body.mrb              {: mrb.setHostByName(n); return mrb; :}
+  |  USER EQUALS TEXT.n mqtt_root_body.mrb              {: mrb.setUser(n); return mrb; :}
+  |  PASSWORD EQUALS TEXT.n mqtt_root_body.mrb          {: mrb.setPassword(n); return mrb; :}
   |                                                     {: return new MqttRoot(); :}
   ;
 
diff --git a/eraser-base/src/main/jastadd/mqtt.jrag b/eraser-base/src/main/jastadd/mqtt.jrag
index 2d3f6fceefc39d47b1fae782aa4d2f2fbba94b88..93e11442e9f277455b8b2a62e32375fd091c94e8 100644
--- a/eraser-base/src/main/jastadd/mqtt.jrag
+++ b/eraser-base/src/main/jastadd/mqtt.jrag
@@ -48,7 +48,7 @@ aspect MQTT {
     } else {
       result = new MQTTSenderStub();
     }
-    return result.setHost(getHost());
+    return result.setHost(getHost(), getUser(), getPassword());
   }
 
   //--- getMqttRoot ---
diff --git a/eraser-base/src/main/jastadd/mqtt.relast b/eraser-base/src/main/jastadd/mqtt.relast
index cf477ff72e303415e47f42c939afe26cdfc4ed54..845149403b3576e7503f59eef2a4e59ca1411485 100644
--- a/eraser-base/src/main/jastadd/mqtt.relast
+++ b/eraser-base/src/main/jastadd/mqtt.relast
@@ -1,4 +1,4 @@
 // ----------------    MQTT    ------------------------------
-MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> [Host:ExternalHost] ;
+MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> <User:String> <Password:String> [Host:ExternalHost] ;
 MqttTopic ::= <TopicString:String> ;
 rel Item.Topic? <-> MqttTopic.Item* ;
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java
index 0f26efbec7f853e183ae4999468ee47e9542d542..5a8d3bd9788728ee9b746347bb8da5da66e5c67b 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java
@@ -12,10 +12,21 @@ import java.util.concurrent.TimeUnit;
 public interface MQTTSender extends AutoCloseable {
 
   /**
-   * Sets the host running the MQTT broker.
+   * Sets the host running the MQTT broker (no username/password set).
    * @param host host name (IP address or domain name) and port
    */
-  MQTTSender setHost(ExternalHost host);
+  default MQTTSender setHost(ExternalHost host) {
+    return setHost(host, null, null);
+  }
+
+  /**
+   * Sets the host, username and password running the MQTT broker.
+   * @param host     host name (IP address or domain name) and port
+   * @param username username for authentication
+   * @param password password for authentication
+   */
+  MQTTSender setHost(ExternalHost host, String username, String password);
+
 
   /**
    * Set the timeout used for connecting and disconnecting.
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java
index 496d2a1c317d067b64f1823ff57b637ea307719c..a181424f24826736fe4b3730ae4bc6390a24be7f 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java
@@ -29,11 +29,17 @@ public class MQTTSenderImpl implements MQTTSender {
   private TimeUnit publishTimeoutUnit;
 
   @Override
-  public MQTTSender setHost(ExternalHost host) {
+  public MQTTSender setHost(ExternalHost host, String username, String password) {
     /* The host running the MQTT broker. */
     URI hostUri = URI.create("tcp://" + host.getHostName() + ":" + host.getPort());
     logger.debug("Host is {}", hostUri);
     MQTT mqtt = new MQTT();
+    if (username != null && !username.isEmpty()) {
+      mqtt.setUserName(username);
+    }
+    if (password != null && !password.isEmpty()) {
+      mqtt.setPassword(password);
+    }
     mqtt.setHost(hostUri);
     connection = mqtt.futureConnection();
     setConnectTimeout(2, TimeUnit.SECONDS);
diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java
index 2673e60679a5749405c6e8b3fcaccdda4763750b..745bfcc3c97d485da1b9f3ac3df3bb2a800e47ff 100644
--- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java
+++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java
@@ -20,7 +20,7 @@ public class MQTTSenderStub implements MQTTSender {
   private Logger logger = LogManager.getLogger(MQTTSenderStub.class);
   private PublishCallback callback;
 
-  public MQTTSender setHost(ExternalHost host) {
+  public MQTTSender setHost(ExternalHost host, String username, String password) {
     return this;
   }