diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c7adf1c..0e87095 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -278,6 +278,18 @@
             </intent-filter>
         </activity>
 
+        <!-- Trampoline activity that handles the SIM_ACTIVATION_REQUEST intent. -->
+        <activity android:name="com.android.services.telephony.activation.SimActivationActivity"
+                android:permission="android.permission.PERFORM_SIM_ACTIVATION"
+                android:label="@string/phoneIconLabel"
+                android:theme="@android:style/Theme.NoDisplay"
+                android:excludeFromRecents="true">
+            <intent-filter>
+                <action android:name="android.intent.action.SIM_ACTIVATION_REQUEST" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <!-- "Mobile network settings" screen, used on both
              non-voice-capable tablets and regular phone devices. -->
         <activity android:name="MobileNetworkSettings"
diff --git a/res/drawable-hdpi/ic_signal_wifi_4_bar_24dp.png b/res/drawable-hdpi/ic_signal_wifi_4_bar_24dp.png
new file mode 100644
index 0000000..5a53192
--- /dev/null
+++ b/res/drawable-hdpi/ic_signal_wifi_4_bar_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_signal_wifi_4_bar_24dp.png b/res/drawable-mdpi/ic_signal_wifi_4_bar_24dp.png
new file mode 100644
index 0000000..dd5a42f
--- /dev/null
+++ b/res/drawable-mdpi/ic_signal_wifi_4_bar_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_signal_wifi_4_bar_24dp.png b/res/drawable-xhdpi/ic_signal_wifi_4_bar_24dp.png
new file mode 100644
index 0000000..28b5afa
--- /dev/null
+++ b/res/drawable-xhdpi/ic_signal_wifi_4_bar_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_signal_wifi_4_bar_24dp.png b/res/drawable-xxhdpi/ic_signal_wifi_4_bar_24dp.png
new file mode 100644
index 0000000..f4105ec
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_signal_wifi_4_bar_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_24dp.png b/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_24dp.png
new file mode 100644
index 0000000..58a4f9c
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_24dp.png
Binary files differ
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4aa3922..7887bf6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -148,8 +148,6 @@
 
     <!-- Title for setting to select Wi-Fi call manager account -->
     <string name="wifi_calling">Wi-Fi calling</string>
-    <!-- Summary label for wi-fi calling when it is turned off. [CHAR LIMIT=NONE] -->
-    <string name="wifi_calling_off_summary">Off</string>
     <!-- Indication for option to not use a Wi-Fi call manager -->
     <string name="wifi_calling_do_not_use">Do not use Wi-Fi calling</string>
     <!-- Indication for option to not use a call assistant. -->
@@ -431,13 +429,6 @@
     <!-- Cellular network 4G summary [CHAR LIMIT=80] -->
     <string name="enhanced_4g_lte_mode_summary">Use LTE services to improve voice and other communications (recommended)</string>
 
-    <!-- WFC, summary for Wi-Fi Preferred [CHAR LIMIT=100] -->
-    <string name="wfc_mode_wifi_preferred_summary">Wi-Fi preferred (Uses cell network only if Wi-Fi isn\'t available)</string>
-    <!-- WFC, summary for Cellular Preferred [CHAR LIMIT=100] -->
-    <string name="wfc_mode_cellular_preferred_summary">Cellular preferred (Uses Wi-Fi only if cell network isn\'t available)</string>
-    <!-- WFC, summary for Wi-Fi Only [CHAR LIMIT=100] -->
-    <string name="wfc_mode_wifi_only_summary">Wi-Fi only (Never uses cell network. Can\'t make or receive calls if Wi-Fi isn\'t available)</string>
-
     <!-- Mobile network settings screen, data enabling checkbox name -->
     <string name="data_enabled">Data enabled</string>
     <!-- Mobile network settings screen, setting summary text when check box is not selected (explains what selecting it would do) [CHAR LIMITS=40] -->
@@ -1284,6 +1275,12 @@
     <!-- Configuration setting for world mode Format is <true;GID if any to be checked>-->
     <string translatable="false" name="config_world_mode"/>
 
+    <!-- Status hint label for an incoming call over a wifi network which has not been accepted yet.
+         [CHAR LIMIT=25] -->
+    <string name="status_hint_label_incoming_wifi_call">Incoming Wi-Fi call</string>
+    <!-- Status hint label for a call being made over a wifi network. [CHAR LIMIT=25] -->
+    <string name="status_hint_label_wifi_call">Wi-Fi call</string>
+
     <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
     <string name="voicemail_notification_ringtone_key">voicemail_notification_ringtone_key</string>
     <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 3bb3080..a3270e8 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -1239,18 +1239,18 @@
         if (!ImsManager.isWfcEnabledByPlatform(mPhone.getContext())) {
             prefSet.removePreference(wifiCallingSettings);
         } else {
-            int resId = R.string.wifi_calling_off_summary;
+            int resId = com.android.internal.R.string.wifi_calling_off_summary;
             if (ImsManager.isWfcEnabledByUser(mPhone.getContext())) {
                 int wfcMode = ImsManager.getWfcMode(mPhone.getContext());
                 switch (wfcMode) {
                     case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
-                        resId = R.string.wfc_mode_wifi_only_summary;
+                        resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
                         break;
                     case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED:
-                        resId = R.string.wfc_mode_cellular_preferred_summary;
+                        resId = com.android.internal.R.string.wfc_mode_cellular_preferred_summary;
                         break;
                     case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED:
-                        resId = R.string.wfc_mode_wifi_preferred_summary;
+                        resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary;
                         break;
                     default:
                         if (DBG) log("Unexpected WFC mode value: " + wfcMode);
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 7c2e6e7..80e7f2a 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -16,6 +16,8 @@
 
 package com.android.services.telephony;
 
+import android.content.ComponentName;
+import android.content.Context;
 import android.net.Uri;
 import android.os.AsyncResult;
 import android.os.Handler;
@@ -24,12 +26,14 @@
 import android.telecom.ConferenceParticipant;
 import android.telecom.Connection;
 import android.telecom.PhoneAccount;
+import android.telecom.StatusHints;
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Connection.PostDialListener;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.imsphone.ImsPhoneConnection;
+import com.android.phone.R;
 
 import java.lang.Override;
 import java.util.Collections;
@@ -263,6 +267,7 @@
     @Override
     public void onStateChanged(int state) {
         Log.v(this, "onStateChanged, state: " + Connection.stateToString(state));
+        updateStatusHints();
     }
 
     @Override
@@ -797,6 +802,7 @@
     public void setWifi(boolean isWifi) {
         mIsWifi = isWifi;
         updateConnectionCapabilities();
+        updateStatusHints();
     }
 
     /**
@@ -869,6 +875,24 @@
         }
     }
 
+    private void updateStatusHints() {
+        if (mIsWifi && (mOriginalConnection.getState() == Call.State.INCOMING
+                || mOriginalConnection.getState() == Call.State.ACTIVE)) {
+            int labelId = mOriginalConnection.getState() == Call.State.INCOMING
+                    ? R.string.status_hint_label_incoming_wifi_call
+                    : R.string.status_hint_label_wifi_call;
+
+            Context context = getPhone().getContext();
+            setStatusHints(new StatusHints(
+                    new ComponentName(context, TelephonyConnectionService.class),
+                    context.getString(labelId),
+                    R.drawable.ic_signal_wifi_4_bar_24dp,
+                    null /* extras */));
+        } else {
+            setStatusHints(null);
+        }
+    }
+
     /**
      * Register a listener for {@link TelephonyConnection} specific triggers.
      * @param l The instance of the listener to add
diff --git a/src/com/android/services/telephony/activation/SimActivationActivity.java b/src/com/android/services/telephony/activation/SimActivationActivity.java
new file mode 100644
index 0000000..acc0cdf
--- /dev/null
+++ b/src/com/android/services/telephony/activation/SimActivationActivity.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.services.telephony.activation;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.services.telephony.Log;
+
+/**
+ * Invisible activity that handles the android.intent.action.SIM_ACTIVATION_REQUEST intent.
+ * This activity is protected by the android.permission.PERFORM_SIM_ACTIVATION permission.
+ */
+public class SimActivationActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        Intent intent = getIntent();
+        if (Intent.ACTION_SIM_ACTIVATION_REQUEST.equals(intent.getAction())) {
+            Log.i(this, "Activation requested " + intent);
+        }
+        finish();
+    }
+}
