diff --git a/src/com/android/phone/CLIRListPreference.java b/src/com/android/phone/CLIRListPreference.java
index 939caf0..f5d14b8 100644
--- a/src/com/android/phone/CLIRListPreference.java
+++ b/src/com/android/phone/CLIRListPreference.java
@@ -52,6 +52,7 @@
         mPhone = phone;
         mTcpListener = listener;
         if (!skipReading) {
+            Log.i(LOG_TAG, "init: requesting CLIR");
             mPhone.getOutgoingCallerIdDisplay(mHandler.obtainMessage(MyHandler.MESSAGE_GET_CLIR,
                     MyHandler.MESSAGE_GET_CLIR, MyHandler.MESSAGE_GET_CLIR));
             if (mTcpListener != null) {
@@ -135,20 +136,19 @@
             }
             clirArray = null;
             if (ar.exception != null) {
-                if (DBG) Log.d(LOG_TAG, "handleGetCLIRResponse: ar.exception="+ar.exception);
+                Log.i(LOG_TAG, "handleGetCLIRResponse: ar.exception=" + ar.exception);
                 mTcpListener.onException(CLIRListPreference.this, (CommandException) ar.exception);
             } else if (ar.userObj instanceof Throwable) {
+                Log.i(LOG_TAG, "handleGetCLIRResponse: ar.throwable=" + ar.userObj);
                 mTcpListener.onError(CLIRListPreference.this, RESPONSE_ERROR);
             } else {
                 int clirArray[] = (int[]) ar.result;
                 if (clirArray.length != 2) {
                     mTcpListener.onError(CLIRListPreference.this, RESPONSE_ERROR);
                 } else {
-                    if (DBG) {
-                        Log.d(LOG_TAG, "handleGetCLIRResponse: CLIR successfully queried,"
+                    Log.i(LOG_TAG, "handleGetCLIRResponse: CLIR successfully queried,"
                                 + " clirArray[0]=" + clirArray[0]
                                 + ", clirArray[1]=" + clirArray[1]);
-                    }
                     handleGetCLIRResult(clirArray);
                 }
             }
diff --git a/src/com/android/phone/TimeConsumingPreferenceActivity.java b/src/com/android/phone/TimeConsumingPreferenceActivity.java
index e626a53..354c4bb 100644
--- a/src/com/android/phone/TimeConsumingPreferenceActivity.java
+++ b/src/com/android/phone/TimeConsumingPreferenceActivity.java
@@ -23,7 +23,7 @@
 public class TimeConsumingPreferenceActivity extends PreferenceActivity
                         implements TimeConsumingPreferenceListener,
                         DialogInterface.OnCancelListener {
-    private static final String LOG_TAG = "TimeConsumingPreferenceActivity";
+    private static final String LOG_TAG = "TimeConsumingPrefActivity";
     private final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
 
     private class DismissOnClickListener implements DialogInterface.OnClickListener {
@@ -155,8 +155,7 @@
     @Override
     public void onStarted(Preference preference, boolean reading) {
         if (DBG) dumpState();
-        if (DBG) Log.d(LOG_TAG, "onStarted, preference=" + preference.getKey()
-                + ", reading=" + reading);
+        Log.i(LOG_TAG, "onStarted, preference=" + preference.getKey() + ", reading=" + reading);
         mBusyList.add(preference.getKey());
 
         if (mIsForeground) {
@@ -172,8 +171,7 @@
     @Override
     public void onFinished(Preference preference, boolean reading) {
         if (DBG) dumpState();
-        if (DBG) Log.d(LOG_TAG, "onFinished, preference=" + preference.getKey()
-                + ", reading=" + reading);
+        Log.i(LOG_TAG, "onFinished, preference=" + preference.getKey() + ", reading=" + reading);
         mBusyList.remove(preference.getKey());
 
         if (mBusyList.isEmpty()) {
@@ -189,7 +187,7 @@
     @Override
     public void onError(Preference preference, int error) {
         if (DBG) dumpState();
-        if (DBG) Log.d(LOG_TAG, "onError, preference=" + preference.getKey() + ", error=" + error);
+        Log.i(LOG_TAG, "onError, preference=" + preference.getKey() + ", error=" + error);
 
         if (mIsForeground) {
             showDialog(error);
