diff --git a/sip/src/com/android/services/telephony/sip/SipConnection.java b/sip/src/com/android/services/telephony/sip/SipConnection.java
index b5ea9b7..6ba2684 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnection.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnection.java
@@ -182,7 +182,7 @@
     @Override
     public void onSwapWithBackgroundCall() {
         if (VERBOSE) log("onSwapWithBackgroundCall");
-        // TODO(sail): Implement swap.
+        // TODO: Implement swap.
     }
 
     @Override
diff --git a/src/com/android/phone/CallController.java b/src/com/android/phone/CallController.java
index c517343..1cb4c80 100644
--- a/src/com/android/phone/CallController.java
+++ b/src/com/android/phone/CallController.java
@@ -141,7 +141,7 @@
                     // Reset the mThreeWayCallOrigStateDialing state
                     mApp.cdmaPhoneCallState.setThreeWayCallOrigState(false);
 
-                    // TODO(sail): Remove this code.
+                    // TODO: Remove this code.
                     //mApp.getCallModeler().setCdmaOutgoing3WayCall(null);
                 }
                 break;
@@ -423,7 +423,7 @@
                 // Note: Normally, many of these values we gather from the Connection object but
                 // since no such object is created for unconnected calls, we have to build them
                 // manually.
-                // TODO(santoscordon): Try to restructure code so that we can handle failure-
+                // TODO: Try to restructure code so that we can handle failure-
                 // condition call logging in a single place (placeCall()) that also has access to
                 // the number we attempted to dial (not placeCall()).
                 mCallLogger.logCall(null /* callerInfo */, number, 0 /* presentation */,
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 39197f6..9f0dad7 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -807,7 +807,7 @@
             mChangingVMorFwdDueToProviderChange = isVMProviderSettingsForced;
             final String fwdNum = data.getStringExtra(FWD_NUMBER_EXTRA);
 
-            // TODO(iliat): It would be nice to load the current network setting for this and
+            // TODO: It would be nice to load the current network setting for this and
             // send it to the provider when it's config is invoked so it can use this as default
             final int fwdNumTime = data.getIntExtra(FWD_NUMBER_TIME_EXTRA, 20);
 
@@ -2100,7 +2100,7 @@
      * Simulates user clicking on a passed preference.
      * Usually needed when the preference is a dialog preference and we want to invoke
      * a dialog for this preference programmatically.
-     * TODO(iliat): figure out if there is a cleaner way to cause preference dlg to come up
+     * TODO: figure out if there is a cleaner way to cause preference dlg to come up
      */
     private void simulatePreferenceClick(Preference preference) {
         // Go through settings until we find our setting
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 8baded6..1bab321 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -1588,7 +1588,7 @@
             new SignalInfoTonePlayer(toneID).start();
         }
 
-        // TODO(sail): Remove this.
+        // TODO: Remove this.
         //mCallModeler.onCdmaCallWaiting(infoCW);
     }
 
@@ -1642,7 +1642,7 @@
 
         // Call modeler needs to know about this event regardless of the
         // state conditionals in the previous code.
-        // TODO(sail): Remove this.
+        // TODO: Remove this.
         //mCallModeler.onCdmaCallWaitingReject();
     }
 
diff --git a/src/com/android/phone/OutgoingCallBroadcaster.java b/src/com/android/phone/OutgoingCallBroadcaster.java
index fc5cdab..6d8830e 100644
--- a/src/com/android/phone/OutgoingCallBroadcaster.java
+++ b/src/com/android/phone/OutgoingCallBroadcaster.java
@@ -309,7 +309,7 @@
      */
     private void startSipCallOptionHandler(Context context, Intent intent,
             Uri uri, String number) {
-        // TODO(sail): Remove this code.
+        // TODO: Remove this code.
     }
 
     /**
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 16e39e5..2f290b5 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1560,7 +1560,7 @@
     }
 
     private static int getWhenToMakeWifiCallsDefaultPreference() {
-        // TODO(sail): Use a build property to choose this value.
+        // TODO: Use a build property to choose this value.
         return TelephonyManager.WifiCallingChoices.ALWAYS_USE;
     }
 
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 57285fc..06dacb8 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -629,7 +629,7 @@
             app.cdmaPhoneCallState.setCurrentCallState(
                 CdmaPhoneCallState.PhoneCallState.THRWAY_ACTIVE);
 
-            // TODO(sail): Remove this code.
+            // TODO: Remove this code.
             //app.getCallModeler().setCdmaOutgoing3WayCall(connection);
         }
     }
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index 543df72..668308a 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -31,9 +31,9 @@
     /** {@inheritDoc} */
     @Override
     public void onPlayDtmfTone(char digit) {
-        // TODO(santoscordon): There are conditions where we should play dtmf tones with different
+        // TODO: There are conditions where we should play dtmf tones with different
         // timeouts.
-        // TODO(santoscordon): We get explicit response from the phone via a Message when the burst
+        // TODO: We get explicit response from the phone via a Message when the burst
         // tone has completed. During this time we can get subsequent requests. We need to stop
         // passing in null as the message and start handling it to implement a queue.
         if (getPhone() != null) {
diff --git a/src/com/android/services/telephony/EmergencyCallHelper.java b/src/com/android/services/telephony/EmergencyCallHelper.java
index d890255..5b3ebfc 100644
--- a/src/com/android/services/telephony/EmergencyCallHelper.java
+++ b/src/com/android/services/telephony/EmergencyCallHelper.java
@@ -248,7 +248,7 @@
                                    Settings.Global.AIRPLANE_MODE_ON, 0);
 
             // Post the broadcast intend for change in airplane mode
-            // TODO(santoscordon): We really should not be in charge of sending this broadcast.
+            // TODO: We really should not be in charge of sending this broadcast.
             //     If changing the setting is sufficent to trigger all of the rest of the logic,
             //     then that should also trigger the broadcast intent.
             Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
@@ -276,7 +276,7 @@
      * EmergencyCallHelper until someone kicks off the whole sequence again with another call to
      * {@link #startTurnOnRadioSequence}
      *
-     * TODO(santoscordon): Do the work for the comment below:
+     * TODO: Do the work for the comment below:
      * Note we don't call this method simply after a successful call to placeCall(), since it's
      * still possible the call will disconnect very quickly with an OUT_OF_SERVICE error.
      */
diff --git a/src/com/android/services/telephony/PstnIncomingCallNotifier.java b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
index 183cbb0..f64dedf 100644
--- a/src/com/android/services/telephony/PstnIncomingCallNotifier.java
+++ b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
@@ -110,7 +110,7 @@
 
     /**
      * Register for notifications from the base phone.
-     * TODO(santoscordon): We should only need to interact with the phoneproxy directly. However,
+     * TODO: We should only need to interact with the phoneproxy directly. However,
      * since the phoneproxy only interacts directly with CallManager we either listen to callmanager
      * or we have to poke into the proxy like this.  Neither is desirable. It would be better if
      * this class and callManager could register generically with the phone proxy instead and get
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 824d9ea..6d6ba5d 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -203,7 +203,7 @@
     @Override
     public void onHold() {
         Log.v(this, "onHold");
-        // TODO(santoscordon): Can dialing calls be put on hold as well since they take up the
+        // TODO: Can dialing calls be put on hold as well since they take up the
         // foreground call slot?
         if (Call.State.ACTIVE == mOriginalConnectionState) {
             Log.v(this, "Holding active call");
@@ -218,14 +218,14 @@
                 // cheating here and simply skipping it because we know any attempt to hold a call
                 // while a call-waiting call is happening is likely a request from Telecomm prior to
                 // accepting the call-waiting call.
-                // TODO(santoscordon): Investigate a better solution. It would be great here if we
+                // TODO: Investigate a better solution. It would be great here if we
                 // could "fake" hold by silencing the audio and microphone streams for this call
                 // instead of actually putting it on hold.
                 if (ringingCall.getState() != Call.State.WAITING) {
                     phone.switchHoldingAndActive();
                 }
 
-                // TODO(santoscordon): Cdma calls are slightly different.
+                // TODO: Cdma calls are slightly different.
             } catch (CallStateException e) {
                 Log.e(this, e, "Exception occurred while trying to put call on hold.");
             }
@@ -252,7 +252,7 @@
     @Override
     public void onAnswer(int videoState) {
         Log.v(this, "onAnswer");
-        // TODO(santoscordon): Tons of hairy logic is missing here around multiple active calls on
+        // TODO: Tons of hairy logic is missing here around multiple active calls on
         // CDMA devices. See {@link CallManager.acceptCall}.
 
         if (isValidRingingCall() && getPhone() != null) {
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index e151716..e9c83db 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -223,7 +223,7 @@
         } else if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
             return new CdmaConnection(originalConnection);
         } else {
-            // TODO(ihab): Tear down 'originalConnection' here, or move recognition of
+            // TODO: Tear down 'originalConnection' here, or move recognition of
             // getPhoneType() earlier in this method before we've already asked phone to dial()
             return Connection.getFailedConnection(DisconnectCause.OUTGOING_FAILURE,
                     "Invalid phone type");
