diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 54e5cbc..ebff932 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -119,6 +119,7 @@
 #include "android/media/BnEffect.h"
 
 #include "Client.h"
+#include "ResamplerBufferProvider.h"
 
 // include AudioFlinger component interfaces
 #include "IAfEffect.h"
@@ -136,7 +137,6 @@
 class FastMixer;
 class IAudioManager;
 class PassthruBufferProvider;
-class RecordBufferConverter;
 class ServerProxy;
 
 // ----------------------------------------------------------------------------
@@ -571,8 +571,6 @@
     class AsyncCallbackThread;
     class BitPerfectThread;
 private:
-    class Track;
-    class RecordTrack;
     class DeviceEffectManager;
     // TODO(b/288339104) these should be separate files
 public:
@@ -581,8 +579,9 @@
 private:
     struct AudioStreamIn;
     struct TeePatch;
+public:
     using TeePatches = std::vector<TeePatch>;
-
+private:
 
     struct  stream_type_t {
         stream_type_t()
@@ -705,9 +704,12 @@
                                      PlaybackThread *srcThread,
                                      PlaybackThread *dstThread);
 
+public:
+    // TODO(b/288339104) cluster together
               status_t moveAuxEffectToIo(int EffectId,
                                          const sp<PlaybackThread>& dstThread,
                                          sp<PlaybackThread> *srcThread);
+private:
 
               // return thread associated with primary hardware device, or NULL
               PlaybackThread *primaryPlaybackThread_l() const;
@@ -728,7 +730,10 @@
 
                 void        removeClient_l(pid_t pid);
                 void        removeNotificationClient(pid_t pid);
+public:
+    // TODO(b/288339104) cluster together
                 bool isNonOffloadableGlobalEffectEnabled_l();
+private:
                 void onNonOffloadableGlobalEffectEnable();
                 bool isSessionAcquired_l(audio_session_t audioSession);
 
@@ -783,8 +788,8 @@
     };
 
     struct TeePatch {
-        sp<RecordThread::PatchRecord> patchRecord;
-        sp<PlaybackThread::PatchTrack> patchTrack;
+        sp<IAfPatchRecord> patchRecord;
+        sp<IAfPatchTrack> patchTrack;
     };
 
     // for mAudioSessionRefs only
@@ -797,11 +802,13 @@
         int         mCnt;
     };
 
+public:
+    // TODO(b/288339104) access by getter,
     mutable     Mutex                               mLock;
                 // protects mClients and mNotificationClients.
                 // must be locked after mLock and ThreadBase::mLock if both must be locked
                 // avoids acquiring AudioFlinger::mLock from inside thread loop.
-public:
+
     // TODO(b/288339104) access by getter,
     mutable     Mutex                               mClientLock;
 private:
@@ -910,9 +917,9 @@
                                       size_t rejectedKVPSize, const String8& rejectedKVPs,
                                       uid_t callingUid);
 
+public:
     sp<IAudioManager> getOrCreateAudioManager();
 
-public:
     // These methods read variables atomically without mLock,
     // though the variables are updated with mLock.
     bool    isLowRamDevice() const { return mIsLowRamDevice; }
