diff --git a/src/com/android/phone/BluetoothManager.java b/src/com/android/phone/BluetoothManager.java
index c2b4f7d..ffce465 100644
--- a/src/com/android/phone/BluetoothManager.java
+++ b/src/com/android/phone/BluetoothManager.java
@@ -71,7 +71,6 @@
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
 
         init(mContext);
-        // TODO(klp): Listen for changes to the call list/state.
     }
 
     /* package */ boolean isBluetoothHeadsetAudioOn() {
diff --git a/src/com/android/phone/CallCard.java b/src/com/android/phone/CallCard.java
index 22215c0..bfb14ac 100644
--- a/src/com/android/phone/CallCard.java
+++ b/src/com/android/phone/CallCard.java
@@ -764,14 +764,6 @@
             case INCOMING:
             case WAITING:
                 callStateLabel = context.getString(R.string.card_title_incoming_call);
-
-                // Also, display a special icon (alongside the "Incoming call"
-                // label) if there's an incoming call and audio will be routed
-                // to bluetooth when you answer it.
-                // TODO(klp): Add bluetooth label to new UI screen for incoming calls.
-                //if (mApplication.showBluetoothIndication()) {
-                //    bluetoothIconId = R.drawable.ic_incoming_call_bluetooth;
-                //}
                 break;
 
             case DISCONNECTING:
diff --git a/src/com/android/phone/CallCommandService.java b/src/com/android/phone/CallCommandService.java
index 90297d8..2220874 100644
--- a/src/com/android/phone/CallCommandService.java
+++ b/src/com/android/phone/CallCommandService.java
@@ -204,7 +204,6 @@
     @Override
     public void speaker(boolean onOff) {
         try {
-            // TODO(klp): add bluetooth logic from InCallScreen.toggleSpeaker()
             PhoneUtils.turnOnSpeaker(mContext, onOff, true);
         } catch (Exception e) {
             Log.e(TAG, "Error during speaker().", e);
diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index a1a5cab..5420945 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -318,9 +318,6 @@
 
             mCallMap.remove(conn);
         }
-
-        // TODO(klp): Do a final check to see if there are any active calls.
-        // If there are not, totally cancel all calls
     }
 
     /**
diff --git a/src/com/android/phone/InCallScreen.java b/src/com/android/phone/InCallScreen.java
index 8b67b77..4073bbb 100644
--- a/src/com/android/phone/InCallScreen.java
+++ b/src/com/android/phone/InCallScreen.java
@@ -2685,12 +2685,6 @@
         boolean newSpeakerState = !PhoneUtils.isSpeakerOn(this);
         log("toggleSpeaker(): newSpeakerState = " + newSpeakerState);
 
-        // TODO(klp): Add bluetooth query back in for AudioRouter.
-        /*
-         if (newSpeakerState && isBluetoothAvailable() && isBluetoothAudioConnected()) {
-            disconnectBluetoothAudio();
-        }
-        */
         PhoneUtils.turnOnSpeaker(this, newSpeakerState, true);
 
         // And update the InCallTouchUi widget (since the "audio mode"
@@ -2708,16 +2702,6 @@
         PhoneUtils.setMute(newMuteState);
     }
 
-    public void toggleBluetooth() {
-        // TODO(klp) this still here to avoid compile errors until remove
-        // the UI from services/Telephony completely.
-    }
-
-    public void switchInCallAudio(InCallAudioMode newMode) {
-        // TODO(klp) this still here to avoid compile errors until remove
-        // the UI from services/Telephony completely.
-    }
-
     /**
      * Handle a click on the "Open/Close dialpad" button.
      *
diff --git a/src/com/android/phone/InCallTouchUi.java b/src/com/android/phone/InCallTouchUi.java
index 1d08671..9cb2a52 100644
--- a/src/com/android/phone/InCallTouchUi.java
+++ b/src/com/android/phone/InCallTouchUi.java
@@ -868,7 +868,6 @@
         MenuItem earpieceItem = menu.findItem(R.id.audio_mode_earpiece);
         MenuItem wiredHeadsetItem = menu.findItem(R.id.audio_mode_wired_headset);
 
-        // TODO(klp): This is a compile stop-gap.  This will all be deleted
         final boolean usingHeadset = false; //mApp.isHeadsetPlugged();
 
         earpieceItem.setVisible(!usingHeadset);
@@ -938,16 +937,16 @@
 
         switch (item.getItemId()) {
             case R.id.audio_mode_speaker:
-                mInCallScreen.switchInCallAudio(InCallScreen.InCallAudioMode.SPEAKER);
+//                mInCallScreen.switchInCallAudio(InCallScreen.InCallAudioMode.SPEAKER);
                 break;
             case R.id.audio_mode_earpiece:
             case R.id.audio_mode_wired_headset:
                 // InCallAudioMode.EARPIECE means either the handset earpiece,
                 // or the wired headset (if connected.)
-                mInCallScreen.switchInCallAudio(InCallScreen.InCallAudioMode.EARPIECE);
+//                mInCallScreen.switchInCallAudio(InCallScreen.InCallAudioMode.EARPIECE);
                 break;
             case R.id.audio_mode_bluetooth:
-                mInCallScreen.switchInCallAudio(InCallScreen.InCallAudioMode.BLUETOOTH);
+//                mInCallScreen.switchInCallAudio(InCallScreen.InCallAudioMode.BLUETOOTH);
                 break;
             default:
                 Log.wtf(LOG_TAG,
diff --git a/src/com/android/phone/RejectWithTextMessageManager.java b/src/com/android/phone/RejectWithTextMessageManager.java
index fda8f78..232de8e 100644
--- a/src/com/android/phone/RejectWithTextMessageManager.java
+++ b/src/com/android/phone/RejectWithTextMessageManager.java
@@ -250,7 +250,6 @@
             return true;
         } else {
             Log.v(TAG, "Choosing from one of the apps");
-            // TODO(klp): Add an app picker.
             final Intent intent = new Intent(Intent.ACTION_VIEW, null);
             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                     Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS |
