diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 3636107..1823451 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -4429,7 +4429,9 @@
     public void dismissFolderCling(View v) {
         mLauncherClings.dismissFolderCling(v);
     }
-
+    public void markFolderClingDismissedIfNecessary() {
+        mLauncherClings.markFolderClingDismissedIfNecessary();
+    }
 
     /**
      * To be overridden by subclasses to indicate that there is an activity to launch
diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java
index 97138ee..a2cce1a 100644
--- a/src/com/android/launcher3/LauncherClings.java
+++ b/src/com/android/launcher3/LauncherClings.java
@@ -315,12 +315,6 @@
         editor.commit();
     }
 
-    public void markFolderClingDismissed() {
-        SharedPreferences.Editor editor = mLauncher.getSharedPrefs().edit();
-        editor.putBoolean(LauncherClings.FOLDER_CLING_DISMISSED_KEY, true);
-        editor.apply();
-    }
-
     /** Removes the cling outright from the DragLayer */
     private void removeCling(int id) {
         final View cling = mLauncher.findViewById(id);
@@ -415,6 +409,15 @@
         mLauncher.getSearchBar().showSearchBar(true);
     }
 
+    public void markFolderClingDismissedIfNecessary() {
+        SharedPreferences prefs = mLauncher.getSharedPrefs();
+        if (!prefs.getBoolean(FOLDER_CLING_DISMISSED_KEY, false)) {
+            SharedPreferences.Editor editor = prefs.edit();
+            editor.putBoolean(FOLDER_CLING_DISMISSED_KEY, true);
+            editor.apply();
+        }
+    }
+
     public void dismissMigrationClingCopyApps(View v) {
         // Copy the shortcuts from the old database
         LauncherModel model = mLauncher.getModel();
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 0669f3a..d734abd 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -2719,8 +2719,9 @@
             BubbleTextView icon = (BubbleTextView) child;
             icon.clearPressedOrFocusedBackground();
         } else if (child instanceof FolderIcon) {
-            // Dismiss the folder cling if we haven't already
-            mLauncher.getLauncherClings().markFolderClingDismissed();
+            // The folder cling isn't flexible enough to be shown in non-default workspace positions
+            // Also if they are dragging it a folder, we assume they don't need to see the cling.
+            mLauncher.markFolderClingDismissedIfNecessary();
         }
 
         if (child.getTag() == null || !(child.getTag() instanceof ItemInfo)) {
@@ -3066,6 +3067,10 @@
                 // cell also contains a shortcut, then create a folder with the two shortcuts.
                 if (!mInScrollArea && createUserFolderIfNecessary(cell, container,
                         dropTargetLayout, mTargetCell, distance, false, d.dragView, null)) {
+                    // The folder cling isn't flexible enough to be shown in non-default workspace
+                    // positions. Also if they are creating a folder, we assume they don't need to
+                    // see the cling.
+                    mLauncher.markFolderClingDismissedIfNecessary();
                     return;
                 }
 
@@ -3965,6 +3970,10 @@
                 d.postAnimationRunnable = exitSpringLoadedRunnable;
                 if (createUserFolderIfNecessary(view, container, cellLayout, mTargetCell, distance,
                         true, d.dragView, d.postAnimationRunnable)) {
+                    // The folder cling isn't flexible enough to be shown in non-default workspace
+                    // positions. Also if they are creating a folder, we assume they don't need to
+                    // see the cling.
+                    mLauncher.markFolderClingDismissedIfNecessary();
                     return;
                 }
                 if (addToExistingFolderIfNecessary(view, cellLayout, mTargetCell, distance, d,
