Index: branches/TaskRewrite/src/grails-app/conf/BootStrap.groovy
===================================================================
--- branches/TaskRewrite/src/grails-app/conf/BootStrap.groovy	(revision 72)
+++ branches/TaskRewrite/src/grails-app/conf/BootStrap.groovy	(revision 73)
@@ -72,5 +72,6 @@
             
         //Person
-        def passwordEncoded = authenticateService.encodePassword("pass")
+        def passClearText = "pass"
+        def passwordEncoded = authenticateService.encodePassword(passClearText)
         def personInstance
 
@@ -78,6 +79,18 @@
                                     firstName:"Admin",
                                     lastName:"Powers",
+                                    pass:passClearText,
                                     password:passwordEncoded,
                                     email:"admin@example.com")
+        BootStrapSaveAndTest(personInstance)
+        personInstance.addToAuthorities(Authority.get(1))
+        personInstance.addToAuthorities(Authority.get(2))
+        personInstance.addToPersonGroups(PersonGroup.findByName("gnuMims"))
+
+        personInstance = new Person(loginName:"admin2",
+                                    firstName:"Admin2",
+                                    lastName:"Powers2",
+                                    pass:passClearText,
+                                    password:passwordEncoded,
+                                    email:"admin2@example.com")
         BootStrapSaveAndTest(personInstance)
         personInstance.addToAuthorities(Authority.get(1))
@@ -88,4 +101,5 @@
                                     firstName:"Demo",
                                     lastName:"Danza",
+                                    pass:passClearText,
                                     password:passwordEncoded,
                                     email:"user@example.com")
@@ -97,4 +111,5 @@
                                     firstName:"Craig",
                                     lastName:"SuperTech",
+                                    pass:passClearText,
                                     password:passwordEncoded,
                                     email:"user@example.com")
@@ -103,7 +118,8 @@
         personInstance.addToPersonGroups(PersonGroup.findByName("Electrical"))
 
-        personInstance = new Person(loginName:"joe",
-                                    firstName:"Joe",
+        personInstance = new Person(loginName:"john",
+                                    firstName:"John",
                                     lastName:"Samples",
+                                    pass:passClearText,
                                     password:passwordEncoded,
                                     email:"user@example.com")
@@ -115,4 +131,5 @@
                                     firstName:"Production",
                                     lastName:"Mann",
+                                    pass:passClearText,
                                     password:passwordEncoded,
                                     email:"user@example.com")
Index: branches/TaskRewrite/src/grails-app/conf/SecurityConfig.groovy
===================================================================
--- branches/TaskRewrite/src/grails-app/conf/SecurityConfig.groovy	(revision 72)
+++ branches/TaskRewrite/src/grails-app/conf/SecurityConfig.groovy	(revision 73)
@@ -46,3 +46,15 @@
     alwaysUseDefaultTargetUrl = true
 
+    //User caching, turned this off so that password changes take effect.
+    //It would appear that user is still in the session as logout/login
+    // is still required for role changes to take effect.
+    //If this option causes high database load try:
+    //  import org.acegisecurity.providers.dao.DaoAuthenticationProvider
+    //  import org.acegisecurity.context.SecurityContextHolder
+    //  DaoAuthenticationProvider daoAuthenticationProvider 
+    //  def user = SecurityContextHolder.context.authentication.principal.username 
+    //  daoAuthenticationProvider.userCache.removeUserFromCache(user)
+    //  in logout controller and perhaps on password change and role change.
+    cacheUsers = false
+
 }
Index: branches/TaskRewrite/src/grails-app/controllers/AppCoreController.groovy
===================================================================
--- branches/TaskRewrite/src/grails-app/controllers/AppCoreController.groovy	(revision 72)
+++ branches/TaskRewrite/src/grails-app/controllers/AppCoreController.groovy	(revision 73)
@@ -10,13 +10,36 @@
     //def allowedMethods = [delete:'POST', save:'POST', update:'POST']
 
-
     def home = {
     }
 
     def options = {
-        def principal = authenticateService.principal()
-        println principal.getUsername()//get username
-        println principal.getAuthorities()//get authorities()
     }
+
+    def changePassword = {
+        //def principal = authenticateService.principal()
+        //println principal.getAuthorities()
+
+        if (request.method == 'GET') {
+            def personInstance = Person.get(authenticateService.userDomain().id)
+            return [ personInstance : personInstance ]       
+        }  
+
+        if (request.method == 'POST') {
+            def personInstance = Person.get(authenticateService.userDomain().id)
+    
+            personInstance.pass = params.pass
+            personInstance.password = authenticateService.encodePassword(personInstance.pass)
+
+            if (!personInstance.hasErrors() && personInstance.save()) {
+                //userCache.removeUserFromCache(personInstance.loginName)
+                flash.message = "Password changed successfully."
+                redirect(action:options)
+            }
+            else {
+                render(view:'changePassword',model:[personInstance:personInstance])
+            }                          
+        }  
+    }
+
 
     @Secured(['ROLE_AppAdmin'])   
Index: branches/TaskRewrite/src/grails-app/controllers/LoginController.groovy
===================================================================
--- branches/TaskRewrite/src/grails-app/controllers/LoginController.groovy	(revision 72)
+++ branches/TaskRewrite/src/grails-app/controllers/LoginController.groovy	(revision 73)
@@ -49,5 +49,5 @@
 	def auth = {
 
-		nocache response
+		nocache(response)
 
 		if (isLoggedIn()) {
Index: branches/TaskRewrite/src/grails-app/controllers/PersonController.groovy
===================================================================
--- branches/TaskRewrite/src/grails-app/controllers/PersonController.groovy	(revision 72)
+++ branches/TaskRewrite/src/grails-app/controllers/PersonController.groovy	(revision 73)
@@ -96,17 +96,24 @@
 		}
 
-		def oldPassword = person.password
 		person.properties = params
-		if (!params.password.equals(oldPassword)) {
-			person.password = authenticateService.encodePassword(params.password)
-		}
-		if (person.save()) {
-			Authority.findAll().each { it.removeFromPersons(person) }
-			addRoles(person)
-			redirect action: show, id: person.id
-		}
-		else {
-			render view: 'edit', model: buildPersonModel(person)
-		}
+
+        if (person.pass != "") {
+            if (!person.hasErrors()) {
+                person.password = authenticateService.encodePassword(params.pass)
+            }
+        }
+        else {
+            person.pass = "NothingToClearValidation"
+        }
+
+        if (!person.hasErrors() && person.save()) {
+            Authority.findAll().each { it.removeFromPersons(person) }
+            addRoles(person)
+            redirect action: show, id: person.id
+        }
+        else {
+            render view: 'edit', model: buildPersonModel(person)
+        }
+
 	}
 
@@ -122,5 +129,5 @@
 		def person = new Person()
 		person.properties = params
-		person.password = authenticateService.encodePassword(params.password)
+		person.password = authenticateService.encodePassword(params.pass)
 		if (person.save()) {
 			addRoles(person)
Index: branches/TaskRewrite/src/grails-app/domain/Person.groovy
===================================================================
--- branches/TaskRewrite/src/grails-app/domain/Person.groovy	(revision 72)
+++ branches/TaskRewrite/src/grails-app/domain/Person.groovy	(revision 73)
@@ -27,12 +27,20 @@
 
 	/** plain password to create a MD5 password */
-	String pass = '[secret]'
+	String pass
 
 	static constraints = {
-		loginName(blank: false, unique: true)//minSize:7
+		loginName(blank: false, unique: true, minSize:4)//minSize:7
 		firstName(blank: false)
         lastName(blank: false)
-		password(blank: false) //minSize:7
         employeeID(blank: true, nullable:true)
+        description()
+        email()
+        emailShow()
+        isActive()
+        //Enforcing minSize on password does not work since "" gets encoded to a string.
+		password(blank: false)
+        //So we need to use pass for validation then encode it for above.
+        pass(blank: false, minSize:4)
+
 	}
 
Index: branches/TaskRewrite/src/grails-app/i18n/messages.properties
===================================================================
--- branches/TaskRewrite/src/grails-app/i18n/messages.properties	(revision 72)
+++ branches/TaskRewrite/src/grails-app/i18n/messages.properties	(revision 73)
@@ -1,2 +1,5 @@
+person.pass.minSize.notmet=Password is less than the minimum size of [{3}]
+person.pass.blank=Password cannot be blank
+
 default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
 default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
@@ -29,2 +32,4 @@
 typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
 typeMismatch.java.math.BigInteger=Property {0} must be a valid number
+
+
Index: branches/TaskRewrite/src/grails-app/views/_adminmenubar.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/_adminmenubar.gsp	(revision 72)
+++ branches/TaskRewrite/src/grails-app/views/_adminmenubar.gsp	(revision 73)
@@ -14,5 +14,5 @@
     <span class="appControlButton">
         <g:link controller="logout">
-                Log out
+                Log out (<g:loggedInUsername/>)
         </g:link>
     </span>
Index: branches/TaskRewrite/src/grails-app/views/appCore/changePassword.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/changePassword.gsp	(revision 73)
+++ branches/TaskRewrite/src/grails-app/views/appCore/changePassword.gsp	(revision 73)
@@ -0,0 +1,51 @@
+<head>
+	<meta name="layout" content="main" />
+	<title>Change Password</title>
+</head>
+
+<body onload="document.changePasswordForm.pass.focus();">
+	<div class="nav">
+		<span class="menuButton"><a class="home" href="${createLinkTo(dir:'')}">Home</a></span>
+    </div>
+
+	<div class="body">
+		<h1>Change Password</h1>
+		<g:if test="${flash.message}">
+		<div class="message">${flash.message}</div>
+		</g:if>
+		<g:hasErrors bean="${personInstance}">
+		<div class="errors">
+			<g:renderErrors bean="${personInstance}" as="list" />
+		</div>
+		</g:hasErrors>
+
+		<div class="prop">
+			<span class="name">ID:</span>
+			<span class="value">${personInstance.id}</span> 
+		</div>
+
+		<g:form name="changePasswordForm" id="changePasswordForm">
+            <input type="hidden" name="id" value="${personInstance?.id}" />
+			<div class="dialog">
+				<table>
+				<tbody>
+
+					<tr class="prop">
+						<td valign="top" class="name"><label for="pass">Password:</label></td>
+						<td valign="top" class="value ${hasErrors(bean:personInstance,field:'pass','errors')}">
+							<input type="password" id="pass" name="pass" />
+						</td>
+					</tr>
+
+				</tbody>
+				</table>
+			</div>
+
+			<div class="buttons">
+				<span class="button"><g:actionSubmit class="save" value="Change Password" action="changePassword"/></span>
+			</div>
+		</g:form>
+
+	</div>
+
+</body>
Index: branches/TaskRewrite/src/grails-app/views/appCore/create.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/create.gsp	(revision 72)
+++ 	(revision )
@@ -1,38 +1,0 @@
-
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-        <meta name="layout" content="main" />
-        <title>Create AppCore</title>         
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><a class="home" href="${createLinkTo(dir:'')}">Home</a></span>
-            <span class="menuButton"><g:link class="list" action="list">AppCore List</g:link></span>
-        </div>
-        <div class="body">
-            <h1>Create AppCore</h1>
-            <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
-            </g:if>
-            <g:hasErrors bean="${appCoreInstance}">
-            <div class="errors">
-                <g:renderErrors bean="${appCoreInstance}" as="list" />
-            </div>
-            </g:hasErrors>
-            <g:form action="save" method="post" >
-                <div class="dialog">
-                    <table>
-                        <tbody>
-                        
-                        </tbody>
-                    </table>
-                </div>
-                <div class="buttons">
-                    <span class="button"><input class="save" type="submit" value="Create" /></span>
-                </div>
-            </g:form>
-        </div>
-    </body>
-</html>
Index: branches/TaskRewrite/src/grails-app/views/appCore/edit.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/edit.gsp	(revision 72)
+++ 	(revision )
@@ -1,41 +1,0 @@
-
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-        <meta name="layout" content="main" />
-        <title>Edit AppCore</title>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><a class="home" href="${createLinkTo(dir:'')}">Home</a></span>
-            <span class="menuButton"><g:link class="list" action="list">AppCore List</g:link></span>
-            <span class="menuButton"><g:link class="create" action="create">New AppCore</g:link></span>
-        </div>
-        <div class="body">
-            <h1>Edit AppCore</h1>
-            <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
-            </g:if>
-            <g:hasErrors bean="${appCoreInstance}">
-            <div class="errors">
-                <g:renderErrors bean="${appCoreInstance}" as="list" />
-            </div>
-            </g:hasErrors>
-            <g:form method="post" >
-                <input type="hidden" name="id" value="${appCoreInstance?.id}" />
-                <div class="dialog">
-                    <table>
-                        <tbody>
-                        
-                        </tbody>
-                    </table>
-                </div>
-                <div class="buttons">
-                    <span class="button"><g:actionSubmit class="save" value="Update" /></span>
-                    <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
-                </div>
-            </g:form>
-        </div>
-    </body>
-</html>
Index: branches/TaskRewrite/src/grails-app/views/appCore/home.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/home.gsp	(revision 72)
+++ branches/TaskRewrite/src/grails-app/views/appCore/home.gsp	(revision 73)
@@ -15,7 +15,7 @@
                 <div class="message">${flash.message}</div>
             </g:if>
-            <g:hasErrors bean="${appCoreInstance}">
+            <g:hasErrors bean="${appCore}">
                 <div class="errors">
-                    <g:renderErrors bean="${appCoreInstance}" as="list" />
+                    <g:renderErrors bean="${appCore}" as="list" />
                 </div>
             </g:hasErrors>
Index: branches/TaskRewrite/src/grails-app/views/appCore/list.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/list.gsp	(revision 72)
+++ 	(revision )
@@ -1,44 +1,0 @@
-
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-        <meta name="layout" content="main" />
-        <title>AppCore List</title>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><a class="home" href="${createLinkTo(dir:'')}">Home</a></span>
-            <span class="menuButton"><g:link class="create" action="create">New AppCore</g:link></span>
-        </div>
-        <div class="body">
-            <h1>AppCore List</h1>
-            <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
-            </g:if>
-            <div class="list">
-                <table>
-                    <thead>
-                        <tr>
-                        
-                   	        <g:sortableColumn property="id" title="Id" />
-                        
-                        </tr>
-                    </thead>
-                    <tbody>
-                    <g:each in="${appCoreInstanceList}" status="i" var="appCoreInstance">
-                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
-                        
-                            <td><g:link action="show" id="${appCoreInstance.id}">${fieldValue(bean:appCoreInstance, field:'id')}</g:link></td>
-                        
-                        </tr>
-                    </g:each>
-                    </tbody>
-                </table>
-            </div>
-            <div class="paginateButtons">
-                <g:paginate total="${AppCore.count()}" />
-            </div>
-        </div>
-    </body>
-</html>
Index: branches/TaskRewrite/src/grails-app/views/appCore/options.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/options.gsp	(revision 72)
+++ branches/TaskRewrite/src/grails-app/views/appCore/options.gsp	(revision 73)
@@ -11,6 +11,10 @@
         <div class="body">
             <h1>Welcome to Options</h1>
+            <g:if test="${flash.message}">
+            <div class="message">${flash.message}</div>
+            </g:if>
             <br/>
             <div class="dialog">
+            <a href="${createLink(action:'changePassword')}">Change Password</a>
 
             </div>
Index: branches/TaskRewrite/src/grails-app/views/appCore/show.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/appCore/show.gsp	(revision 72)
+++ 	(revision )
@@ -1,44 +1,0 @@
-
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-        <meta name="layout" content="main" />
-        <title>Show AppCore</title>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><a class="home" href="${createLinkTo(dir:'')}">Home</a></span>
-            <span class="menuButton"><g:link class="list" action="list">AppCore List</g:link></span>
-            <span class="menuButton"><g:link class="create" action="create">New AppCore</g:link></span>
-        </div>
-        <div class="body">
-            <h1>Show AppCore</h1>
-            <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
-            </g:if>
-            <div class="dialog">
-                <table>
-                    <tbody>
-
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Id:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:appCoreInstance, field:'id')}</td>
-                            
-                        </tr>
-                    
-                    </tbody>
-                </table>
-            </div>
-            <div class="buttons">
-                <g:form>
-                    <input type="hidden" name="id" value="${appCoreInstance?.id}" />
-                    <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
-                    <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
-                </g:form>
-            </div>
-        </div>
-    </body>
-</html>
Index: branches/TaskRewrite/src/grails-app/views/layouts/main.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/layouts/main.gsp	(revision 72)
+++ branches/TaskRewrite/src/grails-app/views/layouts/main.gsp	(revision 73)
@@ -7,5 +7,7 @@
         <g:javascript library="application" />
     </head>
-    <body>
+    
+    <!-- Added g:pageProperty so that onload in each page works -->
+    <body onload="<g:pageProperty name='body.onload'/>">
     <div id="wrapper" style="height: 100%;">
     <div id="top">
@@ -24,5 +26,5 @@
         </div>
         <div class="appControl">
-            <g:render template="/adminmenubar" />
+             <g:render template="/adminmenubar" />
         </div>
         <!-- Body wrapper div for IE -->
Index: branches/TaskRewrite/src/grails-app/views/person/create.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/person/create.gsp	(revision 72)
+++ branches/TaskRewrite/src/grails-app/views/person/create.gsp	(revision 73)
@@ -49,7 +49,7 @@
 
 					<tr class="prop">
-						<td valign="top" class="name"><label for="password">Password:</label></td>
-						<td valign="top" class="value ${hasErrors(bean:person,field:'password','errors')}">
-							<input type="password" id="password" name="password" value="${person.password?.encodeAsHTML()}"/>
+						<td valign="top" class="name"><label for="pass">Password:</label></td>
+						<td valign="top" class="value ${hasErrors(bean:person,field:'pass','errors')}">
+							<input type="password" id="pass" name="pass"/>
 						</td>
 					</tr>
Index: branches/TaskRewrite/src/grails-app/views/person/edit.gsp
===================================================================
--- branches/TaskRewrite/src/grails-app/views/person/edit.gsp	(revision 72)
+++ branches/TaskRewrite/src/grails-app/views/person/edit.gsp	(revision 73)
@@ -31,4 +31,5 @@
 			<input type="hidden" name="id" value="${person.id}" />
 			<input type="hidden" name="version" value="${person.version}" />
+            <input type="hidden" name="password" value="${person.password}" />
 			<div class="dialog">
 				<table>
@@ -57,7 +58,7 @@
 
 					<tr class="prop">
-						<td valign="top" class="name"><label for="password">Password:</label></td>
-						<td valign="top" class="value ${hasErrors(bean:person,field:'password','errors')}">
-							<input type="password" id="password" name="password" value="${person.password?.encodeAsHTML()}"/>
+						<td valign="top" class="name"><label for="pass">Password:</label></td>
+						<td valign="top" class="value ${hasErrors(bean:person,field:'pass','errors')}">
+							<input type="password" id="pass" name="pass"/>
 						</td>
 					</tr>
