diff --git a/res/values/config.xml b/res/values/config.xml
index 60649f2..d3e253c 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -30,6 +30,9 @@
     <!-- Package name for the default in-call UI and dialer [DO NOT TRANSLATE] -->
     <string name="ui_default_package" translatable="false">com.android.dialer</string>
 
+    <!-- Class name for the default in-call UI Service [DO NOT TRANSLATE] -->
+    <string name="incall_default_class" translatable="false">com.android.incallui.InCallServiceImpl</string>
+
     <!-- Class name for the default main dialer activity [DO NOT TRANSLATE] -->
     <string name="dialer_default_class" translatable="false">com.android.dialer.DialtactsActivity</string>
 </resources>
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index 3dd0539..e971c81 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -20,6 +20,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+
+import android.content.res.Resources;
 import android.net.Uri;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -59,20 +61,6 @@
         }
     }
 
-    /**
-     * Package name of the in-call app. Although in-call code in kept in its own namespace, it is
-     * ultimately compiled into the dialer APK, hence the difference in namespaces between this and
-     * {@link #IN_CALL_SERVICE_CLASS_NAME}.
-     * TODO(santoscordon): Change this into config.xml resource entry.
-     */
-    private static final String IN_CALL_PACKAGE_NAME = "com.google.android.dialer";
-
-    /**
-     * Class name of the component within in-call app which implements {@link IInCallService}.
-     */
-    private static final String IN_CALL_SERVICE_CLASS_NAME =
-            "com.android.incallui.InCallServiceImpl";
-
     /** Maintains a binding connection to the in-call app. */
     private final InCallServiceConnection mConnection = new InCallServiceConnection();
 
@@ -204,14 +192,16 @@
     private void bind() {
         ThreadUtil.checkOnMainThread();
         if (mInCallService == null) {
-            ComponentName component =
-                    new ComponentName(IN_CALL_PACKAGE_NAME, IN_CALL_SERVICE_CLASS_NAME);
+            Context context = TelecommApp.getInstance();
+            Resources resources = context.getResources();
+            ComponentName component = new ComponentName(
+                    resources.getString(R.string.ui_default_package),
+                    resources.getString(R.string.incall_default_class));
             Log.i(this, "Attempting to bind to InCallService: %s", component);
 
             Intent serviceIntent = new Intent(IInCallService.class.getName());
             serviceIntent.setComponent(component);
 
-            Context context = TelecommApp.getInstance();
             if (!context.bindServiceAsUser(serviceIntent, mConnection, Context.BIND_AUTO_CREATE,
                     UserHandle.CURRENT)) {
                 Log.w(this, "Could not connect to the in-call app (%s)", component);
