Merge tag 'roller-5.2.0'
diff --git a/.gitignore b/.gitignore
index bfa6a22..c152e92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-# Created by .ignore support plugin (hsz.mobi)
+./tomcat/*
diff --git a/NOTICE.txt b/NOTICE.txt
index 7c9e186..490d7b4 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -12,7 +12,7 @@
     Copyright 2003 Simon Brown, All rights reserved.
 
 * Code written by Sun Microsystems, Inc. 
-    Copyright 2005 Sun Microsystems, Inc.
+    Copyright 2009 Sun Microsystems, Inc.
 
 * Code written by Dave Johnson for RSS and Atom in Action
     Copyright 2005 David M Johnson (For RSS and Atom In Action)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0953102
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
+# Apache Roller
+
+[Apache Roller](http://roller.apache.org) is a Java-based, full-featured,
+multi-user and group-blog server suitable for blog sites large and small.
+Roller is typically run with Apache Tomcat and MySQL.
+Roller is made up of the following Maven projects:
+
+* _roller-project_:         Top level project
+* _app_:                    Roller Weblogger webapp, JSP pages, Velocity templates
+* _assembly-release_:       Used to create official distributions of Roller
+* _docs_:                   Roller documentation in ODT format
+* _it-selenium_:            Integrated browser tests for Roller using Selenium
+
+## Documentation
+
+The Roller Install, User and Template Guides are available in ODT format
+(for OpenOffice or LibraOffice):
+
+* https://github.com/apache/roller/tree/master/docs
+
+## For more information
+
+Hit the Roller Confluence wiki:
+
+* How to build and run Roller: https://cwiki.apache.org/confluence/x/EM4
+* How to contribute to Roller: https://cwiki.apache.org/confluence/x/2hsB
+* How to make a release of Roller: https://cwiki.apache.org/confluence/x/gycB
+* Other developer resources: https://cwiki.apache.org/confluence/x/D84
+
+## Quick start
+
+Assuming you've got a UNIX shell, Java, Maven and Git:
+
+Get the code:
+
+    $ git clone https://github.com/apache/roller.git
+
+Build and test the code:
+
+    $ cd roller
+    $ mvn clean install
+
+Run Roller in Jetty with Derby database:
+
+    $ cd app
+    $ mvn jetty:run
+
+Browse to http://localhost:8080/roller
+
+
+
+
+
+
diff --git a/README.txt b/README.txt
deleted file mode 100644
index fcf2b08..0000000
--- a/README.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-README.txt
-
-This file exists at the top-level of the Roller source tree.
-
-Roller is made up of the following Maven projects:
-
-  roller-project:         Top level project
-  app:                    Roller Weblogger webapp, JSP pages, Velocity templates
-  assembly-release:       Used to create official distributions of Roller
-  docs:                   Roller documentation in ODT (OpenOffice/LibreOffice) format
-  it-selenium             Integrated browser tests for Roller using Selenium
-
-To pull the latest trunk sources you need a Subversion client:
-  svn co https://svn.apache.org/repos/asf/roller/trunk roller_trunk
-
-Building this version of Roller requires Apache Maven 3.0.5.
-  - How to build Roller: https://cwiki.apache.org/confluence/x/EM4
-  - To build and run Roller on Eclipse: https://cwiki.apache.org/confluence/x/EM4
-
-----------------------------------------------------------
-How to build the source
-
-The normal Roller build creates a product generically suitable for use several
-application containers, however see the Roller Install guide for application server
-specific configuration information.
-
-After pulling the source tree and changing directory to its top level, as
-indicated above, the following command will build and run all unit tests:
-
-   mvn clean install
-
-After doing that, you should find the newly built Roller webapp, suitable
-for use in app/target/roller. 
-
-To build Roller, subsequently run "mvn clean install" from the assembly-release
-folder.  After that, you'll find Roller distribution files in 
-assembly-release/target. 
-
----------------------------
-NOTES
-
-Building other versions of Roller
-
-If you wish to pull a branch other than the trunk, replace the word
-"trunk" in both lines above with the appropriate branch name.  Note that
-versions of Roller before 5.0 have an Ant-based build.  In general, you should
-be able to follow instructions accompanying the sources that you pull in order
-to build that version.
-
diff --git a/app/pom.xml b/app/pom.xml
index eec883a..4739e4c 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -1,3 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -7,7 +24,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>5.2.0-SNAPSHOT</version>
+        <version>5.2.0</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -16,13 +33,75 @@
     <packaging>war</packaging>
 
     <properties>
-        <lucene.version>4.10.3</lucene.version>
+        <angular.version>1.2.29</angular.version>
+        <ant.version>1.10.1</ant.version>
+        <commons-validator.version>1.6</commons-validator.version>
+        <commons-beanutils.version>1.9.3</commons-beanutils.version>
+        <commons-httpclient.version>3.1</commons-httpclient.version>
+        <commons-codec.version>1.10</commons-codec.version>
+        <eclipse-link.version>2.5.2</eclipse-link.version>
+        <guice.version>4.1.0</guice.version>
+        <java-mail.version>1.4.7</java-mail.version>
+        <jsp-api.version>2.2</jsp-api.version>
+        <jstl.version>1.2</jstl.version>
+        <log4j.version>1.2.17</log4j.version>
+        <log4j2.version>2.8.2</log4j2.version>
+        <lucene.version>4.10.4</lucene.version>
+        <oauth-core.version>20100527</oauth-core.version>
+        <maven-war.version>3.1.0</maven-war.version>
+        <maven-surefire.version>2.17</maven-surefire.version>
+        <maven-antrun.version>1.0b3</maven-antrun.version>
+        <rome.version>1.7.4</rome.version>
+        <servlet.version>3.0.1</servlet.version>
+        <slf4j.version>1.7.25</slf4j.version>
         <spring.version>4.1.4.RELEASE</spring.version>
         <spring.security.version>3.2.5.RELEASE</spring.security.version>
+        <struts.version>2.5.12</struts.version>
+        <velocity.version>1.7</velocity.version>
+        <webjars.version>1.5</webjars.version>
+        <ws-commons-util.version>1.0.2</ws-commons-util.version>
+        <xml-security.version>1.3.0</xml-security.version>
+        <xmlrpc-version>3.1.3</xmlrpc-version>
     </properties>
 
     <dependencies>
 
+
+        <!-- Java EE deps -->
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>${servlet.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet.jsp</groupId>
+            <artifactId>jsp-api</artifactId>
+            <version>${jsp-api.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>jstl</artifactId>
+            <version>${jstl.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+            <version>${java-mail.version}</version>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.activation</groupId>
+                    <artifactId>activation</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
         <!-- Eclipselink JPA is the default JPA implementation used by
              Roller, comment out this dependency and uncomment Hibernate's
              to use that stack instead.
@@ -34,7 +113,7 @@
         <dependency>
             <groupId>org.eclipse.persistence</groupId>
             <artifactId>eclipselink</artifactId>
-            <version>2.5.2</version>
+            <version>${eclipse-link.version}</version>
         </dependency>
 
         <!-- Alternative testing with Hibernate (used by default with JBoss)
@@ -72,16 +151,37 @@
              to this pom.xml.  Check the Roller source code repository for a copy of
              this pom.xml prior to July 2013 for the necessary OpenJPA configuration -->
 
+
+        <!-- Apache deps include Velocity, Struts, Lucene, HttpClient and XML-RPC -->
+
         <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.17</version>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity</artifactId>
+            <version>${velocity.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>com.google.inject</groupId>
-            <artifactId>guice</artifactId>
-            <version>4.0</version>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-core</artifactId>
+            <version>${struts.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-spring-plugin</artifactId>
+            <version>${struts.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-convention-plugin</artifactId>
+            <version>${struts.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-tiles-plugin</artifactId>
+            <version>${struts.version}</version>
         </dependency>
 
         <dependency>
@@ -99,27 +199,64 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.7</version>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>${log4j.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>${log4j2.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-validator</groupId>
+            <artifactId>commons-validator</artifactId>
+            <version>${commons-validator.version}</version>
+            <type>jar</type>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>${commons-beanutils.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>${commons-httpclient.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>${commons-codec.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>xml-security</groupId>
+            <artifactId>xmlsec</artifactId>
+            <version>${xml-security.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.xmlrpc</groupId>
             <artifactId>xmlrpc-common</artifactId>
-            <version>3.1.3</version>
+            <version>${xmlrpc-version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.xmlrpc</groupId>
             <artifactId>xmlrpc-client</artifactId>
-            <version>3.1.3</version>
+            <version>${xmlrpc-version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.xmlrpc</groupId>
             <artifactId>xmlrpc-server</artifactId>
-            <version>3.1.3</version>
+            <version>${xmlrpc-version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>javax.servlet</groupId>
@@ -131,7 +268,7 @@
         <dependency>
             <groupId>org.apache.ws.commons.util</groupId>
             <artifactId>ws-commons-util</artifactId>
-            <version>1.0.2</version>
+            <version>${ws-commons-util.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>xml-apis</groupId>
@@ -140,54 +277,8 @@
             </exclusions>
         </dependency>
 
-        <dependency>
-            <groupId>net.oauth.core</groupId>
-            <artifactId>oauth-provider</artifactId>
-            <scope>compile</scope>
-            <version>20100527</version>
-        </dependency>
 
-        <!-- web -->
-
-        <dependency>
-	        <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>3.0.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.rometools</groupId>
-            <artifactId>rome-fetcher</artifactId>
-            <version>1.5.0</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.rometools</groupId>
-            <artifactId>rome-propono</artifactId>
-            <version>1.5.0</version>
-            <scope>compile</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>xmlrpc</groupId>
-                    <artifactId>xmlrpc-common</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xmlrpc</groupId>
-                    <artifactId>xmlrpc-client</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.10</version>
-            <scope>runtime</scope>
-        </dependency>
-
-        <!-- spring deps -->
+        <!-- Spring deps (needed only for Spring Security) -->
 
         <dependency>
             <groupId>org.springframework</groupId>
@@ -249,101 +340,85 @@
             </exclusions>
         </dependency>
 
+
+        <!-- Other deps include Guice and ROME -->
+
         <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-spring-plugin</artifactId>
-            <version>2.5.10.1</version>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+            <version>${guice.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>org.apache.struts</groupId>
-            <artifactId>struts2-tiles-plugin</artifactId>
-            <version>2.5.10.1</version>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>runtime</scope>
         </dependency>
 
         <dependency>
-            <groupId>xml-security</groupId>
-            <artifactId>xmlsec</artifactId>
-            <version>1.3.0</version>
-        </dependency>
-
-        <!-- Java EE deps -->
-
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>jstl</artifactId>
-            <version>1.2</version>
+            <groupId>com.rometools</groupId>
+            <artifactId>rome-fetcher</artifactId>
+            <version>${rome.version}</version>
+            <scope>compile</scope>
         </dependency>
 
         <dependency>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-            <version>1.4.7</version>
-            <scope>provided</scope>
+            <groupId>com.rometools</groupId>
+            <artifactId>rome-propono</artifactId>
+            <version>${rome.version}</version>
+            <scope>compile</scope>
             <exclusions>
                 <exclusion>
-                    <groupId>javax.activation</groupId>
-                    <artifactId>activation</artifactId>
+                    <groupId>xmlrpc</groupId>
+                    <artifactId>xmlrpc-common</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xmlrpc</groupId>
+                    <artifactId>xmlrpc-client</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
 
         <dependency>
-            <groupId>javax.servlet.jsp</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.2</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-validator</groupId>
-            <artifactId>commons-validator</artifactId>
-            <version>1.4.0</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
-            <version>3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-            <version>1.9.2</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>1.10</version>
-        </dependency>
-
-        <!-- WebJars deps -->
-
-        <dependency>
             <groupId>org.webjars</groupId>
             <artifactId>webjars-servlet-2.x</artifactId>
-            <version>1.5</version>
+            <version>${webjars.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.webjars.npm</groupId>
             <artifactId>angular</artifactId>
-            <version>1.2.29</version>
+            <version>${angular.version}</version>
         </dependency>
 
-        <!-- test deps -->
+        <dependency>
+            <groupId>net.oauth.core</groupId>
+            <artifactId>oauth-provider</artifactId>
+            <scope>compile</scope>
+            <version>${oauth-core.version}</version>
+        </dependency>
+
+
+        <!-- Test deps -->
 
         <dependency>
-            <groupId>org.apache.derby</groupId>
-            <artifactId>derbynet</artifactId>
-            <version>${derby.version}</version>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.ant</groupId>
             <artifactId>ant</artifactId>
-            <version>1.9.4</version>
+            <version>${ant.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.derby</groupId>
+            <artifactId>derbynet</artifactId>
+            <version>${derby.version}</version>
             <scope>test</scope>
         </dependency>
 
@@ -354,11 +429,6 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <build>
@@ -370,7 +440,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
-                <version>2.4</version>
+                <version>${maven-war.version}</version>
                 <configuration>
                     <attachClasses>true</attachClasses>
                 </configuration>
@@ -406,7 +476,7 @@
                     <dependency>
 	                    <groupId>javax.mail</groupId>
 	                    <artifactId>mail</artifactId>
-	                    <version>1.4.7</version>
+	                    <version>${java-mail.version}</version>
                     </dependency>
                 </dependencies>
             </plugin>
@@ -463,7 +533,7 @@
                             <resources>
                                 <resource>
                                     <directory>src/main/resources</directory>
-                                    <filtering>true</filtering>
+                                    <filtering>false</filtering>
                                 </resource>
                             </resources>
                         </configuration>
@@ -538,7 +608,7 @@
                     <dependency>
                         <groupId>ant-contrib</groupId>
                         <artifactId>ant-contrib</artifactId>
-                        <version>1.0b3</version>
+                        <version>${maven-antrun.version}</version>
                         <exclusions>
                             <exclusion>
                                 <groupId>ant</groupId>
@@ -632,7 +702,7 @@
             </resource>
             <resource>
                 <!-- ensure version gets substitution -->
-                <directory>${project.basedir}/src/main/resources</directory>
+                <directory>${project.basedir}/src/main/resources-filtered</directory>
                 <filtering>true</filtering>
                 <includes>
                     <include>roller-version.properties</include>
diff --git a/app/src/main/java/org/apache/roller/planet/business/PlanetManager.java b/app/src/main/java/org/apache/roller/planet/business/PlanetManager.java
index 730c922..deec197 100644
--- a/app/src/main/java/org/apache/roller/planet/business/PlanetManager.java
+++ b/app/src/main/java/org/apache/roller/planet/business/PlanetManager.java
@@ -25,6 +25,7 @@
 import org.apache.roller.planet.pojos.SubscriptionEntry;
 import org.apache.roller.planet.pojos.PlanetGroup;
 import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.weblogger.WebloggerException;
 
 
 /**
@@ -178,5 +179,9 @@
                            Date endDate,
                            int offset, 
                            int len) throws RollerException;
-    
+
+    /**
+     * Add new PlanetGroup and add it to an existing planet.
+     */
+    void saveNewPlanetGroup(Planet planet, PlanetGroup planetGroup) throws WebloggerException;
 }
diff --git a/app/src/main/java/org/apache/roller/planet/business/jpa/JPAPlanetManagerImpl.java b/app/src/main/java/org/apache/roller/planet/business/jpa/JPAPlanetManagerImpl.java
index ff2ab15..5a24a80 100644
--- a/app/src/main/java/org/apache/roller/planet/business/jpa/JPAPlanetManagerImpl.java
+++ b/app/src/main/java/org/apache/roller/planet/business/jpa/JPAPlanetManagerImpl.java
@@ -85,6 +85,10 @@
     }
     
     public void deleteGroup(PlanetGroup group) throws RollerException {
+
+        group.getPlanet().getGroups().remove(group);
+        strategy.store(group.getPlanet());
+
         strategy.remove(group);
     }
     
@@ -251,7 +255,8 @@
         if (sub == null) {
             throw new WebloggerException("subscription cannot be null");
         }
-        TypedQuery<SubscriptionEntry> q = strategy.getNamedQuery("SubscriptionEntry.getBySubscription", SubscriptionEntry.class);
+        TypedQuery<SubscriptionEntry> q = strategy.getNamedQuery(
+                "SubscriptionEntry.getBySubscription", SubscriptionEntry.class);
         q.setParameter(1, sub);
         if (offset != 0) {
             q.setFirstResult(offset);
@@ -266,7 +271,8 @@
         return getEntries(group, null, null, offset, len);
     }
 
-    public List<SubscriptionEntry> getEntries(PlanetGroup group, Date startDate, Date endDate, int offset, int len) throws RollerException {
+    public List<SubscriptionEntry> getEntries(
+            PlanetGroup group, Date startDate, Date endDate, int offset, int len) throws RollerException {
 
         if (group == null) {
             throw new WebloggerException("group cannot be null or empty");
@@ -319,6 +325,16 @@
         
         return ret;
     }
+
+    @Override
+    public void saveNewPlanetGroup(Planet planet, PlanetGroup planetGroup) throws WebloggerException {
+
+        planetGroup.setPlanet( planet );
+        strategy.store( planetGroup );
+
+        planet.getGroups().add( planetGroup );
+        strategy.store( planet );
+    }
 }
 
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java
index abb2e08..afa97cf 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetConfig.java
@@ -33,6 +33,7 @@
 import org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs;
 import org.apache.roller.weblogger.pojos.GlobalPermission;
 import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.ParameterAware;
 
 
@@ -41,6 +42,7 @@
  *
  * Handles editing of planet global runtime properties.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class PlanetConfig extends PlanetUIAction implements ParameterAware {
     
     private static Log log = LogFactory.getLog(PlanetConfig.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java
index 3edc03a..f65c480 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetGroups.java
@@ -22,13 +22,17 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.planet.business.PlanetManager;
+import org.apache.roller.planet.pojos.Planet;
 import org.apache.roller.planet.pojos.PlanetGroup;
+import org.apache.roller.weblogger.business.Weblogger;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Manage planet groups.
  */
+// TODO: make this work @AllowedMethods({"execute","save","delete"})
 public class PlanetGroups extends PlanetUIAction {
     
     private static Log log = LogFactory.getLog(PlanetGroups.class);
@@ -79,42 +83,47 @@
         
         return LIST;
     }
-    
-    
-    /** 
+
+
+    /**
      * Save group.
      */
     public String save() {
-        
+
         myValidate();
-        
+
         if (!hasActionErrors()) {
             try {
+                PlanetManager planetManager = WebloggerFactory.getWeblogger().getPlanetManager();
+
+                Planet planet = getPlanet();
                 PlanetGroup planetGroup = getGroup();
-                if(planetGroup == null) {
-                    log.debug("Adding New Group");
+
+                if (planetGroup == null) {
                     planetGroup = new PlanetGroup();
-                    planetGroup.setPlanet(getPlanet());
+                    planetGroup.setPlanet(planet);
+                    getBean().copyTo(planetGroup);
+
+                    log.debug("Adding New Group: " + planetGroup.getHandle());
+                    planetManager.saveNewPlanetGroup(getPlanet(), planetGroup);
+
                 } else {
-                    log.debug("Updating Existing Group");
+                    log.debug("Updating Existing Group: " + planetGroup.getHandle());
+                    getBean().copyTo(planetGroup);
+                    planetManager.saveGroup(planetGroup);
                 }
 
-                // copy in submitted data
-                getBean().copyTo(planetGroup);
-
-                // save and flush
-                PlanetManager pmgr = WebloggerFactory.getWeblogger().getPlanetManager();
-                pmgr.saveGroup(planetGroup);
                 WebloggerFactory.getWeblogger().flush();
-
                 addMessage("planetGroups.success.saved");
 
-            } catch(Exception ex) {
+                setGroup(null);
+
+            } catch (Exception ex) {
                 log.error("Error saving planet group - " + getBean().getId(), ex);
                 addError("planetGroups.error.saved");
             }
         }
-        
+
         return LIST;
     }
 
@@ -131,6 +140,9 @@
                 WebloggerFactory.getWeblogger().flush();
                 
                 addMessage("planetSubscription.success.deleted");
+
+                setGroup(null);
+
             } catch(Exception ex) {
                 log.error("Error deleting planet group - "+getBean().getId());
                 addError("Error deleting planet group");
diff --git a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetSubscriptions.java b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetSubscriptions.java
index 5063be5..899eaa2 100644
--- a/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetSubscriptions.java
+++ b/app/src/main/java/org/apache/roller/weblogger/planet/ui/PlanetSubscriptions.java
@@ -30,11 +30,13 @@
 import org.apache.roller.planet.pojos.Subscription;
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.pojos.GlobalPermission;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Manage planet group subscriptions, default group is "all".
  */
+// TODO: make this work @AllowedMethods({"execute","save","delete"})
 public class PlanetSubscriptions extends PlanetUIAction {
     
     private static final Log LOGGER = LogFactory.getLog(PlanetSubscriptions.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java
index 79a2783..e75f266 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CacheInfo.java
@@ -24,11 +24,13 @@
 import org.apache.roller.weblogger.pojos.GlobalPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Action for displaying rendering cache info.
  */
+// TODO: make this work @AllowedMethods({"execute"})
 public class CacheInfo extends UIAction {
     
     // map of stats to display
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java
index 21b40dc..750a8f1 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalCommentManagement.java
@@ -41,12 +41,14 @@
 import org.apache.roller.weblogger.util.cache.CacheManager;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.Utilities;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.ServletRequestAware;
 
 
 /**
  * Action for managing global set of comments.
  */
+// TODO: make this work @AllowedMethods({"query","delete","update"})
 public class GlobalCommentManagement extends UIAction implements ServletRequestAware {
     
     private static Log log = LogFactory.getLog(GlobalCommentManagement.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java
index 6f474b7..da71a41 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java
@@ -39,6 +39,7 @@
 import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.ParameterAware;
 import org.apache.struts2.interceptor.ServletRequestAware;
 
@@ -46,6 +47,7 @@
 /**
  * Action which handles editing of global configuration.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class GlobalConfig extends UIAction implements ParameterAware, ServletRequestAware {
     
     private static Log log = LogFactory.getLog(GlobalConfig.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
index 2769576..1b5d13c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
@@ -26,10 +26,12 @@
 import org.apache.roller.weblogger.business.pings.PingTargetManager;
 import org.apache.roller.weblogger.pojos.PingTarget;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Add or modify a common ping target.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class PingTargetEdit extends UIAction {
     
     private static Log log = LogFactory.getLog(PingTargetEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java
index 1f8b487..fa7529a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargets.java
@@ -29,10 +29,12 @@
 import org.apache.roller.weblogger.business.pings.PingTargetManager;
 import org.apache.roller.weblogger.pojos.PingTarget;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Admin action for managing global ping targets.
  */
+// TODO: make this work @AllowedMethods({"execute","enable","disable","delete","deleteConfirm"})
 public class PingTargets extends UIAction {
     
     private static Log log = LogFactory.getLog(PingTargets.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java
index dce1f79..63613a5 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserAdmin.java
@@ -25,11 +25,13 @@
 import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.pojos.GlobalPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Action which displays user admin search page.
  */
+// TODO: make this work @AllowedMethods({"execute"})
 public class UserAdmin extends UIAction {
     
     public UserAdmin() {
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
index cd73584..afdc522 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
@@ -39,12 +39,14 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.core.Register;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Action that allows an admin to modify a users profile.
  */
+// TODO: make this work @AllowedMethods({"execute","save","firstSave"})
 public class UserEdit extends UIAction {
     
     private static Log log = LogFactory.getLog(UserEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java
index 10f918f..8795442 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/CreateWeblog.java
@@ -33,6 +33,7 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.Utilities;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 import java.util.List;
@@ -41,6 +42,7 @@
 /**
  * Allows user to create a new website.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class CreateWeblog extends UIAction {
     
     private static Log log = LogFactory.getLog(CreateWeblog.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
index b5becd2..e67cc85 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Install.java
@@ -31,12 +31,14 @@
 import org.apache.roller.weblogger.business.startup.WebloggerStartup;
 import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.springframework.beans.factory.access.BootstrapException;
 
 
 /**
  * Walk user through install process.
  */
+// TODO: make this work @AllowedMethods({"execute","create","update","bootstrap"})
 public class Install extends UIAction {
 
     private static Log log = LogFactory.getLog(Install.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java
index 4485c7d..f0fbe76 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Login.java
@@ -21,6 +21,7 @@
 import org.apache.roller.weblogger.config.AuthMethod;
 import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Handle user logins.
@@ -33,6 +34,7 @@
  *
  * @see org.apache.roller.weblogger.ui.struts2.core.Register
  */
+// TODO: make this work @AllowedMethods({"execute"})
 public class Login extends UIAction {
     
     private String error = null;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java
index ae48acc..9378018 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/MainMenu.java
@@ -29,11 +29,13 @@
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Allows user to view and pick from list of his/her websites.
  */
+// TODO: make this work @AllowedMethods({"execute","accept","decline"})
 public class MainMenu extends UIAction {
     
     private static Log log = LogFactory.getLog(MainMenu.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java
index f20c67d..f36e07b 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthAuthorize.java
@@ -22,6 +22,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.ServletRequestAware;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
@@ -29,6 +30,7 @@
 /**
  * Allow user to authorized OAuth access to his/her account.
  */
+// TODO: make this work @AllowedMethods({"execute"})
 public class OAuthAuthorize extends UIAction implements ServletRequestAware {
     private static Log log = LogFactory.getLog(OAuthAuthorize.class);
     private String appDesc = null;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java
index 1d5d4d6..6b6fa51 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/OAuthKeys.java
@@ -26,12 +26,14 @@
 import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Allows user to view his/her OAuth consumer key and secret.
  */
+// TODO: make this work @AllowedMethods({"execute"})
 public class OAuthKeys extends UIAction {
     private static Log log = LogFactory.getLog(OAuthKeys.class);
     private OAuthConsumer userConsumer;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java
index f9e1d63..37e01d5 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Profile.java
@@ -28,12 +28,14 @@
 import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Allows user to edit his/her profile.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class Profile extends UIAction {
     private static Log log = LogFactory.getLog(Profile.class);
     
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
index 138aadb..f3b906c 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
@@ -37,6 +37,7 @@
 import org.apache.roller.weblogger.ui.core.security.CustomUserRegistry;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.MailUtil;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.ServletRequestAware;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
@@ -49,6 +50,7 @@
  *
  * @see org.apache.roller.weblogger.ui.struts2.core.Login
  */
+// TODO: make this work @AllowedMethods({"execute","save","activate"})
 public class Register extends UIAction implements ServletRequestAware {
     
     private static Log log = LogFactory.getLog(Register.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java
index f7ac6cb..0cd64fb 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/core/Setup.java
@@ -28,11 +28,13 @@
 import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Page used to display Roller install instructions.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class Setup extends UIAction {
     
     private static final Log LOG = LogFactory.getLog(Setup.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
index 725dcfd..852ec72 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
@@ -27,12 +27,14 @@
 import org.apache.roller.weblogger.pojos.WeblogBookmark;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Edit a new or existing bookmark (blogroll item).
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class BookmarkEdit extends UIAction {
     
     private static Log log = LogFactory.getLog(BookmarkEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
index 77b3daa..f695072 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
@@ -32,11 +32,13 @@
 import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
  * List bookmarks and folders and allow for moving them around and deleting them.
  */
+// TODO: make this work @AllowedMethods({"execute","delete","deleteFolder","move","view","folderCreated"})
 public class Bookmarks extends UIAction {
 
     private static Log log = LogFactory.getLog(Bookmarks.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java
index c2d7cd2..b225cc2 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarksImport.java
@@ -31,11 +31,13 @@
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Import opml file into bookmarks folder.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public final class BookmarksImport extends UIAction {
     
     private static Log log = LogFactory.getLog(BookmarksImport.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
index ae6e7fa..dd9389f 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
@@ -28,10 +28,12 @@
 import org.apache.roller.weblogger.pojos.WeblogCategory;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Manage weblog categories.
  */
+// TODO: make this work @AllowedMethods({"execute","move"})
 public class Categories extends UIAction {
 
 	private static Log log = LogFactory.getLog(Categories.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
index 99fbc9f..9d2c517 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
@@ -30,12 +30,14 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Edit a new or existing weblog category.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class CategoryEdit extends UIAction {
     
     private static Log log = LogFactory.getLog(CategoryEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
index c161b27..206e89b 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
@@ -32,11 +32,13 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Remove a category.
  */
+// TODO: make this work @AllowedMethods({"execute","remove","cancel"})
 public class CategoryRemove extends UIAction {
     
     private static Log log = LogFactory.getLog(CategoryRemove.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
index 899009e..10c663a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Comments.java
@@ -47,10 +47,12 @@
 import org.apache.roller.weblogger.util.I18nMessages;
 import org.apache.roller.weblogger.util.MailUtil;
 import org.apache.roller.weblogger.util.Utilities;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Action for managing weblog comments.
  */
+// TODO: make this work @AllowedMethods({"execute","query","delete","update"})
 public class Comments extends UIAction {
 
     private static final long serialVersionUID = -104973988372024709L;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java
index b0530ad..9f15e2d 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Entries.java
@@ -36,11 +36,13 @@
 import org.apache.roller.weblogger.ui.struts2.pagers.EntriesPager;
 import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * A list view of entries in a weblog.
  */
+// TODO: make this work @AllowedMethods({"execute"})
 public class Entries extends UIAction {
     
     private static Log log = LogFactory.getLog(Entries.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java
index c3bb6ef..02a3677 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAddWithMediaFile.java
@@ -23,12 +23,14 @@
 import org.apache.roller.weblogger.business.MediaFileManager;

 import org.apache.roller.weblogger.business.WebloggerFactory;

 import org.apache.roller.weblogger.pojos.MediaFile;

+import org.apache.struts2.convention.annotation.AllowedMethods;

 import org.apache.struts2.interceptor.validation.SkipValidation;

 

 /**

  * Prepares creation of a new weblog entry with an embedded pointer to a media file.

  */

 @SuppressWarnings("serial")

+// TODO: make this work @AllowedMethods({"execute"})

 public class EntryAddWithMediaFile extends MediaFileBase {

 

     private static Log log = LogFactory.getLog(EntryAddWithMediaFile.class);

diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
index 3d2461c..9ffcb2e 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
@@ -57,11 +57,13 @@
 import org.apache.roller.weblogger.util.RollerMessages.RollerMessage;
 import org.apache.roller.weblogger.util.Trackback;
 import org.apache.roller.weblogger.util.TrackbackNotAllowedException;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
  * Edit a new or existing entry.
  */
+// TODO: make this work @AllowedMethods({"execute","firstSave","saveDraft","publish","entryEdit","entryAdd"})
 public final class EntryEdit extends UIAction {
 
     private static Log log = LogFactory.getLog(EntryEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
index b6832c4..64266ed 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
@@ -28,6 +28,7 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 import java.util.Collections;
 import java.util.List;
@@ -35,6 +36,7 @@
 /**
  * Remove a weblog entry.
  */
+// TODO: make this work @AllowedMethods({"execute","remove"})
 public class EntryRemove extends UIAction {
 
     private static Log log = LogFactory.getLog(EntryRemove.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
index 10a7201..141c1c2 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
@@ -27,12 +27,14 @@
 import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Edit a new or existing folder.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class FolderEdit extends UIAction {
     
     private static Log log = LogFactory.getLog(FolderEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java
index a1d4ade..8b57dd9 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Maintenance.java
@@ -28,11 +28,13 @@
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Allows user to perform maintenance operations such as flushing the page cache
  * or re-indexing the search index.
  */
+// TODO: make this work @AllowedMethods({"execute","index","flushCache","reset"})
 public class Maintenance extends UIAction {
 
     private static Log log = LogFactory.getLog(Maintenance.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
index 8c9e48b..dc75df8 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
@@ -36,12 +36,14 @@
 import org.apache.roller.weblogger.util.RollerMessages;
 import org.apache.roller.weblogger.util.RollerMessages.RollerMessage;
 import org.apache.roller.weblogger.util.Utilities;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
  * Adds a new media file.
  */
 @SuppressWarnings("serial")
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class MediaFileAdd extends MediaFileBase {
 
     private static Log log = LogFactory.getLog(MediaFileAdd.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
index 8977ae3..f6045d4 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
@@ -29,12 +29,14 @@
 import org.apache.roller.weblogger.business.WebloggerFactory;

 import org.apache.roller.weblogger.pojos.MediaFile;

 import org.apache.roller.weblogger.pojos.MediaFileDirectory;

+import org.apache.struts2.convention.annotation.AllowedMethods;

 import org.apache.struts2.interceptor.validation.SkipValidation;

 

 /**

  * Edits metadata for a media file.

  */

 @SuppressWarnings("serial")

+// TODO: make this work @AllowedMethods({"execute","save"})

 public class MediaFileEdit extends MediaFileBase {

 

     private static Log log = LogFactory.getLog(MediaFileEdit.class);

diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java
index 4a17fe3..4e90654 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageChooser.java
@@ -33,12 +33,14 @@
 import org.apache.roller.weblogger.pojos.MediaFileDirectoryComparator.DirectoryComparatorType;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
  * Browse media files action.
  */
 @SuppressWarnings("serial")
+// TODO: make this work @AllowedMethods({"execute"})
 public class MediaFileImageChooser extends MediaFileBase {
     private static Log log = LogFactory.getLog(MediaFileImageChooser.class);
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java
index cad891a..df5d2e7 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileImageDim.java
@@ -23,12 +23,14 @@
 import org.apache.roller.weblogger.business.MediaFileManager;
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.pojos.MediaFile;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
  * Action class for choosing image dimensions.
  */
 @SuppressWarnings("serial")
+// TODO: make this work @AllowedMethods({"execute"})
 public class MediaFileImageDim extends MediaFileBase {
 
     private static Log log = LogFactory.getLog(MediaFileImageDim.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
index 4590748..62644c0 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
@@ -37,12 +37,14 @@
 import org.apache.roller.weblogger.ui.struts2.pagers.MediaFilePager;

 import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;

 import org.apache.roller.weblogger.util.cache.CacheManager;

+import org.apache.struts2.convention.annotation.AllowedMethods;

 import org.apache.struts2.interceptor.validation.SkipValidation;

 

 /**

  * View media files.

  */

 @SuppressWarnings("serial")

+// TODO: make this work @AllowedMethods({"execute","view","search","delete","deleteSelected","deleteFolder","includeInGallery","moveSelected"})

 public class MediaFileView extends MediaFileBase {

 

     private static Log log = LogFactory.getLog(MediaFileView.class);

diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java
index a38e0c4..9f01f31 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MemberResign.java
@@ -27,10 +27,12 @@
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Action for resigning from a weblog.
  */
+// TODO: make this work @AllowedMethods({"execute","resign"})
 public class MemberResign extends UIAction {
 
     private static Log log = LogFactory.getLog(MemberResign.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java
index e0b7e1a..ee89d9a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Members.java
@@ -31,6 +31,7 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.Utilities;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.ParameterAware;
 
 
@@ -40,6 +41,7 @@
  * TODO: fix bug in UserManager which doesn't remove permissions from the
  * website.permissions collection when a permission is deleted.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class Members extends UIAction implements ParameterAware {
     
     private static Log log = LogFactory.getLog(Members.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java
index e8a17cf..46104b8 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MembersInvite.java
@@ -30,6 +30,7 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.MailUtil;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
@@ -37,6 +38,7 @@
  *
  * TODO: handle 'disabled' result
  */
+// TODO: make this work @AllowedMethods({"execute","save","cancel"})
 public class MembersInvite extends UIAction {
     
     private static Log log = LogFactory.getLog(MembersInvite.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java
index 2ab252e..737a649 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Pings.java
@@ -28,6 +28,7 @@
 import org.apache.roller.weblogger.pojos.AutoPing;
 import org.apache.roller.weblogger.pojos.PingTarget;
 import org.apache.roller.weblogger.business.pings.WeblogUpdatePinger;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.xmlrpc.XmlRpcException;
 import java.io.IOException;
 import java.net.SocketException;
@@ -43,6 +44,7 @@
 /**
  * Actions for setting up automatic ping configuration for a weblog.
  */
+// TODO: make this work @AllowedMethods({"execute","enable","disable","pingNow"})
 public class Pings extends UIAction {
     
     private static Log log = LogFactory.getLog(Pings.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java
index 27d0b49..a206b05 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/StylesheetEdit.java
@@ -37,10 +37,12 @@
 import org.apache.roller.weblogger.pojos.WeblogTheme;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Action which handles editing for a weblog stylesheet override template.
  */
+// TODO: make this work @AllowedMethods({"execute","move","delete","revert"})
 public class StylesheetEdit extends UIAction {
 
     private static final long serialVersionUID = 4657591015852311907L;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java
index 9be3ba4..19d34ff 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateEdit.java
@@ -27,6 +27,7 @@
 import org.apache.roller.weblogger.pojos.WeblogTemplate;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 import java.util.Date;
@@ -37,6 +38,7 @@
 /**
  * Action which handles editing for a single WeblogTemplate.
  */
+// TODO: make this work @AllowedMethods({"execute","move"})
 public class TemplateEdit extends UIAction {
 
     private static Log log = LogFactory.getLog(TemplateEdit.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java
index 298e54b..4f9a82b 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplateRemove.java
@@ -29,10 +29,12 @@
 import org.apache.roller.weblogger.pojos.WeblogTheme;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Remove a template.
  */
+// TODO: make this work @AllowedMethods({"execute","remove","cancel"})
 public class TemplateRemove extends UIAction {
 
 	private static Log log = LogFactory.getLog(TemplateRemove.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java
index cb5ef89..4793e11 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Templates.java
@@ -31,6 +31,7 @@
 import org.apache.roller.weblogger.pojos.WeblogTemplate;
 import org.apache.roller.weblogger.pojos.WeblogTheme;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -42,6 +43,7 @@
 /**
  * Templates listing page.
  */
+// TODO: make this work @AllowedMethods({"execute","add"})
 public class Templates extends UIAction {
 
 	private static Log log = LogFactory.getLog(Templates.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplatesRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplatesRemove.java
index e92db7f..7fd3e26 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplatesRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/TemplatesRemove.java
@@ -32,10 +32,12 @@
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.Utilities;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Remove templates.
  */
+// TODO: make this work @AllowedMethods({"execute","remove","cancel"})
 public class TemplatesRemove extends UIAction {
 
     private static final long serialVersionUID = 895186156151331087L;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
index 4d48abf..c603fdb 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ThemeEdit.java
@@ -37,10 +37,12 @@
 import org.apache.roller.weblogger.pojos.WeblogTemplate;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 /**
  * Action for controlling theme selection.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class ThemeEdit extends UIAction {
 
     private static final long serialVersionUID = 4644653507344432426L;
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java
index a0a8fc0..bcc9f57 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogConfig.java
@@ -36,12 +36,14 @@
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.Blacklist;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
 /**
  * Action for modifying weblog configuration.
  */
+// TODO: make this work @AllowedMethods({"execute","save"})
 public class WeblogConfig extends UIAction {
     
     private static Log log = LogFactory.getLog(WeblogConfig.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java
index be2b4ef..b41a9ca 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/WeblogRemove.java
@@ -23,11 +23,13 @@
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
+import org.apache.struts2.convention.annotation.AllowedMethods;
 
 
 /**
  * Action for removing a weblog.
  */
+// TODO: make this work @AllowedMethods({"execute","remove"})
 public class WeblogRemove extends UIAction {
 
     private static Log log = LogFactory.getLog(WeblogRemove.class);
diff --git a/app/src/main/java/org/apache/roller/weblogger/util/PasswordUtility.java b/app/src/main/java/org/apache/roller/weblogger/util/PasswordUtility.java
index bec0388..4d567ca 100644
--- a/app/src/main/java/org/apache/roller/weblogger/util/PasswordUtility.java
+++ b/app/src/main/java/org/apache/roller/weblogger/util/PasswordUtility.java
@@ -214,7 +214,7 @@
     }
 
     /** 
-     * Reset user's password to specified value using specified algorythm (if needed) 
+     * Reset user's password to specified value using specified algorithm (if needed)
      */
     private static void resetPassword(
                     Connection con, String username, String password, String algorithm) 
diff --git a/app/src/main/resources/roller-version.properties b/app/src/main/resources-filtered/roller-version.properties
similarity index 100%
rename from app/src/main/resources/roller-version.properties
rename to app/src/main/resources-filtered/roller-version.properties
diff --git a/app/src/main/resources/ApplicationResources.properties b/app/src/main/resources/ApplicationResources.properties
index 0a2f8c5..8a68c56 100644
--- a/app/src/main/resources/ApplicationResources.properties
+++ b/app/src/main/resources/ApplicationResources.properties
@@ -1179,6 +1179,8 @@
 planetGroups.title=Title
 planetGroups.handle=Handle
 
+planetGroups.subscriptions.tip=Edit the subscriptions in this Custom Group
+
 planetGroups.success.saved=Saved group
 planetGroups.error.saved=Error saving planet group - duplicate?
 
diff --git a/app/src/main/resources/log4j2.xml b/app/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..6fcf939
--- /dev/null
+++ b/app/src/main/resources/log4j2.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<Configuration status="WARN">
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Root level="error">
+            <AppenderRef ref="Console"/>
+        </Root>
+        <Logger name="org.apache.struts2" level="warn">
+            <AppenderRef ref="Console"/>
+        </Logger>
+    </Loggers>
+</Configuration>
diff --git a/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties b/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties
index aa3997f..785a893 100644
--- a/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties
+++ b/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties
@@ -567,7 +567,7 @@
 log4j.rootLogger=ERROR, roller
 
 log4j.appender.roller=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.roller.File=${env.CATALINA_HOME}/logs/roller.log
+log4j.appender.roller.File=${catalina.base}/logs/roller.log
 log4j.appender.roller.layout=org.apache.log4j.PatternLayout
 log4j.appender.roller.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} %C{1}:%M - %m%n
 
diff --git a/app/src/main/resources/sql/510-to-520-migration.vm b/app/src/main/resources/sql/510-to-520-migration.vm
index a06e998..42dcecb 100644
--- a/app/src/main/resources/sql/510-to-520-migration.vm
+++ b/app/src/main/resources/sql/510-to-520-migration.vm
@@ -32,8 +32,8 @@
 
 #expandTimestampNotNull('pingqueueentry' 'entrytime')
 #expandTimestamp('pingtarget' 'lastsuccess')
-#expandTimestampNotNull('rag_entry' 'published')
 #expandTimestamp('rag_entry' 'updated')
+#expandTimestampNotNull('rag_entry' 'published')
 #expandTimestamp('rag_subscription' 'last_updated')
 #expandTimestamp('roller_audit_log' 'change_time')
 #expandTimestampNotNull('roller_comment' 'posttime')
diff --git a/app/src/main/resources/struts.xml b/app/src/main/resources/struts.xml
index fd24563..3c9a4c6 100644
--- a/app/src/main/resources/struts.xml
+++ b/app/src/main/resources/struts.xml
@@ -1,11 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE struts PUBLIC
-    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
-    "http://struts.apache.org/dtds/struts-2.3.dtd">
+        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
+        "http://struts.apache.org/dtds/struts-2.5.dtd">
 <struts>
-    
+
     <!-- Weblogger default package -->
     <package name="weblogger" namespace="/roller-ui" extends="struts-default">
-        
+
         <!-- Define Tiles result type -->
         <result-types>
             <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
@@ -71,12 +72,18 @@
         <!-- use our own interceptor stack which extends the default stack -->
         <default-interceptor-ref name="rollerStack"/>
         
-        
         <!-- results made available to all actions -->
         <global-results>
             <result name="access-denied" type="tiles">.denied</result>
         </global-results>
-        
+
+        <global-allowed-methods>
+            accept,
+            activate,
+            decline,
+            execute
+        </global-allowed-methods>
+
         <!-- Simple actions which basically just replace the global-forwards from
              the old struts 1 config.  this is the only way to do it in struts 2 -->
         <action name="home">
@@ -102,64 +109,88 @@
             <result type="tiles">.Login</result>
         </action>
         
-        <action name="register!*" method="{1}"
+        <action name="register"
                 class="org.apache.roller.weblogger.ui.struts2.core.Register">
             <result name="input" type="tiles">.Register</result>
             <result name="disabled" type="tiles">.GenericError</result>
             <result name="success" type="tiles">.Welcome</result>
         </action>
         
-        <action name="profile!*" method="{1}"
+        <action name="profile"
                 class="org.apache.roller.weblogger.ui.struts2.core.Profile">
             <result name="input" type="tiles">.Profile</result>
             <result name="cancel" type="redirectAction">menu</result>
             <result name="success" type="tiles">.Profile</result>
         </action>
 
-        <action name="oauthKeys!*" method="{1}"
+        <action name="oauthKeys"
                 class="org.apache.roller.weblogger.ui.struts2.core.OAuthKeys">
             <result name="success" type="tiles">.OAuthKeys</result>
         </action>
 
-        <action name="oauthAuthorize!*" method="{1}"
+        <action name="oauthAuthorize"
                 class="org.apache.roller.weblogger.ui.struts2.core.OAuthAuthorize">
             <result name="success" type="tiles">.OAuthAuthorize</result>
         </action>
 
-        <action name="createWeblog!*" method="{1}"
+        <action name="createWeblog"
                 class="org.apache.roller.weblogger.ui.struts2.core.CreateWeblog">
             <result name="input" type="tiles">.CreateWeblog</result>
             <result name="disabled" type="tiles">.GenericError</result>
             <result name="success" type="chain">menu</result>
         </action>
         
-        <action name="menu!*" method="{1}"
+        <action name="menu"
                 class="org.apache.roller.weblogger.ui.struts2.core.MainMenu">
             <result type="tiles">.MainMenu</result>
         </action>
-        
+
     </package>
     
     
     <!-- Weblogger install/bootstrap actions -->
-    <package name="weblogger-install" namespace="/roller-ui/install" extends="weblogger">
-    
+    <package name="weblogger-install" namespace="/roller-ui/install" extends="weblogger" >
+
+        <global-allowed-methods>
+            execute,
+            create,
+            update,
+            bootstrap
+        </global-allowed-methods>
+
         <action name="install"
                 class="org.apache.roller.weblogger.ui.struts2.core.Install">
             <result name="database_error" type="tiles">.DatabaseError</result>
             <result name="create_database" type="tiles">.CreateDatabase</result>
             <result name="upgrade_database" type="tiles">.UpgradeDatabase</result>
             <result name="bootstrap" type="tiles">.Bootstrap</result>
-            <result name="success" type="chain">home</result>
+            <result name="success" type="chain">
+                <param name="actionName">home</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
         </action>
             
     </package>
     
     
     <!-- Weblogger Admin UI (includes planet) -->
-    <package name="weblogger-admin" namespace="/roller-ui/admin" extends="weblogger">
+    <package name="weblogger-admin" namespace="/roller-ui/admin" extends="weblogger" >
+
+        <global-allowed-methods>
+            clear,
+            disable,
+            delete,
+            deleteConfirm,
+            enable,
+            execute,
+            firstSave,
+            save,
+            query,
+            delete,
+            update
+        </global-allowed-methods>
         
-        <action name="globalConfig!*" method="{1}"
+        <action name="globalConfig"
                 class="org.apache.roller.weblogger.ui.struts2.admin.GlobalConfig">
             <result name="success" type="tiles">.GlobalConfig</result>
         </action>
@@ -171,7 +202,7 @@
             <result name="input" type="tiles">.UserAdmin</result>
         </action>
         
-        <action name="createUser!*" method="{1}"
+        <action name="createUser"
                 class="org.apache.roller.weblogger.ui.struts2.admin.UserEdit">
             <param name="actionName">createUser</param>
             <param name="pageTitle">userAdmin.title.createNewUser</param>
@@ -182,7 +213,7 @@
             </result>
         </action>
 
-        <action name="modifyUser!*" method="{1}"
+        <action name="modifyUser"
                 class="org.apache.roller.weblogger.ui.struts2.admin.UserEdit">
             <param name="actionName">modifyUser</param>
             <param name="pageTitle">userAdmin.title.editUser</param>
@@ -193,18 +224,18 @@
             </result>
         </action>
         
-        <action name="globalCommentManagement!*" method="{1}"
+        <action name="globalCommentManagement"
                 class="org.apache.roller.weblogger.ui.struts2.admin.GlobalCommentManagement">
             <result name="list" type="tiles">.GlobalCommentManagement</result>
         </action>
         
-        <action name="commonPingTargets!*" method="{1}"
+        <action name="commonPingTargets"
                 class="org.apache.roller.weblogger.ui.struts2.admin.PingTargets">
             <result name="list" type="tiles">.PingTargets</result>
             <result name="confirm" type="tiles">.PingTargetConfirm</result>
         </action>
         
-        <action name="commonPingTargetAdd!*" method="{1}"
+        <action name="commonPingTargetAdd"
                 class="org.apache.roller.weblogger.ui.struts2.admin.PingTargetEdit">
             <param name="actionName">commonPingTargetAdd</param>
             <param name="pageTitle">pingTarget.addTarget</param>
@@ -212,7 +243,7 @@
             <result name="success" type="chain">commonPingTargets</result>
         </action>
         
-        <action name="commonPingTargetEdit!*" method="{1}"
+        <action name="commonPingTargetEdit"
                 class="org.apache.roller.weblogger.ui.struts2.admin.PingTargetEdit">
             <param name="actionName">commonPingTargetEdit</param>
             <param name="pageTitle">pingTarget.editTarget</param>
@@ -221,23 +252,23 @@
             <result name="error" type="chain">commonPingTargets</result>
         </action>
         
-        <action name="cacheInfo!*" method="{1}"
+        <action name="cacheInfo"
                 class="org.apache.roller.weblogger.ui.struts2.admin.CacheInfo">
             <result name="success" type="tiles">.CacheInfo</result>
         </action>
         
         
-        <action name="planetConfig!*" method="{1}"
+        <action name="planetConfig"
                 class="org.apache.roller.weblogger.planet.ui.PlanetConfig">
             <result name="input" type="tiles">.PlanetConfig</result>
         </action>
         
-        <action name="planetSubscriptions!*" method="{1}"
+        <action name="planetSubscriptions"
                 class="org.apache.roller.weblogger.planet.ui.PlanetSubscriptions">
             <result name="list" type="tiles">.PlanetSubscriptions</result>
         </action>
         
-        <action name="planetGroups!*" method="{1}"
+        <action name="planetGroups"
                 class="org.apache.roller.weblogger.planet.ui.PlanetGroups">
             <result name="list" type="tiles">.PlanetGroups</result>
         </action>
@@ -245,9 +276,40 @@
     
     
     <!-- Weblogger Authoring UI -->
-    <package name="weblogger-authoring" namespace="/roller-ui/authoring" extends="weblogger">
+    <package name="weblogger-authoring" namespace="/roller-ui/authoring" extends="weblogger" >
 
-        <action name="mediaFileAdd!*" method="{1}"
+        <global-allowed-methods>
+            add,
+            cancel,
+            createNewDirectory,
+            execute,
+            delete,
+            deleteConfirm,
+            deleteFolder,
+            deleteSelected,
+            disable,
+            enable,
+            entryAdd,
+            entryEdit,
+            firstSave,
+            folderCreated,
+            flushCache,
+            includeInGallery,
+            moveSelected,
+            pingNow,
+            publish,
+            query,
+            remove,
+            revert,
+            reset,
+            save,
+            saveDraft,
+            search,
+            update,
+            view
+        </global-allowed-methods>
+
+        <action name="mediaFileAdd"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileAdd">
             <result name="input" type="tiles">.MediaFileAdd</result>
             <result name="success" type="tiles">.MediaFileAddSuccess</result>
@@ -258,36 +320,36 @@
             </result>
         </action>
 
-        <action name="mediaFileEdit!*" method="{1}"
+        <action name="mediaFileEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileEdit">
             <result name="input" type="tiles">.MediaFileEdit</result>
             <result name="success" type="tiles">.MediaFileEditSuccess</result>
         </action>
 
-        <action name="mediaFileAddExternalInclude!*" method="{1}"
+        <action name="mediaFileAddExternalInclude"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileEdit">
             <result name="input" type="tiles">.MediaFileAddExternalInclude</result>
             <result name="success" type="tiles">.MediaFileAddExternalInclude</result>
             <result name="error" type="tiles">.MediaFileAddExternalInclude</result>
         </action>
 
-	    <action name="mediaFileView!*" method="{1}"
+	    <action name="mediaFileView"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileView">
             <result name="success" type="tiles">.MediaFileView</result>
             <result name="success.json" type="dispatcher">/WEB-INF/jsps/editor/MediaFileViewLight.jsp</result>
         </action>
 
-	    <action name="mediaFileImageDim!*" method="{1}"
+	    <action name="mediaFileImageDim"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileImageDim">
             <result name="success" type="tiles">.MediaFileImageDimension</result>
         </action>
 
-        <action name="entryAddWithMediaFile!*" method="{1}"
+        <action name="entryAddWithMediaFile"
                 class="org.apache.roller.weblogger.ui.struts2.editor.EntryAddWithMediaFile">
             <result name="success" type="chain">entryAdd</result>
         </action>
 
-        <action name="entryAdd!*" method="{1}"
+        <action name="entryAdd"
                 class="org.apache.roller.weblogger.ui.struts2.editor.EntryEdit">
             <param name="actionName">entryAdd</param>
             <param name="pageTitle">weblogEdit.title.newEntry</param>
@@ -299,24 +361,30 @@
             </result>
         </action>
 
-        <action name="entryEdit!*" method="{1}"
+        <action name="entryEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.EntryEdit">
             <param name="actionName">entryEdit</param>
             <param name="pageTitle">weblogEdit.title.editEntry</param>
             <result name="input" type="tiles">.EntryEdit</result>
-            <result name="error" type="chain">menu</result>
+            <result name="error" type="chain">
+                <param name="actionName">menu</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
         </action>
         
-        <action name="entryRemove!*" method="{1}"
+        <action name="entryRemove"
                 class="org.apache.roller.weblogger.ui.struts2.editor.EntryRemove">
             <param name="actionName">entryRemove</param>
             <result name="input" type="tiles">.EntryRemove</result>
-            <result name="error" type="chain">menu</result>
+            <result name="error" type="chain">
+                <param name="actionName">menu</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
             <result name="success" type="chain">entryAdd</result>
         </action>
 
         <!-- Below activated by Entries.jsp and EntryRemove.jsp, kept separate from
-        entryRemove!* above as return pages are different, both in the confirm delete
+        entryRemove above as return pages are different, both in the confirm delete
         and cancel delete scenarios.
 
         Note the different actionName parameters.  The actionName is used to determine
@@ -325,11 +393,14 @@
         to return to the appropriate pages based on the actionName.  See Struts2
         StaticParametersInterceptor javadoc for more info on static parameters.
         -->
-        <action name="entryRemoveViaList!*" method="{1}"
+        <action name="entryRemoveViaList"
               class="org.apache.roller.weblogger.ui.struts2.editor.EntryRemove">
           <param name="actionName">entryRemoveViaList</param>
           <result name="input" type="tiles">.EntryRemove</result>
-          <result name="error" type="chain">menu</result>
+            <result name="error" type="chain">
+                <param name="actionName">menu</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
           <result name="success" type="chain">entries</result>
         </action>
 
@@ -338,17 +409,17 @@
             <result name="list" type="tiles">.Entries</result>
         </action>
         
-        <action name="comments!*" method="{1}"
+        <action name="comments"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Comments">
             <result name="list" type="tiles">.Comments</result>
         </action>
         
-        <action name="categories!*" method="{1}"
+        <action name="categories"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Categories">
             <result name="list" type="tiles">.Categories</result>
         </action>
         
-        <action name="categoryAdd!*" method="{1}"
+        <action name="categoryAdd"
                 class="org.apache.roller.weblogger.ui.struts2.editor.CategoryEdit">
             <param name="actionName">categoryAdd</param>
             <param name="pageTitle">categoryForm.add.title</param>
@@ -357,7 +428,7 @@
             <result name="error" type="chain">categories</result>
         </action>
         
-        <action name="categoryEdit!*" method="{1}"
+        <action name="categoryEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.CategoryEdit">
             <param name="actionName">categoryEdit</param>
             <param name="pageTitle">categoryForm.edit.title</param>
@@ -369,7 +440,7 @@
             </result>
         </action>
 
-        <action name="categoryRemove!*" method="{1}"
+        <action name="categoryRemove"
                 class="org.apache.roller.weblogger.ui.struts2.editor.CategoryRemove">
             <result name="input" type="tiles">.CategoryRemove</result>
             <result name="cancel" type="redirectAction">
@@ -379,12 +450,12 @@
             <result name="success" type="chain">categories</result>
         </action>
         
-        <action name="bookmarks!*" method="{1}"
+        <action name="bookmarks"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Bookmarks">
             <result name="list" type="tiles">.Bookmarks</result>
         </action>
 
-        <action name="bookmarkAdd!*" method="{1}"
+        <action name="bookmarkAdd"
                 class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit">
             <param name="actionName">bookmarkAdd</param>
             <param name="pageTitle">bookmarkForm.add.title</param>
@@ -393,7 +464,7 @@
             <result name="error" type="chain">bookmarks</result>
         </action>
         
-        <action name="bookmarkEdit!*" method="{1}"
+        <action name="bookmarkEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit">
             <param name="actionName">bookmarkEdit</param>
             <param name="pageTitle">bookmarkForm.edit.title</param>
@@ -407,13 +478,13 @@
             <result name="error" type="chain">bookmarkEdit</result>
         </action>
         
-        <action name="bookmarksImport!*" method="{1}"
+        <action name="bookmarksImport"
                 class="org.apache.roller.weblogger.ui.struts2.editor.BookmarksImport">
             <result name="input" type="tiles">.BookmarksImport</result>
             <result name="success" type="chain">bookmarks</result>
         </action>
         
-        <action name="folderAdd!*" method="{1}"
+        <action name="folderAdd"
                 class="org.apache.roller.weblogger.ui.struts2.editor.FolderEdit">
             <param name="actionName">folderAdd</param>
             <param name="pageTitle">folderForm.add.title</param>
@@ -427,7 +498,7 @@
             <result name="error" type="chain">bookmarks</result>
         </action>
         
-        <action name="folderEdit!*" method="{1}"
+        <action name="folderEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.FolderEdit">
             <param name="actionName">folderEdit</param>
             <param name="pageTitle">folderForm.edit.title</param>
@@ -441,39 +512,42 @@
             <result name="error" type="chain">bookmarks</result>
         </action>
         
-        <action name="weblogConfig!*" method="{1}"
+        <action name="weblogConfig"
                 class="org.apache.roller.weblogger.ui.struts2.editor.WeblogConfig">
             <result name="input" type="tiles">.WeblogConfig</result>
         </action>
         
-        <action name="weblogRemove!*" method="{1}"
+        <action name="weblogRemove"
                 class="org.apache.roller.weblogger.ui.struts2.editor.WeblogRemove">
             <result name="confirm" type="tiles">.WeblogRemoveConfirm</result>
-            <result name="success" type="chain">menu</result>
+            <result name="success" type="chain">
+                <param name="actionName">menu</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
         </action>
         
-        <action name="themeEdit!*" method="{1}"
+        <action name="themeEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.ThemeEdit">
             <result name="input" type="tiles">.ThemeEdit</result>
         </action>
         
-        <action name="stylesheetEdit!*" method="{1}"
+        <action name="stylesheetEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.StylesheetEdit">
             <result name="input" type="tiles">.StylesheetEdit</result>
         </action>
         
-        <action name="templates!*" method="{1}"
+        <action name="templates"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Templates">
             <result name="list" type="tiles">.Templates</result>
         </action>
         
-        <action name="templateEdit!*" method="{1}"
+        <action name="templateEdit"
                 class="org.apache.roller.weblogger.ui.struts2.editor.TemplateEdit">
             <result name="list" type="chain">templates</result>
             <result name="input" type="tiles">.TemplateEdit</result>
         </action>
         
-        <action name="templateRemove!*" method="{1}"
+        <action name="templateRemove"
                 class="org.apache.roller.weblogger.ui.struts2.editor.TemplateRemove">
             <result name="confirm" type="tiles">.TemplateRemove</result>
             <result name="cancel" type="redirectAction">
@@ -483,7 +557,7 @@
             <result name="success" type="chain">templates</result>
         </action>
         
-        <action name="templatesRemove!*" method="{1}"
+        <action name="templatesRemove"
                 class="org.apache.roller.weblogger.ui.struts2.editor.TemplatesRemove">
             <result name="input" type="tiles">.TemplatesRemove</result>
             <result name="confirm" type="tiles">.TemplatesRemove</result>
@@ -495,15 +569,15 @@
             <result name="error" type="chain">templates</result>
         </action>
         
-        <action name="members!*" method="{1}"
+        <action name="members"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Members">
             <result name="list" type="tiles">.Members</result>
         </action>
         
-        <action name="invite!*" method="{1}"
+        <action name="invite"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MembersInvite">
             <result name="input" type="tiles">.MembersInvite</result>
-            <result name="disabled" type="tiles">.disabled</result>
+            <!-- <result name="disabled" type="tiles">.disabled</result> -->
             <result name="success" type="chain">members</result>
             <result name="cancel" type="redirectAction">
                 <param name="actionName">members</param>
@@ -511,19 +585,25 @@
             </result>
         </action>
 
-        <action name="memberResign!*" method="{1}"
+        <action name="memberResign"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MemberResign">
             <result name="input" type="tiles">.MemberResign</result>
-            <result name="error" type="chain">menu</result>
-            <result name="success" type="chain">menu</result>
+            <result name="error" type="chain">
+                <param name="actionName">menu</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
+            <result name="success" type="chain">
+                <param name="actionName">menu</param>
+                <param name="namespace">/roller-ui</param>
+            </result>
         </action>
 
-        <action name="pings!*" method="{1}"
+        <action name="pings"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Pings">
             <result name="list" type="tiles">.Pings</result>
         </action>
 
-        <action name="maintenance!*" method="{1}"
+        <action name="maintenance"
                 class="org.apache.roller.weblogger.ui.struts2.editor.Maintenance">
             <result name="success" type="tiles">.Maintenance</result>
         </action>
@@ -532,9 +612,13 @@
 
     <!-- Weblogger Authoring UI - overlay pages-->
     
-    <package name="weblogger-authoring-overlay" namespace="/roller-ui/authoring/overlay" extends="weblogger-authoring">
+    <package name="weblogger-authoring-overlay" namespace="/roller-ui/authoring/overlay" extends="weblogger-authoring" >
 
-        <action name="mediaFileAdd!*" method="{1}"
+        <global-allowed-methods>
+            execute,save
+        </global-allowed-methods>
+
+        <action name="mediaFileAdd"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileAdd">
             <param name="overlayMode">true</param>
             <result name="input" type="tiles">.MediaFileAddInclude</result>
@@ -542,7 +626,7 @@
             <result name="error" type="tiles">.MediaFileAddInclude</result>
         </action>
 
-	    <action name="mediaFileImageChooser!*" method="{1}"
+	    <action name="mediaFileImageChooser"
                 class="org.apache.roller.weblogger.ui.struts2.editor.MediaFileImageChooser">
             <param name="overlayMode">true</param>
             <result name="input" type="tiles">.MediaFileImageChooser</result>
diff --git a/app/src/main/webapp/WEB-INF/jsps/admin/PlanetGroups.jsp b/app/src/main/webapp/WEB-INF/jsps/admin/PlanetGroups.jsp
index 420cbd0..f518ac6 100644
--- a/app/src/main/webapp/WEB-INF/jsps/admin/PlanetGroups.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/admin/PlanetGroups.jsp
@@ -33,13 +33,13 @@
     <s:hidden name="bean.id" />
     
     <div class="formrow">
-        <label for="title" class="formrow" /><s:text name="planetGroups.title" /></label>
+        <label for="bean.title" class="formrow" /><s:text name="planetGroups.title" /></label>
         <s:textfield name="bean.title" size="40" maxlength="255" />
         <img src="<s:url value="/images/help.png"/>" alt="help" title='<s:text name="planetGroups.tip.title" />' />
     </div>
     
     <div class="formrow">
-        <label for="handle" class="formrow" /><s:text name="planetGroups.handle" /></label>
+        <label for="bean.handle" class="formrow" /><s:text name="planetGroups.handle" /></label>
         <s:textfield name="bean.handle" size="40" maxlength="255" />
         <img src="<s:url value="/images/help.png"/>" alt="help" title='<s:text name="planetGroups.tip.handle" />' />
     </div>
diff --git a/app/src/main/webapp/WEB-INF/jsps/core/CreateWeblog.jsp b/app/src/main/webapp/WEB-INF/jsps/core/CreateWeblog.jsp
index e233946..2d615e5 100644
--- a/app/src/main/webapp/WEB-INF/jsps/core/CreateWeblog.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/core/CreateWeblog.jsp
@@ -42,19 +42,19 @@
 <table class="formtable">
 
 <tr>
-    <td class="label"><label for="name" /><s:text name="generic.name" /></label></td>
+    <td class="label"><label for="name"><s:text name="generic.name" /></label></td>
     <td class="field"><s:textfield name="bean.name" size="30" maxlength="30" /></td>
     <td class="description"><s:text name="createWebsite.tip.name" /></td>
 </tr>
 
 <tr>
-        <td class="label"><label for="description" /><s:text name="generic.tagline" /></td>
+        <td class="label"><label for="description"><s:text name="generic.tagline" /></td>
     <td class="field"><s:textfield name="bean.description" size="40" maxlength="255" /></td>
     <td class="description"><s:text name="createWebsite.tip.description" /></td>
 </tr>
 
 <tr>
-    <td class="label"><label for="handle" /><s:text name="createWebsite.handle" /></label></td>
+    <td class="label"><label for="handle"><s:text name="createWebsite.handle" /></label></td>
     <td class="field">
         <s:textfield name="bean.handle" size="30" maxlength="30" onkeyup="handlePreview(this)" /><br />
         <span style="text-size:70%">
@@ -66,7 +66,7 @@
 </tr>
 
 <tr>
-    <td class="label"><label for="emailAddress" /><s:text name="createWebsite.emailAddress" /></label></td>
+    <td class="label"><label for="emailAddress"><s:text name="createWebsite.emailAddress" /></label></td>
     <td class="field"><s:textfield name="bean.emailAddress" size="40" maxlength="50" /></td>
     <td class="description"><s:text name="createWebsite.tip.email" /></td>
 </tr>
@@ -80,7 +80,7 @@
 </tr>
 
 <tr>
-    <td class="label"><label for="timeZone" /><s:text name="createWebsite.timeZone" /></label></td>
+    <td class="label"><label for="timeZone"><s:text name="createWebsite.timeZone" /></label></td>
     <td class="field">
        <s:select name="bean.timeZone" size="1" list="timeZonesList" />
     </td>
@@ -88,7 +88,7 @@
 </tr>
 
 <tr>
-    <td class="label"><label for="theme" /><s:text name="createWebsite.theme" /></label></td>
+    <td class="label"><label for="theme"><s:text name="createWebsite.theme" /></label></td>
     <td class="field" ng-app="themeSelectModule" ng-controller="themeController">
         <select id="themeSelector" name="bean.theme" size="1"
         ng-model="selectedTheme" ng-options="theme as theme.name for theme in themes track by theme.id"></select>
diff --git a/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp b/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp
index 738e0ba..bf9914d 100644
--- a/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/core/Login.jsp
@@ -34,8 +34,6 @@
 }
 %>
 
-<p>L'utilisateur a été invité avec succés</p>
-
 <s:if test="authMethod == 'OPENID' || authMethod == 'DB_OPENID'">
     
     <p><s:text name="loginPage.openIdPrompt" /></p>
diff --git a/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp b/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp
index 76e83d7..eb565f8 100644
--- a/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/core/MainMenu.jsp
@@ -20,7 +20,7 @@
 <%-- PROMPT: Welcome... you have no blog --%>
 <s:if test="existingPermissions.isEmpty && pendingPermissions.isEmpty"> 
     <p><s:text name="yourWebsites.prompt.noBlog" />
-    <a href="<s:url action="createWeblog"/>"><s:text name="yourWebsites.createOne" /></a></p>
+    <a id="createWeblogLink" href="<s:url action="createWeblog"/>"><s:text name="yourWebsites.createOne" /></a></p>
 </s:if>    
 
 <%-- PROMPT: You have invitation(s) --%>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/EntrySidebar.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/EntrySidebar.jsp
index 58649a7..2bb3b35 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/EntrySidebar.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/EntrySidebar.jsp
@@ -26,7 +26,7 @@
                 <h3><s:text name="weblogEdit.comments" /></h3>
 
                 <s:if test="bean.commentCount > 0">
-                    <s:url action="comments" id="commentsURL">
+                    <s:url action="comments" var="commentsURL">
                        <s:param name="bean.entryId" value="bean.id" />
                        <s:param name="weblog" value="weblog" />
                     </s:url>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAddSuccess.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAddSuccess.jsp
index 42f3b8e..1214149 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAddSuccess.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileAddSuccess.jsp
@@ -80,7 +80,7 @@
 
         <%-- checkboxed list of images uploaded --%>
         <table class="mediaFileTable">
-            <s:iterator value="newImages" id="newImage">
+            <s:iterator value="newImages" var="newImage">
             <tr>
                 <td width="5%">
                     <%-- checkbox for file --%>
@@ -122,7 +122,7 @@
 
         <%-- checkboxed list of other files uploaded --%>
         <table class="mediaFileTable">
-            <s:iterator value="newFiles" id="newFile">
+            <s:iterator value="newFiles" var="newFile">
             <tr>
                 <td width="20%">
                     <%-- radio button for file --%>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp
index 474e674..670eaa6 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp
@@ -77,20 +77,23 @@
             </td>

        </tr>

 

-       <tr>

+        <tr>

             <td class="entryEditFormLabel">

-                <label for="status"><s:text name="mediaFileEdit.permalink" /></label>

+                <label for="status"><s:text name="mediaFileEdit.permalink"/></label>

             </td>

             <td>

-                <a href='<s:text name="bean.permalink" />' target="_blank"

+                <s:url var="linkIconURL" value="/images/link.png"></s:url>

+

+                <a href='<s:property value="bean.permalink" />' target="_blank"

                    title='<s:text name="mediaFileEdit.linkTitle" />'>

-                   <s:url var="linkIconURL" value="/images/link.png"></s:url>

-                   <img border="0" src='<s:property value="%{linkIconURL}" />'

-                       style="padding:2px 2px;" alt="link" />

+                    <img border="0" src='<s:property value="%{linkIconURL}" />' style="padding:2px 2px;" alt="link"/>

                 </a>

-                <input type="text" id="clip_text" size="50" style="width:90%" value='<s:text name="bean.permalink" />' readonly />

+

+                <input type="text" id="clip_text" size="50" style="width:90%"

+                       value='<s:property value="bean.permalink" />' readonly/>

+

             </td>

-       </tr>

+        </tr>

 

        <tr>

             <td class="entryEditFormLabel">

@@ -158,8 +161,8 @@
                 <label for="originalPath"><s:text name="mediaFileEdit.originalPath" /></label>

             </td>

             <td>

-                <div id="fileControldiv" class="miscControl">

-                    <s:textfield name="bean.originalPath" size="30" maxlength="100" tabindex="3" />

+                <div id="originalPathdiv" class="miscControl">

+                    <s:textfield name="bean.originalPath" id="originalPath" size="30" maxlength="100" tabindex="3" />

                     <br />

                 </div>

             </td>

diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
index eb90e11..163a869 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
@@ -209,7 +209,7 @@
 <s:else>
 
     <p class="subtitle">
-        <s:text name="mediaFileView.folderName"/>: <s:text name="currentDirectory.name" />
+        <s:text name="mediaFileView.folderName"/>: <s:property value="%{currentDirectory.name}" />
     </p>
     <p class="pagetip">
         <s:text name="mediaFileView.dirPageTip" />
diff --git a/assembly-release/pom.xml b/assembly-release/pom.xml
index 5d4281a..77dac0d 100644
--- a/assembly-release/pom.xml
+++ b/assembly-release/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>5.2.0-SNAPSHOT</version>
+        <version>5.2.0</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -33,7 +33,7 @@
     <description>Assembles Roller into a distribution package</description>
 
     <!--
-         Check the README.txt in the Roller base folder for 
+         Check the README.md in the Roller base folder for
          information on creating the Roller distribution files.
     -->
     <build>
diff --git a/assembly-release/sign-release.sh b/assembly-release/sign-release.sh
old mode 100644
new mode 100755
index a385590..77fdd59
--- a/assembly-release/sign-release.sh
+++ b/assembly-release/sign-release.sh
@@ -1,8 +1,18 @@
+#!/usr/bin/env bash
+
 export rcstring=""
 export vstring="5.2.0"
 
-gpg --armor --detach-sig target/roller-release-${vstring}${rcstring}-standard.tar.gz
-gpg --armor --detach-sig target/roller-release-${vstring}${rcstring}-standard.zip
+# for rc releases we rename the release files
+if [ rcstring != "" ]; then
+    mv target/roller-release-${vstring}-source.tar.gz   target/roller-release-${vstring}${rcstring}-source.tar.gz
+    mv target/roller-release-${vstring}-source.zip      target/roller-release-${vstring}${rcstring}-source.zip
+    mv target/roller-release-${vstring}-standard.tar.gz target/roller-release-${vstring}${rcstring}-standard.tar.gz
+    mv target/roller-release-${vstring}-standard.zip    target/roller-release-${vstring}${rcstring}-standard.zip
+fi
+
+gpg --armor --detach-sig target/roller-release-${vstring}${rcstring}-standard.tar.gz 
+gpg --armor --detach-sig target/roller-release-${vstring}${rcstring}-standard.zip 
 gpg --armor --detach-sig target/roller-release-${vstring}${rcstring}-source.tar.gz 
 gpg --armor --detach-sig target/roller-release-${vstring}${rcstring}-source.zip
 
diff --git a/assembly-release/src/main/assembly/source.xml b/assembly-release/src/main/assembly/source.xml
index aec3510..ea36aeb 100644
--- a/assembly-release/src/main/assembly/source.xml
+++ b/assembly-release/src/main/assembly/source.xml
@@ -30,19 +30,25 @@
 			</outputDirectory>
 			<directory>${project.basedir}/../</directory>
 			<includes>
-				<include>**</include>
+				<include>app/**</include>
+				<include>assembly-release/**</include>
+				<include>docs/**</include>
+				<include>it-selenium/**</include>
+				<include>LICENSE.txt</include>
+				<include>NOTICE.txt</include>
+				<include>pom.xml</include>
+				<include>README.md</include>
 			</includes>
 			<excludes>
-				<exclude>it-selenium/**</exclude>
 				<exclude>**/target/**</exclude>
-				<exclude>**/derby.log</exclude>
 				<exclude>**/.idea/**</exclude>
-				<exclude>**/._*</exclude>
-				<exclude>**/._*/**</exclude>
+				<exclude>**/.settings/**</exclude>
 				<exclude>**/.repository/**</exclude>
+				<exclude>**/.git</exclude>
 				<exclude>**/.classpath</exclude>
 				<exclude>**/.project</exclude>
-				<exclude>**/.settings/**</exclude>
+				<exclude>**/*.log</exclude>
+				<exclude>**/*.iml</exclude>
 			</excludes>
 		</fileSet>
 	</fileSets>
diff --git a/assembly-release/src/main/assembly/standard.xml b/assembly-release/src/main/assembly/standard.xml
index 12b5f71..2bec4cf 100644
--- a/assembly-release/src/main/assembly/standard.xml
+++ b/assembly-release/src/main/assembly/standard.xml
@@ -32,7 +32,7 @@
             <outputDirectory>${artifact.artifactId}-${artifact.version}/webapp</outputDirectory>
         </file> 
         <file> 
-            <source>../README.txt</source>
+            <source>../README.md</source>
             <outputDirectory>${artifact.artifactId}-${artifact.version}</outputDirectory>
         </file> 
         <file> 
diff --git a/docs/examples/scripting/groovy/examples/rollerapi/createtestdata.gy b/docs/examples/scripting/groovy/examples/rollerapi/createtestdata.gy
index bdf785b..280003a 100644
--- a/docs/examples/scripting/groovy/examples/rollerapi/createtestdata.gy
+++ b/docs/examples/scripting/groovy/examples/rollerapi/createtestdata.gy
@@ -133,19 +133,21 @@
         try {
             def website = new org.apache.roller.weblogger.pojos.Weblog(
                 handle, 
-                user,
+                user.getUserName(),
                 name,
                 desc,
                 user.getEmailAddress(),
-                user.getEmailAddress(),
                 theme,
                 user.getLocale(),
                 user.getTimeZone());
+            roller.getWeblogManager().addWeblog(website)
+            roller.flush()
+
             def cat = new org.apache.roller.weblogger.pojos.WeblogCategory(
-                website, null, "cat1", "cat1", null);
-            roller.getWeblogManager().saveWeblogCategory(cat);
-            website.setDefaultCategory(cat);
-            roller.getUserManager().addWebsite(website);
+                website, "cat1", "cat1", null);
+            roller.getWeblogEntryManager().saveWeblogCategory(cat);
+            //website.setDefaultCategory(cat);
+            roller.getUserManager().grantWeblogPermission(website, user, ["post", "admin"]);
             roller.flush();
             return website
         } catch (Exception e) {
@@ -158,17 +160,17 @@
         try {
             def entry = new org.apache.roller.weblogger.pojos.WeblogEntry();
             entry.setWebsite(blog);
-            entry.setCreator(blog.getCreator());
+            entry.setCreatorUserName(blog.getCreatorUserName());
             def catName = categories.get((int)(Math.random() * categories.size()))
-            def category = roller.getWeblogManager().getWeblogCategoryByPath(blog,catName)
+            def category = roller.getWeblogEntryManager().getWeblogCategoryByName(blog,catName)
             entry.setCategory(category);
-            entry.setPubTime(new java.sql.Timestamp(pubTime.getTime()));
-            entry.setUpdateTime(new java.sql.Timestamp(pubTime.getTime()));
-            entry.setStatus(org.apache.roller.weblogger.pojos.WeblogEntry.PUBLISHED);
+            entry.setPubTime( new java.sql.Timestamp(pubTime.getTime()));
+            entry.setUpdateTime( new java.sql.Timestamp(pubTime.getTime()));
+            entry.setStatus(org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus.PUBLISHED);
             entry.setText(text);
             entry.setTitle(title);
             entry.setLocale("en_US");
-            roller.getWeblogManager().saveWeblogEntry(entry);
+            roller.getWeblogEntryManager().saveWeblogEntry(entry);
             roller.flush();
             return entry
         } catch (Exception e) {
@@ -185,8 +187,8 @@
             comment.setPostTime(new java.sql.Timestamp(new java.util.Date().getTime()));
             comment.setContent(content);
             comment.setNotify(Boolean.FALSE);
-            comment.setStatus(org.apache.roller.weblogger.pojos.WeblogEntryComment.APPROVED);
-            roller.getWeblogManager().saveComment(comment);
+            comment.setStatus(org.apache.roller.weblogger.pojos.WeblogEntryComment.ApprovalStatus.APPROVED);
+            roller.getWeblogEntryManager().saveComment(comment);
             roller.flush();
         } catch (Exception e) {
             e.printStackTrace()
@@ -205,12 +207,12 @@
         // drop any existing Roller tables
         ant.sql(onerror:"continue", driver:jdbcClass, url:jdbcUrl, 
             userid:jdbcUser, password:jdbcPassword,
-            src:"../../../../../apps/weblogger/build/webapp/WEB-INF/classes/dbscripts/droptables.sql")   
+            src:"../../../../../../app/target/roller/WEB-INF/classes/dbscripts/droptables.sql")
         
         // create fresh set of Roller tables
         ant.sql(onerror:"continue", driver:jdbcClass, url:jdbcUrl, 
             userid:jdbcUser, password:jdbcPassword,
-            src:"../../../../../apps/weblogger/build/webapp/WEB-INF/classes/dbscripts/derby/createdb.sql") 
+            src:"../../../../../../app/target/roller/WEB-INF/classes/dbscripts/mysql/createdb.sql")
 
         bootstrap()
 
diff --git a/docs/examples/scripting/groovy/examples/rollerapi/groovy b/docs/examples/scripting/groovy/examples/rollerapi/groovy
index 62909ad..737484b 100755
--- a/docs/examples/scripting/groovy/examples/rollerapi/groovy
+++ b/docs/examples/scripting/groovy/examples/rollerapi/groovy
@@ -3,22 +3,22 @@
 # -- ENSURE THESE ARE CORRECT ---
 
 # Directory where Groovy release is installed
-export GROOVY_HOME=/Applications/Java/groovy
+export GROOVY_HOME=/Applications/Java/groovy-2.4.8
 
 # Directory of Roller webapp context
-export WEBAPP_DIR=../../../../../apps/weblogger/build/webapp
+export WEBAPP_DIR=../../../../../../app/target/roller
 
 # Directory of additional jars
-export JARS_DIR=/Applications/Java/tomcat/common/lib
+export JARS_DIR=/Applications/Java/lib
 
 
 # --- SHOULD NOT NEED TO EDIT BELOW THIS LINE ---
 
 RGPATH=${WEBAPP_DIR}/WEB-INF/classes:\
-${GROOVY_HOME}/embeddable/groovy-all-1.0.jar:\
-${GROOVY_HOME}/lib/commons-cli-1.0.jar:\
-${GROOVY_HOME}/lib/ant-1.6.5.jar:\
-${GROOVY_HOME}/lib/ant-launcher.1.6.5.jar
+${GROOVY_HOME}/embeddable/groovy-all-2.4.8.jar:\
+${GROOVY_HOME}/lib/commons-cli-1.2.jar:\
+${GROOVY_HOME}/lib/ant-1.9.4.jar:\
+${GROOVY_HOME}/lib/ant-launcher-1.9.4.jar
 
 for i in "$WEBAPP_DIR"/WEB-INF/lib/*.jar; do
   RGPATH="$RGPATH":"$i"
diff --git a/docs/examples/scripting/groovy/examples/rollerapi/listusers.gy b/docs/examples/scripting/groovy/examples/rollerapi/listusers.gy
index 6de967d..f908a6a 100644
--- a/docs/examples/scripting/groovy/examples/rollerapi/listusers.gy
+++ b/docs/examples/scripting/groovy/examples/rollerapi/listusers.gy
@@ -21,12 +21,12 @@
     org.apache.roller.weblogger.business.WebloggerFactory.bootstrap();
     roller = org.apache.roller.weblogger.business.WebloggerFactory.getWeblogger();
     
-    users = roller.getUserManager().getUsers(null, null, null, null, 0, -1);
+    users = roller.getUserManager().getUsers(null, null, null, 0, -1);
     for (u in users) {
        println "   User [${u.userName}] has password [${u.password}]";
-       weblogs = roller.getUserManager().getWebsites(u, null, null, null, null, 0, Integer.MAX_VALUE);
-       for (w in weblogs) {
-          println "      Belongs to weblog [${w.handle}]";
+        permissions = roller.getUserManager().getWeblogPermissions(u)
+       for (p in permissions) {
+          println "      Belongs to weblog [${p.getWeblog().getHandle()}]";
        }
     } 
 } catch (Exception e) {
diff --git a/docs/examples/scripting/groovy/examples/rollerapi/roller-custom.properties b/docs/examples/scripting/groovy/examples/rollerapi/roller-custom.properties
index 04317de..202603d 100644
--- a/docs/examples/scripting/groovy/examples/rollerapi/roller-custom.properties
+++ b/docs/examples/scripting/groovy/examples/rollerapi/roller-custom.properties
@@ -1,9 +1,9 @@
 
 database.configurationType=jdbc
-database.jdbc.driverClass=org.apache.derby.jdbc.ClientDriver
-database.jdbc.connectionURL=jdbc:derby://localhost:1527/roller40test;create=true
-database.jdbc.username=APP
-database.jdbc.password=APP
+database.jdbc.driverClass=com.mysql.jdbc.Driver
+database.jdbc.connectionURL=jdbc:mysql://localhost/roller520new?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf&useFastDateParsing=false
+database.jdbc.username=scott
+database.jdbc.password=tiger
 
 log4j.category.org.apache.roller=DEBUG
 
diff --git a/docs/roller-install-guide.odt b/docs/roller-install-guide.odt
index 608c279..39054c4 100644
--- a/docs/roller-install-guide.odt
+++ b/docs/roller-install-guide.odt
Binary files differ
diff --git a/docs/roller-template-guide.odt b/docs/roller-template-guide.odt
index 2f89f0a..56d8158 100644
--- a/docs/roller-template-guide.odt
+++ b/docs/roller-template-guide.odt
Binary files differ
diff --git a/docs/roller-user-guide.odt b/docs/roller-user-guide.odt
index b323775..1bf7d45 100644
--- a/docs/roller-user-guide.odt
+++ b/docs/roller-user-guide.odt
Binary files differ
diff --git a/it-selenium/pom.xml b/it-selenium/pom.xml
index f4f28d2..2854584 100644
--- a/it-selenium/pom.xml
+++ b/it-selenium/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.roller</groupId>
         <artifactId>roller-project</artifactId>
-        <version>5.2.0-SNAPSHOT</version>
+        <version>5.2.0</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -32,11 +32,6 @@
     <artifactId>roller-selenium-tests</artifactId>
     <packaging>war</packaging>
 
-    <properties>
-        <selenium.version>2.47.1</selenium.version>
-        <javamail.version>1.4.7</javamail.version>
-    </properties>
-
     <!-- Process to run Selenium tests (actually no tests right now, just a skeleton)
          1. Tests presently require Firefox browser, Chrome on the to-do list.
 
@@ -49,27 +44,38 @@
          4. Feel free to add more Selenium tests!
     -->
     <dependencies>
+
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-java</artifactId>
-            <version>${selenium.version}</version>
+            <version>3.4.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.commons</groupId>
+                    <artifactId>commons-lang3</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
+
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-firefox-driver</artifactId>
-            <version>${selenium.version}</version>
+            <version>3.4.0</version>
         </dependency>
+
         <!-- Will bring in once we configure a Chrome option -->
         <!--dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-chrome-driver</artifactId>
             <version>${selenium.version}</version>
         </dependency-->
+
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+
         <!--
              Type "war" listed below makes this a WAR overlay (i.e., incorporating
              another WAR into this project in making a new WAR, with any additional
@@ -81,16 +87,22 @@
             <version>${project.version}</version>
             <type>war</type>
         </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>
         <plugins>
-            <!-- Activates integration tests (by default, classes under tests
-                 that end with "IT")
+
+            <!-- Activates integration tests (by default, classes under tests that end with "IT")
             -->
             <plugin>
                 <artifactId>maven-failsafe-plugin</artifactId>
-                <version>2.12.4</version>
+                <version>2.20</version>
                 <executions>
                     <execution>
                         <goals>
@@ -100,6 +112,7 @@
                     </execution>
                 </executions>
             </plugin>
+
             <!-- Activates the Derby database during the integration test phase -->
             <plugin>
                 <groupId>com.btmatthews.maven.plugins.inmemdb</groupId>
@@ -135,6 +148,7 @@
                     </execution>
                 </executions>
             </plugin>
+
             <!-- Activates the Roller application during the integration test phase -->
             <plugin>
                 <groupId>org.eclipse.jetty</groupId>
@@ -163,7 +177,7 @@
                         </goals>
                         <configuration>
                             <scanIntervalSeconds>0</scanIntervalSeconds>
-                            <daemon>true</daemon>
+                            <!-- <daemon>true</daemon> -->
                         </configuration>
                     </execution>
                     <execution>
@@ -175,21 +189,25 @@
                     </execution>
                 </executions>
                 <dependencies>
+
                     <dependency>
                         <groupId>org.apache.derby</groupId>
                         <artifactId>derby</artifactId>
                         <version>${derby.version}</version>
                     </dependency>
+
                     <dependency>
                         <groupId>org.apache.derby</groupId>
                         <artifactId>derbyclient</artifactId>
                         <version>${derby.version}</version>
                     </dependency>
+
                     <dependency>
                         <groupId>javax.mail</groupId>
                         <artifactId>mail</artifactId>
-                        <version>${javamail.version}</version>
+                        <version>1.4.7</version>
                     </dependency>
+
                 </dependencies>
             </plugin>
         </plugins>
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java
index 5bd89a9..5bce387 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java
@@ -21,7 +21,9 @@
 import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.Select;
+import org.openqa.selenium.support.ui.WebDriverWait;
 
 /**
  * Abstract class holding functionality common to Selenium Page Objects
@@ -30,13 +32,21 @@
 public abstract class AbstractRollerPage {
 
     protected WebDriver driver;
-    protected String pageName;
+
+    protected void verifyPageTitle(String waitForElementId, String pageTitle) {
+
+        WebDriverWait wait = new WebDriverWait(driver, 10);
+        wait.until( ExpectedConditions.visibilityOf( driver.findElement(By.id(waitForElementId))));
+
+        verifyPageTitle(pageTitle);
+    }
 
     protected void verifyPageTitle(String pageTitle) {
-        if(!driver.getTitle().equals(pageTitle)) {
-            throw new IllegalStateException("This is not the " + pageName + ", current page is: "
-                    + driver.getTitle());
+
+        if (!driver.getTitle().equals(pageTitle)) {
+            throw new IllegalStateException("This is not the " + pageTitle + ", current page is: " + driver.getTitle());
         }
+        System.out.println("Verified page title: " + pageTitle);
     }
 
     /*
@@ -48,8 +58,7 @@
         try {
             WebElement div = driver.findElement(By.id(idOnPage));
         } catch (NoSuchElementException e) {
-            throw new IllegalStateException("This is not the " + pageName + ", HTML ID: "
-                    + idOnPage + " not found.");
+            throw new IllegalStateException("HTML ID: " + idOnPage + " not found.");
         }
     }
 
@@ -60,11 +69,15 @@
     }
 
     protected void clickById(String buttonId) {
-        driver.findElement(By.id(buttonId)).click();
+        WebElement element = driver.findElement(By.id(buttonId));
+        element.click();
+        System.out.println("Element " + element.getTagName() + " id:" + element.getAttribute("id") + " clicked");
     }
 
     protected void clickByLinkText(String buttonText) {
-        driver.findElement(By.linkText(buttonText)).click();
+        WebElement element = driver.findElement(By.linkText(buttonText));
+        element.click();
+        System.out.println("Element " + element.getTagName() + " id:" + element.getAttribute("id") + " clicked");
     }
 
     protected String getTextByCSS(String cssSelector) {
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java b/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java
index 2c5f019..15d521d 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java
@@ -62,10 +62,12 @@
         LoginPage lp = wp.doRollerLogin();
         MainMenuPage mmp = lp.loginToRoller("bsmith", "roller123");
         CreateWeblogPage cwp = mmp.createWeblog();
-        mmp = cwp.createWeblog("Bob's Blog", "bobsblog", "bsmith@email.com");
+        cwp.createWeblog("Bob's Blog", "bobsblog", "bsmith@email.com");
 
         // set bobsblog as the front page blog
         driver.get(baseUrl);
+        sp = new SetupPage(driver);
+        driver.navigate().refresh();
         BlogHomePage bhp = sp.chooseFrontPageBlog();
 
         // create and read first blog entry
@@ -84,7 +86,6 @@
 
     @After
     public void tearDown() throws Exception {
-        driver.quit();
         String verificationErrorString = verificationErrors.toString();
         if (!"".equals(verificationErrorString)) {
             fail(verificationErrorString);
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java
index 1c0a75a..19db6cb 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java
@@ -31,8 +31,8 @@
 
     public CreateWeblogPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "Create Weblog Page";
-        verifyPageTitle("Front Page: Create Weblog");
+        String pageTitle = "Front Page: Create Weblog";
+        verifyPageTitle("createWeblog", pageTitle);
     }
 
     public MainMenuPage createWeblog() {
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/LoginPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/LoginPage.java
index e3834b9..6d90ae8 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/LoginPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/LoginPage.java
@@ -30,8 +30,8 @@
 
     public LoginPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "Roller Login Page";
-        verifyPageTitle("Front Page: Welcome to Roller");
+        String pageTitle = "Front Page: Welcome to Roller";
+        verifyPageTitle("loginForm", pageTitle);
     }
 
     public MainMenuPage loginToRoller() {
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/MainMenuPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/MainMenuPage.java
index 1eb4e00..1c3ba96 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/MainMenuPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/MainMenuPage.java
@@ -28,19 +28,21 @@
  * Post-login page object to create, choose, configure blogs.
  */
 public class MainMenuPage extends AbstractRollerPage {
+    String pageTitle;
 
     public MainMenuPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "Main Menu Page";
-        verifyPageTitle("Front Page: Main Menu");
+        pageTitle = "Front Page: Main Menu";
     }
 
     public CreateWeblogPage createWeblog() {
+        verifyPageTitle("createWeblogLink", pageTitle);
         clickByLinkText("create one?");
         return new CreateWeblogPage(driver);
     }
 
     public EntryAddPage createNewBlogEntry() {
+        verifyPageTitle("createWeblogLink", pageTitle);
         clickByLinkText("New Entry");
         return new EntryAddPage(driver);
     }
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/RegisterPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/RegisterPage.java
index 38cab2c..0d85498 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/RegisterPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/RegisterPage.java
@@ -18,7 +18,10 @@
 package org.apache.roller.selenium.core;
 
 import org.apache.roller.selenium.AbstractRollerPage;
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
 
 import java.lang.String;
 
@@ -30,12 +33,18 @@
 
     public RegisterPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "New User Registration Page";
-        verifyPageTitle("Front Page: New User Registration");
+        String pageTitle = "Front Page: New User Registration";
+
+        verifyPageTitle("register", pageTitle);
     }
 
     public WelcomePage submitUserRegistration() {
         clickById("submit");
+
+        WebDriverWait wait = new WebDriverWait(driver, 10);
+        wait.until( ExpectedConditions.visibilityOf( driver.findElement(By.id("a_clickHere"))));
+        driver.findElement(By.id("a_clickHere")).click();
+
         return new WelcomePage(driver);
     }
 
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/SetupPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/SetupPage.java
index 2328095..7422235 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/SetupPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/SetupPage.java
@@ -19,7 +19,12 @@
 
 import org.apache.roller.selenium.AbstractRollerPage;
 import org.apache.roller.selenium.view.BlogHomePage;
+import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.util.concurrent.TimeUnit;
 
 /**
  * represents core/Setup.jsp
@@ -32,16 +37,16 @@
 
     public SetupPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "Initial Setup Page";
-        verifyPageTitle("Front Page: Welcome to Roller!");
     }
 
     public RegisterPage createNewUser() {
+        verifyPageTitle("Front Page: Welcome to Roller!");
         clickById("a_createUser");
         return new RegisterPage(driver);
     }
 
     public BlogHomePage chooseFrontPageBlog() {
+        verifyPageTitle("setup_0", "Front Page: Welcome to Roller!");
         clickById("setup_0");
         return new BlogHomePage(driver);
     }
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/WelcomePage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/WelcomePage.java
index 1f64d87..87bafdf 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/WelcomePage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/WelcomePage.java
@@ -32,12 +32,11 @@
 
     public WelcomePage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "New User Registration Welcome Page";
-        verifyPageTitle("Front Page: New User Registration");
+        String pageTitle = "Front Page: Welcome to Roller";
+        verifyPageTitle("loginForm", pageTitle);
     }
 
     public LoginPage doRollerLogin() {
-        clickById("a_clickHere");
         return new LoginPage(driver);
     }
 
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryAddPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryAddPage.java
index 5f9319a..d58c2a3 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryAddPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryAddPage.java
@@ -29,8 +29,7 @@
 
     public EntryAddPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "New Blog Entry Page";
-        verifyPageTitle("Front Page: New Entry");
+        verifyPageTitle("entry", "Front Page: New Entry");
     }
 
 }
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryEditPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryEditPage.java
index 1a3fd28..09bf6a7 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryEditPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/editor/EntryEditPage.java
@@ -32,8 +32,7 @@
 
     public EntryEditPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "blog entry edit page";
-        verifyPageTitle("Front Page: Edit Entry");
+        verifyPageTitle("messages", "Front Page: Edit Entry");
     }
 
     public SingleBlogEntryPage viewBlogEntry() {
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/view/BlogHomePage.java b/it-selenium/src/test/java/org/apache/roller/selenium/view/BlogHomePage.java
index 2ec2a98..2fc4140 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/view/BlogHomePage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/view/BlogHomePage.java
@@ -31,8 +31,7 @@
 
     public BlogHomePage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "blog home page";
-        verifyIdOnPage("id_weblog");
+        verifyPageTitle("searchForm", "Bob's Blog");
     }
 
     public EntryAddPage createNewBlogEntry() {
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/view/SingleBlogEntryPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/view/SingleBlogEntryPage.java
index 595977f..0660e40 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/view/SingleBlogEntryPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/view/SingleBlogEntryPage.java
@@ -30,7 +30,7 @@
 
     public SingleBlogEntryPage(WebDriver driver) {
         this.driver = driver;
-        this.pageName = "Single blog entry view";
+        String pageTitle = "Single blog entry view";
         /* id_permalink added to basic template's permalink.vm only to distinguish
            this page from by-month or by-day views of blog entries */
         verifyIdOnPage("id_permalink");
diff --git a/it-selenium/src/test/resources/roller-jettyrun.properties b/it-selenium/src/test/resources/roller-jettyrun.properties
index 771de23..643e0c5 100644
--- a/it-selenium/src/test/resources/roller-jettyrun.properties
+++ b/it-selenium/src/test/resources/roller-jettyrun.properties
@@ -23,7 +23,7 @@
 passwds.encryption.enabled=false
 
 # use src copy of themes for read-only access
-themes.dir=target/roller-selenium-tests-5.2.0-SNAPSHOT/themes
+themes.dir=target/roller-selenium-tests-5.2.0/themes
 
 # put work in work dir
 search.index.dir          =target/work/search-index
diff --git a/pom.xml b/pom.xml
index 475ec4e..408d530 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,3 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -5,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.roller</groupId>
     <artifactId>roller-project</artifactId>
-    <version>5.2.0-SNAPSHOT</version>
+    <version>5.2.0</version>
     <packaging>pom</packaging>
 
     <prerequisites>
@@ -21,20 +38,21 @@
     <inceptionYear>2002</inceptionYear>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/roller/trunk</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/roller/trunk</developerConnection>
-        <url>http://svn.apache.org/viewvc/roller/trunk</url>
+        <url>https://github.com/apache/roller</url>
+        <connection>scm:git:git://github.com/apache/roller.git</connection>
+        <developerConnection>scm:git:git@github.com:apache/roller.git</developerConnection>
     </scm>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <derby.version>10.11.1.1</derby.version>
-        <roller.version>5.2.0-SNAPSHOT</roller.version>
+        <roller.version>5.2.0</roller.version>
     </properties>
 
     <modules>
         <module>app</module>
+        <!-- <module>it-selenium</module> -->
     </modules>
 
     <build>