Index: /trunk/grails-app/controllers/InventoryItemDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/InventoryItemDetailedController.groovy	(revision 719)
+++ /trunk/grails-app/controllers/InventoryItemDetailedController.groovy	(revision 720)
@@ -430,9 +430,7 @@
 
         if(!result.error) {
-            def possibleAlternateItems = inventoryItemService.getPossibleAlternateItems(result.inventoryItemInstance)
             def suppliers = Supplier.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
 
             return [ inventoryItemInstance : result.inventoryItemInstance,
-                            possibleAlternateItems: possibleAlternateItems,
                             suppliers: suppliers]
         }
@@ -457,8 +455,6 @@
         }
 
-        def possibleAlternateItems = inventoryItemService.getPossibleAlternateItems(result.inventoryItemInstance)
         def suppliers = Supplier.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
         render(view:'edit', model:[inventoryItemInstance: result.inventoryItemInstance.attach(),
-                                                possibleAlternateItems: possibleAlternateItems,
                                                 suppliers: suppliers])
     }
Index: /trunk/grails-app/domain/InventoryItem.groovy
===================================================================
--- /trunk/grails-app/domain/InventoryItem.groovy	(revision 719)
+++ /trunk/grails-app/domain/InventoryItem.groovy	(revision 720)
@@ -23,6 +23,5 @@
     }
 
-    static hasMany = [alternateItems: InventoryItem,
-                                    spareFor: Asset,
+    static hasMany = [spareFor: Asset,
                                     inventoryMovements: InventoryMovement,
                                     alternateSuppliers: Supplier]
@@ -60,28 +59,3 @@
     }
 
-    def afterInsert = {
-        addReverseAlternateItems()
-    }
-
-    /**
-    * Add reverse alternateItem references.
-    */
-    def addReverseAlternateItems() {
-        this.alternateItems.each() {
-            if( !it.alternateItems?.contains(this) )
-                it.addToAlternateItems(this)
-        }
-    }
-
-    /**
-   * Remove all reverse alternateItem references.
-    * On update: reverse alternateItem handling must be done in the
-    * service class since the before assignment alternateItems are required.
-    */
-    def removeReverseAlternateItems(alternateItems = this.alternateItems) {
-        alternateItems.each() {
-            it.removeFromAlternateItems(this)
-        }
-    }
-
 }
Index: /trunk/grails-app/services/CreateDataService.groovy
===================================================================
--- /trunk/grails-app/services/CreateDataService.groovy	(revision 719)
+++ /trunk/grails-app/services/CreateDataService.groovy	(revision 720)
@@ -1297,5 +1297,4 @@
                                                                                     estimatedUnitPriceAmount: 2.50,
                                                                                     estimatedUnitPriceCurrency: currency,
-                                                                                    alternateItems: InventoryItem.get(1),
                                                                                     unitsInStock: 2,
                                                                                     reorderPoint: 0)
Index: /trunk/grails-app/services/InventoryCsvService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryCsvService.groovy	(revision 719)
+++ /trunk/grails-app/services/InventoryCsvService.groovy	(revision 720)
@@ -59,5 +59,5 @@
                                                         "inventoryGroup", "inventoryType",
                                                         "suppliersPartNumber", "preferredSupplier", "alternateSuppliers",
-                                                        "alternateItems", "spareFor"]
+                                                        "spareFor"]
 
             def siteInstance
@@ -67,5 +67,4 @@
             def supplierTypeUnknown = SupplierType.get(1)
             def spareForInstance
-            def alternateItemInstance
             def inventoryTypeInstance
             def unitOfMeasureInstance
@@ -85,5 +84,4 @@
 
             def tempSpareFor = []
-            def tempAlternateItems = []
 
             def nextLine = {
@@ -289,28 +287,4 @@
 
                     inventoryParams.alternateSuppliers.add(alternateSupplierInstance)
-                }
-
-                // AlternateItems.
-                tempAlternateItems = parseInputList(inventoryParams.alternateItems)
-                inventoryParams.alternateItems = []
-
-                for(tempAlternateItem in tempAlternateItems) {
-                    tempAlternateItem = WordUtils.capitalize(tempAlternateItem)
-                    alternateItemInstance = InventoryItem.findByName(tempAlternateItem)
-                    if(!alternateItemInstance) {
-                        alternateItemInstance = new InventoryItem(name: tempAlternateItem,
-                                                                                                description: "Generated from alternateItems during import, details may not be correct.",
-                                                                                                reorderPoint: 0,
-                                                                                                inventoryGroup: inventoryGroupInstance,
-                                                                                                inventoryType: inventoryTypeInstance,
-                                                                                                unitOfMeasure: unitOfMeasureInstance,
-                                                                                                inventoryLocation: inventoryLocationInstance)
-                        if(!alternateItemInstance.save()) {
-                            log.error "Failed to create alternateItems on line: " + lineNumber
-                            return fail(code: "inventory.import.failure", args: [lineNumber, logFileLink])
-                        }
-                    }
-
-                    inventoryParams.alternateItems.add(alternateItemInstance)
                 }
 
Index: /trunk/grails-app/services/InventoryItemService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryItemService.groovy	(revision 719)
+++ /trunk/grails-app/services/InventoryItemService.groovy	(revision 720)
@@ -13,17 +13,4 @@
     def sessionFactory
     def propertyInstanceMap = org.codehaus.groovy.grails.plugins.DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP
-
-    /**
-    * Prepare a sorted list of possible alternateItems.
-    */
-    def getPossibleAlternateItems(inventoryItemInstance) {
-        def criteria = inventoryItemInstance.createCriteria()
-        def possibleAlternateItems = criteria {
-            and {
-                eq('isActive', true)
-                notEqual('id', inventoryItemInstance.id)
-            }
-        }.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
-    }
 
     /**
@@ -129,6 +116,4 @@
                 return fail(code:"inventoryMovement.still.associated")
 
-            result.inventoryItemInstance.removeReverseAlternateItems()
-
             try {
                 result.inventoryItemInstance.delete(flush:true)
@@ -181,13 +166,8 @@
             }
 
-            def previousAlternateItems = new ArrayList(result.inventoryItemInstance.alternateItems)
-
             result.inventoryItemInstance.properties = params
 
             if(result.inventoryItemInstance.hasErrors() || !result.inventoryItemInstance.save())
                 return fail(code:"default.update.failure")
-
-            result.inventoryItemInstance.removeReverseAlternateItems(previousAlternateItems)
-            result.inventoryItemInstance.addReverseAlternateItems()
 
             // Success.
Index: /trunk/grails-app/views/inventoryItemDetailed/edit.gsp
===================================================================
--- /trunk/grails-app/views/inventoryItemDetailed/edit.gsp	(revision 719)
+++ /trunk/grails-app/views/inventoryItemDetailed/edit.gsp	(revision 720)
@@ -220,17 +220,4 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="alternateItems">Alternate Items:</label>
-                                </td>
-                                <td valign="top" class="value ${hasErrors(bean:inventoryItemInstance,field:'alternateItems','errors')}">
-                                    <g:select name="alternateItems"
-                                                        from="${possibleAlternateItems}"
-                                                        size="5" multiple="yes" optionKey="id"
-                                                        value="${inventoryItemInstance?.alternateItems.id}" noSelection="['':'--None--']"/>
-
-                                </td>
-                            </tr>
-
-                            <tr class="prop">
-                                <td valign="top" class="name">
                                     <label for="inventoryGroup">Inventory Group:</label>
                                 </td>
Index: /trunk/grails-app/views/inventoryItemDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/inventoryItemDetailed/show.gsp	(revision 719)
+++ /trunk/grails-app/views/inventoryItemDetailed/show.gsp	(revision 720)
@@ -180,16 +180,4 @@
 
                                     <tr class="prop">
-                                        <td valign="top" class="name">Alternate Items:</td>
-
-                                        <td  valign="top" style="text-align:left;" class="value">
-                                            <ul>
-                                            <g:each var="a" in="${ inventoryItemInstance.alternateItems.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) } }">
-                                                <li><g:link controller="inventoryItemDetailed" action="show" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
-                                            </g:each>
-                                            </ul>
-                                        </td>
-                                    </tr>
-
-                                    <tr class="prop">
                                         <td valign="top" class="name">Spare For:</td>
 
