diff --git a/tools/esp8266/mqtt.h b/tools/esp8266/mqtt.h
index 789cec0c..38999dc4 100644
--- a/tools/esp8266/mqtt.h
+++ b/tools/esp8266/mqtt.h
@@ -54,7 +54,7 @@ class mqtt {
 
         bool isConnected(bool doRecon = false) {
             //DPRINTLN(DBG_VERBOSE, F("mqtt.h:isConnected"));
-            if(doRecon)
+            if(doRecon && !mClient->connected())
                 reconnect();
             return mClient->connected();
         }
@@ -71,6 +71,7 @@ class mqtt {
             DPRINTLN(DBG_DEBUG, F("mqtt.h:reconnect"));
             DPRINTLN(DBG_DEBUG, F("MQTT mClient->_state ") + String(mClient->state()) );
             DPRINTLN(DBG_DEBUG, F("WIFI mEspClient.status ") + String(mEspClient.status()) );
+            boolean resub = false;
             if(!mClient->connected()) {
                 if(strlen(mDevName) > 0) {
                     // der Server und der Port müssen neu gesetzt werden, 
@@ -78,16 +79,18 @@ class mqtt {
                     mClient->setServer(mCfg->broker, mCfg->port);
                     mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
                     if((strlen(mCfg->user) > 0) && (strlen(mCfg->pwd) > 0))
-                        mClient->connect(mDevName, mCfg->user, mCfg->pwd);
+                        resub = mClient->connect(mDevName, mCfg->user, mCfg->pwd);
                     else
-                        mClient->connect(mDevName);
+                        resub = mClient->connect(mDevName);
                 }
                 // ein Subscribe ist nur nach einem connect notwendig
-                char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
-                // ToDo: "/devcontrol/#" is hardcoded 
-                snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg->topic);
-                DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
-                mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
+                if(resub) {
+                    char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
+                    // ToDo: "/devcontrol/#" is hardcoded 
+                    snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg->topic);
+                    DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
+                    mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
+                }
             }
         }