diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 62d542f..cc49c2e 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -34,6 +34,8 @@
 import android.content.ServiceConnection;
 import android.content.res.Configuration;
 import android.media.AudioManager;
+import android.media.session.Session;
+import android.media.session.SessionManager;
 import android.net.Uri;
 import android.os.AsyncResult;
 import android.os.Binder;
@@ -216,6 +218,9 @@
 
     // Broadcast receiver purely for ACTION_MEDIA_BUTTON broadcasts
     private final BroadcastReceiver mMediaButtonReceiver = new MediaButtonBroadcastReceiver();
+    private final SessionCallback mSessionCallback = new SessionCallback();
+
+    private Session mSession;
 
     /** boolean indicating restoring mute state on InCallScreen.onResume() */
     private boolean mShouldRestoreMuteOnInCallResume;
@@ -557,6 +562,14 @@
             // audio-mode-related state of our own) is initialized
             // correctly, given the current state of the phone.
             PhoneUtils.setAudioMode(mCM);
+
+            // Register a MediaSession but don't enable it yet. This is a
+            // replacement for MediaButtonReceiver
+            SessionManager msm = (SessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
+            mSession = msm.createSession(LOG_TAG);
+            mSession.addCallback(mSessionCallback);
+            mSession.setFlags(Session.FLAG_EXCLUSIVE_GLOBAL_PRIORITY
+                    | Session.FLAG_HANDLES_MEDIA_BUTTONS);
         }
 
         if (TelephonyCapabilities.supportsOtasp(phone)) {
@@ -921,10 +934,16 @@
                 if (!mUpdateLock.isHeld()) {
                     mUpdateLock.acquire();
                 }
+                if (!mSession.isActive()) {
+                    mSession.setActive(true);
+                }
             } else {
                 if (mUpdateLock.isHeld()) {
                     mUpdateLock.release();
                 }
+                if (mSession.isActive()) {
+                    mSession.setActive(false);
+                }
             }
         }
     }
@@ -1083,6 +1102,19 @@
         }
     }
 
+    private class SessionCallback extends Session.Callback {
+        @Override
+        public void onMediaButton(Intent intent) {
+            KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
+            if (VDBG) Log.d(LOG_TAG, "SessionCallback.onMediaButton()...  event = " + event);
+            if ((event != null) && (event.getKeyCode() == KeyEvent.KEYCODE_HEADSETHOOK)) {
+                if (VDBG) Log.d(LOG_TAG, "SessionCallback: HEADSETHOOK");
+                boolean consumed = PhoneUtils.handleHeadsetHook(phone, event);
+                if (VDBG) Log.d(LOG_TAG, "==> handleHeadsetHook(): consumed = " + consumed);
+            }
+        }
+    }
+
     /**
      * Broadcast receiver for the ACTION_MEDIA_BUTTON broadcast intent.
      *
