diff --git a/pom.xml b/pom.xml
index 2b780d1..24cc232 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,23 +32,24 @@
 
   <name>Archetype - Turbine 5.0 WebApp</name>
   <description>This archetype sets up a web application project based on Apache Turbine 5.0</description>
-  <url>http://turbine.apache.org</url>
+  <url>https://turbine.apache.org</url>
 
   <inceptionYear>2011</inceptionYear>
 
   <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-5.0/</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-5.0/</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-5.0/</url>
+    <connection>scm:git:https://github.com/apache/turbine-archetypes</connection>
+    <developerConnection>scm:git:https://github.com/apache/turbine-archetypes</developerConnection>
+    <url>scm:git:https://github.com/apache/turbine-archetypes</url>
   </scm>
-  
+
   <properties>
 	<turbine_database_url>jdbc:mysql://localhost:3306/</turbine_database_url>
     <docker>false</docker>
     <app_volume_local_repo>not_used</app_volume_local_repo>
   </properties>
-  
-<build>
+
+  <build>
+
     <extensions>
       <extension>
         <groupId>org.apache.maven.archetype</groupId>
diff --git a/src/main/resources/archetype-resources/docs/README.md b/src/main/resources/archetype-resources/docs/README.md
index 8cb124a..9a527c2 100644
--- a/src/main/resources/archetype-resources/docs/README.md
+++ b/src/main/resources/archetype-resources/docs/README.md
@@ -124,7 +124,9 @@
 If you get an error like "The driver has not received any packets" probably the database is not up and running or the port may be another one.
 
 Last step on the command line is run the server by invoking 
-mvn jetty:run         ## Now you can launch your new Turbine application by default http://localhost:8080/app
+mvn jetty:run         
+
+## Now you can launch your new Turbine application by default http://localhost:8081/app (check port in pom.xml, if needed).
 
 ### Logs 
 
diff --git a/src/main/resources/archetype-resources/pom.xml b/src/main/resources/archetype-resources/pom.xml
index 9a90d3d..b3b5931 100644
--- a/src/main/resources/archetype-resources/pom.xml
+++ b/src/main/resources/archetype-resources/pom.xml
@@ -73,12 +73,15 @@
         <plugins>
             <!-- test will not fail in turbine 4.0.1 -->
             <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-surefire-plugin</artifactId>
-              <version>2.20.1</version>
-              <configuration>
-                <skipTests>#var("skipTests")</skipTests>
-              </configuration>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M2</version>
+                <configuration>
+                  <skipTests>#var("skipTests")</skipTests>
+                  <!--default setting is forkCount=1/reuseForks=true -->
+                  <reuseForks>false</reuseForks>
+                  <forkCount>1</forkCount>
+                </configuration>
             </plugin>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
@@ -197,7 +200,7 @@
             <dependency>
               <artifactId>mysql-connector-java</artifactId>
               <groupId>mysql</groupId>
-              <version>8.0.12</version>
+              <version>8.0.17</version>
             </dependency>
           </dependencies>
           <!-- this is mysql specific -->
@@ -242,6 +245,8 @@
         <plugin>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-maven-plugin</artifactId>
+            <!-- latest one that seems to be working, 
+                v20181111 and v20181114 coming up not found on maven central -->
             <version>9.4.12.v20180830</version>
           <configuration>
             <scanIntervalSeconds>10</scanIntervalSeconds>
@@ -264,7 +269,7 @@
       <dependency>
         <artifactId>mysql-connector-java</artifactId>
         <groupId>mysql</groupId>
-        <version>8.0.12</version>
+        <version>8.0.17</version>
       </dependency>
        <!-- Allow lookup of #var("web:rootDir") in log4j2 file -->
         <dependency>
@@ -273,6 +278,7 @@
           <version>#var("log4j2.version")</version>
         </dependency>
         <!-- Required for Java 9 and higher -->
+        <!-- 
         <dependency>
             <groupId>javax.xml.bind</groupId>
             <artifactId>jaxb-api</artifactId>
@@ -288,7 +294,8 @@
             <artifactId>jaxb-core</artifactId>
             <version>2.3.0</version>
         </dependency>
-
+ 		-->
+ 		
       <dependency>
           <groupId>javax.activation</groupId>
           <artifactId>activation</artifactId>
@@ -322,7 +329,7 @@
       <dependency>
         <groupId>org.apache.fulcrum</groupId>
         <artifactId>fulcrum-yaafi</artifactId>
-        <version>1.0.8-SNAPSHOT</version>
+        <version>1.0.8</version>
       </dependency>
       <!-- if using intake -->
       <dependency>
@@ -338,11 +345,6 @@
         <artifactId>fulcrum-cache</artifactId>
         <version>1.1.0</version>
       </dependency>
-       <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-upload</artifactId>
-        <version>1.0.6-SNAPSHOT</version>
-      </dependency>
       <dependency>
         <groupId>org.apache.fulcrum</groupId>
         <artifactId>fulcrum-security-memory</artifactId>
@@ -398,7 +400,7 @@
       <dependency>
           <groupId>org.apache.fulcrum</groupId>
           <artifactId>fulcrum-testcontainer</artifactId>
-          <version>1.0.8-SNAPSHOT</version>
+          <version>1.0.8</version>
           <scope>test</scope>
         </dependency>
     </dependencies>
@@ -407,12 +409,12 @@
         <maven.compile.source>1.8</maven.compile.source>
         <maven.compile.target>1.8</maven.compile.target>
         <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-        <log4j2.version>2.11.1</log4j2.version>
+        <log4j2.version>2.12.0</log4j2.version>
         <torque.version>4.0</torque.version>
-        <fulcrum.json>2.0.0-SNAPSHOT</fulcrum.json>
-        <fulcrum.intake>2.0.0-SNAPSHOT</fulcrum.intake>
-        <fulcrum.security>1.1.3-SNAPSHOT</fulcrum.security>
-        <turbine.core>5.0-SNAPSHOT</turbine.core>
+        <fulcrum.json>2.0.0</fulcrum.json>
+        <fulcrum.intake>2.0.0</fulcrum.intake>
+        <fulcrum.security>1.1.3</fulcrum.security>
+        <turbine.core>5.0</turbine.core>
         <skipTests>true</skipTests>
     </properties>
     
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
index 3ba889e..a95fbb3 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -53,9 +53,11 @@
 	 * flux.admin.role which you should define
 	 */
 	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception {
+	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
 		boolean isAuthorized = false;
 
+		RunData data = (RunData) pipelineData;
+		
 		/*
 		 * Grab the Flux Admin role listed in the Flux.properties file that is included
 		 * in the the standard TurbineResources.properties file.
@@ -63,15 +65,15 @@
 		String fluxAdminRole = Turbine.getConfiguration().getString("flux.admin.role");
 
 		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = getRunData(data).getACL();
+		TurbineAccessControlList acl = data.getACL();
 
 		if (acl == null || !(acl.hasRole(fluxAdminRole))) {
 			String msg = localizationService.getString(localizationService.getDefaultBundleName(),
 					localizationService.getLocale(((RunData) data).getRequest()), "no_permission");
 
-			getRunData(data).setMessage(msg);
+			data.setMessage(msg);
 
-			getRunData(data).setScreenTemplate("Login.vm");
+			data.setScreenTemplate("Login.vm");
 			isAuthorized = false;
 		} else if (acl.hasRole(fluxAdminRole)) {
 			isAuthorized = true;
@@ -90,8 +92,9 @@
 	 * @exception Exception,
 	 *                a generic exception.
 	 */
-	public void doPerform(PipelineData data, Context context) throws Exception {
-		User user = getRunData(data).getUser();
+	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
+		RunData data = (RunData) pipelineData;
+		User user = data.getUser();
 		context.put("user", user);
 	}
 }
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
index 198d398..2482041 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -66,7 +66,7 @@
 	@Override
 	public void doPerform(PipelineData pipelineData) throws FulcrumSecurityException {
 
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData)pipelineData;
 		String username = data.getParameters().getString(FluxLogin.CGI_USERNAME, "");
 
 		if (StringUtils.isEmpty(username)) {
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
index 60972d0..a254d72 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@
  * specified in the resources file
  *
  */
-public class FluxLogout extends Action {
+public class FluxLogout implements Action {
 
 	/** Injected service instance */
 	@TurbineService
@@ -59,10 +59,9 @@
 	 * @exception FulcrumSecurityException
 	 *                a problem occurred in the security service.
 	 */
-	@Override
-	public void doPerform(PipelineData pipelineData) throws FulcrumSecurityException {
-
-		RunData data = getRunData(pipelineData);
+	public void doPerform(PipelineData pipelineData) throws FulcrumSecurityException 
+	{
+		RunData data = (RunData) pipelineData;
 		// Session validator did not run, so RunData is not populated
 		User user = data.getUserFromSession();
 
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
index 8020f35..3a73b30 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -64,9 +64,8 @@
 	@Override
 	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
 
-		RunData data = getRunData(pipelineData);
-
 		boolean isAuthorized = false;
+		RunData data = (RunData) pipelineData;
 
 		/*
 		 * Grab the Flux Admin role listed in the Flux.properties file that is included
@@ -109,8 +108,10 @@
 	 * @exception Exception,
 	 *                a generic exception.
 	 */
-	public void doPerform(PipelineData data, Context context) throws Exception {
-		User user = getRunData(data).getUser();
+	public void doPerform(PipelineData pipelineData, Context context) throws Exception 
+	{
+		RunData data = (RunData) pipelineData;
+		User user = data.getUser();
 		context.put("user", user);
 	}
 }
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
index deeb355..24dc6c0 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions.group;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -61,7 +61,7 @@
 	 *                a generic exception.
 	 */
 	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		String name = data.getParameters().getString(GROUP_ID);
 		if (!StringUtils.isEmpty(name)) {
@@ -101,7 +101,7 @@
 	 *                a generic exception.
 	 */
 	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		String groupName = data.getParameters().getString("oldName");
 		if (!StringUtils.isEmpty(groupName)) {
 			Group group = security.getGroupByName(groupName);
@@ -135,7 +135,7 @@
 	 */
 	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
 
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		try {
 			Group group = security.getGroupByName(data.getParameters().getString(GROUP_ID));
@@ -164,7 +164,7 @@
 	 *                a generic exception.
 	 */
 	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		log.info("Running do perform!");
 		data.setMessage("Can't find the requested action!");
 	}
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
index c92c914..bb9385d 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions.permission;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -65,7 +65,7 @@
 	 */
 	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
 
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		String name = data.getParameters().getString(PERM_ID);
 		if (!StringUtils.isEmpty(name)) {
 			// create the permission
@@ -93,7 +93,7 @@
 	 *                a generic exception.
 	 */
 	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		String old_name = data.getParameters().getString("oldName");
 		String name = data.getParameters().getString(PERM_ID);
@@ -130,7 +130,7 @@
 	 *                a generic exception.
 	 */
 	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		try {
 			String permName = data.getParameters().getString(PERM_ID);
@@ -168,7 +168,7 @@
 	 *                a generic exception.
 	 */
 	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		log.info("Running do perform!");
 		data.setMessage("Can't find the requested action!");
 	}
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
index 3e94e9e..0d4f657 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions.role;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@
 import java.util.Iterator;
 
 import org.apache.commons.configuration2.Configuration;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.fulcrum.security.entity.Permission;
@@ -29,6 +28,7 @@
 import org.apache.fulcrum.security.util.EntityExistsException;
 import org.apache.fulcrum.security.util.PermissionSet;
 import org.apache.fulcrum.security.util.UnknownEntityException;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.torque.criteria.Criteria;
 import org.apache.turbine.annotation.TurbineConfiguration;
 import org.apache.turbine.annotation.TurbineService;
@@ -39,6 +39,7 @@
 
 import ${package}.flux.modules.actions.FluxAction;
 
+
 /**
  * Action to manager roles in Turbine.
  * 
@@ -57,7 +58,7 @@
 	private Configuration conf;
 
 	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		Role role = security.getRoleInstance();
 		data.getParameters().setProperties(role);
 
@@ -91,7 +92,7 @@
 	 *                a generic exception.
 	 */
 	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		Role role = security.getRoleByName(data.getParameters().getString("oldName"));
 		String name = data.getParameters().getString(ROLE_ID);
 		if (role != null && !StringUtils.isEmpty(name)) {
@@ -117,7 +118,7 @@
 	 *                a generic exception.
 	 */
 	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		try {
 			// find the role
@@ -158,7 +159,7 @@
 	 */
 	public void doPermissions(PipelineData pipelineData, Context context) throws Exception {
 
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		/*
 		 * Grab the role we are trying to update. Always not null
 		 */
@@ -215,7 +216,7 @@
 	 */
 	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
 		log.info("Running do perform!");
-		getRunData(pipelineData).setMessage("Can't find the requested action!");
+		( (RunData) pipelineData).setMessage("Can't find the requested action!");
 	}
 
 	/**
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
index d41db9a..074e2e2 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.actions.user;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -49,7 +49,7 @@
 	 * system.
 	 */
 	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		/*
 		 * Grab the username entered in the form.
@@ -110,7 +110,7 @@
 	 * before allowing the user info to be update in the database.
 	 */
 	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 		String username = data.getParameters().getString("username");
 		if (!StringUtils.isEmpty(username)) {
 			if (security.accountExists(username)) {
@@ -155,13 +155,18 @@
 	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
 
 		try {
-			RunData data = getRunData(pipelineData);
+			RunData data = (RunData) pipelineData;
 			String username = data.getParameters().getString("username");
 			if (!StringUtils.isEmpty(username)) {
 				if (security.accountExists(username)) {
 
 					// find the user object and remove using security mgr
 					User user = security.getUser(username);
+
+					// get the turbine user id
+					int id = (int) user.getId();
+
+					// remove the turbine user
 					security.removeUser(user);
 
 				} else {
@@ -178,7 +183,7 @@
 	 * Update the roles that are to assigned to a user for a project.
 	 */
 	public void doRoles(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
+		RunData data = (RunData) pipelineData;
 
 		try {
 			/*
@@ -255,7 +260,7 @@
 	 */
 	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
 		log.info("Running do perform!");
-		getRunData(pipelineData).setMessage("Can't find the requested action!");
+		( (RunData) pipelineData).setMessage("Can't find the requested action!");
 	}
 
 }
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
index dca782d..72123bf 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
index 115252c..0836b25 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -61,9 +61,8 @@
 	@Override
 	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
 
-		RunData data = getRunData(pipelineData);
-
 		boolean isAuthorized = false;
+		RunData data = (RunData) pipelineData;
 
 		/*
 		 * Grab the Flux Admin role listed in the Flux.properties file that is included
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
index 772eaeb..bf58332 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
 import org.apache.turbine.modules.screens.VelocitySecureScreen;
 import org.apache.turbine.pipeline.PipelineData;
 import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
 import org.apache.velocity.context.Context;
 
 /**
@@ -65,9 +66,10 @@
 	}
 
 	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception {
+	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
 		boolean isAuthorized = false;
-
+		RunData data = (RunData) pipelineData;
+		
 		/*
 		 * Grab the Flux Admin role listed in the Flux.properties file that is included
 		 * in the the standard TurbineResources.properties file.
@@ -75,18 +77,18 @@
 		String fluxAdminRole = Turbine.getConfiguration().getString("flux.admin.role");
 
 		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = getRunData(data).getACL();
+		TurbineAccessControlList acl = data.getACL();
 
 		if (acl == null) {
 			// commons configuration getProperty: prefix removed, the key for the value ..
 			// is an empty string, the result an object
-			getRunData(data).setScreenTemplate((String) templateLogin.getProperty(""));
+			data.setScreenTemplate((String) templateLogin.getProperty(""));
 			isAuthorized = false;
 		} else if (acl.hasRole(fluxAdminRole)) {
 			isAuthorized = true;
 		} else {
-			getRunData(data).setScreenTemplate((String) templateHomepage.getProperty(""));
-			getRunData(data).setMessage("You do not have access to this part of the site.");
+			data.setScreenTemplate((String) templateHomepage.getProperty(""));
+			data.setMessage("You do not have access to this part of the site.");
 			isAuthorized = false;
 		}
 		return isAuthorized;
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
index 5360e93..beb2dcb 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens.group;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
index 4d27c70..7a2878b 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens.permission;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
index d4d8962..f22b6a5 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens.role;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
index 436ff17..eb711dc 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
@@ -1,7 +1,7 @@
 package ${package}.flux.modules.screens.user;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java b/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
index 1bb6b70..1bf49f5 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
@@ -40,7 +40,6 @@
 import org.apache.turbine.services.pull.ApplicationTool;
 import org.apache.turbine.services.security.SecurityService;
 import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.SelectorBox;
 
 /**
  * The pull api for flux templates
@@ -207,22 +206,29 @@
 
 	/**
 	 */
-	public SelectorBox getFieldList() throws Exception {
-		Object[] names = { "username", "firstname", "middlename", "lastname" };
-		Object[] values = { "Username", "First Name", "Middle Name", "Last Name" };
-		return new SelectorBox("fieldList", names, values);
+	public String getFieldList() throws Exception {
+        StringBuilder selectorBox = new StringBuilder();
+        selectorBox.append("<select name=\"fieldList\">");
+        selectorBox.append("<option value=\"username\">Username</option>");
+        selectorBox.append("<option value=\"firstname\">First Name</option>");
+        selectorBox.append("<option value=\"middlename\">Middle Name</option>");
+        selectorBox.append("<option value=\"lastname\">Last Name</option>");
+        selectorBox.append("</select>");
+		return selectorBox.toString();
 	}
 
 	/**
 	 * This is a tie to the DB implementation something should be added the
 	 * pluggable pieces to allow decent parameterized searching.
 	 */
-	public SelectorBox getUserFieldList() throws Exception {
-
-		Object[] names = { TurbineUserPeer.LOGIN_NAME, TurbineUserPeer.FIRST_NAME, TurbineUserPeer.LAST_NAME };
-		Object[] values = { "User Name", "First Name", "Last Name" };
-
-		return new SelectorBox("fieldList", names, values);
+	public String getUserFieldList() throws Exception {
+        StringBuilder selectorBox = new StringBuilder();
+        selectorBox.append("<select name=\"fieldList\">");
+        selectorBox.append("<option value=\"" + TurbineUserPeer.LOGIN_NAME + "\">User Name</option>");
+        selectorBox.append("<option value=\"" + TurbineUserPeer.FIRST_NAME + "\">First Name</option>");
+        selectorBox.append("<option value=\"" + TurbineUserPeer.LAST_NAME + "\">Last Name</option>");
+        selectorBox.append("</select>");
+		return selectorBox.toString();
 	}
 
 	/**
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java b/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
index ca7255b..46c4673 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
@@ -19,7 +19,6 @@
 * under the License.
 *#
 
-
 import org.apache.fulcrum.security.util.PasswordMismatchException;
 import org.apache.turbine.annotation.TurbineService;
 import org.apache.turbine.om.security.User;
@@ -32,64 +31,50 @@
  * Change Password action.
  *
  */
-public class ChangePasswordAction extends SecureAction 
-
+public class ChangePasswordAction extends SecureAction
 {
 
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
+	/** Injected service instance */
+	@TurbineService
+	private SecurityService security;
 
+	/**
+	 * Implement this to add information to the context.
+	 *
+	 * @param data    Turbine information.
+	 * @param context Context for web pages.
+	 * @exception Exception, a generic exception.
+	 */
+	@Override
+	public void doPerform(PipelineData pipelineData) throws Exception 
+	{
+		RunData data = (RunData) pipelineData;
+		User user = data.getUser();
 
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    public void doPerform(PipelineData data)
-            throws Exception 
-            {
+		String oldPassword = data.getParameters().getString("oldpassword", "");
+		String newPassword = data.getParameters().getString("newpassword", "");
 
-    User user = getRunData(data).getUser();
-    
-    RunData rundata = getRunData(data);
-    String oldPassword = rundata.getParameters().getString("oldpassword", "");
-    String newPassword = rundata.getParameters().getString("newpassword", "");
-    
-    try {
-        security.changePassword(user, oldPassword, newPassword); 
-        rundata.setMessage("Password changed!");
-    }
-    catch (PasswordMismatchException e) 
-    {
-      rundata.setMessage(e.getMessage());
-      rundata.setScreenTemplate("Password.vm");
-    }
-    
-    
-  }
-    
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  @Override
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
+		try {
+			security.changePassword(user, oldPassword, newPassword);
+			data.setMessage("Password changed!");
+		} catch (PasswordMismatchException e) {
+			data.setMessage(e.getMessage());
+			data.setScreenTemplate("Password.vm");
+		}
 
-    context.put("success", "Password changed!!");
-  }
+	}
+
+	/**
+	 * Implement this to add information to the context.
+	 *
+	 * @param data    Turbine information.
+	 * @param context Context for web pages.
+	 * @exception Exception, a generic exception.
+	 */
+	@Override
+	public void doPerform(PipelineData data, Context context) throws Exception 
+	{
+		context.put("success", "Password changed!!");
+	}
 
 }
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java b/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
index 52736d4..c700fc3 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
@@ -72,7 +72,7 @@
     public void doPerform(PipelineData pipelineData)
             throws FulcrumSecurityException
     {
-        RunData data = getRunData(pipelineData);
+        RunData data = (RunData) pipelineData;
         String username = data.getParameters().getString(LoginUser.CGI_USERNAME, "");
 
         if (StringUtils.isEmpty(username))
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java b/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
index 85dda64..7106114 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
@@ -19,7 +19,6 @@
 * under the License.
 *#
 
-
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
@@ -42,9 +41,9 @@
 import org.apache.turbine.util.RunData;
 
 /**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
+ * This is where we authenticate the user logging into the system against a user
+ * in the database. If the user exists in the database that users last login
+ * time will be updated.
  *
  * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
  * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
@@ -52,135 +51,117 @@
  * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
  * @version $Id$
  */
-public class LoginUserIntake
-        extends org.apache.turbine.modules.actions.LoginUser
-{
+public class LoginUserIntake extends org.apache.turbine.modules.actions.LoginUser {
 
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUserIntake.class);
+	/** Logging */
+	private static Log log = LogFactory.getLog(LoginUserIntake.class);
 
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
+	/** Injected service instance */
+	@TurbineService
+	private SecurityService security;
 
+	/** Injected configuration instance */
+	@TurbineConfiguration
+	private Configuration conf;
 
+	/**
+	 * Checks for anonymous user, else calls parent method.
+	 *
+	 * @param pipelineData Turbine information.
+	 * @exception FulcrumSecurityException could not get instance of the anonymous
+	 *                                     user
+	 */
+	@Override
+	public void doPerform(PipelineData pipelineData) throws FulcrumSecurityException 
+	{
+		RunData data = (RunData) pipelineData;
 
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        	
-       try
-        {
-          // Get intake group          
-    	    // context only available after ExecutePageValve, could not invoke (IntakeTool)context.get("intake") using pook service instead
-          PoolService poolService =  (PoolService)TurbineServices.getInstance().getService(PoolService.ROLE);
-          IntakeTool intake = (IntakeTool) poolService.getInstance(IntakeTool.class);
-          
-          intake.init(data);
-          Group group = intake.get("Login", IntakeTool.DEFAULT_KEY);
-          String username = (String)group.get("Username").getValue();
-          if (StringUtils.isEmpty(username))
-            {
-                return;
-            }
+		try 
+		{
+			// Get intake group
+			// context only available after ExecutePageValve, could not invoke
+			// (IntakeTool)context.get("intake") using pook service instead
+			PoolService poolService = (PoolService) TurbineServices.getInstance().getService(PoolService.ROLE);
+			IntakeTool intake = (IntakeTool) poolService.getInstance(IntakeTool.class);
 
-          if (username.equals(security.getAnonymousUser().getName()))
-            {
-                data.setMessage("Anonymous user cannot login");
-                reset(data);
-                return;
-            }
-            
-        	if (username.equals(security.getAnonymousUser().getName()))
-            {
-                throw new Exception("Anonymous user cannot login");
-            }
-        	
-            String password = (String)group.get("Password").getValue();
-            // Authenticate the user and get the object.
-            User user = security.getAuthenticatedUser(username, password);
+			intake.init(data);
+			Group group = intake.get("Login", IntakeTool.DEFAULT_KEY);
+			String username = (String) group.get("Username").getValue();
+			if (StringUtils.isEmpty(username)) 
+			{
+				return;
+			}
 
-            // Store the user object.
-            data.setUser(user);
+			if (username.equals(security.getAnonymousUser().getName())) 
+			{
+				data.setMessage("Anonymous user cannot login");
+				reset(data);
+				return;
+			}
 
-            // Mark the user as being logged in.
-            user.setHasLoggedIn(Boolean.TRUE);
+			if (username.equals(security.getAnonymousUser().getName())) 
+			{
+				throw new Exception("Anonymous user cannot login");
+			}
 
-            // Set the last_login date in the database.
-            user.updateLastLogin();
+			String password = (String) group.get("Password").getValue();
+			
+			// Authenticate the user and get the object.
+			User user = security.getAuthenticatedUser(username, password);
 
-            // This only happens if the user is valid; otherwise, we
-            // will get a valueBound in the User object when we don't
-            // want to because the username is not set yet.  Save the
-            // User object into the session.
-            data.save();
+			// Store the user object.
+			data.setUser(user);
 
-            /*
-             * If the setPage("template.vm") method has not
-             * been used in the template to authenticate the
-             * user (usually Login.vm), then the user will
-             * be forwarded to the template that is specified
-             * by the "template.home" property as listed in
-             * TR.props for the webapp.
-             */
+			// Mark the user as being logged in.
+			user.setHasLoggedIn(Boolean.TRUE);
 
-        }
-        catch (Exception e)
-        {
-            if (e instanceof DataBackendException || e instanceof IntakeException)
-            {
-                log.error(e);
-            }
+			// Set the last_login date in the database.
+			user.updateLastLogin();
 
-            // Set Error Message and clean out the user.
-            data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
-            User anonymousUser = security.getAnonymousUser();
-            data.setUser(anonymousUser);
-            
-            String loginTemplate = conf.getString(
-                    TurbineConstants.TEMPLATE_LOGIN);
+			// This only happens if the user is valid; otherwise, we
+			// will get a valueBound in the User object when we don't
+			// want to because the username is not set yet. Save the
+			// User object into the session.
+			data.save();
 
-            if (StringUtils.isNotEmpty(loginTemplate))
-            {
-                // We're running in a templating solution
-                data.setScreenTemplate(loginTemplate);
-            }
-            else
-            {
-                data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-            }
-        }
-    }
+			/*
+			 * If the setPage("template.vm") method has not been used in the template to
+			 * authenticate the user (usually Login.vm), then the user will be forwarded to
+			 * the template that is specified by the "template.home" property as listed in
+			 * TR.props for the webapp.
+			 */
 
-  private void reset(RunData data) throws UnknownEntityException {
-    User anonymousUser = security.getAnonymousUser();
-    data.setUser(anonymousUser);
+		} catch (Exception e) {
+			if (e instanceof DataBackendException || e instanceof IntakeException) {
+				log.error(e);
+			}
 
-    if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-    {
-        // We're running in a templating solution
-        data.setScreenTemplate(
-            conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-    }
-    else
-    {
-        data.setScreen(
-            conf.getString(TurbineConstants.SCREEN_LOGIN));
-    }
-  }
+			// Set Error Message and clean out the user.
+			data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
+			User anonymousUser = security.getAnonymousUser();
+			data.setUser(anonymousUser);
+
+			String loginTemplate = conf.getString(TurbineConstants.TEMPLATE_LOGIN);
+
+			if (StringUtils.isNotEmpty(loginTemplate)) {
+				// We're running in a templating solution
+				data.setScreenTemplate(loginTemplate);
+			} else {
+				data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
+			}
+		}
+	}
+
+	private void reset(RunData data) throws UnknownEntityException {
+		User anonymousUser = security.getAnonymousUser();
+		data.setUser(anonymousUser);
+
+		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN, ""))) {
+			// We're running in a templating solution
+			data.setScreenTemplate(conf.getString(TurbineConstants.TEMPLATE_LOGIN));
+		} else {
+			data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
+		}
+	}
 
 }
-
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java b/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
index 50a9d98..5f696c9 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
@@ -39,8 +39,7 @@
  * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
  * @version $Id: LogoutUser.java 1706239 2015-10-01 13:18:35Z tv $
  */
-public class LogoutUser
-        extends Action
+public class LogoutUser implements Action
 {
     /** Injected service instance */
     @TurbineService
@@ -72,7 +71,7 @@
     public void doPerform(PipelineData pipelineData)
             throws FulcrumSecurityException
     {
-        RunData data = getRunData(pipelineData);
+        RunData data = (RunData) pipelineData;
         // Session validator did not run, so RunData is not populated
         User user = data.getUserFromSession();
 
@@ -88,7 +87,7 @@
             security.saveUser(user);
         }
 
-        data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
+		((RunData) data).setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
 
         // This will cause the acl to be removed from the session in
         // the Turbine servlet code.
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java b/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
index c25fae5..85757e0 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
@@ -1,23 +1,20 @@
 package ${package}.modules.actions;
 
-#*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*#
+/*
+ * Copyright 2001-2019 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 
 import org.apache.fulcrum.localization.LocalizationService;
 import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
@@ -34,65 +31,60 @@
  * Always performs a Security Check that you've defined before executing the
  * doPerform().
  */
-public class SecureAction extends VelocitySecureAction 
-{
-    
-    @TurbineService
-    private LocalizationService localizationService;
-  /**
-   * This currently only checks to make sure that user is allowed to view the
-   * storage area. If you create an action that requires more security then
-   * override this method.
-   *
-   * @param data
-   *            Turbine information.
-   * @return True if the user is authorized to access the screen.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-    
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-    
-        if (acl == null || ! ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") ) ) 
-        {
-           String msg =  localizationService.getString(localizationService.getDefaultBundleName(), 
-                                          localizationService.getLocale( ((RunData) data).getRequest()), "no_permission");
-            
-            getRunData(data).setMessage(msg);
-    
-            log.debug( "call not permitted for template: " + getRunData(data).getScreenTemplate() + " and action " + getRunData(data).getAction() );
-             getRunData(data).setScreenTemplate( "Login.vm" );
-            isAuthorized = false;
-        } 
-        else if ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") )
-        {
-            isAuthorized = true;
-        }
-    
-        return isAuthorized;
-    }
+public class SecureAction extends VelocitySecureAction {
 
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-    User user = getRunData(data).getUser();
-    context.put("user",user);
+	@TurbineService
+	private LocalizationService localizationService;
+
+	/**
+	 * This currently only checks to make sure that user is allowed to view the
+	 * storage area. If you create an action that requires more security then
+	 * override this method.
+	 *
+	 * @param data Turbine information.
+	 * @return True if the user is authorized to access the screen.
+	 * @exception Exception, a generic exception.
+	 */
+	@Override
+	protected boolean isAuthorized(PipelineData pipelineData) throws Exception 
+	{
+		boolean isAuthorized = false;
+		RunData data = (RunData) pipelineData;
+
+		// Who is our current user?
+		User user = data.getUser();
+
+		// Get the Turbine ACL implementation
+		TurbineAccessControlList acl = data.getACL();
+
+		if (acl == null || !(acl.hasRole("turbineuser") || acl.hasRole("turbineadmin"))) {
+			String msg = localizationService.getString(localizationService.getDefaultBundleName(),
+					localizationService.getLocale(((RunData) data).getRequest()), "no_permission");
+
+			data.setMessage(msg);
+
+			log.debug(
+					"call not permitted for template: " + data.getScreenTemplate() + " and action " + data.getAction());
+			data.setScreenTemplate("Login.vm");
+			isAuthorized = false;
+		} else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin")) {
+			isAuthorized = true;
+		}
+
+		return isAuthorized;
+	}
+
+	/**
+	 * Implement this to add information to the context.
+	 *
+	 * @param data    Turbine information.
+	 * @param context Context for web pages.
+	 * @exception Exception, a generic exception.
+	 */
+	public void doPerform(PipelineData pipelineData, Context context) throws Exception 
+	{
+		RunData data = (RunData) pipelineData;
+		User user = data.getUser();
+		context.put("user", user);
 	}
 }
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java b/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
index 0ec8a8f..bb0cc47 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
@@ -39,7 +39,7 @@
 	    super.doPerform( pipelineData, context );
 	    List<Author> authors = AuthorPeer.doSelect( new Criteria() );//all
 	    context.put( "authors", authors );
-	    RunData data = getRunData(pipelineData);
+	    RunData data = (RunData) pipelineData;
 	    data.setScreenTemplate(Character.toLowerCase(getClass().getSimpleName().charAt(0)) + 
 	    		getClass().getSimpleName().substring(1) + ".vm"
 	    ); 
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
index de2a756..b7af8c5 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
@@ -58,7 +58,7 @@
      * return always <code>true</code>true, to show this screen as default
      */
     @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception
+    protected boolean isAuthorized(PipelineData pipelineData) throws Exception
     {
     	// use data.getACL() 
     	return true;
diff --git a/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java b/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
index f4ca0f2..0a77890 100644
--- a/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
+++ b/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
@@ -1,4 +1,5 @@
 package ${package}.modules.screens;
+
 #*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
@@ -18,7 +19,6 @@
 * under the License.
 *#
 
-
 import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
@@ -28,66 +28,58 @@
 import org.apache.turbine.om.security.User;
 import org.apache.turbine.pipeline.PipelineData;
 import org.apache.turbine.services.security.SecurityService;
+import org.apache.turbine.util.RunData;
 import org.apache.velocity.context.Context;
 import org.apache.commons.configuration2.Configuration;
 
 /**
  * This class provides a sample implementation for creating a secured screen
  */
-public class SecureScreen extends VelocitySecureScreen 
-{
-   	@TurbineService
-   	protected SecurityService securityService;
-    	
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_LOGIN )
-    private Configuration templateLogin;
-    
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_HOMEPAGE )
-    private Configuration templateHomepage;
-    
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-        
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-        
-        if (acl == null)
-        {
-          // commons configuration getProperty: prefix removed, the key for the value .. is an empty string, the result an object
-        getRunData(data).setScreenTemplate( (String) templateLogin.getProperty("") );
-        	isAuthorized = false;
-        } 
-        else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin"))
-        {
-            isAuthorized = true;
-        }
-        else 
-        {
-            getRunData(data).setScreenTemplate( (String) templateHomepage.getProperty("") );
-            getRunData(data).setMessage("You do not have access to this part of the site.");
-            isAuthorized = false;
-        }
-        return isAuthorized;
-    }
+public class SecureScreen extends VelocitySecureScreen {
+	@TurbineService
+	protected SecurityService securityService;
 
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param data
-     *            Turbine information.
-     * @param context
-     *            Context for web pages.
-     * @exception Exception,
-     *                a generic exception.
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context) throws Exception 
-    {
-    
-    }
+	@TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
+	private Configuration templateLogin;
+
+	@TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
+	private Configuration templateHomepage;
+
+	@Override
+	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
+		boolean isAuthorized = false;
+		RunData data = (RunData) pipelineData;
+
+		// Who is our current user?
+		User user = data.getUser();
+
+		// Get the Turbine ACL implementation
+		TurbineAccessControlList acl = data.getACL();
+
+		if (acl == null) {
+			// commons configuration getProperty: prefix removed, the key for the value ..
+			// is an empty string, the result an object
+			data.setScreenTemplate((String) templateLogin.getProperty(""));
+			isAuthorized = false;
+		} else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin")) {
+			isAuthorized = true;
+		} else {
+			data.setScreenTemplate((String) templateHomepage.getProperty(""));
+			data.setMessage("You do not have access to this part of the site.");
+			isAuthorized = false;
+		}
+		return isAuthorized;
+	}
+
+	/**
+	 * Implement this to add information to the context.
+	 *
+	 * @param data    Turbine information.
+	 * @param context Context for web pages.
+	 * @exception Exception, a generic exception.
+	 */
+	@Override
+	protected void doBuildTemplate(PipelineData data, Context context) throws Exception {
+
+	}
 }
diff --git a/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java b/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
index 44088e4..f430de4 100644
--- a/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
+++ b/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
@@ -1,7 +1,7 @@
 package ${package}.wrapper;
 
 /*
- * Copyright 2001-2017 The Apache Software Foundation.
+ * Copyright 2001-2019 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
diff --git a/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml b/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
index f458f40..d448f52 100644
--- a/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
+++ b/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
@@ -4,7 +4,7 @@
     <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
     <Resource name="${turbine_database_jndipath}" global="${turbine_database_jndipath}" auth="Container" type="javax.sql.DataSource" 
         driverClassName="${turbine_database_driver}" 
-        url="${turbine_database_url}${turbine_database_name}" 
+        url="${turbine_database_url}${turbine_database_name}?serverTimezone=${turbine_database_timezone}"
         username="${turbine_database_user}" password="${turbine_database_password}" 
         maxTotal="100" maxIdle="20" minIdle="5" maxWaitMillis="10000"/>
 </Context>
diff --git a/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
index b184621..d266cbd 100644
--- a/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ b/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
@@ -25,14 +25,6 @@
 #
 # -------------------------------------------------------------------
 
-
-# -------------------------------------------------------------------
-#
-#  P I P E L I N E
-#
-# -------------------------------------------------------------------
-pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
-
 # -------------------------------------------------------------------
 #
 #  L O G 4 J 2 - L O G G I N G
@@ -44,6 +36,13 @@
 
 # -------------------------------------------------------------------
 #
+#  P I P E L I N E
+#
+# -------------------------------------------------------------------
+pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
+
+# -------------------------------------------------------------------
+#
 #  M A I L  S E R V E R
 #
 # -------------------------------------------------------------------
diff --git a/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
index a21b16a..3911005 100644
--- a/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ b/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
@@ -61,11 +61,6 @@
         default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
 
     <role
-        name="org.apache.fulcrum.upload.UploadService"
-        shorthand="upload"
-        default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
-
-    <role
         name="org.apache.fulcrum.parser.ParserService"
         shorthand="parser"
         default-class="org.apache.fulcrum.parser.DefaultParserService"/>
@@ -137,4 +132,4 @@
     <!-- Add your services here -->
     
                 
-</role-list>
\ No newline at end of file
+</role-list>
