diff --git a/InCallUI/res/drawable-hdpi/ic_in_call_pstn.png b/InCallUI/res/drawable-hdpi/ic_in_call_pstn.png
deleted file mode 100644
index 3a52a2b..0000000
--- a/InCallUI/res/drawable-hdpi/ic_in_call_pstn.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-hdpi/ic_in_call_wifi.png b/InCallUI/res/drawable-hdpi/ic_in_call_wifi.png
deleted file mode 100644
index 4fd5f33..0000000
--- a/InCallUI/res/drawable-hdpi/ic_in_call_wifi.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/ic_in_call_pstn.png b/InCallUI/res/drawable-mdpi/ic_in_call_pstn.png
deleted file mode 100644
index 3a52a2b..0000000
--- a/InCallUI/res/drawable-mdpi/ic_in_call_pstn.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-mdpi/ic_in_call_wifi.png b/InCallUI/res/drawable-mdpi/ic_in_call_wifi.png
deleted file mode 100644
index 4fd5f33..0000000
--- a/InCallUI/res/drawable-mdpi/ic_in_call_wifi.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/ic_in_call_pstn.png b/InCallUI/res/drawable-xhdpi/ic_in_call_pstn.png
deleted file mode 100644
index 3a52a2b..0000000
--- a/InCallUI/res/drawable-xhdpi/ic_in_call_pstn.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xhdpi/ic_in_call_wifi.png b/InCallUI/res/drawable-xhdpi/ic_in_call_wifi.png
deleted file mode 100644
index 4fd5f33..0000000
--- a/InCallUI/res/drawable-xhdpi/ic_in_call_wifi.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/ic_in_call_pstn.png b/InCallUI/res/drawable-xxhdpi/ic_in_call_pstn.png
deleted file mode 100644
index 3a52a2b..0000000
--- a/InCallUI/res/drawable-xxhdpi/ic_in_call_pstn.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable-xxhdpi/ic_in_call_wifi.png b/InCallUI/res/drawable-xxhdpi/ic_in_call_wifi.png
deleted file mode 100644
index 4fd5f33..0000000
--- a/InCallUI/res/drawable-xxhdpi/ic_in_call_wifi.png
+++ /dev/null
Binary files differ
diff --git a/InCallUI/res/drawable/floating_handoff_button_active_background.xml b/InCallUI/res/drawable/floating_handoff_button_active_background.xml
deleted file mode 100644
index f06e841..0000000
--- a/InCallUI/res/drawable/floating_handoff_button_active_background.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval" >
-    <corners
-        android:radius="@dimen/floating_action_button_radius" />
-    <size
-        android:width="@dimen/floating_action_button_width"
-        android:height="@dimen/floating_action_button_height" />
-    <solid
-        android:color="@color/handoff_call_active_color" />
-</shape>
diff --git a/InCallUI/res/drawable/floating_handoff_button_compound_background.xml b/InCallUI/res/drawable/floating_handoff_button_compound_background.xml
deleted file mode 100644
index 00ee791..0000000
--- a/InCallUI/res/drawable/floating_handoff_button_compound_background.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Background drawable used to render the floating circular "end call" button. -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false"
-        android:drawable="@drawable/floating_handoff_button_disabled_background" />
-    <item android:state_pressed="true"
-        android:drawable="@drawable/floating_handoff_button_pressed_background" />
-    <item android:drawable="@drawable/floating_handoff_button_active_background" />
-</selector>
diff --git a/InCallUI/res/drawable/floating_handoff_button_disabled_background.xml b/InCallUI/res/drawable/floating_handoff_button_disabled_background.xml
deleted file mode 100644
index 68d64b8..0000000
--- a/InCallUI/res/drawable/floating_handoff_button_disabled_background.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval" >
-    <corners
-        android:radius="@dimen/floating_action_button_radius" />
-    <size
-        android:width="@dimen/floating_action_button_width"
-        android:height="@dimen/floating_action_button_height" />
-    <solid
-        android:color="@color/handoff_call_disabled_color" />
-</shape>
diff --git a/InCallUI/res/drawable/floating_handoff_button_pressed_background.xml b/InCallUI/res/drawable/floating_handoff_button_pressed_background.xml
deleted file mode 100644
index 54a0469..0000000
--- a/InCallUI/res/drawable/floating_handoff_button_pressed_background.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval" >
-    <corners
-        android:radius="@dimen/floating_action_button_radius" />
-    <size
-        android:width="@dimen/floating_action_button_width"
-        android:height="@dimen/floating_action_button_height" />
-    <solid
-        android:color="@color/handoff_call_pressed_color" />
-</shape>
diff --git a/InCallUI/res/layout/call_card.xml b/InCallUI/res/layout/call_card.xml
index 820397d..e081065 100644
--- a/InCallUI/res/layout/call_card.xml
+++ b/InCallUI/res/layout/call_card.xml
@@ -54,21 +54,6 @@
 
         </FrameLayout>
 
-        <!-- Insert a CallService indicator (which controls handoff, too) -->
-        <FrameLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/end_call_button_margin_bottom"
-            android:layout_gravity="bottom|right">
-
-            <ImageButton android:id="@+id/handoffButton"
-                android:enabled="false"
-                android:layout_width="@dimen/floating_action_button_width"
-                android:layout_height="@dimen/floating_action_button_height"
-                android:background="@drawable/floating_handoff_button_compound_background"
-                android:src="@drawable/ic_in_call_pstn" />
-        </FrameLayout>
-
     </FrameLayout>
 
 </LinearLayout>
diff --git a/InCallUI/res/layout/primary_call_info.xml b/InCallUI/res/layout/primary_call_info.xml
index 4cd04f3..bbb7972 100644
--- a/InCallUI/res/layout/primary_call_info.xml
+++ b/InCallUI/res/layout/primary_call_info.xml
@@ -33,7 +33,7 @@
     android:animateLayoutChanges="true"
     android:gravity="center">
 
-    <LinearLayout
+    <LinearLayout android:id="@+id/callStateButton"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
@@ -48,8 +48,7 @@
             android:baselineAlignBottom="true"
             android:tint="@color/incall_accent_color"
             android:scaleType="centerInside"
-            android:visibility="gone"
-            android:src="@drawable/ic_in_call_wifi"/>
+            android:visibility="gone" />
 
         <TextView android:id="@+id/callStateLabel"
             android:layout_width="match_parent"
diff --git a/InCallUI/res/layout/secondary_call_info.xml b/InCallUI/res/layout/secondary_call_info.xml
index 9382cfe..c562ae2 100644
--- a/InCallUI/res/layout/secondary_call_info.xml
+++ b/InCallUI/res/layout/secondary_call_info.xml
@@ -52,8 +52,7 @@
                 android:layout_height="@dimen/call_provider_small_icon_size"
                 android:layout_marginRight="2dp"
                 android:baselineAlignBottom="true"
-                android:scaleType="centerInside"
-                android:src="@drawable/ic_in_call_wifi"/>
+                android:scaleType="centerInside" />
             <TextView android:id="@+id/secondaryCallProviderLabel"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
diff --git a/InCallUI/res/values/colors.xml b/InCallUI/res/values/colors.xml
index e2eecea..a40921d 100644
--- a/InCallUI/res/values/colors.xml
+++ b/InCallUI/res/values/colors.xml
@@ -39,18 +39,6 @@
 
     <color name="end_call_touch_feedback_tint">#dddddd</color>
 
-    <!-- Used when the Handoff Call button is active -->
-    <color name="handoff_call_active_color">#F2882C</color>
-
-    <!-- Used when the Handoff Call button is pressed -->
-    <color name="handoff_call_pressed_color">#F2A35E</color>
-
-    <!-- Used when the Handoff Call button is disabled -->
-    <color name="handoff_call_disabled_color">#303030</color>
-
-    <color name="call_state_wifi">#19E392</color>
-    <color name="call_state_cellular">#33A9F2</color>
-
     <!-- Color of dialpad digits -->
     <color name="dialpad_digits_text_color">#000000</color>
 
diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml
index 4bcd5c0..6beeff5 100644
--- a/InCallUI/res/values/strings.xml
+++ b/InCallUI/res/values/strings.xml
@@ -498,11 +498,6 @@
     <!-- This can be used in any application wanting to disable the text "Emergency number" -->
     <string name="emergency_call_dialog_number_for_display">Emergency number</string>
 
-    <string name="in_call_wifi_connected">Connected via <xliff:g id="wifi_ssid">%s</xliff:g></string>
-
-    <!-- Filler string to display as the provider in WiFi calling cases -->
-    <string name="wifi_constant">WiFi</string>
-
     <!-- The digit to be displayed on the 0 key of the dialpad [CHAR LIMIT=1]-->
     <string name="dialpad_0_number">0</string>
     <!-- The digit to be displayed on the 1 key of the dialpad [CHAR LIMIT=1]-->
@@ -552,7 +547,4 @@
     <string name="dialpad_star_letters"></string>
     <!--  Do not translate. -->
     <string name="dialpad_pound_letters"></string>
-
-    <!-- Text for the onscreen connection handoff button -->
-    <string name="connection_handoff_text">Handoff</string>
 </resources>
diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java
index 22cc182..b82e938 100644
--- a/InCallUI/src/com/android/incallui/Call.java
+++ b/InCallUI/src/com/android/incallui/Call.java
@@ -111,7 +111,6 @@
     private GatewayInfo mGatewayInfo;
     private PhoneAccount mAccount;
     private CallServiceDescriptor mCurrentCallServiceDescriptor;
-    private CallServiceDescriptor mHandoffCallServiceDescriptor;
     private RemoteCallVideoProvider mCallVideoProvider;
     private String mParentCallId;
     private List<String> mChildCallIds;
@@ -239,18 +238,6 @@
         mCurrentCallServiceDescriptor = descriptor;
     }
 
-    /**
-     * The descriptor for the call service that this call is being switched to, null if handoff is
-     * not in progress.
-     */
-    public CallServiceDescriptor getHandoffCallServiceDescriptor() {
-        return mHandoffCallServiceDescriptor;
-    }
-
-    public void setHandoffCallServiceDescriptor(CallServiceDescriptor descriptor) {
-        mHandoffCallServiceDescriptor = descriptor;
-    }
-
     public RemoteCallVideoProvider getCallVideoProvider() {
         return mCallVideoProvider;
     }
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 7016220..aef9991 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -63,6 +63,7 @@
     private TextView mPhoneNumber;
     private TextView mNumberLabel;
     private TextView mPrimaryName;
+    private View mCallStateButton;
     private ImageView mCallStateIcon;
     private TextView mCallStateLabel;
     private TextView mCallTypeLabel;
@@ -85,7 +86,6 @@
 
     private FloatingActionButtonController mFloatingActionButtonController;
     private View mFloatingActionButtonContainer;
-    private ImageButton mHandoffButton;
     private int mFloatingActionButtonHideOffset;
 
     // Cached DisplayMetrics density.
@@ -151,6 +151,7 @@
         mSecondaryCallInfo = (View) view.findViewById(R.id.secondary_call_info);
         mSecondaryCallProviderInfo = (View) view.findViewById(R.id.secondary_call_provider_info);
         mPhoto = (ImageView) view.findViewById(R.id.photo);
+        mCallStateButton = view.findViewById(R.id.callStateButton);
         mCallStateIcon = (ImageView) view.findViewById(R.id.callStateIcon);
         mCallStateLabel = (TextView) view.findViewById(R.id.callStateLabel);
         mCallNumberAndLabel = view.findViewById(R.id.labelAndNumber);
@@ -194,16 +195,15 @@
             }
         });
 
-        mHandoffButton = (ImageButton) view.findViewById(R.id.handoffButton);
-        mHandoffButton.setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) {
-                getPresenter().connectionHandoffClicked();
-            }
-        });
-        ViewUtil.setupFloatingActionButton(mHandoffButton, getResources());
-
         mPrimaryName.setElegantTextHeight(false);
         mCallStateLabel.setElegantTextHeight(false);
+
+        mCallStateButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                getPresenter().phoneAccountClicked();
+            }
+        });
     }
 
     @Override
@@ -215,10 +215,6 @@
         }
     }
 
-    public void setShowConnectionHandoff(boolean showConnectionHandoff) {
-        Log.v(this, "setShowConnectionHandoff: " + showConnectionHandoff);
-    }
-
     @Override
     public void setPrimaryName(String name, boolean nameIsNumber) {
         if (TextUtils.isEmpty(name)) {
@@ -327,21 +323,15 @@
 
     @Override
     public void setCallState(int state, int cause, boolean bluetoothOn, String connectionLabel,
-            Drawable connectionIcon, String gatewayNumber, boolean isWiFi, boolean isHandoffCapable,
-            boolean isHandoffPending) {
-        String callStateLabel = null;
-
+            Drawable connectionIcon, String gatewayNumber) {
         boolean isGatewayCall = !TextUtils.isEmpty(gatewayNumber);
-        callStateLabel = getCallStateLabelFromState(state, cause, connectionLabel, isWiFi,
-                isGatewayCall);
+        String callStateLabel = getCallStateLabelFromState(
+                state, cause, connectionLabel, isGatewayCall);
 
         Log.v(this, "setCallState " + callStateLabel);
         Log.v(this, "DisconnectCause " + DisconnectCause.toString(cause));
         Log.v(this, "bluetooth on " + bluetoothOn);
         Log.v(this, "gateway " + connectionLabel + gatewayNumber);
-        Log.v(this, "isWiFi " + isWiFi);
-        Log.v(this, "isHandoffCapable " + isHandoffCapable);
-        Log.v(this, "isHandoffPending " + isHandoffPending);
 
         // Update the call state label and icon.
         if (!TextUtils.isEmpty(callStateLabel)) {
@@ -359,7 +349,6 @@
             if (state == Call.State.ACTIVE || state == Call.State.CONFERENCED) {
                 mCallStateLabel.clearAnimation();
             } else {
-                //TODO: add WiFi animation
                 mCallStateLabel.startAnimation(mPulseAnimation);
             }
         } else {
@@ -374,12 +363,6 @@
         if (Call.State.INCOMING == state) {
             setBluetoothOn(bluetoothOn);
         }
-
-        mHandoffButton.setEnabled(isHandoffCapable && !isHandoffPending);
-        mHandoffButton.setVisibility(isWiFi || mHandoffButton.isEnabled() ?
-                View.VISIBLE : View.GONE);
-        mHandoffButton.setImageResource(isWiFi ?
-                R.drawable.ic_in_call_wifi : R.drawable.ic_in_call_pstn);
     }
 
     private void showInternetCallLabel(boolean show) {
@@ -454,17 +437,16 @@
      *
      * Additional labels are applied as follows:
      *         1. All outgoing calls with display "Calling via [Provider]"
-     *         2. Ongoing calls will display the name of the provider or wifi connection
+     *         2. Ongoing calls will display the name of the provider
      *         2. Incoming calls will only display "Incoming via..." for accounts
      */
-    private String getCallStateLabelFromState(int state, int cause, String label, boolean isWiFi,
+    private String getCallStateLabelFromState(int state, int cause, String label,
             boolean isGatewayCall) {
         final Context context = getView().getContext();
         String callStateLabel = null;  // Label to display as part of the call banner
 
         boolean isSpecialCall = label != null;
-        boolean isAccountOrWifi = isSpecialCall && !isGatewayCall;
-        boolean isAccountOnly = isAccountOrWifi && !isWiFi;
+        boolean isAccount = isSpecialCall && !isGatewayCall;
 
         switch  (state) {
             case Call.State.IDLE:
@@ -473,7 +455,7 @@
             case Call.State.ACTIVE:
                 // We normally don't show a "call state label" at all in this state
                 // (but we can use the call state label to display the provider name).
-                if (isAccountOrWifi) {
+                if (isAccount) {
                     callStateLabel = label;
                 }
                 break;
@@ -492,7 +474,7 @@
                 break;
             case Call.State.INCOMING:
             case Call.State.CALL_WAITING:
-                if (isAccountOnly) {
+                if (isAccount) {
                     callStateLabel = context.getString(R.string.incoming_via_template, label);
                 } else {
                     callStateLabel = context.getString(R.string.card_title_incoming_call);
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 272e99f..9d3148a 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -55,8 +55,6 @@
     private CallTimer mCallTimer;
     private Context mContext;
 
-    private boolean mIsWiFiCachedValue;
-
     public CallCardPresenter() {
         // create the call timer
         mCallTimer = new CallTimer(new Runnable() {
@@ -189,19 +187,11 @@
             callState = mPrimary.getState();
             final boolean bluetoothOn =
                     (AudioModeProvider.getInstance().getAudioMode() == AudioMode.BLUETOOTH);
-            boolean isHandoffCapable = isHandoffCapable();
-            boolean isHandoffPending = isHandoffPending();
-
-            boolean isWiFi = isWifiCall();
-            // Cache the value so the UI doesn't change when the call ends.
-            mIsWiFiCachedValue = isWiFi;
 
             getUi().setCallState(callState, mPrimary.getDisconnectCause(), bluetoothOn,
-                    getConnectionLabel(), getConnectionIcon(), getGatewayNumber(), isWiFi,
-                    isHandoffCapable, isHandoffPending);
+                    getConnectionLabel(), getConnectionIcon(), getGatewayNumber());
         } else {
-            getUi().setCallState(callState, DisconnectCause.NOT_VALID, false, null, null, null,
-                    mIsWiFiCachedValue, false, false);
+            getUi().setCallState(callState, DisconnectCause.NOT_VALID, false, null, null, null);
         }
 
         final boolean enableEndCallButton = Call.State.isConnected(callState) &&
@@ -215,25 +205,10 @@
             final boolean bluetoothOn = (AudioMode.BLUETOOTH == mode);
 
             getUi().setCallState(mPrimary.getState(), mPrimary.getDisconnectCause(), bluetoothOn,
-                    getConnectionLabel(), getConnectionIcon(), getGatewayNumber(), isWifiCall(),
-                    isHandoffCapable(), isHandoffPending());
+                    getConnectionLabel(), getConnectionIcon(), getGatewayNumber());
         }
     }
 
-    private boolean isWifiCall() {
-        CallServiceDescriptor descriptor = mPrimary.getCurrentCallServiceDescriptor();
-        return descriptor != null &&
-                descriptor.getNetworkType() == CallServiceDescriptor.FLAG_WIFI;
-    }
-
-    private boolean isHandoffCapable() {
-        return mPrimary.can(CallCapabilities.CONNECTION_HANDOFF);
-    }
-
-    private boolean isHandoffPending() {
-        return mPrimary.getHandoffCallServiceDescriptor() != null;
-    }
-
     @Override
     public void onSupportedAudioMode(int mask) {
     }
@@ -257,12 +232,11 @@
         }
     }
 
-    public void connectionHandoffClicked() {
+    public void phoneAccountClicked() {
         if (mPrimary == null) {
             return;
         }
-
-        TelecommAdapter.getInstance().handoffCall(mPrimary.getCallId());
+        TelecommAdapter.getInstance().phoneAccountClicked(mPrimary.getCallId());
     }
 
     private boolean areCallsSame(Call call1, Call call2) {
@@ -437,9 +411,6 @@
      * Return the Drawable object of the icon to display to the left of the connection label.
      */
     private Drawable getConnectionIcon() {
-        if (mIsWiFiCachedValue == true) {
-            return mContext.getResources().getDrawable(R.drawable.ic_in_call_wifi);
-        }
         PhoneAccount account = mPrimary.getAccount();
         if (account != null) {
             return account.getIcon(mContext);
@@ -449,7 +420,7 @@
 
     /**
      * Returns the label (line of text above the number/name) for any given call.
-     * For example, "calling via [Account/Google Voice/Wifi]" for outgoing calls.
+     * For example, "calling via [Account/Google Voice]" for outgoing calls.
      */
     private String getConnectionLabel() {
         if (hasOutgoingGatewayCall() && getUi() != null) {
@@ -465,11 +436,8 @@
             }
         }
         PhoneAccount account = mPrimary.getAccount();
-        if (mIsWiFiCachedValue == true || account != null) {
-            // Label will be either account name or WiFi connection
-            // TODO: get the name of the wifi connection
-            String wifiString = mContext.getString(R.string.wifi_constant);
-            return account == null? wifiString : account.getLabel(mContext);
+        if (account != null) {
+            return account.getLabel(mContext);
         }
         return null;
     }
@@ -552,8 +520,7 @@
                 String providerLabel, Drawable providerIcon, boolean isConference,
                 boolean isGeneric);
         void setCallState(int state, int cause, boolean bluetoothOn, String connectionLabel,
-                Drawable connectionIcon, String gatewayNumber, boolean isWifi,
-                boolean isHandoffCapable, boolean isHandoffPending);
+                Drawable connectionIcon, String gatewayNumber);
         void setPrimaryCallElapsedTime(boolean show, String duration);
         void setPrimaryName(String name, boolean nameIsNumber);
         void setPrimaryImage(Drawable image);
diff --git a/InCallUI/src/com/android/incallui/InCallServiceImpl.java b/InCallUI/src/com/android/incallui/InCallServiceImpl.java
index c129208..123e981 100644
--- a/InCallUI/src/com/android/incallui/InCallServiceImpl.java
+++ b/InCallUI/src/com/android/incallui/InCallServiceImpl.java
@@ -126,7 +126,6 @@
         call.setGatewayInfo(telecommCall.getGatewayInfo());
         call.setAccount(telecommCall.getAccount());
         call.setCurrentCallServiceDescriptor(telecommCall.getCurrentCallServiceDescriptor());
-        call.setHandoffCallServiceDescriptor(telecommCall.getHandoffCallServiceDescriptor());
         call.setState(translateState(telecommCall.getState()));
         call.setParentId(telecommCall.getParentCallId());
         call.setChildCallIds(telecommCall.getChildCallIds());
diff --git a/InCallUI/src/com/android/incallui/TelecommAdapter.java b/InCallUI/src/com/android/incallui/TelecommAdapter.java
index 1b50c03..620a9bd 100644
--- a/InCallUI/src/com/android/incallui/TelecommAdapter.java
+++ b/InCallUI/src/com/android/incallui/TelecommAdapter.java
@@ -172,11 +172,11 @@
         }
     }
 
-    void handoffCall(String callId) {
+    void phoneAccountClicked(String callId) {
         if (mAdapter != null) {
-            mAdapter.handoffCall(callId);
+            mAdapter.phoneAccountClicked(callId);
         } else {
-            Log.e(this, "error handoffCall, mAdapter is null");
+            Log.e(this, "error phoneAccountClicked, mAdapter is null");
         }
     }
 
