diff --git a/lib/models/Courseware/BlockTypes/BlockType.php b/lib/models/Courseware/BlockTypes/BlockType.php
index 98e24aef69bbbfa0a7f1320367ccc46163a4f362..c1429157791fc3871a11ce702919254318a20b3b 100755
--- a/lib/models/Courseware/BlockTypes/BlockType.php
+++ b/lib/models/Courseware/BlockTypes/BlockType.php
@@ -302,6 +302,15 @@ abstract class BlockType
      */
     protected function copyFileById(string $fileId, string $rangeId): string
     {
+        if ($this->block->container->structural_element->range_id === $rangeId) {
+            return $fileId;
+        }
+
+        static $file_map = [];
+        if (isset($file_map[$fileId])) {
+            return $file_map[$fileId];
+        }
+
         $user = \User::findCurrent();
         if ($file_ref = \FileRef::find($fileId)) {
             $copiedFile = \FileManager::copyFile(
@@ -310,7 +319,9 @@ abstract class BlockType
                 $user
             );
 
-            return isset($copiedFile->id) ? $copiedFile->id : '';
+            if (isset($copiedFile)) {
+                return $file_map[$fileId] = $copiedFile->id;
+            }
         }
 
         return '';
@@ -326,6 +337,15 @@ abstract class BlockType
      */
     protected function copyFolderById(string $folderId, string $rangeId): string
     {
+        if ($this->block->container->structural_element->range_id === $rangeId) {
+            return $folderId;
+        }
+
+        static $folder_map = [];
+        if (isset($folder_map[$folderId])) {
+            return $folder_map[$folderId];
+        }
+
         $user = \User::findCurrent();
         $destinationFolder = $this->getDestinationFolder($user, $rangeId);
         if ($sourceFolder = \Folder::find($folderId)) {
@@ -335,7 +355,7 @@ abstract class BlockType
                 $user
             );
 
-            return $copiedFolder->id;
+            return $folder_map[$folderId] = $copiedFolder->id;
         }
 
         return '';