diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h
index d8012976c47213f1598a3d816a7380f826b966db..e0915ad64e147efa86f40319d0a39c75f02a69af 100644
--- a/Marlin/Marlin.h
+++ b/Marlin/Marlin.h
@@ -38,6 +38,23 @@
 #include "HardwareSerial.h"
 #endif
 
+
+#ifdef __GNUC__
+#ifndef GCC_VERSION
+#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#endif
+#if GCC_VERSION < 40602 // Test for GCC < 4.6.2
+#ifdef PROGMEM
+#undef PROGMEM
+#define PROGMEM __attribute__((section(".progmem.data"))) // Workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734#c4
+#ifdef PSTR
+#undef PSTR
+#define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];})) // Copied from pgmspace.h in avr-libc source
+#endif
+#endif
+#endif
+#endif
+
 #include "MarlinSerial.h"
 
 #ifndef cbi
@@ -269,4 +286,4 @@ extern void digipot_i2c_init();
 
 #endif
 
-extern void calculate_volumetric_multipliers();
\ No newline at end of file
+extern void calculate_volumetric_multipliers();