diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 75dcc3cc4f..bd0ac931fb 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -354,8 +354,8 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
 //The LCD is attached via an I2C port expander.
 //#define LCD_I2C
 #ifdef LCD_I2C
-  // Port Expander Type - PCF8574 or MCP23008
-  #define LCD_I2C_TYPE PCF8574
+  // Port Expander Type - 0=PCF8574 or 1=MCP23008
+  #define LCD_I2C_TYPE 0
   // I2C Address of the port expander
   #define LCD_I2C_ADDRESS 0x20
 #endif
diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h
index 1d19b7718d..526dd8df07 100644
--- a/Marlin/ultralcd_implementation_hitachi_HD44780.h
+++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h
@@ -7,11 +7,16 @@
 **/
 
 #if LANGUAGE_CHOICE == 6
-#include "LiquidCrystalRus.h"
-#define LCD_CLASS LiquidCrystalRus
+  #include "LiquidCrystalRus.h"
+  #define LCD_CLASS LiquidCrystalRus
 #else
-#include <LiquidCrystal.h>
-#define LCD_CLASS LiquidCrystal
+  #ifdef LCD_I2C
+    #include <LiquidCrystal_I2C.h>
+    #define LCD_CLASS LiquidCrystal_I2C
+  #else
+    #include <LiquidCrystal.h>
+    #define LCD_CLASS LiquidCrystal
+  #endif
 #endif
 
 /* Custom characters defined in the first 8 characters of the LCD */
@@ -25,7 +30,12 @@
 #define LCD_STR_CLOCK       "\x07"
 #define LCD_STR_ARROW_RIGHT "\x7E"  /* from the default character set */
 
-LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7);  //RS,Enable,D4,D5,D6,D7
+#ifdef LCD_I2C
+  LCD_CLASS lcd(LCD_I2C_ADDRESS, LCD_WIDTH, LCD_HEIGHT, LCD_I2C_TYPE);  //address, columns, rows, type
+#else
+  LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7);  //RS,Enable,D4,D5,D6,D7
+#endif
+
 static void lcd_implementation_init()
 {
     byte bedTemp[8] =
@@ -111,7 +121,11 @@ static void lcd_implementation_init()
         B00000,
         B00000
     }; //thanks Sonny Mounicou
-    lcd.begin(LCD_WIDTH, LCD_HEIGHT);
+    #ifdef LCD_I2C
+        lcd.init();
+    #else
+        lcd.begin(LCD_WIDTH, LCD_HEIGHT);
+    #endif
     lcd.createChar(LCD_STR_BEDTEMP[0], bedTemp);
     lcd.createChar(LCD_STR_DEGREE[0], degree);
     lcd.createChar(LCD_STR_THERMOMETER[0], thermometer);