diff --git a/src/com/android/contacts/quickcontact/QuickContactListFragment.java b/src/com/android/contacts/quickcontact/QuickContactListFragment.java
index 6a0b27b..761c854 100644
--- a/src/com/android/contacts/quickcontact/QuickContactListFragment.java
+++ b/src/com/android/contacts/quickcontact/QuickContactListFragment.java
@@ -17,6 +17,9 @@
 package com.android.contacts.quickcontact;
 
 import android.app.Fragment;
+import android.content.ClipboardManager;
+import android.content.ClipData;
+import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -25,12 +28,14 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.contacts.common.ContactPresenceIconUtil;
 import com.android.contacts.R;
@@ -44,6 +49,8 @@
     private RelativeLayout mFragmentContainer;
     private Listener mListener;
     private String mMimeType;
+    private ClipboardManager mClipBoard;
+    private Toast mLongPressToast;
 
     public QuickContactListFragment(String mimeType) {
         setRetainInstance(true);
@@ -58,6 +65,10 @@
         mListView.setItemsCanFocus(true);
 
         mFragmentContainer.setOnClickListener(mOutsideClickListener);
+        mClipBoard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
+        mLongPressToast = Toast.makeText(getActivity(),
+                R.string.toast_text_copied, Toast.LENGTH_SHORT);
+
         configureAdapter();
         return mFragmentContainer;
     }
@@ -121,6 +132,7 @@
                         (ImageView) resultView.findViewById(R.id.presence_icon);
 
                 actionsContainer.setOnClickListener(mPrimaryActionClickListener);
+                actionsContainer.setOnLongClickListener(mPrimaryActionLongClickListener);
                 actionsContainer.setTag(action);
                 alternateActionButton.setOnClickListener(mSecondaryActionClickListener);
                 alternateActionButton.setTag(action);
@@ -176,6 +188,19 @@
         }
     };
 
+    /** A data item was long clicked */
+    protected final OnLongClickListener mPrimaryActionLongClickListener = new OnLongClickListener() {
+        @Override
+        public boolean onLongClick(View v) {
+            final Action action = (Action) v.getTag();
+            ClipData clip = android.content.ClipData.newPlainText(
+                    action.getSubtitle(), action.getBody());
+            mClipBoard.setPrimaryClip(clip);
+            mLongPressToast.show();
+            return true;
+        }
+    };
+
     /** A secondary action (SMS) was clicked */
     protected final OnClickListener mSecondaryActionClickListener = new OnClickListener() {
         @Override
