Index: /trunk/grails-app/controllers/AssetDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/AssetDetailedController.groovy	(revision 428)
+++ /trunk/grails-app/controllers/AssetDetailedController.groovy	(revision 429)
@@ -371,7 +371,5 @@
         }
 
-        if(result.error.code != "default.create.failure") {
-            flash.errorMessage = g.message(code: result.error.code, args: ["Asset"])
-        }
+        flash.errorMessage = g.message(code: result.error.code, args: ["Asset"])
 
         render(view:'copy', model:[assetInstance: result.assetInstance, assetToCopy: result.assetToCopy])
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 428)
+++ /trunk/grails-app/i18n/messages.properties	(revision 429)
@@ -8,8 +8,10 @@
 inventory.import.failure=Could not create inventory from supplied file, failed on line {0}, see {1}.
 
+asset.copy.subItem.create.failure=Could not complete operation, as sub item failed to save.
+asset.copy.subItem.too.many.failure=Could not complete operation, as there appears to be too many sub items.
 asset.copy.method.required=Please select a copy method for sub items.
 asset.copy.method=Copy Method
 asset.copy.method.help=Link creates a new asset and links it to EXISTING sub items. \
-    While copy creates a new asset and new sub items.
+    While copy creates a new asset and new sub items by appending '(id:#)' to create unique sub item names.
 asset.copy.asset.required=Please select an asset to copy.
 
Index: /trunk/grails-app/services/AssetService.groovy
===================================================================
--- /trunk/grails-app/services/AssetService.groovy	(revision 428)
+++ /trunk/grails-app/services/AssetService.groovy	(revision 429)
@@ -159,10 +159,13 @@
             // Copy subItems from level 2 and bellow.
             def copyAssetSubItem = { assetSubItemToCopy, parentItem ->
-                def assetSubItemInstance = new AssetSubItem(name: assetSubItemToCopy.name,
+                def nextCount = AssetSubItem.count() + 1
+                def baseName = assetSubItemToCopy.name.split('\\(id:')[0]
+                def name = baseName +'(id:'+nextCount+')'
+                def assetSubItemInstance = new AssetSubItem(name: name,
                                                                                             description: assetSubItemToCopy.description,
                                                                                             parentItem: parentItem)
 
                 if(assetSubItemInstance.hasErrors() || !assetSubItemInstance.save())
-                    return fail(field:"subItems", code:"default.create.failure")
+                    return fail(code:"asset.copy.subItem.create.failure")
 
                 def i = 0
@@ -172,5 +175,5 @@
                     i++
                     if(i > 100)
-                        fail(code:"default.create.failure")
+                        fail(code:"asset.copy.subItem.too.many.failure")
                     // Stop if an error is flagged.
                     if(result.error)
@@ -181,10 +184,13 @@
             // Copy the 1st level of subItems.
             def copyAssetSubItem1 = { assetSubItemToCopy ->
-                assetSubItemInstance1 = new AssetSubItem(name: assetSubItemToCopy.name,
+                def nextCount = AssetSubItem.count() + 1
+                def baseName = assetSubItemToCopy.name.split('\\(id:')[0]
+                def name = baseName +'(id:'+nextCount+')'
+                assetSubItemInstance1 = new AssetSubItem(name: name,
                                                                                         description: assetSubItemToCopy.description,
                                                                                         asset: result.assetInstance)
 
                 if(assetSubItemInstance1.hasErrors() || !assetSubItemInstance1.save())
-                    return fail(field:"assetSubItems", code:"default.create.failure")
+                    return fail(code:"asset.copy.subItem.create.failure")
 
                 result.assetInstance.addToAssetSubItems(assetSubItemInstance1)
@@ -196,5 +202,5 @@
                     i++
                     if(i > 100)
-                        fail(code:"default.create.failure")
+                        fail(code:"asset.copy.subItem.too.many.failure")
                     // Stop if an error is flagged.
                     if(result.error)
@@ -217,5 +223,5 @@
                 i++
                 if(i > 100)
-                    fail(code:"default.create.failure")
+                    fail(code:"asset.copy.subItem.too.many.failure")
                 // Stop if an error is flagged.
                 if(result.error)
