diff --git a/include/mpu_wrappers.h b/include/mpu_wrappers.h
index c44184d..abdc74a 100644
--- a/include/mpu_wrappers.h
+++ b/include/mpu_wrappers.h
@@ -168,40 +168,40 @@
 
     #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
 
-        /* Ensure API functions go in the privileged execution section. */
+/* Ensure API functions go in the privileged execution section. */
         #define PRIVILEGED_FUNCTION     __attribute__( ( section( "privileged_functions" ) ) )
         #define PRIVILEGED_DATA         __attribute__( ( section( "privileged_data" ) ) )
         #define FREERTOS_SYSTEM_CALL    __attribute__( ( section( "freertos_system_calls" ) ) )
 
-        /**
-         * @brief Calls the port specific code to raise the privilege.
-         *
-         * Sets xRunningPrivileged to pdFALSE if privilege was raised, else sets
-         * it to pdTRUE.
-         */
-        #define xPortRaisePrivilege( xRunningPrivileged )                      \
-        {                                                                      \
-            /* Check whether the processor is already privileged. */           \
-            xRunningPrivileged = portIS_PRIVILEGED();                          \
-                                                                               \
-            /* If the processor is not already privileged, raise privilege. */ \
-            if( xRunningPrivileged == pdFALSE )                                \
-            {                                                                  \
-                portRAISE_PRIVILEGE();                                         \
-            }                                                                  \
-        }
+/**
+ * @brief Calls the port specific code to raise the privilege.
+ *
+ * Sets xRunningPrivileged to pdFALSE if privilege was raised, else sets
+ * it to pdTRUE.
+ */
+        #define xPortRaisePrivilege( xRunningPrivileged )                  \
+    {                                                                      \
+        /* Check whether the processor is already privileged. */           \
+        xRunningPrivileged = portIS_PRIVILEGED();                          \
+                                                                           \
+        /* If the processor is not already privileged, raise privilege. */ \
+        if( xRunningPrivileged == pdFALSE )                                \
+        {                                                                  \
+            portRAISE_PRIVILEGE();                                         \
+        }                                                                  \
+    }
 
-        /**
-         * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
-         * code to reset the privilege, otherwise does nothing.
-         */
-        #define vPortResetPrivilege( xRunningPrivileged )   \
-        {                                                   \
-            if( xRunningPrivileged == pdFALSE )             \
-            {                                               \
-                portRESET_PRIVILEGE();                      \
-            }                                               \
-        }
+/**
+ * @brief If xRunningPrivileged is not pdTRUE, calls the port specific
+ * code to reset the privilege, otherwise does nothing.
+ */
+        #define vPortResetPrivilege( xRunningPrivileged ) \
+    {                                                     \
+        if( xRunningPrivileged == pdFALSE )               \
+        {                                                 \
+            portRESET_PRIVILEGE();                        \
+        }                                                 \
+    }
 
     #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
 
