diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 1537d3199aa3020cc7354cdbb08075f195b494f1..8993ca6955ec2d9d8018450b2cbd997bedfcee3b 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -3065,7 +3065,7 @@ void controllerFan()
   {
     lastMotorCheck = millis();
 
-    if(!READ(X_ENABLE_PIN) || !READ(Y_ENABLE_PIN) || !READ(Z_ENABLE_PIN)
+    if(!READ(X_ENABLE_PIN) || !READ(Y_ENABLE_PIN) || !READ(Z_ENABLE_PIN) || (soft_pwm_bed > 0)
     #if EXTRUDERS > 2
        || !READ(E2_ENABLE_PIN)
     #endif
diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp
index 48960488b8b9b1835a130da6b39a92e5533042f8..29050b84f5622d282cc7eedc8a4bfeda08fbe640 100644
--- a/Marlin/temperature.cpp
+++ b/Marlin/temperature.cpp
@@ -65,6 +65,8 @@ float current_temperature_bed = 0.0;
 #ifdef FAN_SOFT_PWM
   unsigned char fanSpeedSoftPwm;
 #endif
+
+unsigned char soft_pwm_bed;
   
 #ifdef BABYSTEPPING
   volatile int babystepsTodo[3]={0,0,0};
@@ -105,7 +107,7 @@ static volatile bool temp_meas_ready = false;
 	static unsigned long  previous_millis_bed_heater;
 #endif //PIDTEMPBED
   static unsigned char soft_pwm[EXTRUDERS];
-  static unsigned char soft_pwm_bed;
+
 #ifdef FAN_SOFT_PWM
   static unsigned char soft_pwm_fan;
 #endif
diff --git a/Marlin/temperature.h b/Marlin/temperature.h
index 1bf47e02ed54cc32cc7ed5e75dd2b71ba458e9c8..82de2402f011de3838e43d4c60470b5b3cb81395 100644
--- a/Marlin/temperature.h
+++ b/Marlin/temperature.h
@@ -45,6 +45,10 @@ extern float current_temperature_bed;
   extern float redundant_temperature;
 #endif
 
+#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
+  extern unsigned char soft_pwm_bed;
+#endif
+
 #ifdef PIDTEMP
   extern float Kp,Ki,Kd,Kc;
   float scalePID_i(float i);