diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp
index e361dcb..de27cae 100644
--- a/src/android/AudioPlayer_to_android.cpp
+++ b/src/android/AudioPlayer_to_android.cpp
@@ -117,9 +117,9 @@
          case ANDROID_UNINITIALIZED:
              *pObjState = ANDROID_PREPARING;
              ap->prepare();
-             // intended fall through
+             FALLTHROUGH_INTENDED;
          case ANDROID_PREPARING:
-             // intended fall through
+             FALLTHROUGH_INTENDED;
          case ANDROID_READY:
              ap->play();
              break;
@@ -1064,6 +1064,7 @@
             // checkDataFormat() already checked representation
             df_representation = &df_pcm->representation;
             } // SL_ANDROID_DATAFORMAT_PCM_EX - fall through to next test.
+            FALLTHROUGH_INTENDED;
         case SL_DATAFORMAT_PCM: {
             // checkDataFormat() already did generic checks, now do the Android-specific checks
             const SLDataFormat_PCM *df_pcm = (const SLDataFormat_PCM *) pAudioSrc->pFormat;
@@ -1360,6 +1361,7 @@
     case android::AudioTrack::EVENT_LOOP_END:
     case android::AudioTrack::EVENT_STREAM_END:
         // These are unexpected so fall through
+        FALLTHROUGH_INTENDED;
     default:
         // FIXME where does the notification of SL_PLAYEVENT_HEADMOVING fit?
         SL_LOGE("Encountered unknown AudioTrack event %d for CAudioPlayer %p", event,
@@ -1598,7 +1600,7 @@
             break;
         }
         pAudioPlayer->mPerformanceMode = ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS;
-        /* FALL THROUGH */
+        FALLTHROUGH_INTENDED;
     case ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS:
         if ((flags & AUDIO_OUTPUT_FLAG_FAST) == 0) {
             pAudioPlayer->mPerformanceMode = ANDROID_PERFORMANCE_MODE_NONE;
@@ -1960,16 +1962,22 @@
     SL_LOGV("android_audioPlayer_destroy(%p)", pAudioPlayer);
     switch (pAudioPlayer->mAndroidObjType) {
 
-    case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE: // intended fall-throughk, both types of players
-                                           //   use the TrackPlayerBase for playback
     case AUDIOPLAYER_FROM_URIFD:
+        if (pAudioPlayer->mObject.mEngine->mAudioManager != 0) {
+            pAudioPlayer->mObject.mEngine->mAudioManager->releasePlayer(pAudioPlayer->mPIId);
+        }
+        // intended fall-throughk, both types of players
+        // use the TrackPlayerBase for playback
+        FALLTHROUGH_INTENDED;
+    case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:
         if (pAudioPlayer->mTrackPlayer != 0) {
             pAudioPlayer->mTrackPlayer->destroy();
         }
-
-        // intended fall-through
-    case AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:    // intended fall-through
-    case AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE: // intended fall-through
+        FALLTHROUGH_INTENDED;
+    case AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
+    case AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
     case AUDIOPLAYER_FROM_ADTS_ABQ_TO_PCM_BUFFERQUEUE:
         pAudioPlayer->mAPlayer.clear();
         break;
@@ -2262,8 +2270,10 @@
         }
         break;
 
-    case AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:     // intended fall-through
-    case AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE:  // intended fall-through
+    case AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
+    case AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
     case AUDIOPLAYER_FROM_ADTS_ABQ_TO_PCM_BUFFERQUEUE:
         // FIXME report and use the return code to the lock mechanism, which is where play state
         //   changes are updated (see object_unlock_exclusive_attributes())
@@ -2337,7 +2347,8 @@
     CAudioPlayer *ap = (CAudioPlayer *)pPlayItf->mThis;
     switch (ap->mAndroidObjType) {
 
-      case AUDIOPLAYER_FROM_URIFD:  // intended fall-through
+      case AUDIOPLAYER_FROM_URIFD:
+        FALLTHROUGH_INTENDED;
       case AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE: {
         int32_t durationMsec = ANDROID_UNKNOWN_TIME;
         if (ap->mAPlayer != 0) {
@@ -2522,6 +2533,7 @@
       } break;
     case AUDIOPLAYER_FROM_ADTS_ABQ_TO_PCM_BUFFERQUEUE:
       // nothing to do here, fall through
+      FALLTHROUGH_INTENDED;
     default:
       break;
     }
diff --git a/src/android/AudioRecorder_to_android.cpp b/src/android/AudioRecorder_to_android.cpp
index 38e50bf..4e2f31d 100644
--- a/src/android/AudioRecorder_to_android.cpp
+++ b/src/android/AudioRecorder_to_android.cpp
@@ -245,6 +245,7 @@
             // checkDataFormat() already checked representation
             df_representation = &df_pcm->representation;
         } // SL_ANDROID_DATAFORMAT_PCM_EX - fall through to next test.
+            FALLTHROUGH_INTENDED;
         case SL_DATAFORMAT_PCM: {
             const SLDataFormat_PCM *df_pcm = (const SLDataFormat_PCM *) pAudioSnk->pFormat;
             // checkDataFormat already checked sample rate, channels, and mask
@@ -618,7 +619,7 @@
             break;
         }
         ar->mPerformanceMode = ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS;
-        /* FALL THROUGH */
+        FALLTHROUGH_INTENDED;
     case ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS:
         if ((flags & AUDIO_INPUT_FLAG_FAST) == 0) {
             ar->mPerformanceMode = ANDROID_PERFORMANCE_MODE_NONE;
diff --git a/src/android/MediaPlayer_to_android.cpp b/src/android/MediaPlayer_to_android.cpp
index 7d8d1af..5b150f4 100644
--- a/src/android/MediaPlayer_to_android.cpp
+++ b/src/android/MediaPlayer_to_android.cpp
@@ -334,7 +334,8 @@
         }
     } break;
 
-    case XA_DATALOCATOR_URI: // intended fall-through
+    case XA_DATALOCATOR_URI:
+        FALLTHROUGH_INTENDED;
     case XA_DATALOCATOR_ANDROIDFD:
         break;
 
@@ -378,11 +379,13 @@
     case XA_DATALOCATOR_ANDROIDBUFFERQUEUE:
         mp->mAndroidObjType = AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE;
         break;
-    case XA_DATALOCATOR_URI: // intended fall-through
+    case XA_DATALOCATOR_URI:
+        FALLTHROUGH_INTENDED;
     case SL_DATALOCATOR_ANDROIDFD:
         mp->mAndroidObjType = AUDIOVIDEOPLAYER_FROM_URIFD;
         break;
-    case XA_DATALOCATOR_ADDRESS: // intended fall-through
+    case XA_DATALOCATOR_ADDRESS:
+        FALLTHROUGH_INTENDED;
     default:
         mp->mAndroidObjType = INVALID_TYPE;
         SL_LOGE("Unable to create MediaPlayer for data source locator 0x%x", sourceLocator);
@@ -446,7 +449,8 @@
         }
         }
         break;
-    case INVALID_TYPE: // intended fall-through
+    case INVALID_TYPE:
+        FALLTHROUGH_INTENDED;
     default:
         SL_LOGE("Unable to realize MediaPlayer, invalid internal Android object type");
         result = XA_RESULT_PARAMETER_INVALID;
@@ -534,7 +538,8 @@
         }
     } break;
 
-    case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE: // intended fall-through
+    case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
     default:
         *pDurMsec = XA_TIME_UNKNOWN;
         break;
@@ -551,7 +556,8 @@
 
     switch (avp->mAndroidObjType) {
 
-    case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE: // intended fall-through
+    case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
     case AUDIOVIDEOPLAYER_FROM_URIFD: {
         int pos = ANDROID_UNKNOWN_TIME;
         if (avp->mAVPlayer != 0) {
@@ -631,9 +637,9 @@
          case ANDROID_UNINITIALIZED:
              *pObjState = ANDROID_PREPARING;
              gp->prepare();
-             // intended fall through
+             FALLTHROUGH_INTENDED;
          case ANDROID_PREPARING:
-             // intended fall through
+             FALLTHROUGH_INTENDED;
          case ANDROID_READY:
              gp->play();
              break;
@@ -663,7 +669,8 @@
             mp->mAVPlayer->seek(posMsec);
         }
         break;
-      case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE: // intended fall-through
+      case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
       default: {
           result = XA_RESULT_FEATURE_UNSUPPORTED;
       }
@@ -683,7 +690,8 @@
             mp->mAVPlayer->loop(loopEnable);
         }
         break;
-      case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE: // intended fall-through
+      case AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:
+        FALLTHROUGH_INTENDED;
       default: {
           result = XA_RESULT_FEATURE_UNSUPPORTED;
       }
@@ -746,7 +754,7 @@
             result = SL_RESULT_SUCCESS;
             } break;
         case NATIVE_WINDOW_FRAMEBUFFER:              // FramebufferNativeWindow
-            // fall through
+            FALLTHROUGH_INTENDED;
         default:
             SL_LOGE("ANativeWindow * %p has unknown or unsupported concrete type %d",
                     nativeWindow, value);
diff --git a/src/android/android_GenericPlayer.cpp b/src/android/android_GenericPlayer.cpp
index 3a8960c..b3afc1b 100644
--- a/src/android/android_GenericPlayer.cpp
+++ b/src/android/android_GenericPlayer.cpp
@@ -71,7 +71,7 @@
     }
 
     mLooper->registerHandler(this);
-    mLooper->start(false /*runOnCallingThread*/, false /*canCallJava*/, PRIORITY_DEFAULT);
+    mLooper->start(false /*runOnCallingThread*/, true /*canCallJava*/, PRIORITY_DEFAULT);
 }
 
 
diff --git a/src/data.cpp b/src/data.cpp
index ace2862..fc6dffc 100644
--- a/src/data.cpp
+++ b/src/data.cpp
@@ -364,6 +364,7 @@
                 break;
             }
             // SL_ANDROID_DATAFORMAT_PCM_EX - fall through to next test.
+            FALLTHROUGH_INTENDED;
         case SL_DATAFORMAT_PCM:
             pDataFormat->mPCM = *(SLDataFormat_PCM *)pFormat;
             do {
@@ -790,7 +791,7 @@
     // Per the spec, the pFormat field is ignored in some cases
     case SL_DATALOCATOR_IODEVICE:
         myDataSrc.pFormat = NULL;
-        // fall through
+        FALLTHROUGH_INTENDED;
     case SL_DATALOCATOR_NULL:
     case SL_DATALOCATOR_MIDIBUFFERQUEUE:
         allowedDataFormatMask &= DATAFORMAT_MASK_NULL;
@@ -872,7 +873,7 @@
     case SL_DATALOCATOR_OUTPUTMIX:
     case XA_DATALOCATOR_NATIVEDISPLAY:
         myDataSink.pFormat = NULL;
-        // fall through
+        FALLTHROUGH_INTENDED;
     case SL_DATALOCATOR_NULL:
     case SL_DATALOCATOR_MIDIBUFFERQUEUE:
         allowedDataFormatMask &= DATAFORMAT_MASK_NULL;
diff --git a/src/itf/I3DDoppler.cpp b/src/itf/I3DDoppler.cpp
index 8a20f81..174bd75 100644
--- a/src/itf/I3DDoppler.cpp
+++ b/src/itf/I3DDoppler.cpp
@@ -81,7 +81,7 @@
                 break;
             case CARTESIAN_UNKNOWN_SPHERICAL_SET:
                 thiz->mVelocityActive = CARTESIAN_REQUESTED_SPHERICAL_SET;
-                // fall through
+                FALLTHROUGH_INTENDED;
             case CARTESIAN_REQUESTED_SPHERICAL_SET:
                 // matched by cond_broadcast in case multiple requesters
 #if 0
diff --git a/src/itf/I3DLocation.cpp b/src/itf/I3DLocation.cpp
index c0eff3b..d323232 100644
--- a/src/itf/I3DLocation.cpp
+++ b/src/itf/I3DLocation.cpp
@@ -87,7 +87,7 @@
                 break;
             case CARTESIAN_UNKNOWN_SPHERICAL_SET:
                 thiz->mLocationActive = CARTESIAN_REQUESTED_SPHERICAL_SET;
-                // fall through
+                FALLTHROUGH_INTENDED;
             case CARTESIAN_REQUESTED_SPHERICAL_SET:
                 // matched by cond_broadcast in case multiple requesters
 #if 0
@@ -134,7 +134,7 @@
                 break;
             case CARTESIAN_UNKNOWN_SPHERICAL_SET:
                 thiz->mLocationActive = CARTESIAN_REQUESTED_SPHERICAL_SET;
-                // fall through
+                FALLTHROUGH_INTENDED;
             case CARTESIAN_REQUESTED_SPHERICAL_SET:
                 // matched by cond_broadcast in case multiple requesters
 #if 0
diff --git a/src/itf/I3DMacroscopic.cpp b/src/itf/I3DMacroscopic.cpp
index feb91e2..01da236 100644
--- a/src/itf/I3DMacroscopic.cpp
+++ b/src/itf/I3DMacroscopic.cpp
@@ -170,7 +170,7 @@
                 break;
             case ANGLES_SET_VECTORS_UNKNOWN:
                 thiz->mOrientationActive = ANGLES_SET_VECTORS_REQUESTED;
-                // fall through
+                FALLTHROUGH_INTENDED;
             case ANGLES_SET_VECTORS_REQUESTED:
                 // matched by cond_broadcast in case multiple requesters
 #if 0
diff --git a/src/itf/IDeviceVolume.cpp b/src/itf/IDeviceVolume.cpp
index bd9f0be..58e10ff 100644
--- a/src/itf/IDeviceVolume.cpp
+++ b/src/itf/IDeviceVolume.cpp
@@ -55,7 +55,7 @@
     case DEVICE_ID_HEADSET:
     case DEVICE_ID_HANDSFREE:
         deviceID = SL_DEFAULTDEVICEID_AUDIOOUTPUT;
-        // fall through
+        FALLTHROUGH_INTENDED;
     case SL_DEFAULTDEVICEID_AUDIOINPUT:
     case SL_DEFAULTDEVICEID_AUDIOOUTPUT:
         {
@@ -87,7 +87,7 @@
         case DEVICE_ID_HEADSET:
         case DEVICE_ID_HANDSFREE:
             deviceID = SL_DEFAULTDEVICEID_AUDIOOUTPUT;
-            // fall through
+            FALLTHROUGH_INTENDED;
         case SL_DEFAULTDEVICEID_AUDIOINPUT:
         case SL_DEFAULTDEVICEID_AUDIOOUTPUT:
             {
diff --git a/src/itf/IObject.cpp b/src/itf/IObject.cpp
index befe939..da88845 100644
--- a/src/itf/IObject.cpp
+++ b/src/itf/IObject.cpp
@@ -534,7 +534,7 @@
             break;
         case predestroy_error:
             SL_LOGE("Object::Destroy(%p) not allowed", thiz);
-            // fall through
+            FALLTHROUGH_INTENDED;
         case predestroy_again:
             object_unlock_exclusive(thiz);
             // unfortunately Destroy doesn't return a result
@@ -601,7 +601,7 @@
             }
             *interfaceStateP = INTERFACE_INITIALIZED;
             }
-            // fall through
+            FALLTHROUGH_INTENDED;
         case INTERFACE_INITIALIZED:
             {
             VoidHook deinit = MPH_init_table[x->mMPH].mDeinit;
@@ -629,11 +629,10 @@
     // The mutex is unlocked and destroyed by IObject_deinit, which is the last deinitializer
     memset(thiz, 0x55, clazz->mSize); // catch broken applications that continue using interfaces
                                         // was ifdef USE_DEBUG but safer to do this unconditionally
-    free(thiz);
-
     if (SL_OBJECTID_ENGINE == clazz->mSLObjectID) {
         CEngine_Destroyed((CEngine *) thiz);
     }
+    free(thiz);
 
     SL_LEAVE_INTERFACE_VOID
 }
diff --git a/src/itf/IPlay.cpp b/src/itf/IPlay.cpp
index 8e44463..acee3ff 100644
--- a/src/itf/IPlay.cpp
+++ b/src/itf/IPlay.cpp
@@ -61,7 +61,7 @@
                     // note that USE_OUTPUTMIXEXT does not support ATTR_ABQ_ENQUEUE
                     attr |= ATTR_BQ_ENQUEUE;
                 }
-                // fall through
+                FALLTHROUGH_INTENDED;
 
             case (SL_PLAYSTATE_STOPPED  << 2) | SL_PLAYSTATE_PAUSED:
             case (SL_PLAYSTATE_PLAYING  << 2) | SL_PLAYSTATE_PAUSED:
diff --git a/src/sles_allinclusive.h b/src/sles_allinclusive.h
index ede6210..0e6d09a 100644
--- a/src/sles_allinclusive.h
+++ b/src/sles_allinclusive.h
@@ -400,6 +400,14 @@
 extern void audioPlayerTransportUpdate(CAudioPlayer *audioPlayer);
 #endif
 
+#ifndef FALLTHROUGH_INTENDED
+#ifdef __clang__
+#define FALLTHROUGH_INTENDED [[clang::fallthrough]]
+#else
+#define FALLTHROUGH_INTENDED
+#endif // __clang__
+#endif // FALLTHROUGH_INTENDED
+
 extern SLresult IBufferQueue_Enqueue(SLBufferQueueItf self, const void *pBuffer, SLuint32 size);
 extern SLresult IBufferQueue_Clear(SLBufferQueueItf self);
 extern SLresult IBufferQueue_RegisterCallback(SLBufferQueueItf self,
