diff --git a/res/values/strings.xml b/res/values/strings.xml
index 969e723..8cebb86 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -411,17 +411,6 @@
     <!-- String used to display calls from pay phone in the call log -->
     <string name="payphone">Pay phone</string>
 
-    <!-- Displayed in the text entry box in the dialer when in landscape mode to guide the user
-         to dial using the physical keyboard -->
-    <string name="dialerKeyboardHintText">Use keyboard to dial</string>
-
-    <!-- Hint text displayed in the "digits" field above the dialer's
-         dialpad, if there's already a call in progress.  (This hint
-         reminds the user that the dialer will add a new call, as opposed
-         to sending DTMF tones over the current call.)
-         [CHAR LIMIT=40] -->
-    <string name="dialerDialpadHintText">Dial to add a call</string>
-
     <!-- A nicely formatted call duration displayed when viewing call details. For example "42 mins 28 secs" -->
     <string name="callDetailsDurationFormat"><xliff:g id="minutes" example="42">%s</xliff:g> mins <xliff:g id="seconds" example="28">%s</xliff:g> secs</string>
 
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index c9ea25a..b5b3121 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -611,26 +611,8 @@
 
         stopWatch.lap("tm");
 
-        // Potentially show hint text in the mDigits field when the user
-        // hasn't typed any digits yet.  (If there's already an active call,
-        // this hint text will remind the user that he's about to add a new
-        // call.)
-        //
-        // TODO: consider adding better UI for the case where *both* lines
-        // are currently in use.  (Right now we let the user try to add
-        // another call, but that call is guaranteed to fail.  Perhaps the
-        // entire dialer UI should be disabled instead.)
-        if (isPhoneInUse()) {
-            final SpannableString hint = new SpannableString(
-                    getActivity().getString(R.string.dialerDialpadHintText));
-            hint.setSpan(new RelativeSizeSpan(0.8f), 0, hint.length(), 0);
-            mDigits.setHint(hint);
-        } else {
-            // Common case; no hint necessary.
-            mDigits.setHint(null);
-
-            // Also, a sanity-check: the "dialpad chooser" UI should NEVER
-            // be visible if the phone is idle!
+        if (!isPhoneInUse()) {
+            // A sanity-check: the "dialpad chooser" UI should not be visible if the phone is idle.
             showDialpadChooser(false);
         }
 
@@ -1203,7 +1185,7 @@
         }
 
         if (enabled) {
-            Log.i(TAG, "Showing dialpad chooser!");
+            Log.d(TAG, "Showing dialpad chooser!");
             if (mDialpadView != null) {
                 mDialpadView.setVisibility(View.GONE);
             }
@@ -1218,7 +1200,7 @@
             }
             mDialpadChooser.setAdapter(mDialpadChooserAdapter);
         } else {
-            Log.i(TAG, "Displaying normal Dialer UI.");
+            Log.d(TAG, "Displaying normal Dialer UI.");
             if (mDialpadView != null) {
                 mDialpadView.setVisibility(View.VISIBLE);
             } else {
diff --git a/tests/src/com/android/dialer/CallDetailActivityTest.java b/tests/src/com/android/dialer/CallDetailActivityTest.java
index 1e16fe4..f9f0a58 100644
--- a/tests/src/com/android/dialer/CallDetailActivityTest.java
+++ b/tests/src/com/android/dialer/CallDetailActivityTest.java
@@ -48,7 +48,8 @@
 import java.util.Locale;
 
 /**
- * Unit tests for the {@link CallDetailActivity}.
+ * Unit tests for the {@link CallDetailActivity}. NOTE: The screen needs to be on for the
+ * UI-related tests to pass.
  */
 @LargeTest
 public class CallDetailActivityTest extends ActivityInstrumentationTestCase2<CallDetailActivity> {
diff --git a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
index c0347cf..30a84c2 100644
--- a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
@@ -22,6 +22,7 @@
 import android.test.AndroidTestCase;
 import android.view.View;
 
+import com.android.contacts.common.CallUtil;
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.PhoneCallDetailsHelper;
 import com.android.dialer.R;
@@ -323,8 +324,13 @@
                 null, Calls.FEATURES_VIDEO, null, null);
 
         CharSequence description = mHelper.getCallDescription(getContext(), details);
+        final boolean isVideoEnabled = CallUtil.isVideoEnabled(getContext());
         assertTrue(description.toString()
-                .contains(this.mResources.getString(R.string.description_video_call, 2)));
+                .contains(this.mResources.getString(
+                        isVideoEnabled
+                        ? R.string.description_video_call
+                        : R.string.description_num_calls,
+                                2)));
     }
 
     /** Asserts that the primary action view does not have a call intent. */
