 
 void controlFan() {
     if (mode == MODE_AUTO) {
-        if (tempInside < TEMP_LIMIT) {
+        if (tempInside < TEMP_IN_LIMIT) {
             fanOff();
             why = "Temp In < ";
-            why = why + ((int)TEMP_LIMIT);
+            why = why + ((int)TEMP_IN_LIMIT);
             why = why + (char)223;
-        } else if (humidityInside < HUMIDTITY_LIMIT) {
+        } else if (tempOutside > TEMP_OUT_LIMIT) {
+            fanOff();
+            why = "Temp Out > ";
+            why = why + ((int)TEMP_OUT_LIMIT);
+            why = why + (char)223;
+        } else if ((humidityInside < (HUMIDTITY_LIMIT - HUMIDTITY_LIMIT_TOLERANCE)) && fanRunning) {
             fanOff();
             why = "Humi: In < ";
             why = why + ((int)HUMIDTITY_LIMIT);
             why = why + "%";
-        } else if (absHumidityOutside > absHumidityInside) {
+        } else if ((humidityInside < HUMIDTITY_LIMIT) && !fanRunning) {
+            fanOff();
+            why = "Humi: In < ";
+            why = why + ((int)HUMIDTITY_LIMIT);
+            why = why + "%";
+        } else if ((absHumidityOutside >= absHumidityInside) && fanRunning) {
             fanOff();
             why = "A-Humi: Out > In";
-        } else if (absHumidityOutside < absHumidityInside) {
+        } else if (((absHumidityOutside + ABS_HUMIDITY_LIMIT_TOLERANCE) >= absHumidityInside) && !fanRunning) {
+            fanOff();
+            why = "A-Humi: Out > In";    
+        } else if ((absHumidityOutside < absHumidityInside) && fanRunning)  {
             fanOn();
-            why = "Drying ...";
+            why = "Drying ...";   
+        } else if (((absHumidityOutside + ABS_HUMIDITY_LIMIT_TOLERANCE) < absHumidityInside) && !fanRunning)  {
+            fanOn();
+            why = "Drying ...";     
         } else {
             fanOff();
             why = "why?";
         }
     } else if (mode == MODE_ON) {
-        fanOn();
-        why = "Forced ON-Mode";
+        if (((millis() - forceModeOnTime) > MAX_FORCED_MODE_DURATION) || (absHumidityOutside >= absHumidityInside)) {
+          fanOff();
+          mode = MODE_AUTO;
+        } else {
+          fanOn();
+          why = "Forced ON-Mode";
+        }
     } else if (mode == MODE_OFF) {
-        fanOff();
-        why = "Forced OFF-Mode";
+        if ((millis() - forceModeOnTime) > MAX_FORCED_MODE_DURATION) {
+          fanOff();
+          mode = MODE_AUTO;
+        } else {      
+          fanOff();
+          why = "Forced OFF-Mode";
+        }
     } else {
       why = "Unkown Mode " + mode;
     }

const int MODE_ON = 11;
const int MODE_OFF = 12;

const float HUMIDTITY_LIMIT = 53.0;
const float TEMP_LIMIT = 14.0;


// See guide for details on sensor wiring and usage:
//   https://learn.adafruit.com/dht/overview

        if (buttons & BUTTON_UP) {
            if (mode == MODE_AUTO) {
                mode = MODE_ON;
                forceModeOnTime = millis();
                Serial.println("MODE=ON");
            } else {
                mode = MODE_AUTO;
