diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index 47fa92db431e580f3f1f8e8d395484fca499f6bd..e09bd9d5ea13563a912c4d3eda142fd1b25fab32 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -138,6 +138,10 @@
   #include "feature/caselight.h"
 #endif
 
+#if HAS_FANMUX
+  #include "feature/fanmux.h"
+#endif
+
 #if (ENABLED(SWITCHING_EXTRUDER) && !DONT_SWITCH) || ENABLED(SWITCHING_NOZZLE) || ENABLED(PARKING_EXTRUDER)
   #include "module/tool_change.h"
 #endif
diff --git a/Marlin/src/feature/fanmux.cpp b/Marlin/src/feature/fanmux.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3457fe49b4e251e2e7f5d8d5f49dd6298d81f6c2
--- /dev/null
+++ b/Marlin/src/feature/fanmux.cpp
@@ -0,0 +1,55 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * feature/pause.cpp - Pause feature support functions
+ * This may be combined with related G-codes if features are consolidated.
+ */
+
+#include "../inc/MarlinConfig.h"
+
+#if HAS_FANMUX
+
+#include "fanmux.h"
+
+void fanmux_switch(const uint8_t e) {
+  WRITE(FANMUX0_PIN, TEST(e, 0) ? HIGH : LOW);
+  #if PIN_EXISTS(FANMUX1)
+    WRITE(FANMUX1_PIN, TEST(e, 1) ? HIGH : LOW);
+    #if PIN_EXISTS(FANMUX2)
+      WRITE(FANMUX2, TEST(e, 2) ? HIGH : LOW);
+    #endif
+  #endif
+}
+
+void fanmux_init(void) {
+  SET_OUTPUT(FANMUX0_PIN);
+  #if PIN_EXISTS(FANMUX1)
+    SET_OUTPUT(FANMUX1_PIN);
+    #if PIN_EXISTS(FANMUX2)
+      SET_OUTPUT(FANMUX2_PIN);
+    #endif
+  #endif
+  fanmux_switch(0);
+}
+
+#endif // HAS_FANMUX
diff --git a/Marlin/src/feature/fanmux.h b/Marlin/src/feature/fanmux.h
new file mode 100644
index 0000000000000000000000000000000000000000..252487614693bcd75558c09f97be584b50d998a1
--- /dev/null
+++ b/Marlin/src/feature/fanmux.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * feature/fanmux.h - Cooling Fan Multiplexer support functions
+ */
+
+#ifndef _FANMUX_H_
+#define _FANMUX_H_
+
+extern void fanmux_switch(const uint8_t e);
+extern void fanmux_init(void);
+
+#endif // _FANMUX_H_
diff --git a/Marlin/src/gcode/calibrate/G33.cpp b/Marlin/src/gcode/calibrate/G33.cpp
index 9deab69982c9cc038e0ebd47fa91afc51924ae69..037e133d994dc58a57beeb46907dc238a3641469 100644
--- a/Marlin/src/gcode/calibrate/G33.cpp
+++ b/Marlin/src/gcode/calibrate/G33.cpp
@@ -30,9 +30,12 @@
 #include "../../module/motion.h"
 #include "../../module/stepper.h"
 #include "../../module/endstops.h"
-#include "../../module/tool_change.h"
 #include "../../lcd/ultralcd.h"
 
+#if HOTENDS > 1
+  #include "../../module/tool_change.h"
+#endif
+
 #if HAS_LEVELING
   #include "../../feature/bedlevel/bedlevel.h"
 #endif
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index b49486bf7d33273d0a3fe1909617bf55d046c0fe..03aecfe7b2849f23cb3ba72a4277142dd9f258bf 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -39,10 +39,6 @@
   #include "../lcd/ultralcd.h"
 #endif
 
-// #if ENABLED(DUAL_X_CARRIAGE)
-//   #include "tool_change.h"
-// #endif
-
 #if HAS_BED_PROBE
   #include "probe.h"
 #endif
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index 8d12a82b903f2f06ed3a0244d208b84af264ed51..0bcedc80cb602557f17eb14fc7d87acb87c27dc2 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -50,6 +50,10 @@
   #include "../feature/bedlevel/bedlevel.h"
 #endif
 
+#if HAS_FANMUX
+  #include "../feature/fanmux.h"
+#endif
+
 #if ENABLED(SWITCHING_EXTRUDER)
 
   #if EXTRUDERS > 3
@@ -109,30 +113,6 @@
 
 #endif // PARKING_EXTRUDER
 
-#if HAS_FANMUX
-
-  void fanmux_switch(const uint8_t e) {
-    WRITE(FANMUX0_PIN, TEST(e, 0) ? HIGH : LOW);
-    #if PIN_EXISTS(FANMUX1)
-      WRITE(FANMUX1_PIN, TEST(e, 1) ? HIGH : LOW);
-      #if PIN_EXISTS(FANMUX2)
-        WRITE(FANMUX2, TEST(e, 2) ? HIGH : LOW);
-      #endif
-    #endif
-  }
-
-  FORCE_INLINE void fanmux_init(void){
-    SET_OUTPUT(FANMUX0_PIN);
-    #if PIN_EXISTS(FANMUX1)
-      SET_OUTPUT(FANMUX1_PIN);
-      #if PIN_EXISTS(FANMUX2)
-        SET_OUTPUT(FANMUX2_PIN);
-      #endif
-    #endif
-    fanmux_switch(0);
-  }
-
-#endif // HAS_FANMUX
 
 inline void invalid_extruder_error(const uint8_t e) {
   SERIAL_ECHO_START();