diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h
index 2d00bf5..fd21fda 100644
--- a/services/audioflinger/AudioMixer.h
+++ b/services/audioflinger/AudioMixer.h
@@ -28,7 +28,6 @@
 
 #include <audio_effects/effect_downmix.h>
 #include <system/audio.h>
-#include <media/nbaio/NBLog.h>
 
 namespace android {
 
@@ -77,7 +76,6 @@
         MAIN_BUFFER     = 0x4002,
         AUX_BUFFER      = 0x4003,
         DOWNMIX_TYPE    = 0X4004,
-        FAST_INDEX      = 0x4005, // for debugging only
         // for target RESAMPLE
         SAMPLE_RATE     = 0x4100, // Configure sample rate conversion on this track name;
                                   // parameter 'value' is the new sample rate in Hz.
@@ -108,17 +106,13 @@
     // Enable or disable an allocated track by name
     void        enable(int name);
     void        disable(int name);
-    bool        enabled(int name);
 
     void        setParameter(int name, int target, int param, void *value);
 
     void        setBufferProvider(int name, AudioBufferProvider* bufferProvider);
-    AudioBufferProvider* getBufferProvider(int name);
     void        process(int64_t pts);
 
     uint32_t    trackNames() const { return mTrackNames; }
-    uint32_t    enabledTrackNames() const { return mState.enabledTracks; }
-    int         getFastIndex(int name);
 
     size_t      getUnreleasedFrames(int name) const;
 
@@ -206,10 +200,7 @@
 
         int32_t     sessionId;
 
-        int32_t     fastIndex;
-        int32_t     magic;
-        static const int kMagic = 0x54637281;
-        //int32_t     padding[1];
+        int32_t     padding[2];
 
         // 16-byte boundary
 
@@ -219,12 +210,6 @@
         void        adjustVolumeRamp(bool aux);
         size_t      getUnreleasedFrames() const { return resampler != NULL ?
                                                     resampler->getUnreleasedFrames() : 0; };
-        void        checkMagic() {
-            if (magic != kMagic) {
-                ALOGE("magic=%#x fastIndex=%d", magic, fastIndex);
-            }
-        }
-
     };
 
     // pad to 32-bytes to fill cache line
@@ -235,8 +220,7 @@
         void            (*hook)(state_t* state, int64_t pts);   // one of process__*, never NULL
         int32_t         *outputTemp;
         int32_t         *resampleTemp;
-        NBLog::Writer*  mLog;
-        int32_t         reserved[1];
+        int32_t         reserved[2];
         // FIXME allocate dynamically to save some memory when maxNumTracks < MAX_NUM_TRACKS
         track_t         tracks[MAX_NUM_TRACKS]; __attribute__((aligned(32)));
     };
@@ -263,11 +247,6 @@
 
     const uint32_t  mSampleRate;
 
-    NBLog::Writer*  mLog;
-    NBLog::Writer   mDummyLog;
-public:
-    void            setLog(NBLog::Writer* log);
-private:
     state_t         mState __attribute__((aligned(32)));
 
     // effect descriptor for the downmixer used by the mixer
