Index: trunk/grails-app/controllers/AssetSubItemDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 351)
+++ trunk/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 352)
@@ -116,8 +116,10 @@
             flash.message = "AssetSubItem not found with id ${params.id}"
             redirect(action: "search")
-        }
-        else {
-            return [ assetSubItemInstance : assetSubItemInstance ]
-        }
+            return
+        }
+
+        def possibleParentItems = assetSubItemService.possibleParentItems(assetSubItemInstance)
+
+        return [ assetSubItemInstance : assetSubItemInstance, possibleParentItems: possibleParentItems ]
     }
 
@@ -137,15 +139,7 @@
             assetSubItemInstance.properties = params
 
-//             if(!assetSubItemInstance.asset && !assetSubItemInstance.parentItem) {
-//                 flash.message = "Either an asset or parentItem is required."
-//                 render(view:'edit',model:[assetSubItemInstance:assetSubItemInstance])
-//                 return
-//             }
-// 
-//             if(assetSubItemInstance.asset && assetSubItemInstance.parentItem) {
-//             flash.message = "Both an asset and parentItem may not be specified at the same time."
-//                 render(view:'edit',model:[parentItem:parentItem])
-//                 return
-//             }
+            if(assetSubItemInstance.assets) {
+                assetSubItemInstance.parentItem = null
+            }
 
             if(!assetSubItemInstance.hasErrors() && assetSubItemInstance.save(flush: true)) {
Index: trunk/grails-app/services/AssetService.groovy
===================================================================
--- trunk/grails-app/services/AssetService.groovy	(revision 351)
+++ trunk/grails-app/services/AssetService.groovy	(revision 352)
@@ -12,5 +12,8 @@
         def criteria = AssetSubItem.createCriteria()
         def possibleAssetSubItems = criteria.list() {
-            isNull("parentItem")
+            and {
+                eq('isActive', true)
+                isNull("parentItem")
+                }
         }
     }
Index: trunk/grails-app/services/AssetSubItemService.groovy
===================================================================
--- trunk/grails-app/services/AssetSubItemService.groovy	(revision 351)
+++ trunk/grails-app/services/AssetSubItemService.groovy	(revision 352)
@@ -2,4 +2,21 @@
 
     boolean transactional = false
+
+    /**
+    * Determines and returns sorted list of possible parent items.
+    * @param assetSubItemInstance The instance to prepare the list for.
+    * @returns A list of the possible parentItems.
+    */
+    def possibleParentItems(assetSubItemInstance) {
+        def criteria = AssetSubItem.createCriteria()
+        def possibleParentItems = criteria.list() {
+            and {
+                eq('isActive', true)
+                ne('id', assetSubItemInstance.id)
+                assetSubItemInstance.subItems.each() { notEqual('id', it.id) }
+                }
+        }
+        possibleParentItems.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
+    }
 
     def delete(params) {
Index: trunk/grails-app/views/assetSubItemDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/assetSubItemDetailed/edit.gsp	(revision 351)
+++ trunk/grails-app/views/assetSubItemDetailed/edit.gsp	(revision 352)
@@ -95,5 +95,6 @@
                                 </td>
                             </tr>
-                        
+
+                            
                             <tr class="prop">
                                 <td valign="top" class="name">
@@ -101,7 +102,12 @@
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:assetSubItemInstance,field:'parentItem','errors')}">
-                                    <g:select optionKey="id" from="${AssetSubItem.list()}" name="parentItem.id" value="${assetSubItemInstance?.parentItem?.id}" noSelection="['null':'']"></g:select>
+                                    <g:if test="${assetSubItemInstance.assets}">
+                                        Assigned to assets.
+                                    </g:if>
+                                    <g:else>
+                                        <g:select optionKey="id" from="${possibleParentItems}" name="parentItem.id" value="${assetSubItemInstance?.parentItem?.id}" noSelection="['null':'--None--']"></g:select>
+                                    </g:else>
                                 </td>
-                            </tr> 
+                            </tr>
 
                             <tr class="prop">
