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");
