diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 875795f7df..abe27d32b3 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1446,16 +1446,20 @@ void process_commands()
     }
     break;
     
-    #if defined(LARGE_FLASH) && LARGE_FLASH == true && defined(BEEPER) && BEEPER > -1
+    #if defined(LARGE_FLASH) && LARGE_FLASH == true
     case 300: // M300
     {
-      int beepS = 1;
+      int beepS = 400;
       int beepP = 1000;
       if(code_seen('S')) beepS = code_value();
       if(code_seen('P')) beepP = code_value();
-      tone(BEEPER, beepS);
-      delay(beepP);
-      noTone(BEEPER);
+      #if defined(BEEPER) && BEEPER > -1
+        tone(BEEPER, beepS);
+        delay(beepP);
+        noTone(BEEPER);
+      #elif defined(ULTRALCD)
+        lcd_buzz(beepS, beepP);
+      #endif
     }
     break;
     #endif // M300
@@ -1672,17 +1676,19 @@ void process_commands()
           manage_inactivity();
           lcd_update();
           
-          #if BEEPER > -1
           if(cnt==0)
           {
+          #if defined(BEEPER) && BEEPER > -1
             SET_OUTPUT(BEEPER);
             
             WRITE(BEEPER,HIGH);
             delay(3);
             WRITE(BEEPER,LOW);
             delay(3);
-          }
+          #else 
+            lcd_buzz(1000/6,100);
           #endif
+          }
         }
         
         //return to normal
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index dafd2502aa..2dae90a5d4 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -946,6 +946,13 @@ void lcd_buttons_update()
     lastEncoderBits = enc;
 }
 
+void lcd_buzz(long duration, uint16_t freq)
+{ 
+#ifdef LCD_USE_I2C_BUZZER
+  lcd.buzz(duration,freq);
+#endif   
+}
+
 bool lcd_clicked() 
 { 
   return LCD_CLICKED;
diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h
index d84c948bbf..ed9c10978a 100644
--- a/Marlin/ultralcd.h
+++ b/Marlin/ultralcd.h
@@ -34,6 +34,8 @@
   extern int absPreheatHPBTemp;
   extern int absPreheatFanSpeed;
     
+  void lcd_buzz(long duration,uint16_t freq);
+
   bool lcd_clicked();
 
 #else //no lcd
@@ -42,6 +44,7 @@
   FORCE_INLINE void lcd_setstatus(const char* message) {}
   FORCE_INLINE void lcd_buttons_update() {}
   FORCE_INLINE void lcd_reset_alert_level() {}
+  FORCE_INLINE void lcd_buzz(long duration,uint16_t freq) {}
 
   #define LCD_MESSAGEPGM(x) 
   #define LCD_ALERTMESSAGEPGM(x)