diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp
index 9dc0a8a..10517c9 100644
--- a/src/android/AudioPlayer_to_android.cpp
+++ b/src/android/AudioPlayer_to_android.cpp
@@ -1514,15 +1514,15 @@
     // no need to check the buffer queue size, application side
     // double-buffering (and more) is not a requirement for using fast tracks
 
-    // Check a blacklist of interfaces that are incompatible with fast tracks.
-    // The alternative, to check a whitelist of compatible interfaces, is
+    // Check a denylist of interfaces that are incompatible with fast tracks.
+    // The alternative, to check a allowlist of compatible interfaces, is
     // more maintainable but is too slow.  As a compromise, in a debug build
     // we use both methods and warn if they produce different results.
-    // In release builds, we only use the blacklist method.
-    // If a blacklisted interface is added after realization using
+    // In release builds, we only use the denylist method.
+    // If a denylisted interface is added after realization using
     // DynamicInterfaceManagement::AddInterface,
     // then this won't be detected but the interface will be ineffective.
-    static const unsigned blacklist[] = {
+    static const unsigned denylist[] = {
         MPH_BASSBOOST,
         MPH_EFFECTSEND,
         MPH_ENVIRONMENTALREVERB,
@@ -1532,10 +1532,10 @@
         MPH_VIRTUALIZER,
         MPH_ANDROIDEFFECT,
         MPH_ANDROIDEFFECTSEND,
-        // FIXME The problem with a blacklist is remembering to add new interfaces here
+        // FIXME The problem with a denylist is remembering to add new interfaces here
     };
-    for (unsigned i = 0; i < sizeof(blacklist)/sizeof(blacklist[0]); ++i) {
-        if (IsInterfaceInitialized(&pAudioPlayer->mObject, blacklist[i])) {
+    for (unsigned i = 0; i < sizeof(denylist)/sizeof(denylist[0]); ++i) {
+        if (IsInterfaceInitialized(&pAudioPlayer->mObject, denylist[i])) {
             //TODO: query effect for EFFECT_FLAG_HW_ACC_xx flag to refine mode
             allowedModes &=
                     ~(ANDROID_PERFORMANCE_MODE_LATENCY|ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS);
@@ -1543,11 +1543,11 @@
         }
     }
 #if LOG_NDEBUG == 0
-    bool blacklistResult = (
+    bool denylistResult = (
             (allowedModes &
                 (ANDROID_PERFORMANCE_MODE_LATENCY|ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS)) != 0);
-    bool whitelistResult = true;
-    static const unsigned whitelist[] = {
+    bool allowlistResult = true;
+    static const unsigned allowlist[] = {
         MPH_BUFFERQUEUE,
         MPH_DYNAMICINTERFACEMANAGEMENT,
         MPH_METADATAEXTRACTION,
@@ -1561,19 +1561,19 @@
         MPH_ANDROIDBUFFERQUEUESOURCE,
     };
     for (unsigned mph = MPH_MIN; mph < MPH_MAX; ++mph) {
-        for (unsigned i = 0; i < sizeof(whitelist)/sizeof(whitelist[0]); ++i) {
-            if (mph == whitelist[i]) {
+        for (unsigned i = 0; i < sizeof(allowlist)/sizeof(allowlist[0]); ++i) {
+            if (mph == allowlist[i]) {
                 goto compatible;
             }
         }
         if (IsInterfaceInitialized(&pAudioPlayer->mObject, mph)) {
-            whitelistResult = false;
+            allowlistResult = false;
             break;
         }
 compatible: ;
     }
-    if (whitelistResult != blacklistResult) {
-        SL_LOGW("whitelistResult != blacklistResult");
+    if (allowlistResult != denylistResult) {
+        SL_LOGW("allowlistResult != denylistResult");
     }
 #endif
     if (pAudioPlayer->mPerformanceMode == ANDROID_PERFORMANCE_MODE_LATENCY) {
diff --git a/src/android/AudioRecorder_to_android.cpp b/src/android/AudioRecorder_to_android.cpp
index 2595112..b1fd5ef 100644
--- a/src/android/AudioRecorder_to_android.cpp
+++ b/src/android/AudioRecorder_to_android.cpp
@@ -515,32 +515,32 @@
     // no need to check the buffer queue size, application side
     // double-buffering (and more) is not a requirement for using fast tracks
 
-    // Check a blacklist of interfaces that are incompatible with fast tracks.
-    // The alternative, to check a whitelist of compatible interfaces, is
+    // Check a denylist of interfaces that are incompatible with fast tracks.
+    // The alternative, to check a allowlist of compatible interfaces, is
     // more maintainable but is too slow.  As a compromise, in a debug build
     // we use both methods and warn if they produce different results.
-    // In release builds, we only use the blacklist method.
-    // If a blacklisted interface is added after realization using
+    // In release builds, we only use the denylist method.
+    // If a denylisted interface is added after realization using
     // DynamicInterfaceManagement::AddInterface,
     // then this won't be detected but the interface will be ineffective.
-    static const unsigned blacklist[] = {
+    static const unsigned denylist[] = {
         MPH_ANDROIDACOUSTICECHOCANCELLATION,
         MPH_ANDROIDAUTOMATICGAINCONTROL,
         MPH_ANDROIDNOISESUPPRESSION,
         MPH_ANDROIDEFFECT,
-        // FIXME The problem with a blacklist is remembering to add new interfaces here
+        // FIXME The problem with a denylist is remembering to add new interfaces here
     };
 
-    for (unsigned i = 0; i < sizeof(blacklist)/sizeof(blacklist[0]); ++i) {
-        if (IsInterfaceInitialized(&ar->mObject, blacklist[i])) {
+    for (unsigned i = 0; i < sizeof(denylist)/sizeof(denylist[0]); ++i) {
+        if (IsInterfaceInitialized(&ar->mObject, denylist[i])) {
             uint32_t flags = 0;
 
             allowedModes &= ~ANDROID_PERFORMANCE_MODE_LATENCY;
 
             // if generic effect interface is used we don't know which effect will be used and
             // disable all low latency performance modes
-            if (blacklist[i] != MPH_ANDROIDEFFECT) {
-                switch (blacklist[i]) {
+            if (denylist[i] != MPH_ANDROIDEFFECT) {
+                switch (denylist[i]) {
                 case MPH_ANDROIDACOUSTICECHOCANCELLATION:
                     SL_LOGV("checkAndSetPerformanceModePre found AEC name %s",
                             ar->mAcousticEchoCancellation.mAECDescriptor.name);
@@ -567,11 +567,11 @@
         }
     }
 #if LOG_NDEBUG == 0
-    bool blacklistResult = (
+    bool denylistResult = (
             (allowedModes &
                 (ANDROID_PERFORMANCE_MODE_LATENCY|ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS)) != 0);
-    bool whitelistResult = true;
-    static const unsigned whitelist[] = {
+    bool allowlistResult = true;
+    static const unsigned allowlist[] = {
         MPH_BUFFERQUEUE,
         MPH_DYNAMICINTERFACEMANAGEMENT,
         MPH_OBJECT,
@@ -580,19 +580,19 @@
         MPH_ANDROIDSIMPLEBUFFERQUEUE,
     };
     for (unsigned mph = MPH_MIN; mph < MPH_MAX; ++mph) {
-        for (unsigned i = 0; i < sizeof(whitelist)/sizeof(whitelist[0]); ++i) {
-            if (mph == whitelist[i]) {
+        for (unsigned i = 0; i < sizeof(allowlist)/sizeof(allowlist[0]); ++i) {
+            if (mph == allowlist[i]) {
                 goto compatible;
             }
         }
         if (IsInterfaceInitialized(&ar->mObject, mph)) {
-            whitelistResult = false;
+            allowlistResult = false;
             break;
         }
 compatible: ;
     }
-    if (whitelistResult != blacklistResult) {
-        SL_LOGW("whitelistResult != blacklistResult");
+    if (allowlistResult != denylistResult) {
+        SL_LOGW("allowlistResult != denylistResult");
     }
 #endif
     if (ar->mPerformanceMode == ANDROID_PERFORMANCE_MODE_LATENCY) {
diff --git a/src/itfstruct.h b/src/itfstruct.h
index a717f46..ab8a4d0 100644
--- a/src/itfstruct.h
+++ b/src/itfstruct.h
@@ -69,7 +69,7 @@
     const struct SL3DCommitItf_ *mItf;
     IObject *mThis;
     SLboolean mDeferred;
-    SLuint32 mGeneration;   // incremented each master clock cycle
+    SLuint32 mGeneration;   // incremented each main clock cycle
     SLuint32 mWaiting;      // number of threads waiting in Commit
 } I3DCommit;
 
