diff --git a/Bootloaders/MassStorage/Lib/SCSI.h b/Bootloaders/MassStorage/Lib/SCSI.h
index d3b0ddd3bbe42496a22aa446aebdd7be2938c272..3529fde6058f0e093d36c127803653178b0a3f92 100644
--- a/Bootloaders/MassStorage/Lib/SCSI.h
+++ b/Bootloaders/MassStorage/Lib/SCSI.h
@@ -55,9 +55,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h
index a8f3b73726e1b5b5646aa5333c6f2fc0df77d4c1..f663baa5c4d36630bc3c7154c7aa22543214d24c 100644
--- a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h
+++ b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h
@@ -56,9 +56,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true
diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.h b/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.h
index 9db10693f635cfeeb8a3e894954168ab58eea4e3..8ccc146ca2b90068fd3b1d5fe384be3622ae3fee 100644
--- a/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.h
+++ b/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.h
@@ -56,9 +56,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
index 754842a02e21fd8a04646b9c9c5214a22e99a1e5..92fbdf362027da87d3e1b5e5aa4d2dce6cbc712f 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
@@ -118,32 +118,32 @@
 		 *
 		 *  \param[in] Buffer  Application buffer to lock
 		 */
-		#define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE
+		#define TCP_APP_CAPTURE_BUFFER(Buffer)       do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; } while (0)
 
 		/** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.
 		 *
 		 *  \param[in] Buffer  Application buffer to release
 		 */
-		#define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE
+		#define TCP_APP_RELEASE_BUFFER(Buffer)       do { Buffer->InUse = false; } while (0)
 
 		/** Application macro: Sends the contents of the given application buffer to the host.
 		 *
 		 *  \param[in] Buffer  Application buffer to send
 		 *  \param[in] Len     Length of data contained in the buffer
 		 */
-		#define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE
+		#define TCP_APP_SEND_BUFFER(Buffer, Len)     do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; } while (0)
 
 		/** Application macro: Clears the application buffer, ready for a packet to be written to it.
 		 *
 		 *  \param[in] Buffer  Application buffer to clear
 		 */
-		#define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE
+		#define TCP_APP_CLEAR_BUFFER(Buffer)         do { Buffer->Ready = false; Buffer->Length = 0; } while (0)
 
 		/** Application macro: Closes an open connection to a host.
 		 *
 		 *  \param[in] Connection  Open TCP connection to close
 		 */
-		#define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE
+		#define TCP_APP_CLOSECONNECTION(Connection)  do { Connection->State = TCP_Connection_Closing;  } while (0)
 
 	/* Enums: */
 		/** Enum for possible TCP port states. */
diff --git a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.h b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.h
index 38cb6a6d54bea813508616cc3e51a760e4dcd22e..d26a82bdeb0489b224474272abad3bc44bd3698a 100644
--- a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.h
+++ b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.h
@@ -56,9 +56,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
index 2b0133fdc05784fb823ab1ec59d2b4b54057fddb..36553bd7b303709bfe23aa0abc7767cd92c42952 100644
--- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
+++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
@@ -57,9 +57,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
index e5bf0f31224f4f37e084ea842b63dfe90b05af31..0d96430bab5f67f2f1a8c34b4523155befe47aa1 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
+++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
@@ -119,32 +119,32 @@
 		 *
 		 *  \param[in] Buffer  Application buffer to lock
 		 */
-		#define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE
+		#define TCP_APP_CAPTURE_BUFFER(Buffer)       do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; } while (0)
 
 		/** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.
 		 *
 		 *  \param[in] Buffer  Application buffer to release
 		 */
-		#define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE
+		#define TCP_APP_RELEASE_BUFFER(Buffer)       do { Buffer->InUse = false; } while (0)
 
 		/** Application macro: Sends the contents of the given application buffer to the host.
 		 *
 		 *  \param[in] Buffer  Application buffer to send
 		 *  \param[in] Len     Length of data contained in the buffer
 		 */
-		#define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE
+		#define TCP_APP_SEND_BUFFER(Buffer, Len)     do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; } while (0)
 
 		/** Application macro: Clears the application buffer, ready for a packet to be written to it.
 		 *
 		 *  \param[in] Buffer  Application buffer to clear
 		 */
-		#define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE
+		#define TCP_APP_CLEAR_BUFFER(Buffer)         do { Buffer->Ready = false; Buffer->Length = 0; } while (0)
 
 		/** Application macro: Closes an open connection to a host.
 		 *
 		 *  \param[in] Connection  Open TCP connection to close
 		 */
-		#define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE
+		#define TCP_APP_CLOSECONNECTION(Connection)  do { Connection->State = TCP_Connection_Closing;  } while (0)
 
 	/* Enums: */
 		/** Enum for possible TCP port states. */
diff --git a/LUFA/Common/ArchitectureSpecific.h b/LUFA/Common/ArchitectureSpecific.h
index e7608d4cdaf1b9d5af5582a400377abb460f3f58..292e27b37f95b22128c48c561784b10014364ccf 100644
--- a/LUFA/Common/ArchitectureSpecific.h
+++ b/LUFA/Common/ArchitectureSpecific.h
@@ -70,18 +70,18 @@
 					 *
 					 *  \note This macro is not available for all architectures.
 					 */
-					#define JTAG_ENABLE()                  MACROS{                                       \
-																	__asm__ __volatile__ (               \
-																	"in __tmp_reg__,__SREG__" "\n\t"     \
-																	"cli" "\n\t"                         \
-																	"out %1, %0" "\n\t"                  \
-																	"out __SREG__, __tmp_reg__" "\n\t"   \
-																	"out %1, %0" "\n\t"                  \
-																	:                                    \
-																	: "r" (MCUCR & ~(1 << JTD)),         \
-																	  "M" (_SFR_IO_ADDR(MCUCR))          \
-																	: "r0");                             \
-															}MACROE
+					#define JTAG_ENABLE()               do {                                     \
+					                                        __asm__ __volatile__ (               \
+					                                        "in __tmp_reg__,__SREG__" "\n\t"     \
+					                                        "cli" "\n\t"                         \
+					                                        "out %1, %0" "\n\t"                  \
+					                                        "out __SREG__, __tmp_reg__" "\n\t"   \
+					                                        "out %1, %0" "\n\t"                  \
+					                                        :                                    \
+					                                        : "r" (MCUCR & ~(1 << JTD)),         \
+					                                          "M" (_SFR_IO_ADDR(MCUCR))          \
+					                                        : "r0");                             \
+					                                    } while (0)
 
 					/** Disables the AVR's JTAG bus in software, until a system reset. This will override the current JTAG
 					 *  status as set by the JTAGEN fuse, disabling JTAG debugging and reverting the JTAG pins back to GPIO
@@ -89,18 +89,18 @@
 					 *
 					 *  \note This macro is not available for all architectures.
 					 */
-					#define JTAG_DISABLE()                  MACROS{                                      \
-																	__asm__ __volatile__ (               \
-																	"in __tmp_reg__,__SREG__" "\n\t"     \
-																	"cli" "\n\t"                         \
-																	"out %1, %0" "\n\t"                  \
-																	"out __SREG__, __tmp_reg__" "\n\t"   \
-																	"out %1, %0" "\n\t"                  \
-																	:                                    \
-																	: "r" (MCUCR | (1 << JTD)),          \
-																	  "M" (_SFR_IO_ADDR(MCUCR))          \
-																	: "r0");                             \
-															}MACROE
+					#define JTAG_DISABLE()              do {                                     \
+					                                        __asm__ __volatile__ (               \
+					                                        "in __tmp_reg__,__SREG__" "\n\t"     \
+					                                        "cli" "\n\t"                         \
+					                                        "out %1, %0" "\n\t"                  \
+					                                        "out __SREG__, __tmp_reg__" "\n\t"   \
+					                                        "out %1, %0" "\n\t"                  \
+					                                        :                                    \
+					                                        : "r" (MCUCR | (1 << JTD)),          \
+					                                          "M" (_SFR_IO_ADDR(MCUCR))          \
+					                                        : "r0");                             \
+					                                    } while (0)
 				#endif
 
 				/** Defines a volatile \c NOP statement which cannot be optimized out by the compiler, and thus can always
@@ -124,7 +124,10 @@
 				 *
 				 *  \param[in] Condition  Condition that will be evaluated.
 				*/
-				#define JTAG_ASSERT(Condition)          MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
+				#define JTAG_ASSERT(Condition)          do {                       \
+				                                            if (!(Condition))      \
+				                                              JTAG_DEBUG_BREAK();  \
+				                                        } while (0)
 
 				/** Macro for testing condition \c "x" and writing debug data to the stdout stream if \c false. The stdout stream
 				 *  must be pre-initialized before this macro is run and linked to an output device, such as the microcontroller's
@@ -136,17 +139,17 @@
 				 *
 				 *  \param[in] Condition  Condition that will be evaluated,
 				 */
-				#define STDOUT_ASSERT(Condition)        MACROS{ if (!(Condition)) {                                     \
-				                                                     printf_P(PSTR("%s: Function \"%s\", Line %d: "     \
-				                                                                   "Assertion \"%s\" failed.\r\n"),     \
-				                                                                   __FILE__, __func__, __LINE__, #Condition); } }MACROE
+				#define STDOUT_ASSERT(Condition)        do {                                                           \
+				                                            if (!(Condition))                                          \
+				                                              printf_P(PSTR("%s: Function \"%s\", Line %d: "           \
+				                                                            "Assertion \"%s\" failed.\r\n"),           \
+				                                                            __FILE__, __func__, __LINE__, #Condition); \
+				                                        } while (0)
 
 				#if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
-					/** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
-					 *  avr-libc \c pgm_read_word() macro with a \c void* cast, so that its value can be assigned directly
-					 *  to a pointer variable or used in pointer arithmetic without further casting in C. In a future
-					 *  avr-libc distribution this will be part of the standard API and will be implemented in a more formal
-					 *  manner.
+					/** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is a wrapper for the avr-libc
+					 *  \c pgm_read_word() macro with a \c void* cast, so that its value can be assigned directly to a
+					 *  pointer variable or used in pointer arithmetic without further casting in C.
 					 *
 					 *  \note This macro is not available for all architectures.
 					 *
@@ -154,16 +157,21 @@
 					 *
 					 *  \return Pointer retrieved from PROGMEM space.
 					 */
-					#define pgm_read_ptr(Address)        (void*)pgm_read_word(Address)
+					#define pgm_read_ptr(Address)       (void*)pgm_read_word(Address)
 				#endif
 			#elif (ARCH == ARCH_UC3)
 				#define JTAG_DEBUG_POINT()              __asm__ __volatile__ ("nop" ::)
 				#define JTAG_DEBUG_BREAK()              __asm__ __volatile__ ("breakpoint" ::)
-				#define JTAG_ASSERT(Condition)          MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
-				#define STDOUT_ASSERT(Condition)        MACROS{ if (!(Condition)) {                              \
-				                                                     printf("%s: Function \"%s\", Line %d: "     \
-				                                                            "Assertion \"%s\" failed.\r\n"),     \
-				                                                            __FILE__, __func__, __LINE__, #Condition); } }MACROE
+				#define JTAG_ASSERT(Condition)          do {                                                    \
+				                                            if (!(Condition))                                   \
+				                                              JTAG_DEBUG_BREAK();                               \
+				                                        } while (0)
+				#define STDOUT_ASSERT(Condition)        do {                                                    \
+				                                            if (!(Condition))                                   \
+				                                              printf("%s: Function \"%s\", Line %d: "           \
+				                                                     "Assertion \"%s\" failed.\r\n",            \
+				                                                     __FILE__, __func__, __LINE__, #Condition); \
+				                                        } while (0)
 			#endif
 
 	/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h
index 38afb85227ab279b2cf3bf097278fb85dff14b18..3e12e4f33fb145a559749016a0f66b6d4ff3544b 100644
--- a/LUFA/Common/Common.h
+++ b/LUFA/Common/Common.h
@@ -145,19 +145,11 @@
 
 	/* Public Interface - May be used in end-application: */
 		/* Macros: */
-			/** Macro for encasing other multi-statement macros. This should be used along with an opening brace
-			 *  before the start of any multi-statement macro, so that the macros contents as a whole are treated
-			 *  as a discrete block and not as a list of separate statements which may cause problems when used as
-			 *  a block (such as inline \c if statements).
-			 */
-			#define MACROS                  do
-
-			/** Macro for encasing other multi-statement macros. This should be used along with a preceding closing
-			 *  brace at the end of any multi-statement macro, so that the macros contents as a whole are treated
-			 *  as a discrete block and not as a list of separate statements which may cause problems when used as
-			 *  a block (such as inline \c if statements).
-			 */
-			#define MACROE                  while (0)
+			#if !defined(__DOXYGEN__)
+				// Obsolete, retained for compatibility with user code
+				#define MACROS                  do
+				#define MACROE                  while (0)
+			#endif
 
 			/** Convenience macro to determine the larger of two values.
 			 *
diff --git a/LUFA/Drivers/USB/Core/USBTask.h b/LUFA/Drivers/USB/Core/USBTask.h
index 7c0917fc19ac1b0a3937d647d854483be65263b7..7205ea1da90ad208cdf9db69e0886d80aa9bceaf 100644
--- a/LUFA/Drivers/USB/Core/USBTask.h
+++ b/LUFA/Drivers/USB/Core/USBTask.h
@@ -186,9 +186,9 @@
 			#endif
 
 		/* Macros: */
-			#define HOST_TASK_NONBLOCK_WAIT(Duration, NextState) MACROS{ USB_HostState   = HOST_STATE_WaitForDevice; \
-			                                                             WaitMSRemaining = (Duration);               \
-			                                                             PostWaitState   = (NextState);              }MACROE
+			#define HOST_TASK_NONBLOCK_WAIT(Duration, NextState) do { USB_HostState   = HOST_STATE_WaitForDevice; \
+			                                                          WaitMSRemaining = (Duration);               \
+			                                                          PostWaitState   = (NextState);              } while (0)
 	#endif
 
 	/* Disable C linkage for C++ Compilers: */
diff --git a/Projects/AVRISP-MKII/Config/AppConfig.h b/Projects/AVRISP-MKII/Config/AppConfig.h
index 0664806996d6046dbbfe40998f2f545e254810bf..979b354c44fea50c65ae4a2f5817e4bd40a711e8 100644
--- a/Projects/AVRISP-MKII/Config/AppConfig.h
+++ b/Projects/AVRISP-MKII/Config/AppConfig.h
@@ -63,7 +63,7 @@
 //	#define XCK_RESCUE_CLOCK_ENABLE
 //	#define INVERTED_ISP_MISO
 
-//	#define LIBUSB_DRIVER_COMPAT
+	#define LIBUSB_DRIVER_COMPAT
 //	#define RESET_TOGGLES_LIBUSB_COMPAT
 //	#define FIRMWARE_VERSION_MINOR     0x11
 
diff --git a/Projects/AVRISP-MKII/makefile b/Projects/AVRISP-MKII/makefile
index bf6ca316f1f6b615c92b4910fa162f0f1d5119d2..c89648d5a4175b0ac8507d311c879cce8a159f61 100644
--- a/Projects/AVRISP-MKII/makefile
+++ b/Projects/AVRISP-MKII/makefile
@@ -11,10 +11,10 @@
 
 # Run "make help" for target help.
 
-MCU          = at90usb162
+MCU          = at90usb1287
 ARCH         = AVR8
-BOARD        = USBTINYMKII
-F_CPU        = 16000000
+BOARD        = USBKEY
+F_CPU        = 8000000
 F_USB        = $(F_CPU)
 OPTIMIZATION = s
 TARGET       = AVRISP-MKII
diff --git a/Projects/TempDataLogger/Lib/SCSI.h b/Projects/TempDataLogger/Lib/SCSI.h
index 1a01a55ea047123d7aaa3d34cad0d4a03887aaf8..ec9c3e2a4f9ec1d26207463cfafd9e87d2274156 100644
--- a/Projects/TempDataLogger/Lib/SCSI.h
+++ b/Projects/TempDataLogger/Lib/SCSI.h
@@ -56,9 +56,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true
diff --git a/Projects/Webserver/Lib/SCSI.h b/Projects/Webserver/Lib/SCSI.h
index b4eca1dd5c3dfedfe548263458dea6437c291fe9..53274dd892113b09ec7a8788b86d952433316966 100644
--- a/Projects/Webserver/Lib/SCSI.h
+++ b/Projects/Webserver/Lib/SCSI.h
@@ -54,9 +54,9 @@
 		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
 		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
 		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  MACROS{ SenseData.SenseKey                 = (Key);   \
-		                                                   SenseData.AdditionalSenseCode      = (Acode); \
-		                                                   SenseData.AdditionalSenseQualifier = (Aqual); }MACROE
+		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
+		                                                SenseData.AdditionalSenseCode      = (Acode); \
+		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
 
 		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
 		#define DATA_READ           true