diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index b388d28..d4bfc49 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1451,9 +1451,14 @@
         }
 
         if (info == null) {
-            info = InstallShortcutReceiver.fromShortcutIntent(this, data);
+            // Legacy shortcuts are only supported for primary profile.
+            info = Process.myUserHandle().equals(args.user)
+                    ? InstallShortcutReceiver.fromShortcutIntent(this, data) : null;
 
-            if (info == null || !new PackageManagerHelper(this).hasPermissionForActivity(
+            if (info == null) {
+                Log.e(TAG, "Unable to parse a valid custom shortcut result");
+                return;
+            } else if (!new PackageManagerHelper(this).hasPermissionForActivity(
                     info.intent, args.getPendingIntent().getComponent().getPackageName())) {
                 // The app is trying to add a shortcut without sufficient permissions
                 Log.e(TAG, "Ignoring malicious intent " + info.intent.toUri(0));
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
index 2743379..d7e35a2 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
@@ -20,6 +20,8 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.LauncherActivityInfo;
 import android.content.pm.LauncherApps;
+import android.os.Build;
+import android.os.Process;
 import android.os.UserHandle;
 import android.util.Log;
 
@@ -44,15 +46,20 @@
     @Override
     public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList() {
         List<ShortcutConfigActivityInfo> result = new ArrayList<>();
+        UserHandle myUser = Process.myUserHandle();
 
         try {
             Method m = LauncherApps.class.getDeclaredMethod("getShortcutConfigActivityList",
                     String.class, UserHandle.class);
             for (UserHandle user : UserManagerCompat.getInstance(mContext).getUserProfiles()) {
+                boolean ignoreTargetSdk = myUser.equals(user);
                 List<LauncherActivityInfo> activities =
                         (List<LauncherActivityInfo>) m.invoke(mLauncherApps, null, user);
                 for (LauncherActivityInfo activityInfo : activities) {
-                    result.add(new ShortcutConfigActivityInfoVO(activityInfo));
+                    if (ignoreTargetSdk || activityInfo.getApplicationInfo().targetSdkVersion >=
+                            Build.VERSION_CODES.O) {
+                        result.add(new ShortcutConfigActivityInfoVO(activityInfo));
+                    }
                 }
             }
         } catch (Exception e) {
diff --git a/src/com/android/launcher3/compat/PinItemRequestCompat.java b/src/com/android/launcher3/compat/PinItemRequestCompat.java
index 550bcc3..1308cba 100644
--- a/src/com/android/launcher3/compat/PinItemRequestCompat.java
+++ b/src/com/android/launcher3/compat/PinItemRequestCompat.java
@@ -24,6 +24,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import com.android.launcher3.Utilities;
+
 /**
  * A wrapper around platform implementation of PinItemRequestCompat until the
  * updated SDK is available.
@@ -115,6 +117,9 @@
             };
 
     public static PinItemRequestCompat getPinItemRequest(Intent intent) {
+        if (!Utilities.isAtLeastO()) {
+            return null;
+        }
         Parcelable extra = intent.getParcelableExtra(EXTRA_PIN_ITEM_REQUEST);
         return extra == null ? null : new PinItemRequestCompat(extra);
     }
diff --git a/src/com/android/launcher3/util/PendingRequestArgs.java b/src/com/android/launcher3/util/PendingRequestArgs.java
index 538e1df..dabd40d 100644
--- a/src/com/android/launcher3/util/PendingRequestArgs.java
+++ b/src/com/android/launcher3/util/PendingRequestArgs.java
@@ -53,6 +53,7 @@
 
     public PendingRequestArgs(Parcel parcel) {
         readFromValues(ContentValues.CREATOR.createFromParcel(parcel));
+        user = parcel.readParcelable(null);
 
         mArg1 = parcel.readInt();
         mObjectType = parcel.readInt();
@@ -69,6 +70,7 @@
         ContentValues itemValues = new ContentValues();
         writeToValues(new ContentWriter(itemValues, null));
         itemValues.writeToParcel(dest, flags);
+        dest.writeParcelable(user, flags);
 
         dest.writeInt(mArg1);
         dest.writeInt(mObjectType);
