Index: branches/features/purchaseOrders/grails-app/conf/BuildConfig.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/conf/BuildConfig.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/conf/BuildConfig.groovy	(revision 920)
@@ -19,14 +19,13 @@
 
 grails.war.resources = { stagingDir, args ->
-    // Remove some duplicate jars.
-    delete file: "${stagingDir}/WEB-INF/lib/jasperreports-2.0.5.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/jasperreports-3.1.2.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/aspectjrt-1.5.4.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/commons-digester-1.7.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/iText-2.0.8.jar"
+    // Remove some duplicate/not required jars.
+    // From export plugin lib dir.
     delete file: "${stagingDir}/WEB-INF/lib/iText-2.1.5.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/jfreechart-1.0.3.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/poi-3.0.2-FINAL-20080204.jar"
-    delete file: "${stagingDir}/WEB-INF/lib/facebook-2.0.4.jar"
+    // From acegi plugin lib dir.
+    delete file: "${stagingDir}/WEB-INF/lib/facebook-java-api-2.0.4.jar"
+    delete file: "${stagingDir}/WEB-INF/lib/easymock.jar"
+    delete file: "${stagingDir}/WEB-INF/lib/cas-client-core-3.1.1.jar"
+    delete file: "${stagingDir}/WEB-INF/lib/openid4java-0.9.2.jar"
+
 }
 
@@ -57,4 +56,21 @@
     }
 
+    plugins {
+        runtime ':acegi:0.5.3'
+        runtime ':export:0.7'
+        runtime ':filterpane:0.7'
+        runtime ':help-balloons:1.4'
+        runtime(':jasper:1.1.3') {
+            transitive = false
+        }
+        runtime ':navigation:1.1.1'
+        runtime ':quartz:0.4.2'
+        runtime ':richui:0.8'
+        runtime ':searchable:0.6-SNAPSHOT'
+
+        test ':geb:0.6-SNAPSHOT'
+        test ':spock:0.5-groovy-1.7'
+    }
+
     dependencies {
         // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.
@@ -62,23 +78,23 @@
         runtime 'mysql:mysql-connector-java:5.1.9'
 
+        // Japser plugin.
+        runtime('net.sf.jasperreports:jasperreports:3.7.2') {
+            excludes 'antlr', 'commons-beanutils', 'commons-collections', 'commons-logging',
+                    'ant', 'mondrian', 'commons-javaflow','barbecue', 'xml-apis-ext','xml-apis', 'xalan', 'groovy-all', 'hibernate', 'saaj-api', 'servlet-api',
+                    'xercesImpl','xmlParserAPIs','spring-core','bsh', 'spring-beans', 'jaxen', 'barcode4j','batik-svg-dom','batik-xml','batik-awt-util','batik-dom',
+                    'batik-css','batik-gvt','batik-script', 'batik-svggen','batik-util','batik-bridge','persistence-api','jdtcore','bcmail-jdk14','bcprov-jdk14','bctsp-jdk14'
+        }
         runtime('org.apache.poi:poi:3.5-FINAL') {
-            excludes 'servlet-api', 'commons-logging', 'log4j'
+            excludes 'log4j', 'commons-logging'
         }
 
-        runtime('net.sf.jasperreports:jasperreports:3.7.2') {
-            excludes 'xml-apis'
-        }
-
+        // Origin unknown, still required?
         runtime('org.apache.ant:ant:1.7.1')
         runtime('org.apache.ant:ant-launcher:1.7.1')
 
-        test("org.seleniumhq.selenium:selenium-htmlunit-driver:latest.release") {
+        test('org.seleniumhq.selenium:selenium-htmlunit-driver:latest.release') {
             excludes 'xml-apis'
         }
     }
-    plugins {
-        test ":geb:0.6-SNAPSHOT"
-        test ":spock:0.5-groovy-1.7"
-    }
 
 }
Index: branches/features/purchaseOrders/grails-app/conf/SecurityConfig.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/conf/SecurityConfig.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/conf/SecurityConfig.groovy	(revision 920)
@@ -44,6 +44,4 @@
     '/plugins/*/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
     '/plugins/*/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
-    '/classDiagram*': ['IS_AUTHENTICATED_FULLY'],
-    '/classDiagram/**': ['IS_AUTHENTICATED_FULLY'],
     '/login*': ['IS_AUTHENTICATED_ANONYMOUSLY'],
     '/login/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
Index: branches/features/purchaseOrders/grails-app/controllers/AppCoreController.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/controllers/AppCoreController.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/controllers/AppCoreController.groovy	(revision 920)
@@ -58,10 +58,11 @@
 
         // Build the plugins string.
-        def pluginProperties = grailsApplication.metadata.findAll {it.key.contains('plugin')}
-        pluginProperties.each() {
-            it.key = WordUtils.capitalize( (it.key + GString.EMPTY).split("\\.")[-1] )
-        }
-        pluginProperties = pluginProperties.sort { p1, p2 -> p1.key.compareToIgnoreCase(p2.key) }
-        def plugins = pluginProperties.collect{ it.key + '-' + it.value }.join(", ")
+        def userPlugins = org.codehaus.groovy.grails.plugins.PluginManagerHolder.pluginManager.userPlugins 
+
+        userPlugins = userPlugins.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
+
+        def plugins = userPlugins.collect{
+            WordUtils.capitalize(it.name) + '-' + it.version
+        }.join(", ")
 
         def sections = Section.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }
Index: branches/features/purchaseOrders/grails-app/controllers/AssetDetailedController.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/controllers/AssetDetailedController.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/controllers/AssetDetailedController.groovy	(revision 920)
@@ -164,9 +164,9 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
-//             def fmtAsset = { m ->
+//             def fmtAsset = { d, m ->
 //                     def r = ''
 //                     def assetInstance = Asset.findByName(m)
@@ -184,5 +184,5 @@
 //             }
 
-//             def fmtSubAsset = { m ->
+//             def fmtSubAsset = { d, m ->
 //                     def r = ''
 //                     m.each() {
Index: branches/features/purchaseOrders/grails-app/controllers/AssetSubItemDetailedController.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/controllers/AssetSubItemDetailedController.groovy	(revision 920)
@@ -60,6 +60,6 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
Index: branches/features/purchaseOrders/grails-app/controllers/InventoryItemDetailedController.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/controllers/InventoryItemDetailedController.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/controllers/InventoryItemDetailedController.groovy	(revision 920)
@@ -292,6 +292,6 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
@@ -646,6 +646,6 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
Index: branches/features/purchaseOrders/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/controllers/InventoryItemPurchaseDetailedController.groovy	(revision 920)
@@ -143,6 +143,6 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
Index: branches/features/purchaseOrders/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/controllers/TaskDetailedController.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/controllers/TaskDetailedController.groovy	(revision 920)
@@ -147,6 +147,6 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
@@ -308,6 +308,6 @@
         if(params?.format && params.format != "html") {
 
-            def dateFmt = { date ->
-                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
+            def dateFmt = { domain, value ->
+                formatDate(format: "EEE, dd-MMM-yyyy", date: value)
             }
 
Index: branches/features/purchaseOrders/grails-app/domain/InventoryItem.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/domain/InventoryItem.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/domain/InventoryItem.groovy	(revision 920)
@@ -13,5 +13,5 @@
     BigDecimal estimatedUnitPriceAmount
     Currency estimatedUnitPriceCurrency
-    String suppliersPartNumber
+    String suppliersPartNumber = ""
     Integer unitsInStock = 0
     Integer reorderPoint = 0
@@ -26,6 +26,6 @@
 
     static hasMany = [spareFor: Asset,
-                                    inventoryMovements: InventoryMovement,
-                                    alternateSuppliers: Supplier]
+                        inventoryMovements: InventoryMovement,
+                        alternateSuppliers: Supplier]
 
 //     static belongsTo = []
@@ -48,5 +48,5 @@
         estimatedUnitPriceAmount(nullable:true, max: new BigDecimal(1000000000000))
         estimatedUnitPriceCurrency(nullable:true)
-        suppliersPartNumber(blank:true, nullable:true, maxSize:50)
+        suppliersPartNumber(blank:true, maxSize:50)
         preferredSupplier(nullable:true)
     }
Index: branches/features/purchaseOrders/grails-app/services/AssetTreeService.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/services/AssetTreeService.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/services/AssetTreeService.groovy	(revision 920)
@@ -111,11 +111,11 @@
 
         def sw = new StringWriter()
-        def mkp = new groovy.xml.MarkupBuilder(sw)
-
-        mkp.div(class: buttonHtmlClass) {
+        def mb = new groovy.xml.MarkupBuilder(sw)
+
+        mb.div(class: buttonHtmlClass) {
             a( href: hrefShowPane() ) {
                 img(src: treeRootImg, alt: 'Asset Tree', title: 'Asset Tree')
             }
-        } // mkp
+        }
 
         return sw.toString()
@@ -133,7 +133,7 @@
 
         def sw = new StringWriter()
-        def mkp = new groovy.xml.MarkupBuilder(sw)
-
-        mkp.div(class: paneHtmlClass, id: paneHtmlId, style: 'display:none;') {
+        def mb = new groovy.xml.MarkupBuilder(sw)
+
+        mb.div(class: paneHtmlClass, id: paneHtmlId, style: 'display:none;') {
             div(class: paneCloseHtmlClass) {
                 a( href: js.toggle(paneHtmlId) ) {
@@ -155,5 +155,5 @@
                 } // table
             } // div
-        } // mkp
+        }
 
         return sw.toString()
@@ -203,9 +203,9 @@
 
         def sw = new StringWriter()
-        def mkp = new groovy.xml.MarkupBuilder(sw)
+        def mb = new groovy.xml.MarkupBuilder(sw)
 
         // Offer a site create link if no sites are found.
         if(!sites) {
-            mkp.div(class: tableDivHtmlClass) {
+            mb.div(class: tableDivHtmlClass) {
 
                 div(class: paneCloseHtmlClass) {
@@ -235,5 +235,5 @@
                     }
                 } // button div
-            } // mkp
+            } // mb
             return sw.toString()
         } // if(!sites)
@@ -242,5 +242,5 @@
         // The main populated table.
         /// @todo: use a loop for the subItem levels.
-        mkp.div(class: tableDivHtmlClass) {
+        mb.div(class: tableDivHtmlClass) {
 
             div(class: paneCloseHtmlClass) {
@@ -443,5 +443,5 @@
             }
 
-        } // mkp
+        } // mb
 
         def totalTime = (System.currentTimeMillis() - startedAt)/1000
Index: branches/features/purchaseOrders/grails-app/taglib/CustomTagLib.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/taglib/CustomTagLib.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/taglib/CustomTagLib.groovy	(revision 920)
@@ -314,5 +314,5 @@
     */
     def helpBalloon = {attrs, body ->
-        def mkp = new groovy.xml.MarkupBuilder(out) //this line will be unnecessary in versions of Grails after version 1.2
+        def mb = new groovy.xml.MarkupBuilder(out)
 
         def title = attrs["title"]
@@ -352,5 +352,5 @@
         if(iconSrc) {
             iconId = iconId ?: "customHb$num"
-            mkp.img( id: iconId, src: iconSrc)
+            mb.img(id: iconId, src: iconSrc)
         }
 
@@ -367,6 +367,6 @@
 });"""
 
-        mkp.script(type: "text/javascript") {
-            yieldUnescaped(javascript)
+        mb.script(type: "text/javascript") {
+            mkp.yieldUnescaped(javascript)
         }
 
Index: branches/features/purchaseOrders/grails-app/taglib/JsUtilTagLib.groovy
===================================================================
--- branches/features/purchaseOrders/grails-app/taglib/JsUtilTagLib.groovy	(revision 901)
+++ branches/features/purchaseOrders/grails-app/taglib/JsUtilTagLib.groovy	(revision 920)
@@ -28,5 +28,5 @@
     */
     def toggleControl = { attrs ->
-        def mkp = new groovy.xml.MarkupBuilder(out) //this line will be unnecessary in versions of Grails after version 1.2
+        def mb = new groovy.xml.MarkupBuilder(out)
 
         def toggleJs
@@ -39,17 +39,17 @@
 
         if(attrs.useDiv == 'false') {
-            mkp.a( href: toggleJs ) {
-                    yieldUnescaped(attrs.text)
+            mb.a( href: toggleJs ) {
+                    mkp.yieldUnescaped(attrs.text)
                     img(id: attrs.imageId, src: attrs.closedImgUrl, alt: "Show")
-            } // mkp
+            }
 
         }
         else {
-            mkp.div() {
+            mb.div() {
                 a( href: toggleJs ) {
-                    yieldUnescaped(attrs.text)
+                    mkp.yieldUnescaped(attrs.text)
                     img(id: attrs.imageId, src: attrs.closedImgUrl, alt: "Show")
                 }
-            } // mkp
+            }
         }
 
Index: branches/features/purchaseOrders/grails-app/views/appCore/manager.gsp
===================================================================
--- branches/features/purchaseOrders/grails-app/views/appCore/manager.gsp	(revision 901)
+++ branches/features/purchaseOrders/grails-app/views/appCore/manager.gsp	(revision 920)
@@ -72,18 +72,4 @@
                         </tr>
 
-                        <tr class="prop">
-                            <td valign="top" class="name">
-                                <label>Entity Relationship Diagram:</label>
-                            </td>
-                            <td valign="top" class="value">
-
-                                <a href="${createLink(controller:'classDiagram', action:'model', params:[outputFormat: 'pdf', skin: 'classicSpaced', showMethods: 'false', autoUpdate: 'false'])}">PDF</a>
-                                <br />
-                                <a href="${createLink(controller:'classDiagram', action:'legend', target:'_blank')}">Legend</a>
-                                <br />
-                                <a href="${createLink(controller:'classDiagram', action:'show')}">Interactive.</a>
-                            </td>
-                        </tr>
-
                     </tbody>
                 </table>
