diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index b718640c1c..98d0da2756 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -66,6 +66,11 @@
 //#define CONTROLLERFAN_PIN 23 //Pin used for the fan to cool controller, comment out to disable this function
 #define CONTROLLERFAN_SEC 60 //How many seconds, after all motors were disabled, the fan should run
 
+// When first starting the main fan, run it at full speed for the
+// given number of milliseconds.  This gets the fan spinning reliably
+// before setting a PWM value.  Set to zero to disable.
+#define FAN_KICKSTART_TIME 100
+
 //===========================================================================
 //=============================Mechanical Settings===========================
 //===========================================================================
diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp
index c7da244e9a..6173bcea3a 100644
--- a/Marlin/planner.cpp
+++ b/Marlin/planner.cpp
@@ -466,6 +466,20 @@ void check_axes_activity()
   }
 #if FAN_PIN > -1
   #ifndef FAN_SOFT_PWM
+  if (FAN_KICKSTART_TIME) {
+    static unsigned long FanKickEnd;
+    if (tail_fan_speed) {
+      if (FanKickEnd == 0) {
+        // Just starting up fan - run at full power.
+        FanKickEnd = millis() + FAN_KICKSTART_TIME;
+        tail_fan_speed = 255;
+      } else if (FanKickEnd > millis())
+        // Fan still spinning up.
+        tail_fan_speed = 255;
+    } else {
+      FanKickEnd = 0;
+    }
+  }
   analogWrite(FAN_PIN,tail_fan_speed);
   #endif
 #endif