diff --git a/src/com/android/contacts/ContactLoader.java b/src/com/android/contacts/ContactLoader.java
index 2ec1cbf..7ed9d86 100644
--- a/src/com/android/contacts/ContactLoader.java
+++ b/src/com/android/contacts/ContactLoader.java
@@ -413,7 +413,6 @@
                 RawContacts.SYNC3,
                 RawContacts.SYNC4,
                 RawContacts.DELETED,
-                RawContacts.IS_RESTRICTED,
                 RawContacts.NAME_VERIFIED,
 
                 Contacts.Entity.DATA_ID,
@@ -481,46 +480,45 @@
         public final static int SYNC3 = 22;
         public final static int SYNC4 = 23;
         public final static int DELETED = 24;
-        public final static int IS_RESTRICTED = 25;
-        public final static int NAME_VERIFIED = 26;
+        public final static int NAME_VERIFIED = 25;
 
-        public final static int DATA_ID = 27;
-        public final static int DATA1 = 28;
-        public final static int DATA2 = 29;
-        public final static int DATA3 = 30;
-        public final static int DATA4 = 31;
-        public final static int DATA5 = 32;
-        public final static int DATA6 = 33;
-        public final static int DATA7 = 34;
-        public final static int DATA8 = 35;
-        public final static int DATA9 = 36;
-        public final static int DATA10 = 37;
-        public final static int DATA11 = 38;
-        public final static int DATA12 = 39;
-        public final static int DATA13 = 40;
-        public final static int DATA14 = 41;
-        public final static int DATA15 = 42;
-        public final static int DATA_SYNC1 = 43;
-        public final static int DATA_SYNC2 = 44;
-        public final static int DATA_SYNC3 = 45;
-        public final static int DATA_SYNC4 = 46;
-        public final static int DATA_VERSION = 47;
-        public final static int IS_PRIMARY = 48;
-        public final static int IS_SUPERPRIMARY = 49;
-        public final static int MIMETYPE = 50;
-        public final static int RES_PACKAGE = 51;
+        public final static int DATA_ID = 26;
+        public final static int DATA1 = 27;
+        public final static int DATA2 = 28;
+        public final static int DATA3 = 29;
+        public final static int DATA4 = 30;
+        public final static int DATA5 = 31;
+        public final static int DATA6 = 32;
+        public final static int DATA7 = 33;
+        public final static int DATA8 = 34;
+        public final static int DATA9 = 35;
+        public final static int DATA10 = 36;
+        public final static int DATA11 = 37;
+        public final static int DATA12 = 38;
+        public final static int DATA13 = 39;
+        public final static int DATA14 = 40;
+        public final static int DATA15 = 41;
+        public final static int DATA_SYNC1 = 42;
+        public final static int DATA_SYNC2 = 43;
+        public final static int DATA_SYNC3 = 44;
+        public final static int DATA_SYNC4 = 45;
+        public final static int DATA_VERSION = 46;
+        public final static int IS_PRIMARY = 47;
+        public final static int IS_SUPERPRIMARY = 48;
+        public final static int MIMETYPE = 49;
+        public final static int RES_PACKAGE = 50;
 
-        public final static int GROUP_SOURCE_ID = 52;
+        public final static int GROUP_SOURCE_ID = 51;
 
-        public final static int PRESENCE = 53;
-        public final static int CHAT_CAPABILITY = 54;
-        public final static int STATUS = 55;
-        public final static int STATUS_RES_PACKAGE = 56;
-        public final static int STATUS_ICON = 57;
-        public final static int STATUS_LABEL = 58;
-        public final static int STATUS_TIMESTAMP = 59;
+        public final static int PRESENCE = 52;
+        public final static int CHAT_CAPABILITY = 53;
+        public final static int STATUS = 54;
+        public final static int STATUS_RES_PACKAGE = 55;
+        public final static int STATUS_ICON = 56;
+        public final static int STATUS_LABEL = 57;
+        public final static int STATUS_TIMESTAMP = 58;
 
-        public final static int PHOTO_URI = 60;
+        public final static int PHOTO_URI = 59;
     }
 
     private static class DirectoryQuery {
@@ -764,7 +762,6 @@
             cursorColumnToContentValues(cursor, cv, ContactQuery.DELETED);
             cursorColumnToContentValues(cursor, cv, ContactQuery.CONTACT_ID);
             cursorColumnToContentValues(cursor, cv, ContactQuery.STARRED);
-            cursorColumnToContentValues(cursor, cv, ContactQuery.IS_RESTRICTED);
             cursorColumnToContentValues(cursor, cv, ContactQuery.NAME_VERIFIED);
 
             return cv;
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
index 0633bf8..8f08ccd 100644
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ b/src/com/android/contacts/GroupMemberLoader.java
@@ -82,8 +82,6 @@
         Uri uri = Data.CONTENT_URI;
         uri = uri.buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                 String.valueOf(Directory.DEFAULT)).build();
-        // TODO: Bring back dataRestriction
-        // uri = applyDataRestriction(uri);
         return uri;
     }
 
diff --git a/src/com/android/contacts/detail/ContactLoaderFragment.java b/src/com/android/contacts/detail/ContactLoaderFragment.java
index 5504473..b7cb2b7 100644
--- a/src/com/android/contacts/detail/ContactLoaderFragment.java
+++ b/src/com/android/contacts/detail/ContactLoaderFragment.java
@@ -98,8 +98,6 @@
 
     private ContactLoader.Result mContactData;
 
-    private boolean mAllRestricted;
-
     public ContactLoaderFragment() {
     }
 
@@ -189,16 +187,6 @@
                 mContactData = null;
             }
 
-            mAllRestricted = true;
-
-            for (Entity entity: mContactData.getEntities()) {
-                final ContentValues entValues = entity.getEntityValues();
-                // Mark when this contact has any unrestricted components
-                Integer restricted = entValues.getAsInteger(RawContacts.IS_RESTRICTED);
-                final boolean isRestricted = restricted != null && restricted != 0;
-                if (!isRestricted) mAllRestricted = false;
-            }
-
             if (mListener != null) {
                 if (mContactData == null) {
                     mListener.onContactNotFound();
@@ -208,6 +196,7 @@
             }
         }
 
+        @Override
         public void onLoaderReset(Loader<ContactLoader.Result> loader) {
             mContactData = null;
             if (mListener != null) {
@@ -259,7 +248,7 @@
     }
 
     public boolean isContactShareable() {
-        return mContactData != null && !mContactData.isDirectoryEntry() && !mAllRestricted;
+        return mContactData != null && !mContactData.isDirectoryEntry();
     }
 
     @Override
@@ -281,7 +270,6 @@
                 return true;
             }
             case R.id.menu_share: {
-                if (mAllRestricted) return false;
                 if (mContactData == null) return false;
 
                 final String lookupKey = mContactData.getLookupKey();
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 06e31e3..a03ddee 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -20,7 +20,6 @@
 import com.android.contacts.widget.IndexerListAdapter;
 import com.android.contacts.widget.TextWithHighlightingFactory;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.CursorLoader;
 import android.database.Cursor;
@@ -61,7 +60,6 @@
     private int mDisplayOrder;
     private int mSortOrder;
     private boolean mNameHighlightingEnabled;
-    private boolean mDataRestrictedByCallingPackage;
 
     private boolean mDisplayPhotos;
     private boolean mQuickContactEnabled;
@@ -278,43 +276,6 @@
         mIncludeProfile = includeProfile;
     }
 
-    public boolean isDataRestrictedByCallingPackage() {
-        return mDataRestrictedByCallingPackage;
-    }
-
-    public void setDataRestrictedByCallingPackage(boolean flag) {
-        mDataRestrictedByCallingPackage = flag;
-    }
-
-    /**
-     * Adds a parameter to the URI that ensures that only unrestricted data
-     * is included in the list, if {@link #isDataRestrictedByCallingPackage()} is true.
-     */
-    protected Uri applyDataRestriction(Uri uri) {
-        if (!mDataRestrictedByCallingPackage) {
-            return uri;
-        }
-
-        return applyDataRestriction(uri.buildUpon()).build();
-    }
-
-    /**
-     * See {@link #applyDataRestriction(Uri)}.
-     */
-    protected Uri.Builder applyDataRestriction(Uri.Builder builder) {
-        if (!mDataRestrictedByCallingPackage) {
-            return builder;
-        }
-
-        String callingPackage = ((Activity)getContext()).getCallingPackage();
-        if (!TextUtils.isEmpty(callingPackage)) {
-            return builder.appendQueryParameter(
-                    ContactsContract.REQUESTING_PACKAGE_PARAM_KEY, callingPackage);
-        }
-
-        return builder;
-    }
-
     public void configureDirectoryLoader(DirectoryListLoader loader) {
         loader.setDirectorySearchMode(mDirectorySearchMode);
         loader.setLocalInvisibleDirectoryEnabled(LOCAL_INVISIBLE_DIRECTORY_ENABLED);
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 6bfca57..5d0f692 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -170,7 +170,6 @@
         super.configureAdapter();
 
         ContactEntryListAdapter adapter = getAdapter();
-        adapter.setDataRestrictedByCallingPackage(true);
 
         // If "Create new contact" is shown, don't display the empty list UI
         adapter.setEmptyListEnabled(!isCreateContactEnabled());
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 7f96906..30ba3b0 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -82,7 +82,6 @@
                 }
                 builder.appendQueryParameter(SearchSnippetColumns.SNIPPET_ARGS_PARAM_KEY,
                         SNIPPET_ARGS);
-                applyDataRestriction(builder);
                 loader.setUri(builder.build());
                 loader.setProjection(FILTER_PROJECTION);
             }
@@ -129,7 +128,6 @@
                     ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
                     .build();
         }
-        uri = applyDataRestriction(uri);
 
         // Include the user's personal profile.
         if (shouldIncludeProfile()) {
diff --git a/src/com/android/contacts/list/EmailAddressListAdapter.java b/src/com/android/contacts/list/EmailAddressListAdapter.java
index eae02b5..e1c8ea2 100644
--- a/src/com/android/contacts/list/EmailAddressListAdapter.java
+++ b/src/com/android/contacts/list/EmailAddressListAdapter.java
@@ -22,10 +22,9 @@
 import android.net.Uri;
 import android.net.Uri.Builder;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.ContactCounts;
 import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
@@ -75,7 +74,6 @@
         }
         builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                 String.valueOf(directoryId));
-        applyDataRestriction(builder);
         loader.setUri(builder.build());
         loader.setProjection(EMAILS_PROJECTION);
 
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index aabeebc..21a7846 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -90,7 +90,6 @@
 
             builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
                     String.valueOf(directoryId));
-            applyDataRestriction(builder);
             uri = builder.build();
             // TODO a projection that includes the search snippet
             loader.setProjection(PHONES_PROJECTION);
@@ -101,7 +100,6 @@
             if (isSectionHeaderDisplayEnabled()) {
                 uri = buildSectionIndexerUri(uri);
             }
-            uri = applyDataRestriction(uri);
 
             loader.setProjection(PHONES_PROJECTION);
         }
diff --git a/src/com/android/contacts/list/PostalAddressListAdapter.java b/src/com/android/contacts/list/PostalAddressListAdapter.java
index 86d465a..5642045 100644
--- a/src/com/android/contacts/list/PostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/PostalAddressListAdapter.java
@@ -63,7 +63,6 @@
     @Override
     public void configureLoader(CursorLoader loader, long directoryId) {
         Uri uri = buildSectionIndexerUri(StructuredPostal.CONTENT_URI);
-        uri = applyDataRestriction(uri);
         loader.setUri(uri);
         loader.setProjection(POSTALS_PROJECTION);
 
