synched to trunk (-r706114) in prep for merge


git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-124@706118 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/archiva-docs/pom.xml b/archiva-docs/pom.xml
index bd38f13..fe78803 100644
--- a/archiva-docs/pom.xml
+++ b/archiva-docs/pom.xml
@@ -106,9 +106,42 @@
               </execution>
             </executions>
           </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-enforcer-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>enforce-beanshell</id>
+                <goals>
+                  <goal>enforce</goal>
+                </goals>
+                <configuration>
+                  <rules>
+                    <evaluateBeanshell>
+                      <message>Site descriptor needs to be updated for the current release version</message>
+                      <condition>
+                        <![CDATA[
+                          javax.xml.xpath.XPath xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
+                          org.xml.sax.InputSource is = new org.xml.sax.InputSource( new java.io.FileInputStream( "${basedir}/src/site/site.xml" ) );
+                          xpath.evaluate( "//project/body/breadcrumbs/item[@name='${project.version}']/@href", is ).equals( "/docs/${project.version}" )
+                        ]]>
+                      </condition>
+                    </evaluateBeanshell>
+                    <evaluateBeanshell>
+                      <message>Release notes need to be updated for the current release version</message>
+                      <condition>
+                        <![CDATA[
+                          org.codehaus.plexus.util.FileUtils.fileRead( "${basedir}/src/site/apt/release-notes.apt" ).indexOf( "Release Notes for Archiva ${project.version}" ) >= 0
+                        ]]>
+                      </condition>
+                    </evaluateBeanshell>
+                  </rules>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
         </plugins>
       </build>
     </profile>
   </profiles>
-
 </project>
diff --git a/archiva-docs/src/site/apt/adminguide/configuration-files.apt b/archiva-docs/src/site/apt/adminguide/configuration-files.apt
index a26775c..b6da527 100644
--- a/archiva-docs/src/site/apt/adminguide/configuration-files.apt
+++ b/archiva-docs/src/site/apt/adminguide/configuration-files.apt
@@ -13,8 +13,6 @@
 
     * <<<security.properties>>> - this configures the security as described in the {{{security.html} security configuration documentation}}
 
-    * <<<plexus.xml>>> - only applies when running the standalone Archiva instance, as described in the {{{standalone.html} installing Archiva standalone documentation}}
-
   This section will focus on the <<<archiva.xml>>> file.
 
 * The Archiva configuration file
diff --git a/archiva-docs/src/site/apt/release-notes.apt b/archiva-docs/src/site/apt/release-notes.apt
index 5431145..f8e8db0 100644
--- a/archiva-docs/src/site/apt/release-notes.apt
+++ b/archiva-docs/src/site/apt/release-notes.apt
@@ -1,12 +1,11 @@
  -----
- Release Notes for Archiva 1.1.1
+ Release Notes for Archiva 1.2-SNAPSHOT
  -----
 
-Release Notes for Archiva 1.1.1
+Release Notes for Archiva 1.2-SNAPSHOT
 
-  The Apache Archiva team would like to announce the release of Archiva 1.1.1.
-
-  Archiva 1.1.1 is {{{http://archiva.apache.org/download.html} available for download from the web site}}.
+  The Apache Archiva team would like to announce the release of Archiva 1.2.  Archiva is {{{http://archiva.apache.org/download.html} 
+  available for download from the web site}}.
 
   Archiva is an application for managing one or more remote repositories, including administration, artifact handling, browsing and searching.
 
@@ -16,46 +15,77 @@
 
     * the archiva-user mailing list: {{http://archiva.apache.org/mail-lists.html}}
 
-* New in Archiva 1.1
+* New in Archiva 1.2
 
-** Artifact Uploads
-
-   To simplify adding artifacts to a repository, an upload form has been put in place that allows you to put an artifact and POM into
-   the repository without the need for the Maven <<<deploy-file>>> command.
-
-** RSS
-
-   RSS is now available for getting a feed of new artifacts being added to a given repository. Two types of feeds are generated by Archiva:
-   new artifacts in a repository and new versions of a specific artifact. Details are available in {{{userguide/rss.html}Rss Feeds}}.
-
-** Virtual Repositories
-
-   Virtual repositories or repository groups allows downloading from a group of repositories via one url. For more details of this feature,
-   see {{{userguide/virtual-repositories.html}Virtual Repositories}}.
-
-** Timeouts
-
-   Connections to remote repositories can now have a configurable timeout value
-
-** New Runtime Bundle
-
-   The application is now distributed using Jetty 6.1 and it's documented configuration, rather than the previous
-   Plexus application server bundle. It continues to use the Java Service Wrapper (v3.2.3) for application monitoring,
-   though the configuration has been improved, particularly with regard to separating the application configuration from the installation.
-
-** Using Spring
-
-   Archiva now uses the Spring Framework as it's underlying container instead of Plexus. This results in a boost in performance and
-   stability for the web application in particular.
-
-** Using Apache Jackrabbit WebDAV Servlet
-
-   Archiva now uses Apache Jackrabbit's WebDAV servlet for serving repository content instead of plexus-webdav. The change results in reduced
-   codebase complexity, increased standards compliance, better webdav client support and a small peformance boost.
+~~TODO
 
 * Release Notes
 
-  The Archiva 1.1 feature set can be seen in the {{{tour/index.html} feature tour}}.
+  The Archiva 1.2 feature set can be seen in the {{{tour/index.html} feature tour}}.
+
+* Changes in Archiva 1.2
+
+~~TODO
+
+* Changes in Archiva 1.1.3
+
+** Bug
+
+    * [MRM-967] - Security Issue: If repository observer role is enabled for the 'guest' user, an invalid user is able to deploy to that repository
+
+    * [MRM-397] - background of the Archiva logo is not transparent in repositories page
+
+    * [MRM-580] - does not give error message when one defines an illegal directory for a managed repository
+
+    * [MRM-954] - Footer doesn't stretch across repositoryGroups page
+
+* Changes in Archiva 1.1.2
+
+** Bug
+
+    * [MRM-765] - should not be possible to create a proxy connector if there are no remote repositories
+
+    * [MRM-807] - Deployed dll won't be indexed
+
+    * [MRM-834] - Wrong repository url when archiva is used behind Apache with mof_proxy
+
+    * [MRM-841] - Introducing a new scannable artifact file type requires restart in order for some consumers to work
+
+    * [MRM-880] - Archiva does not start up on Solaris 64-Bit
+
+    * [MRM-881] - Failing to startup due to invalid bean definition
+
+    * [MRM-893] - Illegal browse operation allow
+
+    * [MRM-902] - If path has leading slash when being checked againts whitelists and blacklists causes matching failure
+
+    * [MRM-903] - Repository scanning should not stop when encounters error
+
+    * [MRM-905] - EL Expression failed with empty/not functions
+
+    * [MRM-911] - Archiva checks user's credentials before guest's rights on the repository
+
+    * [MRM-912] - rss urls seem to use fixed webcontext "archiva" instead of actual webcontext
+
+    * [MRM-915] - NPE with rss links
+
+    * [MRM-926] - NPE with search page
+
+    * [MRM-932] - Error 500 when clicking the Next or Previous icon of the results of a search, if user is trying to search for java classes, packages or methods.
+
+    * [MRM-934] - For bytecode search, only 1 version of the artifact is returned even if there are more than 1 version of that artifact which matched the search
+
+    * [MRM-943] - results search option should only be available on results page
+
+** Improvement
+
+    * [MRM-839] - change RSS URLs
+
+    * [MRM-848] - Pre-configured repositories initially appear to be empty
+
+    * [MRM-874] - POM snippet for plugins should be <plugin> not <dependency>
+
+  The full list of changes can be found {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?version=14491&styleName=Text&projectId=10980} in JIRA}}.
 
 * Changes in Archiva 1.1.1
 
diff --git a/archiva-docs/src/site/site.xml b/archiva-docs/src/site/site.xml
index 08c18d3..14c1f9b 100644
--- a/archiva-docs/src/site/site.xml
+++ b/archiva-docs/src/site/site.xml
@@ -21,7 +21,7 @@
 <project>
   <body>
     <breadcrumbs>
-      <item name="1.1.1" href="/docs/1.1.1" />
+      <item name="1.2-SNAPSHOT" href="/docs/1.2-SNAPSHOT" />
     </breadcrumbs>
 
     <menu name="Introduction">
diff --git a/archiva-jetty/pom.xml b/archiva-jetty/pom.xml
index 5c88feb..09928b1 100644
--- a/archiva-jetty/pom.xml
+++ b/archiva-jetty/pom.xml
@@ -284,10 +284,4 @@
       </plugin>
     </plugins>
   </build>
-  <pluginRepositories>
-    <pluginRepository>
-      <id>codehaus.snapshots</id>
-      <url>http://snapshots.repository.codehaus.org/</url>
-    </pluginRepository>
-  </pluginRepositories>
 </project>
diff --git a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java b/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
index 2e3831d..1ae5831 100644
--- a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
+++ b/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
@@ -137,7 +137,7 @@
         }
         else
         {
-            return version.endsWith( SNAPSHOT );
+            return isGenericSnapshot(version);
         }
     }
 
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
index 58e1dd9..6bc2138 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
@@ -32,6 +32,7 @@
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
 import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaModelCloner;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
 import org.apache.maven.archiva.model.Keys;
 import org.apache.maven.archiva.model.RepositoryProblem;
@@ -41,7 +42,6 @@
 import org.apache.maven.archiva.repository.RepositoryException;
 import org.apache.maven.archiva.repository.content.ManagedLegacyRepositoryContent;
 import org.apache.maven.archiva.repository.project.ProjectModelException;
-import org.apache.maven.archiva.repository.project.ProjectModelFilter;
 import org.apache.maven.archiva.repository.project.ProjectModelReader;
 import org.apache.maven.archiva.repository.project.filters.EffectiveProjectModelFilter;
 import org.apache.maven.archiva.repository.project.readers.ProjectModel300Reader;
@@ -86,11 +86,6 @@
     private RepositoryContentFactory repositoryFactory;
 
     /**
-     * @plexus.requirement role-hint="expression"
-     */
-    private ProjectModelFilter expressionModelFilter;
-
-    /**
      * @plexus.requirement role="org.apache.maven.archiva.repository.project.ProjectModelFilter"
      * role-hint="effective"
      */
@@ -160,23 +155,22 @@
         {
             model = reader.read( artifactFile );
 
-            model.setOrigin( "filesystem" );
-
             // The version should be updated to the artifact/filename version if it is a unique snapshot
             if ( VersionUtil.isUniqueSnapshot( artifact.getVersion() ) )
             {
                 model.setVersion( artifact.getVersion() );
             }
 
-            // Filter the model
-            model = expressionModelFilter.filter( model );
-
-            // Resolve the project model
+            // Resolve the project model (build effective model, resolve expressions)
             model = effectiveModelFilter.filter( model );
 
             if ( isValidModel( model, repo, artifact ) )
             {
                 log.debug( "Adding project model to database - " + Keys.toKey( model ) );
+                
+                // Clone model, since DAO while detachingCopy resets its contents
+                // This changes contents of the cache in EffectiveProjectModelFilter
+                model = ArchivaModelCloner.clone( model );
                 dao.getProjectModelDAO().saveProjectModel( model );
             }
             else
@@ -356,5 +350,4 @@
             }
         }
     }
-    
 }
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumerTest.java
new file mode 100644
index 0000000..955d221
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumerTest.java
@@ -0,0 +1,125 @@
+package org.apache.maven.archiva.consumers.database;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.database.ProjectModelDAO;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.Dependency;
+import org.apache.maven.archiva.model.Keys;
+import org.codehaus.plexus.spring.PlexusInSpringTestCase;
+
+/**
+ * Test for ProjectModelToDatabaseConsumerTest
+ * 
+ * @author <a href="mailto:michal.stochmialek@eurobank.pl">Michal Stochmialek</a>
+ */
+public class ProjectModelToDatabaseConsumerTest
+    extends PlexusInSpringTestCase
+{
+    private ProjectModelToDatabaseConsumer consumer;
+
+    private ProjectModelDAO modelDao;
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        ArchivaConfiguration archivaConfig = (ArchivaConfiguration) lookup( ArchivaConfiguration.class );
+
+        Configuration configuration = archivaConfig.getConfiguration();
+        ManagedRepositoryConfiguration repo = configuration.findManagedRepositoryById( "internal" );
+        repo.setLocation( new File( getBasedir(), "src/test/resources/test-repo" ).toString() );
+
+        consumer =
+            (ProjectModelToDatabaseConsumer) lookup( DatabaseUnprocessedArtifactConsumer.class, "update-db-project" );
+        modelDao = (ProjectModelDAO) lookup( ProjectModelDAO.class, "jdo" );
+    }
+
+    public void testProcess()
+        throws Exception
+    {
+        ArchivaProjectModel model = processAndGetModel( "test-project", "test-project-endpoint-pom", "2.4.4" );
+        assertNotNull( model.getParentProject() );
+        assertEquals( "test-project:test-project:2.4.4", Keys.toKey( model.getParentProject() ) );
+
+        assertFalse( model.getDependencyManagement().isEmpty() );
+
+        model = processAndGetModel( "test-project", "test-project-endpoint-ejb", "2.4.4" );
+        assertNotNull( model.getParentProject() );
+        assertEquals( "test-project:test-project-endpoint-pom:2.4.4", Keys.toKey( model.getParentProject() ) );
+        assertTrue( hasDependency( model, "test-project:test-project-api:2.4.4" ) );
+        assertTrue( hasDependency( model, "commons-id:commons-id:0.1-dev" ) );
+
+        model = processAndGetModel( "test-project", "test-project", "2.4.4" );
+        assertFalse( model.getDependencyManagement().isEmpty() );
+    }
+
+    private boolean hasDependency( ArchivaProjectModel model, String key )
+    {
+        for ( Iterator i = model.getDependencies().iterator(); i.hasNext(); )
+        {
+            Dependency dependency = (Dependency) i.next();
+            if ( key.equals( Keys.toKey( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() ) ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private ArchivaProjectModel processAndGetModel( String group, String artifactId, String version )
+        throws ConsumerException, ObjectNotFoundException, ArchivaDatabaseException
+    {
+        ArchivaArtifact artifact = createArtifact( group, artifactId, version, "pom" );
+        consumer.processArchivaArtifact( artifact );
+
+        ArchivaProjectModel model = modelDao.getProjectModel( group, artifactId, version );
+        assertEquals( group, model.getGroupId() );
+        assertEquals( artifactId, model.getArtifactId() );
+        assertEquals( version, model.getVersion() );
+        return model;
+    }
+
+    protected ArchivaArtifact createArtifact( String group, String artifactId, String version, String type )
+    {
+        ArchivaArtifactModel model = new ArchivaArtifactModel();
+        model.setGroupId( group );
+        model.setArtifactId( artifactId );
+        model.setVersion( version );
+        model.setType( type );
+        model.setRepositoryId( "internal" );
+
+        return new ArchivaArtifact( model );
+    }
+
+}
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumerTest.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumerTest.xml
new file mode 100644
index 0000000..3766646
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumerTest.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~ 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.
+-->
+
+<component-set>
+    <components>
+        <!-- JdoAccess -->
+        <component>
+            <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+            <role-hint>archiva</role-hint>
+            <implementation>org.apache.maven.archiva.database.jdo.JdoAccess</implementation>
+            <requirements>
+                <requirement>
+                    <role>org.codehaus.plexus.jdo.JdoFactory</role>
+                    <role-hint>archiva</role-hint>
+                </requirement>
+            </requirements>
+        </component>
+
+        <!-- JDO Factory -->
+        <component>
+            <role>org.codehaus.plexus.jdo.JdoFactory</role>
+            <role-hint>archiva</role-hint>
+            <implementation>org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory</implementation>
+
+            <configuration>
+                <!-- Database Configuration -->
+                <driverName>org.hsqldb.jdbcDriver</driverName>
+                <url>jdbc:hsqldb:mem:TESTDB</url>
+                <userName>sa</userName>
+                <password></password>
+
+                <!-- JPOX and JDO configuration -->
+                <persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>
+                <otherProperties>
+                    <property>
+                        <name>javax.jdo.PersistenceManagerFactoryClass</name>
+                        <value>org.jpox.PersistenceManagerFactoryImpl</value>
+                    </property>
+                    <property>
+                        <name>org.jpox.autoCreateSchema</name>
+                        <value>true</value>
+                    </property>
+                </otherProperties>
+            </configuration>
+        </component>
+
+        <component>
+            <role>org.codehaus.plexus.cache.Cache</role>
+            <role-hint>effective-project-cache</role-hint>
+            <implementation>org.codehaus.plexus.cache.ehcache.EhcacheCache</implementation>
+            <description>Effective Project Cache</description>
+            <configuration>
+                <disk-expiry-thread-interval-seconds>600</disk-expiry-thread-interval-seconds>
+                <disk-persistent>true</disk-persistent>
+                <disk-store-path>${java.io.tmpdir}/archiva/effectiveproject</disk-store-path>
+                <eternal>true</eternal>
+                <max-elements-in-memory>1000</max-elements-in-memory>
+                <memory-eviction-policy>LRU</memory-eviction-policy>
+                <name>effective-project-cache</name>
+                <overflow-to-disk>false</overflow-to-disk>
+                <!-- TODO: Adjust the time to live to be more sane (ie: huge 4+ hours) -->
+                <!-- 45 minutes = 2700 seconds -->
+                <time-to-idle-seconds>2700</time-to-idle-seconds>
+                <!-- 30 minutes = 1800 seconds  -->
+                <time-to-live-seconds>1800</time-to-live-seconds>
+            </configuration>
+        </component>
+    </components>
+</component-set>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom
new file mode 100644
index 0000000..fa0c87e
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <groupId>test-project</groupId>
+    <artifactId>test-project-api</artifactId>
+    <name>Test Project API</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>stax</groupId>
+            <artifactId>stax-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom
new file mode 100644
index 0000000..b333a52
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project-broker-pom</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <artifactId>test-project-broker-ejb</artifactId>
+    <name>Test Project Broker EJB</name>
+    <packaging>ejb</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <type>test-jar</type>
+            <version>${pom.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-api</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-id</groupId>
+            <artifactId>commons-id</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-mock</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.jms</groupId>
+            <artifactId>jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.management</groupId>
+            <artifactId>jmxri</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom
new file mode 100644
index 0000000..fd54736
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <artifactId>test-project-broker-pom</artifactId>
+    <name>Test Project Broker POM</name>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>broker-ejb</module>
+    </modules>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom
new file mode 100644
index 0000000..d47958b
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <groupId>test-project</groupId>
+    <artifactId>test-project-common</artifactId>
+    <name>Test Project Commons</name>
+    <dependencies>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-api</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-id</groupId>
+            <artifactId>commons-id</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>stax</groupId>
+            <artifactId>stax-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>wstx-asl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.castor</groupId>
+            <artifactId>castor</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xerces</groupId>
+            <artifactId>xerces</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.jms</groupId>
+            <artifactId>jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.ejb</groupId>
+            <artifactId>ejb</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.management</groupId>
+            <artifactId>jmxri</artifactId>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom
new file mode 100644
index 0000000..582f1e5
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project-endpoint-pom</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <groupId>test-project</groupId>
+    <artifactId>test-project-endpoint-ejb</artifactId>
+    <name>Test Project Endpoint EJB</name>
+    <packaging>ejb</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-api</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <!-- for tests only -->
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <version>${pom.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-id</groupId>
+            <artifactId>commons-id</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.jms</groupId>
+            <artifactId>jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xml-apis</groupId>
+            <artifactId>xml-apis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.management</groupId>
+            <artifactId>jmxri</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom
new file mode 100644
index 0000000..ea4d637
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <artifactId>test-project-endpoint-pom</artifactId>
+    <name>Test Project Endpoint POM</name>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>endpoint-ejb</module>
+    </modules>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project/2.4.4/test-project-2.4.4.pom b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project/2.4.4/test-project-2.4.4.pom
new file mode 100644
index 0000000..6dc4719
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-database-consumers/src/test/resources/test-repo/test-project/test-project/2.4.4/test-project-2.4.4.pom
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>test-project</groupId>
+    <artifactId>test-project</artifactId>
+    <name>Test Project</name>
+    <version>2.4.4</version>
+    <packaging>pom</packaging>
+
+    <organization>
+        <name>Company</name>
+        <url>http://www.company.com/</url>
+    </organization>
+    <inceptionYear>2002</inceptionYear>
+
+    <modules>
+        <module>api</module>
+        <module>common</module>
+        <module>broker</module>
+        <module>endpoint</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <!-- common version strategy -->
+            <dependency>
+                <groupId>javax.activation</groupId>
+                <artifactId>activation</artifactId>
+                <version>1.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.jms</groupId>
+                <artifactId>jms</artifactId>
+                <version>1.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.ejb</groupId>
+                <artifactId>ejb</artifactId>
+                <version>2.0</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>
+                <version>2.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.mail</groupId>
+                <artifactId>mail</artifactId>
+                <version>1.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>xml-apis</groupId>
+                <artifactId>xml-apis</artifactId>
+                <version>2.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>commons-logging</groupId>
+                <artifactId>commons-logging</artifactId>
+                <version>1.0.4</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-lang</groupId>
+                <artifactId>commons-lang</artifactId>
+                <version>2.1</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-collections</groupId>
+                <artifactId>commons-collections</artifactId>
+                <version>3.2</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring</artifactId>
+                <version>2.0.7</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-mock</artifactId>
+                <version>2.0.7</version>
+                <scope>test</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-jdbc</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-web</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>1.2.8</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-discovery</groupId>
+                <artifactId>commons-discovery</artifactId>
+                <version>0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-id</groupId>
+                <artifactId>commons-id</artifactId>
+                <version>0.1-dev</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.castor</groupId>
+                <artifactId>castor</artifactId>
+                <version>1.0.5-xml</version>
+            </dependency>
+            <dependency>
+                <groupId>xerces</groupId>
+                <artifactId>xerces</artifactId>
+                <version>2.4.0</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-httpclient</groupId>
+                <artifactId>commons-httpclient</artifactId>
+                <version>3.1</version>
+            </dependency>
+            <dependency>
+                <groupId>stax</groupId>
+                <artifactId>stax-api</artifactId>
+                <version>1.0.1</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.woodstox</groupId>
+                <artifactId>wstx-asl</artifactId>
+                <version>3.2.1</version>
+            </dependency>
+            <dependency>
+                <groupId>com.thoughtworks.xstream</groupId>
+                <artifactId>xstream</artifactId>
+                <version>1.2.2</version>
+            </dependency>
+            <dependency>
+                <groupId>javax.management</groupId>
+                <artifactId>jmxri</artifactId>
+                <version>1.2.1</version>
+                <scope>provided</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+</project>
diff --git a/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml b/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
index b7e03b5..93912f6 100644
--- a/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
+++ b/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
@@ -893,7 +893,7 @@
         StringBuffer key = new StringBuffer();
 
         key.append( defaultString( reference.getGroupId() ) ).append( ":" );
-        key.append( defaultString( reference.getArtifactId() ) ).append( ":" );
+        key.append( defaultString( reference.getArtifactId() ) );
 
         return key.toString();
     }
@@ -969,7 +969,7 @@
 
         key.append( defaultString( reference.getGroupId() ) ).append( ":" );
         key.append( defaultString( reference.getArtifactId() ) ).append( ":" );
-        key.append( defaultString( reference.getVersion() ) ).append( ":" );
+        key.append( defaultString( reference.getVersion() ) );
 
         return key.toString();
     }
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
index fa49e5d..08228a5 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
@@ -104,7 +104,8 @@
 
             // check it starts with the same version up to the snapshot part
             int leadingLength = expected.length() - 9;
-            if ( version.startsWith( expected.substring( 0, leadingLength ) ) && version.length() > leadingLength )
+            if ( leadingLength > 0 && version.startsWith( expected.substring( 0, leadingLength ) ) &&
+                version.length() > leadingLength )
             {
                 // If we expect a non-generic snapshot - look for the timestamp
                 Matcher m = SNAPSHOT_PATTERN.matcher( version.substring( leadingLength + 1 ) );
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java
index b14b52a..6470eaa 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java
@@ -77,6 +77,7 @@
         ArchivaProjectModel merged = new ArchivaProjectModel();
 
         // Unmerged.
+        merged.setParentProject(mainProject.getParentProject());
         merged.setArtifactId( mainProject.getArtifactId() );
         merged.setPackaging( StringUtils.defaultIfEmpty( mainProject.getPackaging(), "jar" ) );
         merged.setRelocation( mainProject.getRelocation() );
@@ -334,6 +335,7 @@
         }
 
         Properties merged = new Properties();
+        merged.putAll(mainProperties);
 
         Enumeration keys = parentProperties.propertyNames();
         while ( keys.hasMoreElements() )
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java
index 24a22f9..d1860e8 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilter.java
@@ -100,20 +100,23 @@
         // Clone submitted project (so that we don't mess with it) 
         effectiveProject = ArchivaModelCloner.clone( project );
 
-        // Setup Expression Evaluation pieces.
-        effectiveProject = expressionFilter.filter( effectiveProject );
-
         DEBUG( "Starting build of effective with: " + effectiveProject );
 
         // Merge in all the parent poms.
         effectiveProject = mergeParent( effectiveProject );
 
+        // Setup Expression Evaluation pieces.
+        effectiveProject = expressionFilter.filter( effectiveProject );
+
         // Resolve dependency versions from dependency management.
         applyDependencyManagement( effectiveProject );
 
+        // groupId or version could be updated by parent or expressions
+        projectKey = toProjectKey( effectiveProject );
+        
         // Do not add project into cache if it contains no groupId and
         // version information
-        if ( project.getGroupId() != null && project.getVersion() != null )
+        if ( effectiveProject.getGroupId() != null && effectiveProject.getVersion() != null )
         {
             synchronized ( effectiveProjectCache )
             {
@@ -191,8 +194,8 @@
             if ( parentProject != null )
             {
                 // Merge the pom with the parent pom.
-                parentProject = expressionFilter.filter( parentProject );
                 parentProject = mergeParent( parentProject );
+                parentProject = expressionFilter.filter( parentProject );
 
                 // Cache the pre-merged parent.
                 synchronized ( effectiveProjectCache )
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java
index 1c2f989..6c39cd3 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/filters/ProjectModelExpressionFilter.java
@@ -104,11 +104,24 @@
             try
             {
                 // Setup some common properties.
+                VersionedReference parent = model.getParentProject();
+                if ( parent != null )
+                {
+                    String parentGroupId = StringUtils.defaultString( evaluator.expand( parent.getGroupId() ) );
+                    String parentArtifactId = StringUtils.defaultString( evaluator.expand( parent.getArtifactId() ) );
+                    String parentVersion = StringUtils.defaultString( evaluator.expand( parent.getVersion() ) );
+
+                    props.setProperty( "parent.groupId", parentGroupId );
+                    props.setProperty( "parent.artifactId", parentArtifactId );
+                    props.setProperty( "parent.version", parentVersion );
+                }
+
                 String groupId = StringUtils.defaultString( evaluator.expand( model.getGroupId() ) );
                 String artifactId = StringUtils.defaultString( evaluator.expand( model.getArtifactId() ) );
                 String version = StringUtils.defaultString( evaluator.expand( model.getVersion() ) );
                 String name = StringUtils.defaultString( evaluator.expand( model.getName() ) );
                 
+
                 /* Archiva doesn't need to handle a full expression language with object tree walking
                  * as the requirements within Archiva are much smaller, a quick replacement of the
                  * important fields (groupId, artifactId, version, name) are handled specifically. 
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
index 95aa27c..a46d85f 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel300Reader.java
@@ -94,6 +94,8 @@
             model.setProperties( getProperties( xml.getElement( "//project/properties" ) ) );
             model.setDependencies( getDependencies( xml ) );
             
+            model.setOrigin("filesystem");
+
             /* Following are not valid for <pomVersion>3</pomVersion> / Maven 1 pom files.
              * 
              * model.setDependencyManagement()
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
index 38509be..441f63f 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
@@ -104,6 +104,8 @@
             model.setBuildExtensions( getBuildExtensions( xml ) );
 
             model.setRelocation( getRelocation( xml ) );
+            
+            model.setOrigin("filesystem");
 
             return model;
         }
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/archiva-model-effective.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/archiva-model-effective.pom
index 9129a9d..37d9d11 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/archiva-model-effective.pom
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/archiva-model-effective.pom
@@ -431,6 +431,16 @@
       <version>1.0-SNAPSHOT</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-test-A</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-test-B</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
       <version>1.4</version>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/test-project-model-effective.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/test-project-model-effective.pom
new file mode 100644
index 0000000..3057af9
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/expected-poms/test-project-model-effective.pom
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ====================================================================== -->
+<!--                                                                        -->
+<!-- Generated by Maven Help Plugin on 9/17/08 5:36 PM                      -->
+<!-- See: http://maven.apache.org/plugins/maven-help-plugin/                -->
+<!--                                                                        -->
+<!-- ====================================================================== -->
+
+<!-- ====================================================================== -->
+<!--                                                                        -->
+<!-- Effective POM for project                                              -->
+<!-- 'test-project:test-project-endpoint-ejb:ejb:2.4.4'                     -->
+<!--                                                                        -->
+<!-- ====================================================================== -->
+
+<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/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>test-project-endpoint-pom</artifactId>
+    <groupId>test-project</groupId>
+    <version>2.4.4</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test-project</groupId>
+  <artifactId>test-project-endpoint-ejb</artifactId>
+  <packaging>ejb</packaging>
+  <name>Test Project Endpoint EJB</name>
+  <version>2.4.4</version>
+  <inceptionYear>2002</inceptionYear>
+  <organization>
+    <name>Company</name>
+    <url>http://www.company.com/</url>
+  </organization>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>test-project</groupId>
+      <artifactId>test-project-common</artifactId>
+      <version>2.4.4</version>
+    </dependency>
+    <dependency>
+      <groupId>test-project</groupId>
+      <artifactId>test-project-api</artifactId>
+      <version>2.4.4</version>
+    </dependency>
+    <dependency>
+      <groupId>test-project</groupId>
+      <artifactId>test-project-common</artifactId>
+      <version>2.4.4</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-id</groupId>
+      <artifactId>commons-id</artifactId>
+      <version>0.1-dev</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-discovery</groupId>
+      <artifactId>commons-discovery</artifactId>
+      <version>0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.8</version>
+    </dependency>
+    <dependency>
+      <groupId>javax.jms</groupId>
+      <artifactId>jms</artifactId>
+      <version>1.0.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.activation</groupId>
+      <artifactId>activation</artifactId>
+      <version>1.0.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.mail</groupId>
+      <artifactId>mail</artifactId>
+      <version>1.4</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>xml-apis</groupId>
+      <artifactId>xml-apis</artifactId>
+      <version>2.0.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.management</groupId>
+      <artifactId>jmxri</artifactId>
+      <version>1.2.1</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>2.4</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>javax.activation</groupId>
+        <artifactId>activation</artifactId>
+        <version>1.0.2</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.jms</groupId>
+        <artifactId>jms</artifactId>
+        <version>1.0.2</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.ejb</groupId>
+        <artifactId>ejb</artifactId>
+        <version>2.0</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.servlet</groupId>
+        <artifactId>servlet-api</artifactId>
+        <version>2.4</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>javax.mail</groupId>
+        <artifactId>mail</artifactId>
+        <version>1.4</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>xml-apis</groupId>
+        <artifactId>xml-apis</artifactId>
+        <version>2.0.2</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>commons-logging</groupId>
+        <artifactId>commons-logging</artifactId>
+        <version>1.0.4</version>
+      </dependency>
+      <dependency>
+        <groupId>commons-lang</groupId>
+        <artifactId>commons-lang</artifactId>
+        <version>2.1</version>
+      </dependency>
+      <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <version>3.2</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring</artifactId>
+        <version>2.0.7</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-mock</artifactId>
+        <version>2.0.7</version>
+        <scope>test</scope>
+        <exclusions>
+          <exclusion>
+            <artifactId>spring-jdbc</artifactId>
+            <groupId>org.springframework</groupId>
+          </exclusion>
+          <exclusion>
+            <artifactId>spring-web</artifactId>
+            <groupId>org.springframework</groupId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>log4j</groupId>
+        <artifactId>log4j</artifactId>
+        <version>1.2.8</version>
+      </dependency>
+      <dependency>
+        <groupId>commons-discovery</groupId>
+        <artifactId>commons-discovery</artifactId>
+        <version>0.2</version>
+      </dependency>
+      <dependency>
+        <groupId>commons-id</groupId>
+        <artifactId>commons-id</artifactId>
+        <version>0.1-dev</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.castor</groupId>
+        <artifactId>castor</artifactId>
+        <version>1.0.5-xml</version>
+      </dependency>
+      <dependency>
+        <groupId>xerces</groupId>
+        <artifactId>xerces</artifactId>
+        <version>2.4.0</version>
+      </dependency>
+      <dependency>
+        <groupId>commons-httpclient</groupId>
+        <artifactId>commons-httpclient</artifactId>
+        <version>3.1</version>
+      </dependency>
+      <dependency>
+        <groupId>stax</groupId>
+        <artifactId>stax-api</artifactId>
+        <version>1.0.1</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.woodstox</groupId>
+        <artifactId>wstx-asl</artifactId>
+        <version>3.2.1</version>
+      </dependency>
+      <dependency>
+        <groupId>com.thoughtworks.xstream</groupId>
+        <artifactId>xstream</artifactId>
+        <version>1.2.2</version>
+      </dependency>
+      <dependency>
+        <groupId>javax.management</groupId>
+        <artifactId>jmxri</artifactId>
+        <version>1.2.1</version>
+        <scope>provided</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+</project>
\ No newline at end of file
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
index 6da1ce2..e1a0394 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
@@ -296,6 +296,15 @@
     }
 
     /**
+     * A timestamped versioned artifact but without release version part. Like on axiom trunk. 
+     */
+    public void testBadSnapshotWithoutReleasePart()
+    {
+        assertBadPath( "org/apache/ws/commons/axiom/axiom/SNAPSHOT/axiom-20070912.093446-2.pom", 
+             "snapshot version without release part");
+    }
+
+    /**
      * A timestamped versioned artifact, should reside in a SNAPSHOT baseversion directory.
      * @throws LayoutException
      */
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
index 9b31da6..7f82384 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
@@ -169,6 +169,15 @@
         assertNull( parser.expect( "2.0-SNAPSHOT" ) );
     }
 
+    public void testExpectWrongSnapshot2()
+    {
+        // tests parsing axiom snapshots without exceptions
+        FilenameParser parser = new FilenameParser( "axiom-20080221.062205-9.pom" );
+
+        assertEquals( "axiom", parser.nextNonVersion() );
+        assertNull( parser.expect( "SNAPSHOT" ) );
+    }
+
     public void testClassifier()
     {
         FilenameParser parser = new FilenameParser( "artifact-id-1.0-20070219.171202-34-test-sources.jar" );
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java
index c4f0418..c65a737 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/filters/EffectiveProjectModelFilterTest.java
@@ -81,20 +81,29 @@
     public void testBuildEffectiveProject()
         throws Exception
     {
+        assertEffectiveProject(
+                "/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom",
+        "/archiva-model-effective.pom");
+        assertEffectiveProject(
+                "/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom",
+        "/test-project-model-effective.pom");
+    }
+
+    private void assertEffectiveProject(String pomFile, String effectivePomFile) throws Exception,
+            ProjectModelException {
         initTestResolverFactory();
         EffectiveProjectModelFilter filter = lookupEffective();
 
-        ArchivaProjectModel startModel = createArchivaProjectModel( DEFAULT_REPOSITORY
-            + "/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom" );
+        ArchivaProjectModel startModel = createArchivaProjectModel( DEFAULT_REPOSITORY + pomFile );
 
         ArchivaProjectModel effectiveModel = filter.filter( startModel );
 
-        ArchivaProjectModel expectedModel = createArchivaProjectModel( "src/test/expected-poms/"
-            + "/archiva-model-effective.pom" );
+        ArchivaProjectModel expectedModel = createArchivaProjectModel( "src/test/expected-poms/" + effectivePomFile);
 
         assertModel( expectedModel, effectiveModel );
     }
 
+
     /**
      * [MRM-510] In Repository Browse, the first unique snapshot version clicked is getting persisted in the 
      * request resulting to 'version does not match' error
@@ -272,7 +281,7 @@
         while ( it.hasNext() )
         {
             Dependency dep = it.next();
-            String key = Dependency.toVersionlessKey( dep );
+            String key = Dependency.toKey( dep );
             map.put( key, dep );
         }
         return map;
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400ReaderTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400ReaderTest.java
index 5d6d0c3..735bf9b 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400ReaderTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400ReaderTest.java
@@ -92,6 +92,6 @@
         assertEquals( "Parent Version", "1.0-SNAPSHOT", parentRef.getVersion() );
         
         assertNotNull( "Dependencies", project.getDependencies() );
-        assertEquals( "Dependencies.size", 6, project.getDependencies().size() );
+        assertEquals( "Dependencies.size", 8, project.getDependencies().size() );
     }
 }
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom
index 52c185e..9c9053a 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom
@@ -34,6 +34,16 @@
       <artifactId>archiva-common</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-test-A</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-test-B</artifactId>
+      <version>${parent.version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
     </dependency>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom
new file mode 100644
index 0000000..fa0c87e
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-api/2.4.4/test-project-api-2.4.4.pom
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <groupId>test-project</groupId>
+    <artifactId>test-project-api</artifactId>
+    <name>Test Project API</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>stax</groupId>
+            <artifactId>stax-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom
new file mode 100644
index 0000000..b333a52
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-broker-ejb/2.4.4/test-project-broker-ejb-2.4.4.pom
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project-broker-pom</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <artifactId>test-project-broker-ejb</artifactId>
+    <name>Test Project Broker EJB</name>
+    <packaging>ejb</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <type>test-jar</type>
+            <version>${pom.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-api</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-id</groupId>
+            <artifactId>commons-id</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-mock</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.jms</groupId>
+            <artifactId>jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.management</groupId>
+            <artifactId>jmxri</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom
new file mode 100644
index 0000000..fd54736
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-broker-pom/2.4.4/test-project-broker-pom-2.4.4.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <artifactId>test-project-broker-pom</artifactId>
+    <name>Test Project Broker POM</name>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>broker-ejb</module>
+    </modules>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom
new file mode 100644
index 0000000..d47958b
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-common/2.4.4/test-project-common-2.4.4.pom
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <groupId>test-project</groupId>
+    <artifactId>test-project-common</artifactId>
+    <name>Test Project Commons</name>
+    <dependencies>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-api</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-id</groupId>
+            <artifactId>commons-id</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>stax</groupId>
+            <artifactId>stax-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>wstx-asl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.castor</groupId>
+            <artifactId>castor</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xerces</groupId>
+            <artifactId>xerces</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.jms</groupId>
+            <artifactId>jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.ejb</groupId>
+            <artifactId>ejb</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.management</groupId>
+            <artifactId>jmxri</artifactId>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom
new file mode 100644
index 0000000..582f1e5
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-endpoint-ejb/2.4.4/test-project-endpoint-ejb-2.4.4.pom
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project-endpoint-pom</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <groupId>test-project</groupId>
+    <artifactId>test-project-endpoint-ejb</artifactId>
+    <name>Test Project Endpoint EJB</name>
+    <packaging>ejb</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>test-project</groupId>
+            <artifactId>test-project-api</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <!-- for tests only -->
+            <groupId>test-project</groupId>
+            <artifactId>test-project-common</artifactId>
+            <version>${pom.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-id</groupId>
+            <artifactId>commons-id</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.jms</groupId>
+            <artifactId>jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xml-apis</groupId>
+            <artifactId>xml-apis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.management</groupId>
+            <artifactId>jmxri</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom
new file mode 100644
index 0000000..ea4d637
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project-endpoint-pom/2.4.4/test-project-endpoint-pom-2.4.4.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>test-project</groupId>
+        <artifactId>test-project</artifactId>
+        <version>2.4.4</version>
+    </parent>
+    <artifactId>test-project-endpoint-pom</artifactId>
+    <name>Test Project Endpoint POM</name>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>endpoint-ejb</module>
+    </modules>
+</project>
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom
new file mode 100644
index 0000000..6dc4719
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/test-project/test-project/2.4.4/test-project-2.4.4.pom
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>test-project</groupId>
+    <artifactId>test-project</artifactId>
+    <name>Test Project</name>
+    <version>2.4.4</version>
+    <packaging>pom</packaging>
+
+    <organization>
+        <name>Company</name>
+        <url>http://www.company.com/</url>
+    </organization>
+    <inceptionYear>2002</inceptionYear>
+
+    <modules>
+        <module>api</module>
+        <module>common</module>
+        <module>broker</module>
+        <module>endpoint</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <!-- common version strategy -->
+            <dependency>
+                <groupId>javax.activation</groupId>
+                <artifactId>activation</artifactId>
+                <version>1.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.jms</groupId>
+                <artifactId>jms</artifactId>
+                <version>1.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.ejb</groupId>
+                <artifactId>ejb</artifactId>
+                <version>2.0</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>
+                <version>2.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.mail</groupId>
+                <artifactId>mail</artifactId>
+                <version>1.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>xml-apis</groupId>
+                <artifactId>xml-apis</artifactId>
+                <version>2.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>commons-logging</groupId>
+                <artifactId>commons-logging</artifactId>
+                <version>1.0.4</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-lang</groupId>
+                <artifactId>commons-lang</artifactId>
+                <version>2.1</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-collections</groupId>
+                <artifactId>commons-collections</artifactId>
+                <version>3.2</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring</artifactId>
+                <version>2.0.7</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-mock</artifactId>
+                <version>2.0.7</version>
+                <scope>test</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-jdbc</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-web</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>1.2.8</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-discovery</groupId>
+                <artifactId>commons-discovery</artifactId>
+                <version>0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-id</groupId>
+                <artifactId>commons-id</artifactId>
+                <version>0.1-dev</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.castor</groupId>
+                <artifactId>castor</artifactId>
+                <version>1.0.5-xml</version>
+            </dependency>
+            <dependency>
+                <groupId>xerces</groupId>
+                <artifactId>xerces</artifactId>
+                <version>2.4.0</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-httpclient</groupId>
+                <artifactId>commons-httpclient</artifactId>
+                <version>3.1</version>
+            </dependency>
+            <dependency>
+                <groupId>stax</groupId>
+                <artifactId>stax-api</artifactId>
+                <version>1.0.1</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.woodstox</groupId>
+                <artifactId>wstx-asl</artifactId>
+                <version>3.2.1</version>
+            </dependency>
+            <dependency>
+                <groupId>com.thoughtworks.xstream</groupId>
+                <artifactId>xstream</artifactId>
+                <version>1.2.2</version>
+            </dependency>
+            <dependency>
+                <groupId>javax.management</groupId>
+                <artifactId>jmxri</artifactId>
+                <version>1.2.1</version>
+                <scope>provided</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+</project>
diff --git a/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/project/ProjectModelToDatabaseListener.java b/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/project/ProjectModelToDatabaseListener.java
index 04f3a23..2e63619 100644
--- a/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/project/ProjectModelToDatabaseListener.java
+++ b/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/project/ProjectModelToDatabaseListener.java
@@ -24,6 +24,7 @@
 import org.apache.maven.archiva.database.ArchivaDAO;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.model.ArchivaModelCloner;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
 import org.apache.maven.archiva.model.VersionedReference;
 import org.apache.maven.archiva.repository.project.ProjectModelException;
@@ -135,7 +136,9 @@
             return;
         }
 
-        model.setOrigin( "filesystem" );
+        // Clone model, since DAO while detachingCopy resets contents of the model
+        // this changes behaviour of EffectiveProjectModelFilter
+        model = ArchivaModelCloner.clone( model );
 
         try
         {
diff --git a/archiva-modules/archiva-web/archiva-webapp/pom.xml b/archiva-modules/archiva-web/archiva-webapp/pom.xml
index 99e7c74..127d08b 100644
--- a/archiva-modules/archiva-web/archiva-webapp/pom.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/pom.xml
@@ -132,8 +132,8 @@
       <artifactId>commons-lang</artifactId>
     </dependency>
     <dependency>
-      <groupId>com.opensymphony</groupId>
-      <artifactId>webwork</artifactId>
+      <groupId>org.apache.struts</groupId>
+      <artifactId>struts2-core</artifactId>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus.registry</groupId>
@@ -158,17 +158,17 @@
     <!-- Plexus Security Dependencies -->
     <dependency>
       <groupId>org.codehaus.redback</groupId>
-      <artifactId>redback-xwork-content</artifactId>
+      <artifactId>redback-struts2-content</artifactId>
       <type>war</type>
       <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>org.codehaus.redback</groupId>
-      <artifactId>redback-xwork-integration</artifactId>
+      <artifactId>redback-struts2-integration</artifactId>
     </dependency>
     <dependency>
       <groupId>org.codehaus.redback</groupId>
-      <artifactId>redback-taglib</artifactId>
+      <artifactId>redback-struts2-taglib</artifactId>
     </dependency>
     <!-- Other dependencies -->
     <dependency>
@@ -176,6 +176,11 @@
       <artifactId>archiva-webdav</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.struts</groupId>
+      <artifactId>struts2-spring-plugin</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
     </dependency>
@@ -296,8 +301,6 @@
                 <!-- Directory created by jetty:run -->
                 <include>WEB-INF/temp</include>
                 <!-- Directory created by jetty:run -->
-                <include>WEB-INF/jasperreports</include>
-                <!-- Directory created by jasperreports-maven-plugin -->
               </includes>
             </fileset>
           </filesets>
@@ -327,12 +330,16 @@
       </plugin>
       <plugin>
         <groupId>org.mortbay.jetty</groupId>
-        <artifactId>maven-jetty-plugin</artifactId>
-        <version>6.1.1</version>
+        <artifactId>jetty-maven-plugin</artifactId>
+        <version>7.0.0pre3</version>
         <configuration>
           <scanIntervalSeconds>10</scanIntervalSeconds>
           <contextPath>/</contextPath>
           <jettyEnvXml>src/jetty-env.xml</jettyEnvXml>
+          <webAppConfig>
+            <contextPath>/</contextPath>
+            <jettyEnvXmlFile>src/jetty-env.xml</jettyEnvXmlFile>
+          </webAppConfig>
           <connectors>
             <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
               <port>9091</port>
@@ -416,7 +423,7 @@
         <configuration>
           <roleDefaults>
             <roleDefault>
-              <role>com.opensymphony.xwork.Action</role>
+              <role>com.opensymphony.xwork2.Action</role>
               <instantiation-strategy>per-lookup</instantiation-strategy>
             </roleDefault>
           </roleDefaults>
@@ -486,57 +493,5 @@
         </plugins>
       </build>
     </profile>
-    <profile>
-      <!--
-        Inclusion of this profile brings in Jasper, which is not distributed by default due to ASF licensing policy
-        regarding LGPL dependencies. A basic report is used instead.
-
-        Note: in the future, it may be better to use the jasperreports plugin at all times (so the compiled report is
-        included), so that we just require that the JAR be on the classpath to activate it. We haven't taken this step
-        here because the jasperreports plugin is not yet released.
-
-        See also: MRM-447
-      -->
-      <id>jasper</id>
-      <dependencies>
-        <dependency>
-          <groupId>jasperreports</groupId>
-          <artifactId>jasperreports</artifactId>
-          <version>1.2.0</version>
-        </dependency>
-      </dependencies>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>jasperreports-maven-plugin</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <executions>
-              <execution>
-                <phase>compile</phase>
-                <goals>
-                  <goal>compile-reports</goal>
-                </goals>
-              </execution>
-            </executions>
-            <configuration>
-              <targetDirectory>src/main/webapp/WEB-INF/jasperreports</targetDirectory>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-      <pluginRepositories>
-        <pluginRepository>
-          <id>Codehaus Snapshots</id>
-          <url>http://snapshots.repository.codehaus.org/</url>
-          <snapshots>
-            <enabled>true</enabled>
-          </snapshots>
-          <releases>
-            <enabled>false</enabled>
-          </releases>
-        </pluginRepository>
-      </pluginRepositories>
-    </profile>
   </profiles>
 </project>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
index 92b4c8c..df12445 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
@@ -22,14 +22,13 @@
 import java.util.Collections;
 import java.util.List;
 
-import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork2.ActionContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.database.browsing.BrowsingResults;
 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
 import org.apache.maven.archiva.security.*;
 import org.apache.maven.archiva.security.ArchivaXworkUser;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 /**
  * Browse the repository.
@@ -37,7 +36,7 @@
  * @todo cache browsing results.
  * @todo implement repository selectors (all or specific repository)
  * @todo implement security around browse (based on repository id at first)
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="browseAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="browseAction"
  */
 public class BrowseAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java
new file mode 100644
index 0000000..d68b6be
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.web.action;

+

+/*

+ * 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.

+ */

+

+import com.opensymphony.xwork2.ActionSupport;

+import java.util.Map;

+import org.apache.struts2.interceptor.SessionAware;

+import org.codehaus.plexus.logging.LogEnabled;

+import org.codehaus.plexus.logging.Logger;

+

+/**

+ * LogEnabled and SessionAware ActionSupport

+ */

+public abstract class PlexusActionSupport

+    extends ActionSupport

+    implements LogEnabled, SessionAware

+{

+    protected Map session;

+

+    private Logger logger;

+

+    public void setSession( Map map )

+    {

+        //noinspection AssignmentToCollectionOrArrayFieldFromParameter

+        this.session = map;

+    }

+

+    public void enableLogging( Logger logger )

+    {

+        this.logger = logger;

+    }

+

+    protected Logger getLogger()

+    {

+        return logger;

+    }

+}

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
index 35e770b..c7b21e5 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
@@ -42,15 +42,14 @@
 import org.apache.maven.archiva.security.ArchivaXworkUser;
 import org.apache.maven.archiva.security.PrincipalNotFoundException;
 import org.apache.maven.archiva.security.UserRepositories;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import com.opensymphony.xwork.ActionContext;
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.Preparable;
 
 /**
  * Search all indexed fields by the given criteria.
  *
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="searchAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="searchAction"
  */
 public class SearchAction
     extends PlexusActionSupport
@@ -307,8 +306,7 @@
 
         return RESULTS;
     }
-
-    @Override
+    
     public String doInput()
     {
         return INPUT;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
index a402515..56fd71a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
@@ -32,17 +32,16 @@
 import org.apache.maven.archiva.security.PrincipalNotFoundException;
 import org.apache.maven.archiva.security.UserRepositories;
 import org.apache.maven.archiva.security.ArchivaXworkUser;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import com.opensymphony.xwork.ActionContext;
-import com.opensymphony.xwork.Validateable;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.Validateable;
 
 /**
  * Browse the repository. 
  * 
  * TODO change name to ShowVersionedAction to conform to terminology.
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="showArtifactAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="showArtifactAction"
  */
 public class ShowArtifactAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
index cb8bcfe..c9a15e2 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
@@ -61,12 +61,11 @@
 import org.apache.maven.archiva.security.PrincipalNotFoundException;
 import org.apache.maven.archiva.security.UserRepositories;
 import org.apache.maven.archiva.security.ArchivaXworkUser;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import com.opensymphony.webwork.ServletActionContext;
-import com.opensymphony.xwork.ActionContext;
-import com.opensymphony.xwork.Preparable;
-import com.opensymphony.xwork.Validateable;
+import org.apache.struts2.ServletActionContext;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.Preparable;
+import com.opensymphony.xwork2.Validateable;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang.StringUtils;
 
@@ -76,7 +75,7 @@
  * 
  * @author <a href="mailto:wsmoak@apache.org">Wendy Smoak</a>
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="uploadAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="uploadAction"
  */
 public class UploadAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java
index fb0db84..4d73cd6 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java
@@ -27,17 +27,17 @@
 import org.apache.maven.archiva.scheduled.tasks.DatabaseTask;
 import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 /**
  * Configures the application.
  *
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="schedulerAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="schedulerAction"
  */
 public class SchedulerAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java
index f8d6bf7..d9877ac 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java
@@ -22,9 +22,9 @@
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.OrganisationInformation;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 
 /**
  * AbstractAppearanceAction 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganisationInfoAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganisationInfoAction.java
index 1304b50..c598fef 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganisationInfoAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganisationInfoAction.java
@@ -19,22 +19,22 @@
  * under the License.
  */
 
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
 
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.maven.archiva.configuration.OrganisationInformation;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
 
 /**
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @version $Id: ConfigurationAction.java 480950 2006-11-30 14:58:35Z evenisse $
  * 
- * @plexus.component role="com.opensymphony.xwork.Action"
+ * @plexus.component role="com.opensymphony.xwork2.Action"
  *                   role-hint="editOrganisationInfo"
  */
 public class EditOrganisationInfoAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/OrganisationInfoAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/OrganisationInfoAction.java
index bcacf1e..8f61134 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/OrganisationInfoAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/OrganisationInfoAction.java
@@ -22,7 +22,7 @@
 /**
  * Stores the organisation information for displaying on the page.
  *
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="organisationInfo"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="organisationInfo"
  */
 public class OrganisationInfoAction
     extends AbstractAppearanceAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
index b7f2e60..c0a5a79 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
@@ -28,12 +28,12 @@
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.functors.ProxyConnectorSelectionPredicate;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.util.List;
 import java.util.Map;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
index 1318f57..b25e2b3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.policies.DownloadErrorPolicy;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
index 84c158c..233a446 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
@@ -28,7 +28,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="addProxyConnectorAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="addProxyConnectorAction"
  */
 public class AddProxyConnectorAction
     extends AbstractProxyConnectorFormAction
@@ -40,6 +40,7 @@
         connector = new ProxyConnectorConfiguration();
     }
     
+    @Override
     public String input()
     {
         return INPUT;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorAction.java
index 2de3ee9..3fabead 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorAction.java
@@ -27,7 +27,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="deleteProxyConnectorAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="deleteProxyConnectorAction"
  */
 public class DeleteProxyConnectorAction
     extends AbstractProxyConnectorAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java
index 5ae3a4d..1d109ef 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java
@@ -24,7 +24,7 @@
 /**
  * DisableProxyConnectorAction 
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="disableProxyConnectorAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="disableProxyConnectorAction"
  */
 public class DisableProxyConnectorAction extends AbstractProxyConnectorAction
 {
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorAction.java
index 8b050e9..62028eb 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorAction.java
@@ -28,7 +28,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="editProxyConnectorAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="editProxyConnectorAction"
  */
 public class EditProxyConnectorAction
     extends AbstractProxyConnectorFormAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java
index 9a46d59..eb575b8 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java
@@ -24,7 +24,7 @@
 /**
  * EnableProxyConnectorAction 
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="enableProxyConnectorAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="enableProxyConnectorAction"
  */
 public class EnableProxyConnectorAction extends AbstractProxyConnectorAction
 {
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java
index 3cfb0ec..7666315 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.maven.archiva.configuration.AbstractRepositoryConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -35,7 +35,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="proxyConnectorsAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="proxyConnectorsAction"
  */
 public class ProxyConnectorsAction
     extends AbstractProxyConnectorAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsAction.java
index 75b0f45..9d322ed 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsAction.java
@@ -30,7 +30,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="sortProxyConnectorsAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="sortProxyConnectorsAction"
  */
 public class SortProxyConnectorsAction
     extends AbstractProxyConnectorAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/database/DatabaseAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/database/DatabaseAction.java
index 277aefe..34623ff 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/database/DatabaseAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/database/DatabaseAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -28,12 +28,12 @@
 import org.apache.maven.archiva.database.updater.DatabaseConsumers;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.apache.maven.archiva.web.action.admin.scanning.AdminRepositoryConsumerComparator;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.util.Collections;
 import java.util.List;
@@ -43,7 +43,7 @@
  *
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="databaseAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="databaseAction"
  */
 public class DatabaseAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/AddLegacyArtifactPathAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/AddLegacyArtifactPathAction.java
index fa7f226..b734838 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/AddLegacyArtifactPathAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/AddLegacyArtifactPathAction.java
@@ -26,16 +26,15 @@
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
 import org.codehaus.plexus.registry.RegistryException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import com.opensymphony.webwork.components.ActionError;
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 
 /**
  * Add a LegacyArtifactPath to archiva configuration
  *
  * @since 1.1
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="addLegacyArtifactPathAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="addLegacyArtifactPathAction"
  */
 public class AddLegacyArtifactPathAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/DeleteLegacyArtifactPathAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/DeleteLegacyArtifactPathAction.java
index 0a0f6a0..5963cbc 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/DeleteLegacyArtifactPathAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/DeleteLegacyArtifactPathAction.java
@@ -25,15 +25,15 @@
 import org.apache.maven.archiva.configuration.Configuration;

 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;

 import org.apache.maven.archiva.configuration.LegacyArtifactPath;

+import org.apache.maven.archiva.web.action.PlexusActionSupport;

 import org.codehaus.plexus.registry.RegistryException;

-import org.codehaus.plexus.xwork.action.PlexusActionSupport;

 

 /**

  * Delete a LegacyArtifactPath to archiva configuration

  *

  *

  * @since 1.1

- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="deleteLegacyArtifactPathAction"

+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="deleteLegacyArtifactPathAction"

  */

 public class DeleteLegacyArtifactPathAction

     extends PlexusActionSupport

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/LegacyArtifactPathAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/LegacyArtifactPathAction.java
index 7efa73b..f2378d6 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/LegacyArtifactPathAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/legacy/LegacyArtifactPathAction.java
@@ -30,19 +30,19 @@
 import org.apache.maven.archiva.security.ArchivaRoleConstants;

 import org.apache.maven.archiva.web.util.ContextUtils;

 import org.codehaus.plexus.redback.rbac.Resource;

-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;

-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;

-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;

-import org.codehaus.plexus.xwork.action.PlexusActionSupport;

+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;

+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;

+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;

 

-import com.opensymphony.webwork.interceptor.ServletRequestAware;

-import com.opensymphony.xwork.Preparable;

+import org.apache.struts2.interceptor.ServletRequestAware;

+import com.opensymphony.xwork2.Preparable;

+import org.apache.maven.archiva.web.action.PlexusActionSupport;

 

 /**

  * Shows the LegacyArtifactPath Tab for the administrator.

  *

  * @since 1.1

- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="legacyArtifactPathAction"

+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="legacyArtifactPathAction"

  */

 public class LegacyArtifactPathAction

     extends PlexusActionSupport

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/ConfigureNetworkProxyAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/ConfigureNetworkProxyAction.java
index 4acc3ae..e2048c3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/ConfigureNetworkProxyAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/ConfigureNetworkProxyAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.functors.NotPredicate;
 import org.apache.commons.lang.StringUtils;
@@ -29,19 +29,19 @@
 import org.apache.maven.archiva.configuration.NetworkProxyConfiguration;
 import org.apache.maven.archiva.configuration.functors.NetworkProxySelectionPredicate;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 /**
  * ConfigureNetworkProxyAction
  *
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="configureNetworkProxyAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="configureNetworkProxyAction"
  */
 public class ConfigureNetworkProxyAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/NetworkProxiesAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/NetworkProxiesAction.java
index 467b3e4..a75a7b8 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/NetworkProxiesAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/networkproxies/NetworkProxiesAction.java
@@ -19,15 +19,15 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 
 import java.util.List;
 
@@ -37,7 +37,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="networkProxiesAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="networkProxiesAction"
  */
 public class NetworkProxiesAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java
index a7cd0d7..48430c7 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java
@@ -25,14 +25,14 @@
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 
 /**
  * Abstract AdminRepositories Action base.
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java
index 919bce0..3190a06 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java
@@ -19,8 +19,8 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
-import com.opensymphony.xwork.Validateable;
+import com.opensymphony.xwork2.Preparable;
+import com.opensymphony.xwork2.Validateable;
 
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -35,7 +35,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="addManagedRepositoryAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="addManagedRepositoryAction"
  */
 public class AddManagedRepositoryAction
     extends AbstractManagedRepositoriesAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java
index 80d6758..d4df229 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java
@@ -19,8 +19,8 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
-import com.opensymphony.xwork.Validateable;
+import com.opensymphony.xwork2.Preparable;
+import com.opensymphony.xwork2.Validateable;
 
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
@@ -34,7 +34,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="addRemoteRepositoryAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="addRemoteRepositoryAction"
  */
 public class AddRemoteRepositoryAction
     extends AbstractRemoteRepositoriesAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java
index 79b5c8d..3bb8400 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -48,7 +48,7 @@
  * 
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="deleteManagedRepositoryAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="deleteManagedRepositoryAction"
  */
 public class DeleteManagedRepositoryAction
     extends AbstractManagedRepositoriesAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java
index c63996b..4b3d95a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -34,7 +34,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="deleteRemoteRepositoryAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="deleteRemoteRepositoryAction"
  */
 public class DeleteRemoteRepositoryAction
     extends AbstractRemoteRepositoriesAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java
index 653a293..c468367 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -30,7 +30,7 @@
  * 
  * @author
  * @version
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="deleteRepositoryGroupAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="deleteRepositoryGroupAction"
  */
 public class DeleteRepositoryGroupAction 
     extends AbstractRepositoriesAdminAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
index 86817ba..52c85f9 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
@@ -19,8 +19,8 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
-import com.opensymphony.xwork.Validateable;
+import com.opensymphony.xwork2.Preparable;
+import com.opensymphony.xwork2.Validateable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -37,7 +37,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="editManagedRepositoryAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="editManagedRepositoryAction"
  */
 public class EditManagedRepositoryAction
     extends AbstractManagedRepositoriesAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java
index abcb8d7..148edc1 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -34,7 +34,7 @@
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
  * 
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="editRemoteRepositoryAction" 
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="editRemoteRepositoryAction" 
  */
 public class EditRemoteRepositoryAction
     extends AbstractRemoteRepositoriesAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java
index 3dda6d7..20d7d54 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java
@@ -19,8 +19,8 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.interceptor.ServletRequestAware;
-import com.opensymphony.xwork.Preparable;
+import org.apache.struts2.interceptor.ServletRequestAware;
+import com.opensymphony.xwork2.Preparable;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -31,11 +31,11 @@
 import org.apache.maven.archiva.model.RepositoryContentStatistics;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.apache.maven.archiva.web.util.ContextUtils;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
@@ -49,7 +49,7 @@
  *
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="repositoriesAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="repositoriesAction"
  */
 public class RepositoriesAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java
index d1109d1..ba16ef6 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java
@@ -26,8 +26,8 @@
 
 import javax.servlet.http.HttpServletRequest;
 
-import com.opensymphony.webwork.interceptor.ServletRequestAware;
-import com.opensymphony.xwork.Preparable;
+import org.apache.struts2.interceptor.ServletRequestAware;
+import com.opensymphony.xwork2.Preparable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -40,7 +40,7 @@
  * 
  * @author
  * @version
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="repositoryGroupsAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="repositoryGroupsAction"
  */
 public class RepositoryGroupsAction
     extends AbstractRepositoriesAdminAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesAction.java
index 4ac5c3d..6c58f70 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesAction.java
@@ -30,7 +30,7 @@
  * 
  * @author
  * @version
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="sortRepositoriesAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="sortRepositoriesAction"
  */
 public class SortRepositoriesAction 
     extends AbstractRepositoriesAdminAction
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java
index 0fb8240..b79ffb7 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java
@@ -19,8 +19,8 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Preparable;
-import com.opensymphony.xwork.Validateable;
+import com.opensymphony.xwork2.Preparable;
+import com.opensymphony.xwork2.Validateable;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -32,12 +32,13 @@
 import org.apache.maven.archiva.configuration.functors.FiletypeToMapClosure;
 import org.apache.maven.archiva.repository.scanner.RepositoryContentConsumers;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
+
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -49,7 +50,7 @@
  *
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="repositoryScanningAction"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="repositoryScanningAction"
  */
 public class RepositoryScanningAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java
index 0fcb623..e330041 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java
@@ -19,9 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.interceptor.ServletRequestAware;
-import com.opensymphony.xwork.Preparable;
-
+import com.opensymphony.xwork2.Preparable;
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -45,10 +43,6 @@
 import org.apache.maven.archiva.reporting.RepositoryStatisticsReportGenerator;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,9 +56,14 @@
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
+import org.apache.maven.archiva.web.action.PlexusActionSupport;
+import org.apache.struts2.interceptor.ServletRequestAware;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureAction;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 
 /**
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="generateReport"
+ * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="generateReport"
  */
 public class GenerateReportAction
     extends PlexusActionSupport
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java
index 0ab4299..fb28d56 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java
@@ -19,9 +19,9 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.ServletActionContext;
-import com.opensymphony.xwork.ActionInvocation;
-import com.opensymphony.xwork.interceptor.Interceptor;
+import org.apache.struts2.ServletActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.interceptor.Interceptor;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 
 import javax.servlet.ServletContext;
@@ -30,7 +30,7 @@
  * An interceptor that makes the configuration bits available, both to the application and the webapp
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @plexus.component role="com.opensymphony.xwork.interceptor.Interceptor"
+ * @plexus.component role="com.opensymphony.xwork2.interceptor.Interceptor"
  * role-hint="configurationInterceptor"
  */
 public class ConfigurationInterceptor
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
index 37e657b..8de8438 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
@@ -19,8 +19,9 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.dispatcher.mapper.ActionMapping;
-import com.opensymphony.webwork.dispatcher.mapper.DefaultActionMapper;
+import com.opensymphony.xwork2.config.ConfigurationManager;
+import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import org.apache.struts2.dispatcher.mapper.DefaultActionMapper;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -69,7 +70,7 @@
 
     private static final String PARAM_VERSION = "version";
 
-    public ActionMapping getMapping( HttpServletRequest httpServletRequest )
+    public ActionMapping getMapping( HttpServletRequest httpServletRequest, ConfigurationManager manager )
     {
         String path = httpServletRequest.getServletPath();
 
@@ -141,9 +142,10 @@
             }
         }
 
-        return super.getMapping( httpServletRequest );
+        return super.getMapping( httpServletRequest, manager );
     }
 
+    @Override
     public String getUriFromActionMapping( ActionMapping actionMapping )
     {
         Map params = actionMapping.getParams();
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
index 8957052..d047eaf 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
@@ -52,7 +52,7 @@
 import org.codehaus.plexus.redback.policy.MustChangePasswordException;
 import org.codehaus.plexus.redback.system.SecuritySession;
 import org.codehaus.plexus.redback.users.UserNotFoundException;
-import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
+import org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator;
 import org.codehaus.plexus.spring.PlexusToSpringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippetTag.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippetTag.java
index 0a18eff..61afc3f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippetTag.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippetTag.java
@@ -51,12 +51,14 @@
     
     public static final String TOGGLE = "toggle";
     
+    @Override
     public void release()
     {
         object = null;
         super.release();
     }
 
+    @Override
     public int doEndTag()
         throws JspException
     {
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java
index 7f6fe60..ff3b86a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java
@@ -19,10 +19,10 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.WebWorkException;
-import com.opensymphony.webwork.components.Component;
-import com.opensymphony.xwork.util.OgnlValueStack;
+import org.apache.struts2.StrutsException;
+import org.apache.struts2.components.Component;
 
+import com.opensymphony.xwork2.util.ValueStack;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.database.ArchivaDAO;
@@ -51,7 +51,7 @@
  *
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
- * @plexus.component role="com.opensymphony.webwork.components.Component" role-hint="download-artifact"
+ * @plexus.component role="org.apache.struts2.components.Component" role-hint="download-artifact"
  * instantiation-strategy="per-lookup"
  */
 public class DownloadArtifact
@@ -82,7 +82,7 @@
 
     private DecimalFormat decimalFormat;
 
-    public DownloadArtifact( OgnlValueStack stack, PageContext pageContext )
+    public DownloadArtifact( ValueStack stack, PageContext pageContext )
     {
         super( stack );
         decimalFormat = new DecimalFormat( "#,#00" );
@@ -100,6 +100,7 @@
         }
     }
 
+    @Override
     public boolean end( Writer writer, String body )
     {
         StringBuffer sb = new StringBuffer();
@@ -109,7 +110,7 @@
             Constraint constraint = new ArtifactsRelatedConstraint( groupId, artifactId, version );
             List<ArchivaArtifact> relatedArtifacts = dao.getArtifactDAO().queryArtifacts( constraint );
 
-            if ( relatedArtifacts != null )
+            if ( relatedArtifacts != null && relatedArtifacts.size() > 0 )
             {
                 String repoId = ( (ArchivaArtifact) relatedArtifacts.get( 0 ) ).getModel().getRepositoryId();
                 ManagedRepositoryContent repo = repositoryFactory.getManagedRepositoryContent( repoId );
@@ -151,7 +152,7 @@
         }
         catch ( IOException e )
         {
-            throw new WebWorkException( "IOError: " + e.getMessage(), e );
+            throw new StrutsException( "IOError: " + e.getMessage(), e );
         }
 
         return super.end( writer, body );
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifactTag.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifactTag.java
index 21aaa98..12dd485 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifactTag.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifactTag.java
@@ -19,10 +19,15 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.views.jsp.TagUtils;
+import com.opensymphony.xwork2.util.ValueStack;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts2.components.Component;
+import org.apache.struts2.views.jsp.TagUtils;
 
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.tagext.TagSupport;
+import org.apache.struts2.views.jsp.ComponentTagSupport;
 
 /**
  * DownloadArtifactTag 
@@ -31,7 +36,7 @@
  * @version $Id$
  */
 public class DownloadArtifactTag
-    extends TagSupport
+    extends ComponentTagSupport
 {
     private String groupId_; // stores EL-based groupId property
 
@@ -49,19 +54,23 @@
 
     private boolean mini; // stores the evaluated mini object.
 
+    @Override
+    public Component getBean(ValueStack valueStack, HttpServletRequest request, HttpServletResponse response) {
+        return new DownloadArtifact(valueStack, pageContext);
+    }
+
+    @Override
     public int doEndTag()
         throws JspException
     {
         evaluateExpressions();
 
-        DownloadArtifact download = new DownloadArtifact( TagUtils.getStack( pageContext ), pageContext );
+        DownloadArtifact download = (DownloadArtifact)component;
         download.setGroupId( groupId );
         download.setArtifactId( artifactId );
         download.setVersion( version );
         download.setMini( mini );
 
-        download.end( pageContext.getOut(), "" );
-
         return super.doEndTag();
     }
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLink.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLink.java
index 3787148..d92bb7f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLink.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLink.java
@@ -19,10 +19,10 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.WebWorkException;
-import com.opensymphony.webwork.components.Component;
-import com.opensymphony.xwork.util.OgnlValueStack;
+import org.apache.struts2.StrutsException;
+import org.apache.struts2.components.Component;
 
+import com.opensymphony.xwork2.util.ValueStack;
 import java.io.IOException;
 import java.io.Writer;
 import java.util.StringTokenizer;
@@ -57,13 +57,14 @@
 
     private boolean includeTop = false;
 
-    public GroupIdLink( OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res )
+    public GroupIdLink( ValueStack stack, HttpServletRequest req, HttpServletResponse res )
     {
         super( stack );
         this.req = req;
         this.res = res;
     }
 
+    @Override
     public boolean end( Writer writer, String body )
     {
         StringBuffer sb = new StringBuffer();
@@ -105,7 +106,7 @@
         }
         catch ( IOException e )
         {
-            throw new WebWorkException( "IOError: " + e.getMessage(), e );
+            throw new StrutsException( "IOError: " + e.getMessage(), e );
         }
 
         return super.end( writer, body );
@@ -113,16 +114,14 @@
 
     private String determineBrowseActionUrl()
     {
-        return determineActionURL( "browse", NAMESPACE, method, req, res, parameters, req.getScheme(), includeContext,
-                                   encode, true );
+        return determineActionURL( "browse", NAMESPACE, method, req, res, parameters, req.getScheme(), includeContext, encode, false, false );
     }
 
     private String determineBrowseGroupActionUrl( String gid )
     {
         parameters.put( "groupId", gid );
 
-        return determineActionURL( ACTION, NAMESPACE, method, req, res, parameters, req.getScheme(), includeContext,
-                                   encode, true );
+        return determineActionURL( ACTION, NAMESPACE, method, req, res, parameters, req.getScheme(), includeContext, encode, false, false );
     }
 
     public String getGroupId()
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLinkTag.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLinkTag.java
index ec42b8b..b76ce44 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLinkTag.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/GroupIdLinkTag.java
@@ -19,12 +19,13 @@
  * under the License.
  */
 
-import com.opensymphony.webwork.views.jsp.TagUtils;
+import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.components.Component;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
+import org.apache.struts2.views.jsp.ComponentTagSupport;
 
 /**
  * GroupIdLink 
@@ -33,7 +34,7 @@
  * @version $Id$
  */
 public class GroupIdLinkTag
-    extends TagSupport
+    extends ComponentTagSupport
 {
     private String var_; // stores EL-based property
 
@@ -41,6 +42,12 @@
 
     private boolean includeTop = false;
 
+    @Override
+    public Component getBean(ValueStack valueStack, HttpServletRequest request, HttpServletResponse response) {
+        return new GroupIdLink( valueStack, request, response );
+    }
+
+    @Override
     public void release()
     {
         var_ = null;
@@ -50,18 +57,16 @@
         super.release();
     }
 
+    @Override
     public int doEndTag()
         throws JspException
     {
         evaluateExpressions();
+        
+        GroupIdLink groupIdLink = (GroupIdLink)component;
 
-        GroupIdLink gidlink = new GroupIdLink( TagUtils.getStack( pageContext ), (HttpServletRequest) pageContext
-            .getRequest(), (HttpServletResponse) pageContext.getResponse() );
-
-        gidlink.setGroupId( var );
-        gidlink.setIncludeTop( includeTop );
-
-        gidlink.end( pageContext.getOut(), "" );
+        groupIdLink.setGroupId( var );
+        groupIdLink.setIncludeTop( includeTop );
 
         return super.doEndTag();
     }
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/CronExpressionValidator.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/CronExpressionValidator.java
index 86464e5..f8cce8d 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/CronExpressionValidator.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/CronExpressionValidator.java
@@ -19,9 +19,9 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.validator.ValidationException;
-import com.opensymphony.xwork.validator.ValidatorContext;
-import com.opensymphony.xwork.validator.validators.FieldValidatorSupport;
+import com.opensymphony.xwork2.validator.ValidationException;
+import com.opensymphony.xwork2.validator.ValidatorContext;
+import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
 
 /**
  * Reused from Continuum crontab validator
@@ -44,4 +44,4 @@
             return;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/IntervalValidator.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/IntervalValidator.java
index 628caa8..0c08e56 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/IntervalValidator.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/IntervalValidator.java
@@ -19,9 +19,9 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.validator.ValidationException;
-import com.opensymphony.xwork.validator.ValidatorContext;
-import com.opensymphony.xwork.validator.validators.ValidatorSupport;
+import com.opensymphony.xwork2.validator.ValidationException;
+import com.opensymphony.xwork2.validator.ValidatorContext;
+import com.opensymphony.xwork2.validator.validators.ValidatorSupport;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/SyncedRepositoryValidator.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/SyncedRepositoryValidator.java
index d97a9e2..49ebc6e 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/SyncedRepositoryValidator.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/validator/SyncedRepositoryValidator.java
@@ -19,9 +19,9 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.validator.ValidationException;
-import com.opensymphony.xwork.validator.ValidatorContext;
-import com.opensymphony.xwork.validator.validators.ValidatorSupport;
+import com.opensymphony.xwork2.validator.ValidationException;
+import com.opensymphony.xwork2.validator.ValidatorContext;
+import com.opensymphony.xwork2.validator.validators.ValidatorSupport;
 
 /**
  * Validator for synced repository form. The values to be validated depends on the
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
index 22ad7d1..bfa05c1 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
@@ -202,7 +202,7 @@
     <component>
       <role>org.codehaus.plexus.redback.system.check.EnvironmentCheck</role>
       <role-hint>locked-admin-check</role-hint>
-      <implementation>org.codehaus.plexus.redback.xwork.checks.security.LockedAdminEnvironmentCheck</implementation>
+      <implementation>org.codehaus.plexus.redback.struts2.checks.security.LockedAdminEnvironmentCheck</implementation>
       <description>LockedAdminEnvironmentCheck: checks if accounts marked as system administrator are locked
         and unlocks them on startup.
       </description>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/log4j.xml b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/log4j.xml
index 19bb543..1f6339e 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/log4j.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/log4j.xml
@@ -73,12 +73,12 @@
     <appender-ref ref="rolling" />
   </logger>
 
-  <logger name="com.opensymphony.xwork">
+  <logger name="com.opensymphony.xwork2">
     <level value="info"/>
     <appender-ref ref="rolling" />
   </logger>
 
-  <logger name="com.opensymphony.webwork">
+  <logger name="org.apache.struts2">
     <level value="info"/>
     <appender-ref ref="rolling" />
   </logger>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/webwork.properties b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.properties
similarity index 72%
rename from archiva-modules/archiva-web/archiva-webapp/src/main/resources/webwork.properties
rename to archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.properties
index 1ad77fc..6f76d3f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/webwork.properties
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.properties
@@ -18,14 +18,15 @@
 #
 
 # define our own action mapper here
-webwork.mapper.class = org.apache.maven.archiva.web.mapper.RepositoryActionMapper
-webwork.objectFactory = org.codehaus.plexus.spring.WebWorkPlexusInSpringObjectFactory
-webwork.url.includeParams = none
+struts.mapper.class = org.apache.maven.archiva.web.mapper.RepositoryActionMapper
+struts.objectFactory =  org.codehaus.plexus.spring.Struts2PlexusInSpringObjectFactory
+struts.url.includeParams = none
 
-#webwork.devMode = true
-webwork.multipart.parser=jakarta
+struts.devMode = true
+struts.configuration.xml.reload=true
+struts.multipart.parser=jakarta
 
 # TODO: package up a theme and share with Continuum. Should contain everything from xhtml, and set templateDir to WEB-INF/themes
 
 # Localization
-webwork.custom.i18n.resources=org.codehaus.plexus.redback.xwork.default,org.apache.maven.archiva.redback.custom
+struts.custom.i18n.resources=org.codehaus.plexus.redback.xwork.default,org.apache.maven.archiva.redback.custom
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/xwork.xml b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
similarity index 95%
rename from archiva-modules/archiva-web/archiva-webapp/src/main/resources/xwork.xml
rename to archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
index b9580cf..8c86786 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/xwork.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
@@ -18,24 +18,21 @@
   ~ under the License.
   -->
 
-<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1//EN"
-    "http://www.opensymphony.com/xwork/xwork-1.1.dtd">
+<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
 
-<xwork>
-  <!-- TODO: better error handling for exceptions needed [MRM-490] -->
-  <include file="webwork-default.xml"/>
-
+<struts>
   <!-- Include plexus-security xwork configurations. -->
-  <include file="xwork-security.xml"/>
+  <include file="struts-security.xml"/>
 
-  <package name="base" extends="webwork-default">
+  <package name="base" extends="struts-default">
     <interceptors>
       <interceptor name="configuration" class="configurationInterceptor"/>
       <interceptor name="redbackForceAdminUser" class="redbackForceAdminUserInterceptor"/>
       <interceptor name="redbackSecureActions" class="redbackSecureActionInterceptor"/>
       <interceptor name="redbackAutoLogin" class="redbackAutoLoginInterceptor"/>
       <interceptor name="redbackPolicyEnforcement" class="redbackPolicyEnforcementInterceptor"/>
-      <interceptor name="paramFilter" class="com.opensymphony.xwork.interceptor.ParameterFilterInterceptor"/>
+      <interceptor name="paramFilter" class="com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor"/>
 
       <interceptor-stack name="configuredArchivaStack">
         <interceptor-ref name="redbackForceAdminUser"/>
@@ -220,7 +217,7 @@
 
   </package>
 
-  <package name="components" namespace="/components" extends="webwork-default">
+  <package name="components" namespace="/components" extends="struts-default">
     <default-interceptor-ref name="basicStack"/>
     <action name="companyInfo" class="organisationInfo">
       <result>/WEB-INF/jsp/components/companyLogo.jsp</result>
@@ -502,22 +499,10 @@
     </action>
 
     <action name="generateReport" class="generateReport">
-      <result name="jasper" type="jasper">
-        <param name="location">/WEB-INF/jasperreports/report.jasper</param>
-        <param name="dataSource">reports</param>
-        <param name="format">HTML</param>
-      </result>
       <result name="input">/WEB-INF/jsp/reports/pickReport.jsp</result>
       <result name="blank">/WEB-INF/jsp/reports/blankReport.jsp</result>
       <result>/WEB-INF/jsp/reports/basicReport.jsp</result>
     </action>
-    
-    <action name="generateStatisticsReport" class="generateReport" method="generateStatistics">
-      <result name="input">/WEB-INF/jsp/reports/pickReport.jsp</result>
-      <result name="blank">/WEB-INF/jsp/reports/blankReport.jsp</result>
-      <result>/WEB-INF/jsp/reports/statisticsReport.jsp</result>
-    </action>
-    
   </package>
-</xwork>
+</struts>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/validators.xml b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/validators.xml
index c05423e..d126e2a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/resources/validators.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/resources/validators.xml
@@ -1,4 +1,9 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE validators PUBLIC
+        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
+        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
+
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one
   ~ or more contributor license agreements.  See the NOTICE file
@@ -19,19 +24,19 @@
   -->
 
 <validators>
-  <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
-  <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
-  <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
-  <validator name="double" class="com.opensymphony.xwork.validator.validators.DoubleRangeFieldValidator"/>
-  <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
-  <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
-  <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
-  <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
-  <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
-  <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
-  <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
-  <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
-  <validator name="regex" class="com.opensymphony.xwork.validator.validators.RegexFieldValidator"/>
+  <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
+  <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
+  <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
+  <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
+  <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
+  <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
+  <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
+  <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
+  <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
+  <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
+  <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
+  <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
+  <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
   <validator name="interval" class="org.apache.maven.archiva.web.validator.IntervalValidator"/>
   <validator name="syncedrepo" class="org.apache.maven.archiva.web.validator.SyncedRepositoryValidator"/>
   <validator name="crontab" class="org.apache.maven.archiva.web.validator.CronExpressionValidator"/>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/accessToNoRepos.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/accessToNoRepos.jsp
index 5ed0473..2b2e6a6 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/accessToNoRepos.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/accessToNoRepos.jsp
@@ -17,13 +17,13 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>You have access to no repositories</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addLegacyArtifactPath.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addLegacyArtifactPath.jsp
index 6c647d4..a0e30b1 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addLegacyArtifactPath.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addLegacyArtifactPath.jsp
@@ -17,12 +17,12 @@
   ~ under the License.

   --%>

 

-<%@ taglib prefix="ww" uri="/webwork" %>

+<%@ taglib prefix="s" uri="/struts-tags" %>

 

 <html>

 <head>

   <title>Admin: Add Legacy Artifact Path</title>

-  <ww:head/>

+  <s:head/>

 </head>

 

 <body>

@@ -65,17 +65,17 @@
   }

   </script>

 

-  <ww:actionmessage/>

-  <ww:actionerror/>

-  <ww:form method="post" action="addLegacyArtifactPath!commit" namespace="/admin" validate="true">

-    <ww:textfield name="legacyArtifactPath.path" label="Path" size="50" required="true" onchange="parse( this.value )"/>

-    <ww:textfield name="groupId" label="GroupId" size="20" required="true"/>

-    <ww:textfield name="artifactId" label="ArtifactId" size="20" required="true"/>

-    <ww:textfield name="version" label="Version" size="20" required="true"/>

-    <ww:textfield name="classifier" label="Classifier" size="20" required="false"/>

-    <ww:textfield name="type" label="Type" size="20" required="true"/>

-    <ww:submit value="Add Legacy Artifact Path"/>

-  </ww:form>

+  <s:actionmessage/>

+  <s:actionerror/>

+  <s:form method="post" action="addLegacyArtifactPath!commit" namespace="/admin" validate="true">

+    <s:textfield name="legacyArtifactPath.path" label="Path" size="50" required="true" onchange="parse( this.value )"/>

+    <s:textfield name="groupId" label="GroupId" size="20" required="true"/>

+    <s:textfield name="artifactId" label="ArtifactId" size="20" required="true"/>

+    <s:textfield name="version" label="Version" size="20" required="true"/>

+    <s:textfield name="classifier" label="Classifier" size="20" required="false"/>

+    <s:textfield name="type" label="Type" size="20" required="true"/>

+    <s:submit value="Add Legacy Artifact Path"/>

+  </s:form>

 

   <script type="text/javascript">

     var ref = document.getElementById("addLegacyArtifactPath_legacyArtifactPath_artifact").value;

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp
index 314f9bc..ee45f8b 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Add Proxy Connector</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -31,13 +31,13 @@
 
 <div id="contentArea">
 
-  <ww:actionerror/>
-  <ww:actionmessage/>
+  <s:actionerror/>
+  <s:actionmessage/>
   
-  <ww:form name="saveProxyConnector" method="post" action="addProxyConnector!commit" namespace="/admin" validate="true">
+  <s:form name="saveProxyConnector" method="post" action="addProxyConnector!commit" namespace="/admin" validate="true">
     <%@ include file="/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf" %>
-    <ww:submit value="Add Proxy Connector"/>
-  </ww:form>
+    <s:submit value="Add Proxy Connector"/>
+  </s:form>
 
 </div>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRemoteRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRemoteRepository.jsp
index d1455ab..7f8e0c5 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRemoteRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRemoteRepository.jsp
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Add Remote Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -31,12 +31,12 @@
 
 <div id="contentArea">
 
-  <ww:actionmessage/>
-  <ww:form method="post" action="addRemoteRepository!commit" namespace="/admin" validate="true">
-    <ww:textfield name="repository.id" label="Identifier" size="10" required="true"/>
+  <s:actionmessage/>
+  <s:form method="post" action="addRemoteRepository!commit" namespace="/admin" validate="true">
+    <s:textfield name="repository.id" label="Identifier" size="10" required="true"/>
     <%@ include file="/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf" %>
-    <ww:submit value="Add Repository"/>
-  </ww:form>
+    <s:submit value="Add Repository"/>
+  </s:form>
 
   <script type="text/javascript">
     document.getElementById("addRemoteRepository_id").focus();
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp
index d31e092..69cf0ee 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Add Managed Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -30,13 +30,13 @@
 <h1>Admin: Add Managed Repository</h1>
 
 <div id="contentArea">
-  <ww:actionerror/>
-  <ww:actionmessage/>
-  <ww:form method="post" action="addRepository!commit" namespace="/admin" validate="true">
-    <ww:textfield name="repository.id" label="Identifier" size="10" required="true"/>
+  <s:actionerror/>
+  <s:actionmessage/>
+  <s:form method="post" action="addRepository!commit" namespace="/admin" validate="true">
+    <s:textfield name="repository.id" label="Identifier" size="10" required="true"/>
     <%@ include file="/WEB-INF/jsp/admin/include/repositoryForm.jspf" %>
-    <ww:submit value="Add Repository"/>
-  </ww:form>
+    <s:submit value="Add Repository"/>
+  </s:form>
 
   <script type="text/javascript">
     document.getElementById("addRepository_repository_id").focus();
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/appearance.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/appearance.jsp
index d2b24e8..2ca2fe8 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/appearance.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/appearance.jsp
@@ -17,26 +17,26 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>Configure Appearance</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 <h1>Appearance</h1>
 
 <div style="float: right">
-  <a href="<ww:url action='editAppearance' />">Edit</a>
+  <a href="<s:url action='editAppearance' />">Edit</a>
 </div>
 <h2>Organization Details</h2>
 
 <p>
   The logo in the top right of the screen is controlled by the following settings.
-  <a href="<ww:url action='editAppearance' />">Change your appearence</a>
+  <a href="<s:url action='editAppearance' />">Change your appearence</a>
 </p>
 
 <h3>Organization Information</h3>
@@ -60,7 +60,7 @@
         <tr>
           <th>&nbsp;</th>
           <td>
-      <img src="${organisationLogo}" title="${organisationName}" border="0" alt=""/>
+            <img src="${organisationLogo}" title="${organisationName}" border="0" alt=""/>
           </td>
         </tr>
       </table>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/confirmAddRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/confirmAddRepository.jsp
index 270b905..f2d3a2f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/confirmAddRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/confirmAddRepository.jsp
@@ -17,13 +17,13 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>Admin: Add Managed Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -103,33 +103,33 @@
     </table>
   </div>
   	
-  <ww:form method="post" action="${action}" namespace="/admin" validate="true" theme="simple">
+  <s:form method="post" action="%{action}" namespace="/admin" validate="true" theme="simple">
     <div class="buttons">      
-      <ww:hidden name="repository.id" value="${repository.id}"/>
-      <ww:hidden name="repository.name" value="${repository.name}"/>
-      <ww:hidden name="repository.location" value="${repository.location}"/>
-      <ww:hidden name="repository.indexDir" value="${repository.indexDir}"/>
-      <ww:hidden name="repository.layout" value="${repository.layout}"/>
-      <ww:hidden name="repository.refreshCronExpression" value="${repository.refreshCronExpression}"/>
-      <ww:hidden name="repository.daysOlder" value="${repository.daysOlder}"/>
-      <ww:hidden name="repository.retentionCount" value="${repository.retentionCount}"/>
-      <ww:hidden name="repository.releases" value="${repository.releases}"/>
-      <ww:hidden name="repository.snapshots" value="${repository.snapshots}"/>
-      <ww:hidden name="repository.scanned" value="${repository.scanned}"/>
-      <ww:hidden name="repository.deleteReleasedSnapshots" value="${repository.deleteReleasedSnapshots}"/>
+      <s:hidden name="repository.id" value="%{#attr.repository.id}"/>
+      <s:hidden name="repository.name" value="%{#attr.repository.name}"/>
+      <s:hidden name="repository.location" value="%{#attr.repository.location}"/>
+      <s:hidden name="repository.indexDir" value="%{#attr.repository.indexDir}"/>
+      <s:hidden name="repository.layout" value="%{#attr.repository.layout}"/>
+      <s:hidden name="repository.refreshCronExpression" value="%{#attr.repository.refreshCronExpression}"/>
+      <s:hidden name="repository.daysOlder" value="%{#attr.repository.daysOlder}"/>
+      <s:hidden name="repository.retentionCount" value="%{#attr.repository.retentionCount}"/>
+      <s:hidden name="repository.releases" value="%{#attr.repository.releases}"/>
+      <s:hidden name="repository.snapshots" value="%{#attr.repository.snapshots}"/>
+      <s:hidden name="repository.scanned" value="%{#attr.repository.scanned}"/>
+      <s:hidden name="repository.deleteReleasedSnapshots" value="%{#attr.repository.deleteReleasedSnapshots}"/>
       
       <c:choose>      
         <c:when test="${action == 'addRepository'}">
-      	  <ww:submit value="Save" method="confirmAdd"/>
+      	  <s:submit value="Save" method="confirmAdd"/>
       	</c:when>
       	<c:otherwise>
-      	  <ww:submit value="Save" method="confirmUpdate"/>
+      	  <s:submit value="Save" method="confirmUpdate"/>
       	</c:otherwise>
      </c:choose>
       
-      <ww:submit value="Cancel" method="execute"/>
+      <s:submit value="Cancel" method="execute"/>
     </div>
-  </ww:form>
+  </s:form>
   
 </body>
 </html>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp
index 6359c4e..3cabac2 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork"%>
+<%@ taglib prefix="s" uri="/struts-tags"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
@@ -26,7 +26,7 @@
 <html>
 <head>
 <title>Administration - Database</title>
-<ww:head />
+<s:head />
 </head>
 
 <body>
@@ -35,8 +35,8 @@
 
 <div id="contentArea">
 
-<ww:actionerror /> 
-<ww:actionmessage /> 
+<s:actionerror /> 
+<s:actionmessage /> 
 
 <c:url var="iconDeleteUrl" value="/images/icons/delete.gif" /> 
 <c:url var="iconCreateUrl" value="/images/icons/create.png" /> 
@@ -45,21 +45,21 @@
 
 <h2>Database - Unprocessed Artifacts Scanning</h2>
 
-  <ww:form method="post" action="database!updateSchedule" 
+  <s:form method="post" action="database!updateSchedule" 
              namespace="/admin" validate="false" theme="simple">
     <table>
-      <ww:textfield name="cron" label="Cron" size="40" theme="xhtml" />
+      <s:textfield name="cron" label="Cron" size="40" theme="xhtml" />
       <tr>
         <td colspan="2">
-          <ww:submit value="Update Cron" />
+          <s:submit value="Update Cron" />
         </td>
       </tr>
     </table>                 
-  </ww:form>
+  </s:form>
   
-  <ww:form action="updateDatabase" theme="simple">
-    <ww:submit value="Update Database Now"/>
-  </ww:form>
+  <s:form action="updateDatabase" theme="simple">
+    <s:submit value="Update Database Now"/>
+  </s:form>
 
 <h2>Database - Unprocessed Artifacts Scanning</h2>
 
@@ -71,7 +71,7 @@
   <c:otherwise>
     <%-- Display the consumers. --%>
 
-    <ww:form method="post" action="database!updateUnprocessedConsumers" 
+    <s:form method="post" action="database!updateUnprocessedConsumers" 
              namespace="/admin" validate="false" theme="simple">
     <table class="consumers">
       <tr>
@@ -107,11 +107,11 @@
       </c:forEach>
       <tr>
         <td colspan="4">
-          <ww:submit value="Update Consumers" />
+          <s:submit value="Update Consumers" />
         </td>
       </tr>
     </table>
-    </ww:form>
+    </s:form>
 
   </c:otherwise>
 </c:choose>
@@ -126,7 +126,7 @@
   <c:otherwise>
     <%-- Display the consumers. --%>
 
-    <ww:form method="post" action="database!updateCleanupConsumers" 
+    <s:form method="post" action="database!updateCleanupConsumers" 
              namespace="/admin" validate="false" theme="simple">
     <table class="consumers">
       <tr>
@@ -162,11 +162,11 @@
       </c:forEach>
       <tr>
         <td colspan="4">
-          <ww:submit value="Update Consumers" />
+          <s:submit value="Update Consumers" />
         </td>
       </tr>
     </table>
-    </ww:form>
+    </s:form>
 
   </c:otherwise>
 </c:choose>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteNetworkProxy.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteNetworkProxy.jsp
index c4feaa8..363b568 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteNetworkProxy.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteNetworkProxy.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Delete Network Proxy</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Delete Network Proxy</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -43,10 +43,10 @@
     Are you sure you want to delete network proxy <code>${proxyid}</code> ?
   </p>
 
-  <ww:form method="post" action="deleteNetworkProxy!delete" namespace="/admin" validate="true">
-    <ww:hidden name="proxyid"/>
-    <ww:submit value="Delete"/>
-  </ww:form>
+  <s:form method="post" action="deleteNetworkProxy!delete" namespace="/admin" validate="true">
+    <s:hidden name="proxyid"/>
+    <s:submit value="Delete"/>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteProxyConnector.jsp
index de6937e..9e9bab6 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteProxyConnector.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteProxyConnector.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Delete Proxy Connector</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Delete Proxy Connector</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -43,11 +43,11 @@
     Are you sure you want to delete proxy connector <code>[ ${source} , ${target} ]</code> ?
   </p>
 
-  <ww:form method="post" action="deleteProxyConnector!delete" namespace="/admin" validate="true">
-    <ww:hidden name="target"/>
-    <ww:hidden name="source"/>
-    <ww:submit value="Delete"/>
-  </ww:form>
+  <s:form method="post" action="deleteProxyConnector!delete" namespace="/admin" validate="true">
+    <s:hidden name="target"/>
+    <s:hidden name="source"/>
+    <s:submit value="Delete"/>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRemoteRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRemoteRepository.jsp
index 183da4d..98d3573 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRemoteRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRemoteRepository.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Delete Remote Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Delete Remote Repository</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -60,13 +60,13 @@
     </table>
   </div>
 
-  <ww:form method="post" action="deleteRemoteRepository" namespace="/admin" validate="true" theme="simple">
-    <ww:hidden name="repoid"/>
+  <s:form method="post" action="deleteRemoteRepository" namespace="/admin" validate="true" theme="simple">
+    <s:hidden name="repoid"/>
     <div class="buttons">
-      <ww:submit value="Confirm" method="delete"/>
-      <ww:submit value="Cancel" method="execute"/>
+      <s:submit value="Confirm" method="delete"/>
+      <s:submit value="Cancel" method="execute"/>
     </div>
-  </ww:form>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp
index 7394e16..10a7ecd 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Delete Managed Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Delete Managed Repository</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -60,14 +60,14 @@
     </table>
   </div>
 
-  <ww:form method="post" action="deleteRepository" namespace="/admin" validate="true" theme="simple">
-    <ww:hidden name="repoid"/>
+  <s:form method="post" action="deleteRepository" namespace="/admin" validate="true" theme="simple">
+    <s:hidden name="repoid"/>
     <div class="buttons">
-      <ww:submit value="Delete Configuration Only" method="deleteEntry" />
-      <ww:submit value="Delete Configuration and Contents" method="deleteContents" />
-      <ww:submit value="Cancel" method="execute"/>
+      <s:submit value="Delete Configuration Only" method="deleteEntry" />
+      <s:submit value="Delete Configuration and Contents" method="deleteContents" />
+      <s:submit value="Cancel" method="execute"/>
     </div>
-  </ww:form>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp
index fa18926..5df5058 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Delete Repository Group</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Delete Repository Group</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -52,13 +52,13 @@
     </table>
   </div>
 
-  <ww:form method="post" action="deleteRepositoryGroup" namespace="/admin" validate="true" theme="simple">
-    <ww:hidden name="repoGroupId"/>
+  <s:form method="post" action="deleteRepositoryGroup" namespace="/admin" validate="true" theme="simple">
+    <s:hidden name="repoGroupId"/>
     <div class="buttons">
-      <ww:submit value="Confirm" method="delete"/>
-      <ww:submit value="Cancel" method="execute"/>
+      <s:submit value="Confirm" method="delete"/>
+      <s:submit value="Cancel" method="execute"/>
     </div>
-  </ww:form>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp
index 0906be5..3ec6b36 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Disable Proxy Connector</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Disable Proxy Connector</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -39,11 +39,11 @@
     Are you sure you want to disable proxy connector <code>[ ${source} , ${target} ]</code> ?
   </p>
 
-  <ww:form method="post" action="disableProxyConnector!disable" namespace="/admin" validate="true">
-    <ww:hidden name="target"/>
-    <ww:hidden name="source"/>
-    <ww:submit value="Disable"/>
-  </ww:form>
+  <s:form method="post" action="disableProxyConnector!disable" namespace="/admin" validate="true">
+    <s:hidden name="target"/>
+    <s:hidden name="source"/>
+    <s:submit value="Disable"/>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editAppearance.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editAppearance.jsp
index 5f5316a..a0d6c0c 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editAppearance.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editAppearance.jsp
@@ -17,11 +17,11 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <html>
 <head>
   <title>Configure Appearance</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -33,14 +33,14 @@
   Enter the details of your organization below.
 </p>
 
-<ww:set name="editOrganisationInfo" value="editOrganisationInfo"/>
-<ww:actionmessage/>
-<ww:form method="post" action="saveAppearance" namespace="/admin" validate="true" theme="xhtml">
-    <ww:textfield name="organisationName" value="${organisationName}" label="Name" size="50"  />
-    <ww:textfield name="organisationUrl" value="${organisationUrl}" label="URL" size="50"/>
-    <ww:textfield name="organisationLogo" value="${organisationLogo}" label="Logo URL" size="50" />
-  <ww:submit value="Save"/>
-</ww:form>
+<s:set name="editOrganisationInfo" value="editOrganisationInfo"/>
+<s:actionmessage/>
+<s:form method="post" action="saveAppearance" namespace="/admin" validate="true" theme="xhtml">
+    <s:textfield name="organisationName" value="%{#attr.organisationName}" label="Name" size="50"  />
+    <s:textfield name="organisationUrl" value="%{#attr.organisationUrl}" label="URL" size="50"/>
+    <s:textfield name="organisationLogo" value="%{#attr.organisationLogo}" label="Logo URL" size="50" />
+  <s:submit value="Save"/>
+</s:form>
 </body>
 
 </html>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editNetworkProxy.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editNetworkProxy.jsp
index bb09274..82fc528 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editNetworkProxy.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editNetworkProxy.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <c:choose>
@@ -33,7 +33,7 @@
 <html>
 <head>
   <title>Admin: ${addedit} Network Proxy</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -44,24 +44,24 @@
 
   <h2>${addedit} network proxy: ${networkProxyName}</h2>
 
-  <ww:actionerror/> 
-  <ww:actionmessage/>
+  <s:actionerror/> 
+  <s:actionmessage/>
   
-  <ww:form method="post" action="saveNetworkProxy" namespace="/admin">
-    <ww:hidden name="mode"/>
+  <s:form method="post" action="saveNetworkProxy" namespace="/admin">
+    <s:hidden name="mode"/>
     
 	<c:choose>
 	  <c:when test="${mode == 'edit'}">
-	    <ww:hidden name="proxy.id"/>
+	    <s:hidden name="proxy.id"/>
 	  </c:when>
 	  <c:otherwise>
-	    <ww:textfield name="proxy.id" label="Identifier" size="10" required="true"/>
+	    <s:textfield name="proxy.id" label="Identifier" size="10" required="true"/>
 	  </c:otherwise>
 	</c:choose>
     
     <%@ include file="/WEB-INF/jsp/admin/include/networkProxyForm.jspf" %>
-    <ww:submit value="Save Network Proxy"/>
-  </ww:form>
+    <s:submit value="Save Network Proxy"/>
+  </s:form>
 
   <script type="text/javascript">
     document.getElementById("saveNetworkProxy_host").focus();
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
index e135845..36b726a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
@@ -17,13 +17,13 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>Admin : Edit Proxy Connector</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -32,13 +32,13 @@
 
 <div id="contentArea">
 
-  <ww:actionerror/>
-  <ww:actionmessage/>
+  <s:actionerror/>
+  <s:actionmessage/>
 
-  <ww:form name="saveProxyConnector" method="post" action="editProxyConnector!commit" namespace="/admin" validate="true">
+  <s:form name="saveProxyConnector" method="post" action="editProxyConnector!commit" namespace="/admin" validate="true">
     <%@ include file="/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf" %>
-    <ww:submit value="Save Proxy Connector"/>
-  </ww:form>
+    <s:submit value="Save Proxy Connector"/>
+  </s:form>
   
 </div>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRemoteRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRemoteRepository.jsp
index 3f6686c..da6cb24 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRemoteRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRemoteRepository.jsp
@@ -17,28 +17,28 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Edit Remote Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Edit Remote Repository</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
-  <ww:actionmessage/>
-  <ww:form method="post" action="editRemoteRepository!commit" namespace="/admin" validate="false">
-    <ww:hidden name="repository.id"/>
+  <s:actionmessage/>
+  <s:form method="post" action="editRemoteRepository!commit" namespace="/admin" validate="false">
+    <s:hidden name="repository.id"/>
     <%@ include file="/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf" %>
-    <ww:submit value="Update Repository"/>
-  </ww:form>
+    <s:submit value="Update Repository"/>
+  </s:form>
 
   <script type="text/javascript">
     document.getElementById("editRemoteRepository_repository_name").focus();
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp
index a2a899e..7ea50ea 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp
@@ -17,29 +17,29 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Edit Managed Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Edit Managed Repository</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
-  <ww:actionmessage/>
-  <ww:form method="post" action="editRepository!commit" namespace="/admin" validate="false">
-    <ww:hidden name="repository.id"/>
-    <ww:label label="ID" name="repository.id" />
+  <s:actionmessage/>
+  <s:form method="post" action="editRepository!commit" namespace="/admin" validate="false">
+    <s:hidden name="repository.id"/>
+    <s:label label="ID" name="repository.id" />
     <%@ include file="/WEB-INF/jsp/admin/include/repositoryForm.jspf" %>
-    <ww:submit value="Update Repository"/>
-  </ww:form>
+    <s:submit value="Update Repository"/>
+  </s:form>
 
   <script type="text/javascript">
     document.getElementById("editRepository_repository_name").focus();
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp
index 5675008..68f357a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp
@@ -17,19 +17,19 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Admin: Enable Proxy Connector</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Admin: Enable Proxy Connector</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 <div id="contentArea">
 
@@ -39,11 +39,11 @@
     Are you sure you want to enable proxy connector <code>[ ${source} , ${target} ]</code> ?
   </p>
 
-  <ww:form method="post" action="enableProxyConnector!enable" namespace="/admin" validate="true">
-    <ww:hidden name="target"/>
-    <ww:hidden name="source"/>
-    <ww:submit value="Enable"/>
-  </ww:form>
+  <s:form method="post" action="enableProxyConnector!enable" namespace="/admin" validate="true">
+    <s:hidden name="target"/>
+    <s:hidden name="source"/>
+    <s:submit value="Enable"/>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/errorMessages.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/errorMessages.jsp
index f479312..2d147d5 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/errorMessages.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/errorMessages.jsp
@@ -18,12 +18,12 @@
   --%>
 
 <p>
-  <ww:if test="hasActionErrors()">
+  <s:if test="hasActionErrors()">
     <b style="color: red;">Errors:</b>
-    <ww:iterator value="actionErrors">
+    <s:iterator value="actionErrors">
       <li style="color: red;">
-        <ww:property/>
+        <s:property/>
       </li>
-    </ww:iterator>
-  </ww:if>
+    </s:iterator>
+  </s:if>
 </p>
\ No newline at end of file
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/networkProxyForm.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/networkProxyForm.jspf
index 935c4b1..c08718b 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/networkProxyForm.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/networkProxyForm.jspf
@@ -16,11 +16,11 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
   --%>
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
-<ww:textfield name="proxy.protocol" label="Protocol" size="5" required="true"/>
-<ww:textfield name="proxy.host" label="Hostname" size="50" required="true"/>  
-<ww:textfield name="proxy.port" label="Port" size="5" required="true" />
-<ww:textfield name="proxy.username" label="Username" size="25" required="false" />
-<ww:password name="proxy.password" label="Password" size="25" required="false" />
+<s:textfield name="proxy.protocol" label="Protocol" size="5" required="true"/>
+<s:textfield name="proxy.host" label="Hostname" size="50" required="true"/>
+<s:textfield name="proxy.port" label="Port" size="5" required="true" />
+<s:textfield name="proxy.username" label="Username" size="25" required="false" />
+<s:password name="proxy.password" label="Password" size="25" required="false" />
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf
index 4a6b291..d0cc04c 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf
@@ -16,21 +16,21 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
   --%>
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <c:url var="iconDeleteUrl" value="/images/icons/delete.gif"/>
 <c:url var="iconCreateUrl" value="/images/icons/create.png"/>
 
 <%-- This hidden 'pattern' field is used by remove (white|black)list scripts --%>
-<ww:hidden name="pattern" />
+<s:hidden name="pattern" />
 
-<ww:hidden name="connector.order" />
+<s:hidden name="connector.order" />
 
-<ww:select name="connector.proxyId" list="proxyIdOptions" label="Network Proxy" required="true"/>
-<ww:select name="connector.sourceRepoId" list="managedRepoIdList"
+<s:select name="connector.proxyId" list="proxyIdOptions" label="Network Proxy" required="true"/>
+<s:select name="connector.sourceRepoId" list="managedRepoIdList"
            label="Managed Repository" required="true"/>
-<ww:select name="connector.targetRepoId" list="remoteRepoIdList"
+<s:select name="connector.targetRepoId" list="remoteRepoIdList"
            label="Remote Repository" required="true"/>
 
 <tr>
@@ -41,18 +41,18 @@
       <c:forEach items="${policyMap}" var="policy" varStatus="i">
         <tr>
           <td>
-            <ww:label for="policy_${policy.key}" required="true"
+            <s:label for="policy_%{#attr.policy.key}" required="true"
                       theme="simple">${policy.value.name}:
-            </ww:label>
+            </s:label>
           </td>
           <td>
             <c:set var="value">
-              <ww:property id="value" value="connector.policies['${policy.key}']" default="${policy.value.defaultOption}" />
+              <s:property id="value" value="%{#attr.connector.policies[#attr.policy.key]}" default="%{#attr.policy.value.defaultOption}" />
             </c:set>
-            <ww:select name="connector.policies['${policy.key}']"
-                       list="policyMap['${policy.key}'].options"
-                       value="'${value}'"
-                       id="policy_${policy.key}"
+            <s:select name="connector.policies['%{#attr.policy.key}']"
+                       list="%{#attr.policyMap[#attr.policy.key].options}"
+                       value="%{#attr.value}"
+                       id="policy_%{#attr.policy.key}"
                        theme="simple"
                        cssStyle="width: 10em"/>
           </td>
@@ -67,10 +67,10 @@
     <label for="propertiesEntry">Properties:</label>
   </td>
   <td>
-    <ww:textfield name="propertyKey" size="15" id="propertiesEntry" theme="simple"
+    <s:textfield name="propertyKey" size="15" id="propertiesEntry" theme="simple"
                   onkeypress="submitenter(event, 'addProperty')"/>
     :
-    <ww:textfield name="propertyValue" size="15" id="propertiesValue" theme="simple"
+    <s:textfield name="propertyValue" size="15" id="propertiesValue" theme="simple"
                   onkeypress="submitenter(event, 'addProperty')"/>
     <input type="button" onclick="submitForm('addProperty')" value="Add Property" />
   </td>
@@ -89,20 +89,20 @@
           <c:forEach items="${connector.properties}" var="property" varStatus="i">
             <tr>
               <td>
-                <ww:label for="property_${property.key}"
-                          theme="simple">${property.key}</ww:label>
+                <s:label for="property_%{#attr.property.key}"
+                          theme="simple">${property.key}</s:label>
               </td>
               <td>
-                <ww:textfield name="connector.properties['${property.key}']"
+                <s:textfield name="connector.properties['%{#attr.property.key}']"
                               size="15"
-                              id="property_${property.key}"
+                              id="property_%{#attr.property.key}"
                               theme="simple"/>
               </td>
               <td>
-                <ww:a href="#" title="Remove [${property.key}] Property"
-                      onclick="setAndSubmit('propertyKey', '${property.key}', 'removeProperty')"
+                <s:a href="#" title="Remove [%{#attr.property.key}] Property"
+                      onclick="setAndSubmit('propertyKey', '%{#attr.property.key}', 'removeProperty')"
                       theme="simple">
-                  <img src="${iconDeleteUrl}"/></ww:a>
+                  <img src="${iconDeleteUrl}"/></s:a>
               </td>
             </tr>
           </c:forEach>
@@ -117,7 +117,7 @@
     <label for="blackListEntry">Black List:</label>
   </td>
   <td>
-    <ww:textfield name="blackListPattern" size="30" id="blackListEntry" theme="simple"
+    <s:textfield name="blackListPattern" size="30" id="blackListEntry" theme="simple"
                   onkeypress="submitenter(event, 'addBlackListPattern')"/>
     <input type="button" onclick="submitForm('addBlackListPattern')" value="Add Pattern" />
   </td>
@@ -136,7 +136,7 @@
           <c:forEach items="${connector.blackListPatterns}" var="pattern" varStatus="i">
             <tr>
               <td>
-                <ww:hidden name="connector.blackListPatterns" value="${pattern}"/>
+                <s:hidden name="connector.blackListPatterns" value="%{#attr.pattern}"/>
                 <code>"${pattern}"</code>
               </td>
               <td>
@@ -157,7 +157,7 @@
     <label for="whiteListEntry">White List:</label>
   </td>
   <td>
-    <ww:textfield name="whiteListPattern" size="30" id="whiteListEntry" theme="simple"
+    <s:textfield name="whiteListPattern" size="30" id="whiteListEntry" theme="simple"
                   onkeypress="submitenter(event, 'addWhiteListPattern')"/>
     <input type="button" onclick="submitForm('addWhiteListPattern')" value="Add Pattern" />
   </td>
@@ -175,14 +175,14 @@
           <c:forEach items="${connector.whiteListPatterns}" var="pattern" varStatus="i">
             <tr>
               <td>
-                <ww:hidden name="connector.whiteListPatterns" value="${pattern}"/>
+                <s:hidden name="connector.whiteListPatterns" value="%{#attr.pattern}"/>
                 <code>"${pattern}"</code>
               </td>
               <td>
-                <ww:a href="#" title="Remove [${pattern}] Pattern"
-                      onclick="setAndSubmit('pattern', '${pattern}', 'removeWhiteListPattern')"
+                <s:a href="#" title="Remove [%{#attr.pattern}] Pattern"
+                      onclick="setAndSubmit('pattern', '%{#attr.pattern}', 'removeWhiteListPattern')"
                       theme="simple">
-                  <img src="${iconDeleteUrl}"/></ww:a>
+                  <img src="${iconDeleteUrl}"/></s:a>
               </td>
             </tr>
           </c:forEach>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf
index b59fa8f..ea01c08 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
-<ww:textfield name="repository.name" label="Name" size="50" required="true"/>
-<ww:textfield name="repository.url" label="URL" size="50" required="true"/>
-<ww:textfield name="repository.username" label="Username" size="25" required="false"/>
-<ww:password name="repository.password" label="Password" size="25" required="false"/>
-<ww:textfield name="repository.timeout" label="Timeout in seconds" size="3" required="false"/>
-<ww:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
+<s:textfield name="repository.name" label="Name" size="50" required="true"/>
+<s:textfield name="repository.url" label="URL" size="50" required="true"/>
+<s:textfield name="repository.username" label="Username" size="25" required="false"/>
+<s:password name="repository.password" label="Password" size="25" required="false"/>
+<s:textfield name="repository.timeout" label="Timeout in seconds" size="3" required="false"/>
+<s:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
            name="repository.layout" label="Type"/>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf
index 7cde904..4c7f441 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf
@@ -16,21 +16,21 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
   --%>
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
-<ww:textfield name="repository.name" label="Name" size="50" required="true"/>
-<ww:textfield name="repository.location" label="Directory" size="50" required="true"/>
-<ww:textfield name="repository.indexDir" label="Index Directory" size="50"/>
-<ww:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
+<s:textfield name="repository.name" label="Name" size="50" required="true"/>
+<s:textfield name="repository.location" label="Directory" size="50" required="true"/>
+<s:textfield name="repository.indexDir" label="Index Directory" size="50"/>
+<s:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
            name="repository.layout" label="Type"/>
-<ww:textfield name="repository.refreshCronExpression" label="Cron" size="40" required="true"/>
-<ww:textfield name="repository.daysOlder" label="Repository Purge By Days Older Than" size="5"/>
-<ww:textfield name="repository.retentionCount" label="Repository Purge By Retention Count" size="5"/>
-<ww:checkbox name="repository.releases" value="repository.releases" label="Releases Included"/>
-<ww:checkbox name="repository.snapshots" value="repository.snapshots" label="Snapshots Included"/>
-<ww:checkbox name="repository.scanned" value="repository.scanned" label="Scannable"/>
-<ww:checkbox name="repository.deleteReleasedSnapshots" value="repository.deleteReleasedSnapshots"
+<s:textfield name="repository.refreshCronExpression" label="Cron" size="40" required="true"/>
+<s:textfield name="repository.daysOlder" label="Repository Purge By Days Older Than" size="5"/>
+<s:textfield name="repository.retentionCount" label="Repository Purge By Retention Count" size="5"/>
+<s:checkbox name="repository.releases" value="repository.releases" label="Releases Included"/>
+<s:checkbox name="repository.snapshots" value="repository.snapshots" label="Snapshots Included"/>
+<s:checkbox name="repository.scanned" value="repository.scanned" label="Scannable"/>
+<s:checkbox name="repository.deleteReleasedSnapshots" value="repository.deleteReleasedSnapshots"
              label="Delete Released Snapshots"/>
 
  
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/legacyArtifactPath.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/legacyArtifactPath.jsp
index 6c64cab..2d75e9d 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/legacyArtifactPath.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/legacyArtifactPath.jsp
@@ -17,7 +17,7 @@
   ~ under the License.

   --%>

 

-<%@ taglib prefix="ww" uri="/webwork" %>

+<%@ taglib prefix="s" uri="/struts-tags" %>

 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>

 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>

@@ -25,7 +25,7 @@
 <html>

 <head>

   <title>Administration - Legacy support</title>

-  <ww:head/>

+  <s:head/>

 </head>

 

 <body>

@@ -34,17 +34,17 @@
 

 <div id="contentArea">

 

-<ww:actionerror/>

-<ww:actionmessage/>

+<s:actionerror/>

+<s:actionmessage/>

 

 <div class="admin">

 <div class="controls">

   <redback:ifAuthorized permission="archiva-manage-configuration">

-    <ww:url id="addLegacyArtifactPathUrl" action="addLegacyArtifactPath"/>

-    <ww:a href="%{addLegacyArtifactPathUrl}">

+    <s:url id="addLegacyArtifactPathUrl" action="addLegacyArtifactPath"/>

+    <s:a href="%{addLegacyArtifactPathUrl}">

       <img src="<c:url value="/images/icons/create.png" />" alt="" width="16" height="16"/>

       Add

-    </ww:a>

+    </s:a>

   </redback:ifAuthorized>

 </div>

 <h2>Path Mappings</h2>

@@ -72,13 +72,13 @@
 <div class="controls">

     <%-- TODO: make some icons --%>

   <redback:ifAnyAuthorized permissions="archiva-manage-configuration">

-    <ww:url id="deleteLegacyArtifactPath" action="deleteLegacyArtifactPath">

-      <ww:param name="path" value="%{'${legacyArtifactPath.path}'}"/>

-    </ww:url>

-    <ww:a href="%{deleteLegacyArtifactPath}">

+    <s:url id="deleteLegacyArtifactPath" action="deleteLegacyArtifactPath">

+      <s:param name="path" value="%{#attr.legacyArtifactPath.path}"/>

+    </s:url>

+    <s:a href="%{deleteLegacyArtifactPath}">

       <img src="<c:url value="/images/icons/delete.gif" />" alt="" width="16" height="16"/>

       Delete

-    </ww:a>

+    </s:a>

   </redback:ifAnyAuthorized>

 </div>

 

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/networkProxies.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/networkProxies.jsp
index a7aeea1..fedb6a3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/networkProxies.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/networkProxies.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork"%>
+<%@ taglib prefix="s" uri="/struts-tags"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org"%>
@@ -25,7 +25,7 @@
 <html>
 <head>
 <title>Administration - Network Proxies</title>
-<ww:head />
+<s:head />
 </head>
 
 <body>
@@ -34,16 +34,16 @@
 
 <div id="contentArea">
 
-<ww:actionerror /> <ww:actionmessage />
+<s:actionerror /> <s:actionmessage />
 
 <div class="admin">
 <div class="controls">
 <redback:ifAuthorized
   permission="archiva-manage-configuration">
-  <ww:url id="addNetworkProxyUrl" action="addNetworkProxy" />
-  <ww:a href="%{addNetworkProxyUrl}">
+  <s:url id="addNetworkProxyUrl" action="addNetworkProxy" />
+  <s:a href="%{addNetworkProxyUrl}">
     <img src="<c:url value="/images/icons/create.png" />" />
-        Add Network Proxy</ww:a>
+        Add Network Proxy</s:a>
 </redback:ifAuthorized></div>
 <h2>Network Proxies</h2>
 
@@ -70,18 +70,18 @@
       <div class="controls">
       <redback:ifAnyAuthorized
         permissions="archiva-manage-configuration">
-        <ww:url id="editNetworkProxyUrl" action="editNetworkProxy">
-          <ww:param name="proxyid" value="%{'${proxy.id}'}" />
-        </ww:url>
-        <ww:url id="deleteNetworkProxyUrl" action="deleteNetworkProxy" method="confirm">
-          <ww:param name="proxyid" value="%{'${proxy.id}'}" />
-        </ww:url>
-        <ww:a href="%{editNetworkProxyUrl}">
+        <s:url id="editNetworkProxyUrl" action="editNetworkProxy">
+          <s:param name="proxyid" value="%{#attr.proxy.id}" />
+        </s:url>
+        <s:url id="deleteNetworkProxyUrl" action="deleteNetworkProxy" method="confirm">
+          <s:param name="proxyid" value="%{#attr.proxy.id}" />
+        </s:url>
+        <s:a href="%{editNetworkProxyUrl}">
           <img src="<c:url value="/images/icons/edit.png" />" />
-            Edit Network Proxy</ww:a>
-        <ww:a href="%{deleteNetworkProxyUrl}">
+            Edit Network Proxy</s:a>
+        <s:a href="%{deleteNetworkProxyUrl}">
           <img src="<c:url value="/images/icons/delete.gif" />" />
-            Delete Network Proxy</ww:a>
+            Delete Network Proxy</s:a>
       </redback:ifAnyAuthorized></div>
 
       <table class="infoTable">
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
index 43a0b5d..e1dcc38 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
@@ -26,7 +26,7 @@
 <html>
 <head>
   <title>Administration - Proxy Connectors</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -43,18 +43,18 @@
 
 <div id="contentArea">
 
-<ww:actionerror/>
-<ww:actionmessage/>
+<s:actionerror/>
+<s:actionmessage/>
 
 <div style="float:right">  
   <c:choose>
 	<c:when test="${remoteRepoExists}">
 	  <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
-	    <ww:url id="addProxyConnectorUrl" action="addProxyConnector"/>
-	    <ww:a href="%{addProxyConnectorUrl}" cssClass="create">
+	    <s:url id="addProxyConnectorUrl" action="addProxyConnector"/>
+	    <s:a href="%{addProxyConnectorUrl}" cssClass="create">
 	      <img src="<c:url value="/images/icons/create.png" />"/>
 	      Add
-	    </ww:a>
+	    </s:a>
 	  </redback:ifAnyAuthorized>
 	</c:when>
 	<c:otherwise>
@@ -99,56 +99,56 @@
   <div class="connector ${rowColor}"> 
     <div class="controls">
       <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
-        <ww:url id="sortDownProxyConnectorUrl" action="sortDownProxyConnector">
-          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
-          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
-        </ww:url>
-        <ww:url id="sortUpProxyConnectorUrl" action="sortUpProxyConnector">
-          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
-          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
-        </ww:url>
-        <ww:url id="editProxyConnectorUrl" action="editProxyConnector">
-          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
-          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
-        </ww:url>
-        <ww:url id="deleteProxyConnectorUrl" action="deleteProxyConnector" method="confirmDelete">
-          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
-          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
-        </ww:url>
-        <ww:url id="enableProxyConnectorUrl" action="enableProxyConnector" method="confirmEnable">
-          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
-          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
-        </ww:url>
-        <ww:url id="disableProxyConnectorUrl" action="disableProxyConnector" method="confirmDisable">
-          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
-          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
-        </ww:url>
+        <s:url id="sortDownProxyConnectorUrl" action="sortDownProxyConnector">
+          <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
+          <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
+        </s:url>
+        <s:url id="sortUpProxyConnectorUrl" action="sortUpProxyConnector">
+          <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
+          <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
+        </s:url>
+        <s:url id="editProxyConnectorUrl" action="editProxyConnector">
+          <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
+          <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
+        </s:url>
+        <s:url id="deleteProxyConnectorUrl" action="deleteProxyConnector" method="confirmDelete">
+          <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
+          <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
+        </s:url>
+        <s:url id="enableProxyConnectorUrl" action="enableProxyConnector" method="confirmEnable">
+          <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
+          <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
+        </s:url>
+        <s:url id="disableProxyConnectorUrl" action="disableProxyConnector" method="confirmDisable">
+          <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
+          <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
+        </s:url>
         <c:if test="${connector.disabled}">
-            <ww:a href="%{enableProxyConnectorUrl}" title="Enable Proxy Connector">
+            <s:a href="%{enableProxyConnectorUrl}" title="Enable Proxy Connector">
 				<img src="${iconDisable}"/>
-			</ww:a>
+			</s:a>
         </c:if>
         <c:if test="${connector.disabled == false}">
-            <ww:a href="%{disableProxyConnectorUrl}" title="Disable Proxy Connector">
+            <s:a href="%{disableProxyConnectorUrl}" title="Disable Proxy Connector">
 				<img src="${iconEnable}"/>
-			</ww:a>
+			</s:a>
         </c:if>
         <c:if test="${pc.count > 1}">
-          <ww:a href="%{sortUpProxyConnectorUrl}" title="Move Proxy Connector Up">
+          <s:a href="%{sortUpProxyConnectorUrl}" title="Move Proxy Connector Up">
             <img src="${iconUpUrl}"/>
-          </ww:a>
+          </s:a>
         </c:if>
         <c:if test="${pc.count < numberOfRepos}">
-          <ww:a href="%{sortDownProxyConnectorUrl}" cssClass="down" title="Move Proxy Connector Down">
+          <s:a href="%{sortDownProxyConnectorUrl}" cssClass="down" title="Move Proxy Connector Down">
             <img src="${iconDownUrl}"/>
-          </ww:a>
+          </s:a>
         </c:if>
-        <ww:a href="%{editProxyConnectorUrl}" cssClass="edit" title="Edit Proxy Connector">
+        <s:a href="%{editProxyConnectorUrl}" cssClass="edit" title="Edit Proxy Connector">
           <img src="${iconEditUrl}"/>
-        </ww:a>
-        <ww:a href="%{deleteProxyConnectorUrl}" cssClass="delete" title="Delete Proxy Connector">
+        </s:a>
+        <s:a href="%{deleteProxyConnectorUrl}" cssClass="delete" title="Delete Proxy Connector">
           <img src="${iconDeleteUrl}"/>
-        </ww:a>
+        </s:a>
       </redback:ifAnyAuthorized>
     </div>
 
@@ -171,13 +171,13 @@
               <span class="directConnection">(Direct Connection)</span>
             </c:when>
             <c:otherwise>
-              <ww:url id="editProxyIdUrl" action="editNetworkProxy">
-                <ww:param name="proxyid" value="%{'${connector.proxyId}'}"/>
-              </ww:url>
-              <ww:a href="%{editProxyIdUrl}" cssClass="edit" title="Edit Network Proxy">
+              <s:url id="editProxyIdUrl" action="editNetworkProxy">
+                <s:param name="proxyid" value="%{'#attr.connector.proxyId'}"/>
+              </s:url>
+              <s:a href="%{editProxyIdUrl}" cssClass="edit" title="Edit Network Proxy">
                 ${connector.proxyId}
                 <img src="${iconEditUrl}"/>
-              </ww:a>
+              </s:a>
             </c:otherwise>
           </c:choose>
         </td>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
index 8f1e911..7bc4f4b 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
@@ -25,7 +25,7 @@
 <html>
 <head>
   <title>Administration - Repositories</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -34,17 +34,17 @@
 
 <div id="contentArea">
 
-<ww:actionerror/>
-<ww:actionmessage/>
+<s:actionerror/>
+<s:actionmessage/>
 
 <div class="admin">
 <div class="controls">
   <redback:ifAuthorized permission="archiva-manage-configuration">
-    <ww:url id="addRepositoryUrl" action="addRepository"/>
-    <ww:a href="%{addRepositoryUrl}">
+    <s:url id="addRepositoryUrl" action="addRepository"/>
+    <s:a href="%{addRepositoryUrl}">
       <img src="<c:url value="/images/icons/create.png" />" alt="" width="16" height="16"/>
       Add
-    </ww:a>
+    </s:a>
   </redback:ifAuthorized>
 </div>
 <h2>Managed Repositories</h2>
@@ -72,20 +72,20 @@
 <div class="controls">
     <%-- TODO: make some icons --%>
   <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
-    <ww:url id="editRepositoryUrl" action="editRepository">
-      <ww:param name="repoid" value="%{'${repository.id}'}"/>
-    </ww:url>
-    <ww:url id="deleteRepositoryUrl" action="confirmDeleteRepository">
-      <ww:param name="repoid" value="%{'${repository.id}'}"/>
-    </ww:url>
-    <ww:a href="%{editRepositoryUrl}">
+    <s:url id="editRepositoryUrl" action="editRepository">
+      <s:param name="repoid" value="%{#attr.repository.id}"/>
+    </s:url>
+    <s:url id="deleteRepositoryUrl" action="confirmDeleteRepository">
+      <s:param name="repoid" value="%{#attr.repository.id}"/>
+    </s:url>
+    <s:a href="%{editRepositoryUrl}">
       <img src="<c:url value="/images/icons/edit.png" />" alt="" width="16" height="16"/>
       Edit
-    </ww:a>
-    <ww:a href="%{deleteRepositoryUrl}">
+    </s:a>
+    <s:a href="%{deleteRepositoryUrl}">
       <img src="<c:url value="/images/icons/delete.gif" />" alt="" width="16" height="16"/>
       Delete
-    </ww:a>
+    </s:a>
   </redback:ifAnyAuthorized>
   <c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/>
   <a href="/archiva/feeds/${repository.id}">
@@ -190,10 +190,10 @@
         <tr>
           <td>
             <redback:ifAuthorized permission="archiva-run-indexer">
-              <ww:form action="indexRepository" theme="simple">
-                <ww:hidden name="repoid" value="%{'${repository.id}'}"/>
-                <ww:submit value="Scan Repository Now"/>
-              </ww:form>
+              <s:form action="indexRepository" theme="simple">
+                <s:hidden name="repoid" value="%{#attr.repository.id}"/>
+                <s:submit value="Scan Repository Now"/>
+              </s:form>
             </redback:ifAuthorized>
           </td>
         </tr>
@@ -248,11 +248,11 @@
 
 <div class="controls">
   <redback:ifAuthorized permission="archiva-manage-configuration">
-    <ww:url id="addRepositoryUrl" action="addRemoteRepository"/>
-    <ww:a href="%{addRepositoryUrl}">
+    <s:url id="addRepositoryUrl" action="addRemoteRepository"/>
+    <s:a href="%{addRepositoryUrl}">
       <img src="<c:url value="/images/icons/create.png" />" alt="" width="16" height="16"/>
       Add
-    </ww:a>
+    </s:a>
   </redback:ifAuthorized>
 </div>
 <h2>Remote Repositories</h2>
@@ -278,20 +278,20 @@
 
         <div class="controls">
           <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
-            <ww:url id="editRepositoryUrl" action="editRemoteRepository">
-              <ww:param name="repoid" value="%{'${repository.id}'}"/>
-            </ww:url>
-            <ww:a href="%{editRepositoryUrl}">
+            <s:url id="editRepositoryUrl" action="editRemoteRepository">
+              <s:param name="repoid" value="%{#attr.repository.id}"/>
+            </s:url>
+            <s:a href="%{editRepositoryUrl}">
               <img src="<c:url value="/images/icons/edit.png" />" alt="" width="16" height="16"/>
               Edit
-            </ww:a>
-            <ww:url id="deleteRepositoryUrl" action="confirmDeleteRemoteRepository">
-              <ww:param name="repoid" value="%{'${repository.id}'}"/>
-            </ww:url>
-            <ww:a href="%{deleteRepositoryUrl}">
+            </s:a>
+            <s:url id="deleteRepositoryUrl" action="confirmDeleteRemoteRepository">
+              <s:param name="repoid" value="%{#attr.repository.id}"/>
+            </s:url>
+            <s:a href="%{deleteRepositoryUrl}">
               <img src="<c:url value="/images/icons/delete.gif" />" alt="" width="16" height="16"/>
               Delete
-            </ww:a>
+            </s:a>
           </redback:ifAnyAuthorized>
         </div>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryGroups.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryGroups.jsp
index 15981a3..404d40f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryGroups.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryGroups.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
@@ -26,7 +26,7 @@
 <html>
 <head>
   <title>Administration - Repository Groups</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -41,16 +41,16 @@
 
 <div id="contentArea">
 
-<ww:actionerror/>
-<ww:actionmessage/>
+<s:actionerror/>
+<s:actionmessage/>
 
 <div align="right">
   <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
-    <ww:form action="addRepositoryGroup" namespace="/admin">
+    <s:form action="addRepositoryGroup" namespace="/admin">
       <span class="label">Identifier<span style="color:red">*</span>:</span> 
-      <ww:textfield size="10" label="Identifier" theme="simple" name="repositoryGroup.id"/>
-      <ww:submit value="Add Group" theme="simple" cssClass="button"/>
-    </ww:form>
+      <s:textfield size="10" label="Identifier" theme="simple" name="repositoryGroup.id"/>
+      <s:submit value="Add Group" theme="simple" cssClass="button"/>
+    </s:form>
   </redback:ifAnyAuthorized>
 </div>
 
@@ -70,12 +70,12 @@
   <div class="managedRepo">
     
     <div style="float:right">
-      <ww:url id="deleteRepositoryGroupUrl" action="confirmDeleteRepositoryGroup">
-        <ww:param name="repoGroupId" value="%{'${repositoryGroup.key}'}" />
-      </ww:url>
-      <ww:a href="%{deleteRepositoryGroupUrl}" cssClass="delete">
+      <s:url id="deleteRepositoryGroupUrl" action="confirmDeleteRepositoryGroup">
+        <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}" />
+      </s:url>
+      <s:a href="%{deleteRepositoryGroupUrl}" cssClass="delete">
         <img src="${iconDeleteUrl}"/>
-      </ww:a>
+      </s:a>
     </div>
     
     <img src="<c:url value="/images/archiva-splat-32.gif"/>"/>
@@ -85,11 +85,11 @@
 
   <c:if test="${!empty (groupToRepositoryMap[repositoryGroup.key])}">
   <div class="repos">
-    <ww:form name="form${i}" action="addRepositoryToGroup" namespace="/admin" validate="true">
-      <ww:hidden name="repoGroupId" value="%{'${repositoryGroup.key}'}"/>
-      <ww:select list="groupToRepositoryMap['${repositoryGroup.key}']" name="repoId" theme="simple"/>
-      <ww:submit value="Add Repository" theme="simple" cssClass="button"/>
-    </ww:form>
+    <s:form name="form%{#attr.i}" action="addRepositoryToGroup" namespace="/admin" validate="true">
+      <s:hidden name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
+      <s:select list="%{#attr.groupToRepositoryMap[#attr.repositoryGroup.key]}" name="repoId" theme="simple"/>
+      <s:submit value="Add Repository" theme="simple" cssClass="button"/>
+    </s:form>
   </div>
   </c:if>
   
@@ -109,31 +109,31 @@
   <div class="connector ${rowColor}"> 
     <div class="controls">
       <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
-        <ww:url id="sortDownRepositoryUrl" action="sortDownRepositoryFromGroup">
-          <ww:param name="repoGroupId" value="%{'${repositoryGroup.key}'}"/>
-          <ww:param name="targetRepo" value="managedRepositories['${repository}'].id"/>
-        </ww:url>
-        <ww:url id="sortUpRepositoryUrl" action="sortUpRepositoryFromGroup">
-          <ww:param name="repoGroupId" value="%{'${repositoryGroup.key}'}"/>
-          <ww:param name="targetRepo" value="managedRepositories['${repository}'].id"/>
-        </ww:url>
-        <ww:url id="removeRepositoryUrl" action="removeRepositoryFromGroup">
-          <ww:param name="repoGroupId" value="%{'${repositoryGroup.key}'}"/>
-          <ww:param name="repoId" value="managedRepositories['${repository}'].id"/>
-        </ww:url>
+        <s:url id="sortDownRepositoryUrl" action="sortDownRepositoryFromGroup">
+          <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
+          <s:param name="targetRepo" value="%{#attr.managedRepositories[#attr.repository].id}"/>
+        </s:url>
+        <s:url id="sortUpRepositoryUrl" action="sortUpRepositoryFromGroup">
+          <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
+          <s:param name="targetRepo" value="%{#attr.managedRepositories[#attr.repository].id}"/>
+        </s:url>
+        <s:url id="removeRepositoryUrl" action="removeRepositoryFromGroup">
+          <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
+          <s:param name="repoId" value="%{#attr.managedRepositories[#attr.repository].id}"/>
+        </s:url>
         <c:if test="${r.count > 1}">
-          <ww:a href="%{sortUpRepositoryUrl}" cssClass="up" title="Move Repository Up">
+          <s:a href="%{sortUpRepositoryUrl}" cssClass="up" title="Move Repository Up">
             <img src="${iconUpUrl}"/>
-          </ww:a>
+          </s:a>
         </c:if>
         <c:if test="${r.count < numberOfRepos}">
-          <ww:a href="%{sortDownRepositoryUrl}" cssClass="down" title="Move Repository Down">
+          <s:a href="%{sortDownRepositoryUrl}" cssClass="down" title="Move Repository Down">
             <img src="${iconDownUrl}"/>
-          </ww:a>
+          </s:a>
         </c:if>
-        <ww:a href="%{removeRepositoryUrl}" cssClass="delete" title="Delete Repository">
+        <s:a href="%{removeRepositoryUrl}" cssClass="delete" title="Delete Repository">
           <img src="${iconDeleteUrl}"/>
-        </ww:a>
+        </s:a>
       </redback:ifAnyAuthorized>
     </div>
   
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryScanning.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryScanning.jsp
index 4450bee..2c08f49 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryScanning.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositoryScanning.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork"%>
+<%@ taglib prefix="s" uri="/struts-tags"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
@@ -26,7 +26,7 @@
 <html>
 <head>
 <title>Administration - Repository Scanning</title>
-<ww:head />
+<s:head />
 </head>
 
 <body>
@@ -35,13 +35,13 @@
 
 <div id="contentArea">
 
-<ww:actionerror /> 
-<ww:actionmessage /> 
+<s:actionerror /> 
+<s:actionmessage /> 
 
 <c:url var="iconDeleteUrl" value="/images/icons/delete.gif" /> 
 <c:url var="iconCreateUrl" value="/images/icons/create.png" /> 
-<ww:url id="removeFiletypePatternUrl" action="repositoryScanning" method="removeFiletypePattern" /> 
-<ww:url id="addFiletypePatternUrl"    action="repositoryScanning" method="addFiletypePattern" /> 
+<s:url id="removeFiletypePatternUrl" action="repositoryScanning" method="removeFiletypePattern" /> 
+<s:url id="addFiletypePatternUrl"    action="repositoryScanning" method="addFiletypePattern" /> 
    
 <script type="text/javascript">
 <!--
@@ -78,14 +78,14 @@
   <c:otherwise>
     <%-- Display the filetypes. --%>
 
-    <ww:form method="post" action="repositoryScanning" 
+    <s:form method="post" action="repositoryScanning" 
              namespace="/admin" validate="false" 
              id="filetypeForm" theme="simple">
       <input type="hidden" name="pattern" />
       <input type="hidden" name="fileTypeId" />
-    </ww:form>
+    </s:form>
 
-    <ww:url id="addFiletypePatternUrl" action="repositoryScanning" method="addFiletypePattern" />
+    <s:url id="addFiletypePatternUrl" action="repositoryScanning" method="addFiletypePattern" />
 
     <c:forEach items="${fileTypeIds}" var="filetypeId" varStatus="j">
 
@@ -113,27 +113,27 @@
               <code>${escapedPattern}</code>
             </td>
             <td class="controls ${bgcolor}">
-              <ww:a href="#" title="Remove [${escapedPattern}] Pattern from [${filetypeId}]"
-                    onclick="removeFiletypePattern( '${filetypeId}', '${escapedPattern}' )" 
+              <s:a href="#" title="Remove [%{#attr.escapedPattern}] Pattern from [%{#attr.filetypeId}]"
+                    onclick="removeFiletypePattern( '%{#attr.filetypeId}', '%{#attr.escapedPattern}' )" 
                     theme="simple">
                 <img src="${iconDeleteUrl}" />
-              </ww:a>
+              </s:a>
             </td>
           </tr>
         </c:forEach>
         <tr>
           <td>
-            <ww:textfield size="40" 
-                          id="newpattern_${j.index}"
+            <s:textfield size="40" 
+                          id="newpattern_%{#attr.j.index}"
                           theme="simple" />
           </td>
           <td>
-            <ww:a href="#" 
-                  title="Add Pattern to [${filetypeId}]"
-                  onclick="addFiletypePattern( '${filetypeId}', 'newpattern_${j.index}' )"
+            <s:a href="#" 
+                  title="Add Pattern to [%{#attr.filetypeId}]"
+                  onclick="addFiletypePattern( '%{#attr.filetypeId}', 'newpattern_%{#attr.j.index}' )"
                   theme="simple">
               <img src="${iconCreateUrl}" />
-            </ww:a>
+            </s:a>
           </td>
         </tr>
       </table>
@@ -154,7 +154,7 @@
   <c:otherwise>
     <%-- Display the consumers. --%>
 
-    <ww:form method="post" action="repositoryScanning!updateKnownConsumers" 
+    <s:form method="post" action="repositoryScanning!updateKnownConsumers" 
              namespace="/admin" validate="false" theme="simple">
     <table class="consumers">
       <tr>
@@ -190,11 +190,11 @@
       </c:forEach>
       <tr>
         <td colspan="4">
-          <ww:submit value="Update Consumers" />
+          <s:submit value="Update Consumers" />
         </td>
       </tr>
     </table>
-    </ww:form>
+    </s:form>
 
   </c:otherwise>
 </c:choose>
@@ -210,7 +210,7 @@
   <c:otherwise>
     <%-- Display the consumers. --%>
 
-    <ww:form method="post" action="repositoryScanning!updateInvalidConsumers" 
+    <s:form method="post" action="repositoryScanning!updateInvalidConsumers" 
              namespace="/admin" validate="false" theme="simple">
     <table class="consumers">
       <tr>
@@ -246,11 +246,11 @@
       </c:forEach>
       <tr>
         <td colspan="4">
-          <ww:submit value="Update Consumers" />
+          <s:submit value="Update Consumers" />
         </td>
       </tr>
     </table>
-    </ww:form>
+    </s:form>
 
   </c:otherwise>
 </c:choose></div>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/advancedSearch.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/advancedSearch.jsp
index 3a87d1f..540e12d 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/advancedSearch.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/advancedSearch.jsp
@@ -17,16 +17,16 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <html>
 <head>
   <title>Advanced Search</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
-<ww:if test="%{infoMessage != null}">
+<s:if test="%{infoMessage != null}">
   <p>${infoMessage}</p>
-</ww:if>
+</s:if>
 
 <body>
 
@@ -37,29 +37,29 @@
 
   <div id="searchBox">
   
-    <ww:form method="get" action="filteredSearch" validate="true">
-      <ww:textfield label="Row Count" size="50" name="rowCount"/>
-      <ww:textfield label="Group Id" size="50" name="groupId"/>
-      <ww:textfield label="Artifact Id" size="50" name="artifactId"/>
-      <ww:textfield label="Version" size="50" name="version"/>
-      <ww:textfield label="Class / Package" size="50" name="className"/>
-      <ww:select name="repositoryId" label="Repository ID" list="managedRepositoryList"/>
-      <ww:hidden name="completeQueryString" value="${completeQueryString}"/>
-      <ww:hidden name="fromFilterSearch" value="${fromFilterSearch}"/>
-      <ww:submit label="Go!"/>
-    </ww:form>
+    <s:form method="get" action="filteredSearch" validate="true">
+      <s:textfield label="Row Count" size="50" name="rowCount"/>
+      <s:textfield label="Group Id" size="50" name="groupId"/>
+      <s:textfield label="Artifact Id" size="50" name="artifactId"/>
+      <s:textfield label="Version" size="50" name="version"/>
+      <s:textfield label="Class / Package" size="50" name="className"/>
+      <s:select name="repositoryId" label="Repository ID" list="managedRepositoryList"/>
+      <s:hidden name="completeQueryString" value="%{#attr.completeQueryString}"/>
+      <s:hidden name="fromFilterSearch" value="%{#attr.fromFilterSearch}"/>
+      <s:submit label="Go!"/>
+    </s:form>
   
-    <ww:url id="indexUrl" action="index"/>
-      <ww:a href="%{indexUrl}">
+    <s:url id="indexUrl" action="index"/>
+      <s:a href="%{indexUrl}">
         Quick Search Page
-    </ww:a>
+    </s:a>
 
   </div>
 
   <script type="text/javascript">
     document.getElementById("filteredSearch_groupId").focus();
   </script>
-  <ww:actionerror/>
+  <s:actionerror/>
 
 </div> 
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp
index 897c82a..f705c38 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp
@@ -17,13 +17,13 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>Security Alert Page</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
index a9efdca3..aebffbe 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0"  %>
@@ -25,7 +25,7 @@
 <html>
 <head>
   <title>Browse Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -48,9 +48,9 @@
       <ul>
         <c:forEach items="${results.groupIds}" var="groupId">
           <c:set var="url">
-            <ww:url action="browseGroup" namespace="/">
-              <ww:param name="groupId" value="%{'${groupId}'}"/>
-            </ww:url>
+            <s:url action="browseGroup" namespace="/">
+              <s:param name="groupId" value="%{#attr.groupId}"/>
+            </s:url>
           </c:set>
           <li><a href="${url}">${groupId}/</a></li>
         </c:forEach>
@@ -65,10 +65,10 @@
         <c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/>
         <c:forEach items="${results.artifacts}" var="artifactId">
           <c:set var="url">
-            <ww:url action="browseArtifact" namespace="/">
-              <ww:param name="groupId" value="%{'${results.selectedGroupId}'}"/>
-              <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-            </ww:url>
+            <s:url action="browseArtifact" namespace="/">
+              <s:param name="groupId" value="%{#attr.results.selectedGroupId}"/>
+              <s:param name="artifactId" value="%{#attr.artifactId}"/>
+            </s:url>
           </c:set>
           <c:url var="rssUrl" value="/feeds/${groupId}/${artifactId}"/>
           <li>
@@ -88,11 +88,11 @@
       <ul>
         <c:forEach items="${results.versions}" var="version">
           <c:set var="url">
-            <ww:url action="showArtifact" namespace="/">
-              <ww:param name="groupId" value="%{'${results.selectedGroupId}'}"/>
-              <ww:param name="artifactId" value="%{'${results.selectedArtifactId}'}"/>
-              <ww:param name="version" value="%{'${version}'}"/>
-            </ww:url>
+            <s:url action="showArtifact" namespace="/">
+              <s:param name="groupId" value="%{#attr.results.selectedGroupId}"/>
+              <s:param name="artifactId" value="%{#attr.results.selectedArtifactId}"/>
+              <s:param name="version" value="%{#attr.version}"/>
+            </s:url>
           </c:set>
           <li><a href="${url}">${version}/</a></li>
         </c:forEach>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
index 65fee20..14cc95b 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
@@ -17,14 +17,14 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
 
 <html>
 <head>
   <title>Browse Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -40,14 +40,14 @@
 
     <h2>Versions</h2>
     <ul>
-      <ww:set name="versions" value="versions"/>
+      <s:set name="versions" value="versions"/>
       <c:forEach items="${versions}" var="version">
         <c:set var="url">
-          <ww:url action="showArtifact" namespace="/">
-            <ww:param name="groupId" value="%{'${groupId}'}"/>
-            <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-            <ww:param name="version" value="%{'${version}'}"/>
-          </ww:url>
+          <s:url action="showArtifact" namespace="/">
+            <s:param name="groupId" value="%{#attr.groupId}"/>
+            <s:param name="artifactId" value="%{#attr.artifactId}"/>
+            <s:param name="version" value="%{'#attr.version}"/>
+          </s:url>
         </c:set>
         <li><a href="${url}">${version}/</a></li>
       </c:forEach>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseGroup.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseGroup.jsp
index ac8c69c..c81d5cf 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseGroup.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseGroup.jsp
@@ -17,14 +17,14 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
 
 <html>
 <head>
   <title>Browse Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -41,9 +41,9 @@
     <ul>
       <c:forEach items="${results.groupIds}" var="groupId">
         <c:set var="url">
-          <ww:url action="browseGroup" namespace="/">
-            <ww:param name="groupId" value="%{'${groupId}'}"/>
-          </ww:url>
+          <s:url action="browseGroup" namespace="/">
+            <s:param name="groupId" value="%{#attr.groupId}"/>
+          </s:url>
         </c:set>
         <li><a href="${url}">${groupId}/</a></li>
       </c:forEach>
@@ -56,10 +56,10 @@
       <ul>
         <c:forEach items="${results.versions}" var="version">
           <c:set var="url">
-            <ww:url action="browseVersion" namespace="/">
-              <ww:param name="groupId" value="%{'${results.selectedGroupId}'}"/>
-              <ww:param name="version" value="%{'${version}'}"/>
-            </ww:url>
+            <s:url action="browseVersion" namespace="/">
+              <s:param name="groupId" value="%{#attr.results.selectedGroupId}"/>
+              <s:param name="version" value="%{#attr.version}"/>
+            </s:url>
           </c:set>
           <li><a href="${url}">${version}/</a></li>
         </c:forEach>
@@ -73,10 +73,10 @@
       <ul>
         <c:forEach items="${results.artifacts}" var="artifactId">
           <c:set var="url">
-            <ww:url action="browseArtifact" namespace="/">
-              <ww:param name="groupId" value="%{'${groupId}'}"/>
-              <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-            </ww:url>
+            <s:url action="browseArtifact" namespace="/">
+              <s:param name="groupId" value="%{#attr.groupId}"/>
+              <s:param name="artifactId" value="%{#attr.artifactId}"/>
+            </s:url>
           </c:set>
           <li><a href="${url}">${artifactId}/</a></li>
         </c:forEach>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/components/companyLogo.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/components/companyLogo.jsp
index ce3bbe8..204d47f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/components/companyLogo.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/components/companyLogo.jsp
@@ -17,10 +17,10 @@
   ~ under the License.
   --%>
 
-<%@ taglib uri="/webwork" prefix="ww" %>
+<%@ taglib uri="/struts-tags" prefix="s" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <c:if test="${!empty (organisationLogo)}">
-  <ww:set name="organisationUrl" value="organisationUrl"/>
+  <s:set name="organisationUrl" value="organisationUrl"/>
   <c:choose>
     <c:when test="${!empty (organisationUrl)}">
       <a href="${companyUrl}">
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/artifactDecorator.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/artifactDecorator.jsp
index 256e46f..0a25e92 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/artifactDecorator.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/artifactDecorator.jsp
@@ -19,7 +19,7 @@
 
 <%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
 <%@ taglib prefix="page"      uri="http://www.opensymphony.com/sitemesh/page" %>
-<%@ taglib prefix="ww"        uri="/webwork" %>
+<%@ taglib prefix="s"         uri="/struts-tags" %>
 <%@ taglib prefix="c"         uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="redback"   uri="http://plexus.codehaus.org/redback/taglib-1.0"  %>
 <%@ taglib prefix="my"        tagdir="/WEB-INF/tags" %>
@@ -30,12 +30,12 @@
 <html>
 <head>
   <title>Browse Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
-<ww:set name="model" value="model"/>
+<s:set name="model" value="model"/>
 <c:choose>
   <c:when test="${model.packaging == 'maven-plugin'}">
     <c:url var="imageUrl" value="/images/mavenplugin.gif"/>
@@ -81,53 +81,53 @@
   <div id="tabs">
     <span>
       <c:set var="url">
-        <ww:url action="showArtifact">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifact">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Info</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactDependencies">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactDependencies">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Dependencies</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactDependencyTree">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactDependencyTree">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Dependency Tree</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactDependees">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactDependees">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Used By</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactMailingLists">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactMailingLists">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Mailing Lists</my:currentWWUrl>
       <%-- POSTPONED to 1.0-alpha-2
       <redback:ifAnyAuthorized permissions="archiva-access-reports">
         <c:set var="url">
-        <ww:url action="showArtifactReports">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactReports">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Reports</my:currentWWUrl>
       </redback:ifAnyAuthorized>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp
index bb51745..7c85f76 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp
@@ -20,7 +20,7 @@
   --%>
 
 <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
-<%@ taglib uri="/webwork" prefix="ww" %>
+<%@ taglib uri="/struts-tags" prefix="s" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 <%@ taglib prefix="redback" uri="http://plexus.codehaus.org/redback/taglib-1.0" %>
@@ -45,32 +45,10 @@
 </head>
 
 <body onload="<decorator:getProperty property="body.onload" />" class="composite">
-<div id="banner">
-  <span id="bannerLeft">
-    <my:currentWWUrl action="index" namespace="/">
-      <img src="<c:url value='/images/archiva.png' />" alt="" width="188" height="69"/>
-    </my:currentWWUrl>
-  </span>
-  <span id="bannerRight">
-    <ww:action namespace="/components" name="companyInfo" executeResult="true"/>
-  </span>
-
-  <div class="clear">
-    <hr/>
-  </div>
-</div>
-
 <div id="breadcrumbs">
-  <div class="xleft">
+  <div class="xright">
     <%@ include file="/WEB-INF/jsp/redback/include/securityLinks.jsp" %>
   </div>
-
-  <div class="xright">
-    <a href="http://archiva.apache.org">Archiva</a> |
-    <a href="http://maven.apache.org/">Maven</a> |
-    <a href="http://www.apache.org/">Apache</a>
-  </div>
-
   <div class="clear">
     <hr/>
   </div>
@@ -79,18 +57,20 @@
 <div id="leftColumn">
 
   <div id="navcolumn">
-
+    <my:currentWWUrl action="index" namespace="/">
+      <img src="<c:url value='/images/archiva.png' />" alt="" width="155" height="55"/>
+    </my:currentWWUrl>
     <h5>Find</h5>
     <ul>
       <li class="none">
         <my:currentWWUrl action="index" namespace="/">Search</my:currentWWUrl>
       </li>
 
-      <ww:if test="${applicationScope.uiOptions.showFindArtifacts}">
+      <s:if test="%{applicationScope.uiOptions.showFindArtifacts}">
         <li class="none">
           <my:currentWWUrl action="findArtifact" namespace="/">Find Artifact</my:currentWWUrl>
         </li>
-      </ww:if>
+      </s:if>
 
       <li class="none">
         <my:currentWWUrl action="browse" namespace="/">Browse</my:currentWWUrl>
@@ -190,10 +170,10 @@
 %>
 <div id="footer">
   <div class="xleft">
-    Apache Archiva <%= ArchivaVersion.getVersion() %>
+    <a href="http://archiva.apache.org/">Apache Archiva <%= ArchivaVersion.getVersion()%></a>
   </div>
   <div class="xright">
-    Copyright &#169; <%= copyrightRange %> The Apache Software Foundation
+    <a href="http://www.apache.org/">Copyright &#169; <%= copyrightRange%> The Apache Software Foundation</a>
   </div>
 
   <div class="clear">
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/findArtifact.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/findArtifact.jsp
index c325c22..4890bec 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/findArtifact.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/findArtifact.jsp
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Find Artifact</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body onload="document.checksumSearch.file.disabled = false">
@@ -31,7 +31,7 @@
 
 <div id="contentArea">
   <div id="searchBox">
-    <ww:if test="${applicationScope.uiOptions.appletFindEnabled}">
+    <s:if test="%{#attr.applicationScope.uiOptions.appletFindEnabled}">
       <script type="text/javascript">
         function generateMd5( file, defVal )
         {
@@ -55,18 +55,18 @@
         <span class="errorMessage">JavaScript is disabled: using the file browser will not work.</span>
       </noscript>
 
-      <ww:form method="POST" action="checksumSearch" namespace="/"
+      <s:form method="POST" action="checksumSearch" namespace="/"
                onsubmit="this.q.value = generateMd5(this.file.value,this.md5.value); this.file.disabled = true;">
-        <ww:hidden name="q"/>
+        <s:hidden name="q"/>
         <tr>
           <td class="tdLabel"><label for="checksumSearch_file" class="label">Search for:</label></td>
           <td>
             <input type="file" name="file" size="50" value="" id="checksumSearch_file"/>
           </td>
         </tr>
-        <ww:textfield label="Checksum" size="50" name="md5"/>
-        <ww:submit value="Search"/>
-      </ww:form>
+        <s:textfield label="Checksum" size="50" name="md5"/>
+        <s:submit value="Search"/>
+      </s:form>
 
       <p>
         This allows you to search the repository using the checksum of an artifact that you are trying to identify.
@@ -79,7 +79,7 @@
         <b>not</b>
         be uploaded to the server. See the progress bar below for progress of
         locally creating a checksum that is uploaded to the server after you hit "Search".
-        <ww:actionerror/>
+        <s:actionerror/>
       </p>
 
       <p>
@@ -88,17 +88,17 @@
                 width="400" height="20" name="ChecksumApplet">
         </applet>
       </p>
-    </ww:if>
-    <ww:else>
-      <ww:form method="POST" action="checksumSearch" namespace="/">
-        <ww:textfield label="Checksum" size="50" name="q"/>
-        <ww:submit value="Search"/>
-      </ww:form>
+    </s:if>
+    <s:else>
+      <s:form method="POST" action="checksumSearch" namespace="/">
+        <s:textfield label="Checksum" size="50" name="q"/>
+        <s:submit value="Search"/>
+      </s:form>
 
       <p>
-        <ww:actionerror/>
+        <s:actionerror/>
       </p>
-    </ww:else>
+    </s:else>
   </div>
 </div>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/generalError.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/generalError.jsp
index 49a6c1a..9493113 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/generalError.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/generalError.jsp
@@ -17,20 +17,20 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>Error Occurred</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
 <h1>Error Occurred</h1>
 
-<ww:actionerror/>
+<s:actionerror/>
 
 </body>
 </html>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
index cbafc98..60be65e 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactInfo.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactInfo.jspf
index 309b842..ece904e 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactInfo.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactInfo.jspf
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
 
@@ -25,10 +25,10 @@
   <archiva:groupIdLink var="${model.groupId}" includeTop="true" />
   
   <c:set var="url">
-    <ww:url action="browseArtifact" namespace="/">
-      <ww:param name="groupId" value="%{'${model.groupId}'}"/>
-      <ww:param name="artifactId" value="%{'${model.artifactId}'}"/>
-    </ww:url>
+    <s:url action="browseArtifact" namespace="/">
+      <s:param name="groupId" value="%{#attr.model.groupId}"/>
+      <s:param name="artifactId" value="%{#attr.model.artifactId}"/>
+    </s:url>
   </c:set>
   <a href="${url}">${model.artifactId}</a> /
   <strong>${version}</strong>
@@ -80,11 +80,11 @@
       <td>
           ${model.parentProject.groupId} ${model.parentProject.artifactId} ${model.parentProject.version}
         <c:set var="url">
-          <ww:url action="showArtifact" namespace="/">
-            <ww:param name="groupId" value="%{'${model.parentProject.groupId}'}"/>
-            <ww:param name="artifactId" value="%{'${model.parentProject.artifactId}'}"/>
-            <ww:param name="version" value="%{'${model.parentProject.version}'}"/>
-          </ww:url>
+          <s:url action="showArtifact" namespace="/">
+            <s:param name="groupId" value="%{#attr.model.parentProject.groupId}"/>
+            <s:param name="artifactId" value="%{#attr.model.parentProject.artifactId}"/>
+            <s:param name="version" value="%{#attr.model.parentProject.version}"/>
+          </s:url>
         </c:set>
         (<a href="${url}">View</a>)
       </td>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactReports.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactReports.jspf
index e983a29..4180f91 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactReports.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactReports.jspf
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/dependencyTree.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/dependencyTree.jspf
index 0d63005..cd70504 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/dependencyTree.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/dependencyTree.jspf
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf
index 949af75..b344ea3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectDependees.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectDependees.jspf
index 4287a26..fbf3ac0 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectDependees.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectDependees.jspf
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/uploadForm.jspf b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/uploadForm.jspf
index e44d0b1..eed720c 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/uploadForm.jspf
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/uploadForm.jspf
@@ -19,18 +19,18 @@
 
 <%-- http://www.opensymphony.com/webwork/wikidocs/File%20Upload%20Interceptor.html --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
-<ww:textfield name="groupId" label="Group Id" size="50" required="true"/>
-<ww:textfield name="artifactId" label="Artifact Id" size="50" required="true"/>
-<ww:textfield name="version" label="Version" size="50" required="true"/>
-<ww:textfield name="packaging" label="Packaging" size="50" required="true"/>
-<ww:textfield name="classifier" label="Classifier" size="50" required="false"/>
-<ww:checkbox name="generatePom" value="generatePom" 
+<s:textfield name="groupId" label="Group Id" size="50" required="true"/>
+<s:textfield name="artifactId" label="Artifact Id" size="50" required="true"/>
+<s:textfield name="version" label="Version" size="50" required="true"/>
+<s:textfield name="packaging" label="Packaging" size="50" required="true"/>
+<s:textfield name="classifier" label="Classifier" size="50" required="false"/>
+<s:checkbox name="generatePom" value="generatePom"
 	label="Generate Maven 2 POM"/> 
-<ww:file name="artifact" label="Artifact File" required="true"/>
-<ww:file name="pom" label="POM File"/>
-<ww:select name="repositoryId" list="managedRepoIdList" label="Repository Id"/>
+<s:file name="artifact" label="Artifact File" required="true"/>
+<s:file name="pom" label="POM File"/>
+<s:select name="repositoryId" list="managedRepoIdList" label="Repository Id"/>
 
 	
\ No newline at end of file
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/quickSearch.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/quickSearch.jsp
index 45a435e..9bfdd35 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/quickSearch.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/quickSearch.jsp
@@ -17,43 +17,41 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <html>
 <head>
   <title>Quick Search</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
-<ww:if test="%{infoMessage != null}">
+<s:if test="%{infoMessage != null}">
   <p>${infoMessage}</p>
-</ww:if>
+</s:if>
 
 <body>
 
-<h1>Search</h1>
-
 <div id="contentArea">
 <div id="searchBox">
-  <ww:form method="get" action="quickSearch" validate="true">
-    <ww:textfield label="Search for" size="50" name="q"/>
-    <ww:hidden name="completeQueryString" value="${completeQueryString}"/>        
-    <ww:submit label="Go!"/>
-  </ww:form>
+  <s:form method="get" action="quickSearch" validate="true">
+    <s:textfield label="Search for" size="50" name="q"/>
+    <s:hidden name="completeQueryString" value="%{completeQueryString}"/>        
+    <s:submit value="Search"/>
+  </s:form>
 
   <script type="text/javascript">
     document.getElementById("quickSearch_q").focus();
   </script>
 
-  <ww:url id="filteredSearchUrl" action="advancedSearch"/>
-  <ww:a href="%{filteredSearchUrl}">
+  <s:url id="filteredSearchUrl" action="advancedSearch"/>
+  <s:a href="%{filteredSearchUrl}">
     Advanced Search
-  </ww:a>
+  </s:a>
 
   <p>
-    <ww:actionerror/>
+    <s:actionerror/>
   </p>
 </div>
-
+<div id="searchHint">
   <p>
     Enter your search terms. A variety of data will be searched for your keywords.<br/>
     To search for Java classes, packages or methods, use the keyword <code>bytecode:</code>
@@ -62,5 +60,6 @@
     <code>bytecode:myMethod</code>
   </p>
 </div>
+</div>
 </body>
 </html>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/basicReport.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/basicReport.jsp
index f6f1636..a959297 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/basicReport.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/basicReport.jsp
@@ -17,14 +17,14 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
 
 <html>
 <head>
   <title>Reports</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -32,7 +32,7 @@
 
 <div id="contentArea">
 
-  <ww:set name="reports" value="reports"/>  
+  <s:set name="reports" value="reports"/>  
     
   <c:forEach var="repository" items="${repositoriesMap}">
 	<strong>Repository: ${repository.key}</strong>
@@ -41,10 +41,10 @@
 	    <p>
       	<archiva:groupIdLink var="${report.groupId}" includeTop="true"/>
       	<c:set var="url">
-        <ww:url action="browseArtifact" namespace="/">
-          <ww:param name="groupId" value="%{'${report.groupId}'}"/>
-          <ww:param name="artifactId" value="%{'${report.artifactId}'}"/>
-        </ww:url>
+        <s:url action="browseArtifact" namespace="/">
+          <s:param name="groupId" value="%{#attr.report.groupId}"/>
+          <s:param name="artifactId" value="%{#attr.report.artifactId}"/>
+        </s:url>
       	</c:set>
       	<a href="${url}">${report.artifactId}</a> /
       	<strong>${report.version}</strong>
@@ -54,11 +54,11 @@
 	</c:forEach>
   </c:forEach>
 
-  <ww:set name="page" value="page"/>
-  <c:if test="${page > 1}"><a href="<ww:property value='prev' />">&lt;&lt;</a></c:if>
+  <s:set name="page" value="page"/>
+  <c:if test="${page > 1}"><a href="<s:property value='prev' />">&lt;&lt;</a></c:if>
   Page: ${page}
-  <ww:set name="isLastPage" value="isLastPage"/>
-  <c:if test="${!isLastPage}"><a href="<ww:property value='next' />">&gt;&gt;</a></c:if>
+  <s:set name="isLastPage" value="isLastPage"/>
+  <c:if test="${!isLastPage}"><a href="<s:property value='next' />">&gt;&gt;</a></c:if>
 
 </div>
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/blankReport.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/blankReport.jsp
index 14cf9a3..5ef5a32 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/blankReport.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/blankReport.jsp
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Reports</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -30,7 +30,7 @@
 
 <div id="contentArea">
 
-  <ww:text name="The operation generated an empty report."/>
+  <s:text name="The operation generated an empty report."/>
 
 </div>
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp
index 62c12bb..ee67fd3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/pickReport.jsp
@@ -17,12 +17,12 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
 <head>
   <title>Reports</title>
-  <ww:head/>
+  <s:head theme="ajax" />
 </head>
 
 <body>
@@ -31,27 +31,27 @@
 <div id="contentArea">
 
   <h2>Repository Statistics</h2>
-  <ww:form action="generateStatisticsReport" namespace="/report" validate="true">   
+  <s:form action="generateStatisticsReport" namespace="/report" validate="true">
     
-    <ww:optiontransferselect label="Repositories To Be Compared" name="availableRepositories" 
+    <s:optiontransferselect label="Repositories To Be Compared" name="availableRepositories"
 		list="availableRepositories" doubleName="selectedRepositories"
 		doubleList="selectedRepositories" size="8" doubleSize="8"/>
 		
-	<ww:datepicker label="Start Date" name="startDate" id="startDate"/>
-	<ww:datepicker label="End Date" name="endDate" id="endDate"/>
-	<ww:textfield label="Row Count" name="rowCount" />
+	<s:datetimepicker label="Start Date" name="startDate" id="startDate"/>
+	<s:datetimepicker label="End Date" name="endDate" id="endDate"  />  
+	<s:textfield label="Row Count" name="rowCount" />
 		    
-    <ww:submit value="View Statistics"/>
-  </ww:form>
+    <s:submit value="View Statistics"/>
+  </s:form>
     
   <h2>Repository Health</h2>
-  <ww:form namespace="/report" action="generateReport" validate="true">  
-    <ww:textfield label="Row Count" name="rowCount" />
-    <ww:textfield label="Group ID" name="groupId"/>
-    <ww:select label="Repository ID" name="repositoryId" list="repositoryIds"/>    
+  <s:form namespace="/report" action="generateReport" validate="true">
+    <s:textfield label="Row Count" name="rowCount" />
+    <s:textfield label="Group ID" name="groupId"/>
+    <s:select label="Repository ID" name="repositoryId" list="repositoryIds"/>
   
-    <ww:submit value="Show Report"/>
-  </ww:form>
+    <s:submit value="Show Report"/>
+  </s:form>
 
 </div>
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
index 9df361c..57ba124 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib uri="/webwork" prefix="ww" %>
+<%@ taglib uri="/struts-tags" prefix="s" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
@@ -25,7 +25,7 @@
 <html>
 <head>
   <title>Search Results</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -43,43 +43,43 @@
 <c:url var="imgNextPageDisabledUrl" value="/images/icon_next_page_disabled.gif"/>
 
 <div id="contentArea">
-  <div id="searchBox">
+  <div id="searchBoxResults">
 
     <c:if test="${fromFilterSearch == true}">
-      <ww:form method="get" action="filteredSearch" validate="true">
-        <ww:textfield label="Row Count" size="50" name="rowCount"/>
-        <ww:textfield label="Group Id" size="50" name="groupId"/>
-        <ww:textfield label="Artifact Id" size="50" name="artifactId"/>
-        <ww:textfield label="Version" size="50" name="version"/>
-        <ww:textfield label="Class / Package" size="50" name="className"/>
-        <ww:select name="repositoryId" label="Repository ID" list="managedRepositoryList"/>
-        <ww:hidden name="completeQueryString" value="${completeQueryString}"/>
-        <ww:hidden name="fromFilterSearch" value="${fromFilterSearch}"/>
-        <ww:submit label="Go!"/>
-      </ww:form>
+      <s:form method="get" action="filteredSearch" validate="true">
+        <s:textfield label="Row Count" size="50" name="rowCount"/>
+        <s:textfield label="Group Id" size="50" name="groupId"/>
+        <s:textfield label="Artifact Id" size="50" name="artifactId"/>
+        <s:textfield label="Version" size="50" name="version"/>
+        <s:textfield label="Class / Package" size="50" name="className"/>
+        <s:select name="repositoryId" label="Repository ID" list="managedRepositoryList"/>
+        <s:hidden name="completeQueryString" value="%{#attr.completeQueryString}"/>
+        <s:hidden name="fromFilterSearch" value="%{#attr.fromFilterSearch}"/>
+        <s:submit label="Go!"/>
+      </s:form>
   
-      <ww:url id="indexUrl" action="index"/>
-      <ww:a href="%{indexUrl}">
+      <s:url id="indexUrl" action="index"/>
+      <s:a href="%{indexUrl}">
         Quick Search Page
-      </ww:a>
+      </s:a>
       <script type="text/javascript">
         document.getElementById("filteredSearch_groupId").focus();
       </script>
       </c:if>
     <c:if test="${fromFilterSearch == false}">
-      <ww:form method="get" action="quickSearch" validate="true">
-        <ww:textfield label="Search for" size="50" name="q"/>
-        <ww:checkbox label="Search within results" name="searchResultsOnly"/>        
-        <ww:hidden name="completeQueryString" value="${completeQueryString}"/>        
-        <ww:submit label="Go!"/>
-      </ww:form> 
+      <s:form method="get" action="quickSearch" validate="true">
+        <s:textfield label="Search for" size="50" name="q"/>
+        <s:checkbox label="Search within results" name="searchResultsOnly"/>        
+        <s:hidden name="completeQueryString" value="%{#attr.completeQueryString}"/>        
+        <s:submit label="Go!"/>
+      </s:form> 
       <script type="text/javascript">
         document.getElementById("quickSearch_q").focus();
       </script>
     </c:if>
 
   <p>
-    <ww:actionerror/>
+    <s:actionerror/>
   </p>
 
   </div>
@@ -111,49 +111,51 @@
             <%-- Prev & Next icons --%>
               <c:if test="${fromFilterSearch == false}">
                <c:set var="prevPageUrl">
-                 <ww:url action="quickSearch" namespace="/">
-                   <ww:param name="q" value="%{'${q}'}"/>                
-                   <ww:param name="currentPage" value="%{'${currentPage - 1}'}"/>
-                 </ww:url>
+                 <s:url action="quickSearch" namespace="/">
+                   <s:param name="q" value="%{#attr.q}"/>                
+                   <s:param name="currentPage" value="%{#attr.currentPage - 1}"/>
+                 </s:url>
        	      </c:set>
        	      <c:set var="nextPageUrl">
-                 <ww:url action="quickSearch" namespace="/">
-                   <ww:param name="q" value="%{'${q}'}"/>                
-                   <ww:param name="currentPage" value="%{'${currentPage + 1}'}"/>
-                 </ww:url>
+                 <s:url action="quickSearch" namespace="/">
+                   <s:param name="q" value="%{#attr.q}"/>                
+                   <s:param name="currentPage" value="%{#attr.currentPage + 1}"/>
+                 </s:url>
        	      </c:set>    
               </c:if>
 
               <c:if test="${fromFilterSearch == true}">
                <c:set var="prevPageUrl">
-                 <ww:url action="filteredSearch" namespace="/">
-                   <ww:param name="rowCount" value="%{'${rowCount}'}"/>  
-                   <ww:param name="groupId" value="%{'${groupId}'}"/>
-                   <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-                   <ww:param name="version" value="%{'${version}'}"/>
-                   <ww:param name="className" value="%{'${className}'}"/>
-                   <ww:param name="repositoryId" value="%{'${repositoryId}'}"/>
-                   <ww:param name="filterSearch" value="%{'${filterSearch}'}"/>
-  		   <ww:param name="fromResultsPage" value="true"/>
-                   <ww:param name="currentPage" value="%{'${currentPage - 1}'}"/>
- 		  <ww:param name="searchResultsOnly" value="%{'${searchResultsOnly}'}"/>
- 		  <ww:param name="completeQueryString" value="%{'${completeQueryString}'}"/>
-                 </ww:url>
+                 <s:url action="filteredSearch" namespace="/">
+ <%-- 		  <s:param name="q" value="%{#attr.q}"/>   --%>
+                   <s:param name="rowCount" value="%{#attr.rowCount}"/>
+                   <s:param name="groupId" value="%{#attr.groupId}"/>
+                   <s:param name="artifactId" value="%{#attr.artifactId}"/>
+                   <s:param name="version" value="%{#attr.version}"/>
+                   <s:param name="className" value="%{#attr.className}"/>
+                   <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
+                   <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
+  		   <s:param name="fromResultsPage" value="true"/>
+                   <s:param name="currentPage" value="%{#attr.currentPage - 1}"/>
+ 		  <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
+ 		  <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
+                 </s:url>
        	      </c:set>
        	      <c:set var="nextPageUrl">
-                <ww:url action="filteredSearch" namespace="/">
-                  <ww:param name="rowCount" value="%{'${rowCount}'}"/>  
-                  <ww:param name="groupId" value="%{'${groupId}'}"/>
-                  <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-                  <ww:param name="version" value="%{'${version}'}"/>
-                  <ww:param name="className" value="%{'${className}'}"/>
-                  <ww:param name="repositoryId" value="%{'${repositoryId}'}"/>
-                  <ww:param name="filterSearch" value="%{'${filterSearch}'}"/>
-  		  <ww:param name="fromResultsPage" value="true"/>
-                  <ww:param name="currentPage" value="%{'${currentPage + 1}'}"/>
- 		  <ww:param name="searchResultsOnly" value="%{'${searchResultsOnly}'}"/>
-		  <ww:param name="completeQueryString" value="%{'${completeQueryString}'}"/>
-                </ww:url>
+                <s:url action="filteredSearch" namespace="/">
+<%-- 		 <s:param name="q" value="%{#attr.q}"/> --%>
+                  <s:param name="rowCount" value="%{#attr.rowCount}"/>
+                  <s:param name="groupId" value="%{#attr.groupId}"/>
+                  <s:param name="artifactId" value="%{#attr.artifactId}"/>
+                  <s:param name="version" value="%{#attr.version}"/>
+                  <s:param name="className" value="%{#attr.className}"/>
+                  <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
+                  <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
+  		  <s:param name="fromResultsPage" value="true"/>
+                  <s:param name="currentPage" value="%{#attr.currentPage + 1}"/>
+ 		  <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
+		  <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
+                </s:url>
       	      </c:set>    
              </c:if>
             
@@ -197,12 +199,12 @@
                             <c:choose>                   			    
 		              <c:when test="${i != currentPage}">
 		                <c:set var="specificPageUrl">
-		                  <ww:url action="quickSearch" namespace="/">
-		                    <ww:param name="q" value="%{'${q}'}"/>
-		                    <ww:param name="currentPage" value="%{'${i}'}"/>
-		                    <ww:param name="searchResultsOnly" value="%{'${searchResultsOnly}'}"/>
-		                    <ww:param name="completeQueryString" value="%{'${completeQueryString}'}"/>  
-  		                  </ww:url>
+		                  <s:url action="quickSearch" namespace="/">
+		                    <s:param name="q" value="%{#attr.q}"/>
+		                    <s:param name="currentPage" value="%{#attr.i}"/>
+		                    <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
+		                    <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
+  		                  </s:url>
 		      	        </c:set>
 			          <a href="${specificPageUrl}">${i + 1}</a>
 			      </c:when>
@@ -216,19 +218,20 @@
                             <c:choose>                  			    
 		              <c:when test="${i != currentPage}">
 		                <c:set var="specificPageUrl">
-		                  <ww:url action="filteredSearch" namespace="/">
-                                    <ww:param name="rowCount" value="%{'${rowCount}'}"/>  
-                                    <ww:param name="groupId" value="%{'${groupId}'}"/>
-                                    <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-                                    <ww:param name="version" value="%{'${version}'}"/>
-                                    <ww:param name="className" value="%{'${className}'}"/>
-                                    <ww:param name="repositoryId" value="%{'${repositoryId}'}"/>
-                                    <ww:param name="filterSearch" value="%{'${filterSearch}'}"/>
-		                    <ww:param name="fromResultsPage" value="true"/>
-		                    <ww:param name="currentPage" value="%{'${i}'}"/>
-		                    <ww:param name="searchResultsOnly" value="%{'${searchResultsOnly}'}"/>
-		                    <ww:param name="completeQueryString" value="%{'${completeQueryString}'}"/>
-		                  </ww:url>
+		                  <s:url action="filteredSearch" namespace="/">
+<%-- 		                    <s:param name="q" value="%{#attr.q}"/>   --%>
+                                    <s:param name="rowCount" value="%{#attr.rowCount}"/>
+                                    <s:param name="groupId" value="%{#attr.groupId}"/>
+                                    <s:param name="artifactId" value="%{#attr.artifactId}"/>
+                                    <s:param name="version" value="%{#attr.version}"/>
+                                    <s:param name="className" value="%{#attr.className}"/>
+                                    <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
+                                    <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
+		                    <s:param name="fromResultsPage" value="true"/>
+		                    <s:param name="currentPage" value="%{#attr.i}"/>
+		                    <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
+		                    <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
+		                  </s:url>
 		      	        </c:set>
 				<a href="${specificPageUrl}">${i + 1}</a>
 			      </c:when>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
index 8960e1c..ace10b9 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
@@ -26,12 +26,12 @@
 <html>
 <head>
   <title>Browse Repository</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
 
-<ww:set name="model" value="model"/>
+<s:set name="model" value="model"/>
 <c:choose>
   <c:when test="${model.packaging == 'maven-plugin'}">
     <c:url var="imageUrl" value="/images/mavenplugin.gif"/>
@@ -77,53 +77,53 @@
   <div id="tabs">
     <span>
       <c:set var="url">
-        <ww:url action="showArtifact">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifact">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Info</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactDependencies">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactDependencies">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Dependencies</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactDependencyTree">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactDependencyTree">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Dependency Tree</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactDependees">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactDependees">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Used By</my:currentWWUrl>
       <c:set var="url">
-        <ww:url action="showArtifactMailingLists">
-          <ww:param name="groupId" value="%{groupId}"/>
-          <ww:param name="artifactId" value="%{artifactId}"/>
-          <ww:param name="version" value="%{version}"/>
-        </ww:url>
+        <s:url action="showArtifactMailingLists">
+          <s:param name="groupId" value="%{groupId}"/>
+          <s:param name="artifactId" value="%{artifactId}"/>
+          <s:param name="version" value="%{version}"/>
+        </s:url>
       </c:set>
       <my:currentWWUrl url="${url}">Mailing Lists</my:currentWWUrl>
       <%-- POSTPONED to 1.0-alpha-2
       <redback:ifAnyAuthorized permissions="archiva-access-reports">
         <c:set var="url">
-	      <ww:url action="showArtifactReports">
-	        <ww:param name="groupId" value="%{groupId}"/>
-	        <ww:param name="artifactId" value="%{artifactId}"/>
-	        <ww:param name="version" value="%{version}"/>
-	      </ww:url>
+	      <s:url action="showArtifactReports">
+	        <s:param name="groupId" value="%{groupId}"/>
+	        <s:param name="artifactId" value="%{artifactId}"/>
+	        <s:param name="version" value="%{version}"/>
+	      </s:url>
 	    </c:set>
 	    <my:currentWWUrl url="${url}">Reports</my:currentWWUrl>
       </redback:ifAnyAuthorized>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/upload.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/upload.jsp
index c22bccc..ea907a0 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/upload.jsp
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/upload.jsp
@@ -19,13 +19,13 @@
 
 <%-- http://www.opensymphony.com/webwork/wikidocs/File%20Upload%20Interceptor.html --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
 <html>
 <head>
   <title>Upload Artifact</title>
-  <ww:head/>
+  <s:head/>
 </head>
 
 <body>
@@ -33,13 +33,13 @@
 
 <div id="contentArea">
 
-  <ww:actionerror/>
-  <ww:actionmessage/>
+  <s:actionerror/>
+  <s:actionmessage/>
 
-  <ww:form action="upload!doUpload" method="post" enctype="multipart/form-data" validate="true">    
+  <s:form action="upload!doUpload" method="post" enctype="multipart/form-data" validate="true">    
     <%@ include file="/WEB-INF/jsp/include/uploadForm.jspf" %>
-    <ww:submit/>
-  </ww:form>
+    <s:submit/>
+  </s:form>
 </div>
 
 </body>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
index d3e738b..4c6a69f 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
@@ -17,18 +17,18 @@
   ~ under the License.

   --%>

 

-<%@ taglib uri="/webwork" prefix="ww" %>

+<%@ taglib uri="/struts-tags" prefix="s" %>

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 <%@ attribute name="action" %>

 <%@ attribute name="namespace" %>

 <%@ attribute name="url" %>

 

 <c:set var="currentUrl">

-  <ww:url/>

+  <s:url/>

 </c:set>

 <c:if test="${!empty (action) && !empty (namespace)}">

   <c:set var="url">

-    <ww:url action="${action}" namespace="${namespace}"/>

+    <s:url action="%{#attr.action}" namespace="%{#attr.namespace}"/>

   </c:set>

 </c:if>

 <c:set var="text">

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag
index b2289e5..e5260ba 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactLink.tag
@@ -17,7 +17,7 @@
   ~ under the License.
   --%>
 
-<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib prefix="archiva" uri="http://archiva.apache.org" %>
 
@@ -37,8 +37,8 @@
   <c:if test="${!empty (artifactId)}">    
     <c:set var="url">
       <ww:url action="browseArtifact" namespace="/">
-        <ww:param name="groupId" value="%{'${groupId}'}"/>
-        <ww:param name="artifactId" value="%{'${artifactId}'}"/>
+        <ww:param name="groupId" value="%{#attr.groupId}"/>
+        <ww:param name="artifactId" value="%{#attr.artifactId}"/>
       </ww:url>
     </c:set>
     <a href="${url}">${artifactId}</a>
@@ -48,10 +48,10 @@
     <c:when test="${!empty (version)}">
       <c:set var="url">
         <ww:url action="showArtifact" namespace="/">
-          <ww:param name="groupId" value="%{'${groupId}'}"/>
-          <ww:param name="artifactId" value="%{'${artifactId}'}"/>
+          <ww:param name="groupId" value="%{#attr.groupId}"/>
+          <ww:param name="artifactId" value="%{#attr.artifactId}"/>
           <c:if test="${!empty (version)}">
-            <ww:param name="version" value="%{'${version}'}"/>
+            <ww:param name="version" value="%{#attr.version}"/>
           </c:if>
         </ww:url>
       </c:set>
@@ -61,9 +61,9 @@
       <c:forEach items="${versions}" var="v" varStatus="i">
         <c:set var="url">
           <ww:url action="showArtifact" namespace="/">
-            <ww:param name="groupId" value="%{'${groupId}'}"/>
-            <ww:param name="artifactId" value="%{'${artifactId}'}"/>
-            <ww:param name="version" value="%{'${v}'}"/>
+            <ww:param name="groupId" value="%{#attr.groupId}"/>
+            <ww:param name="artifactId" value="%{#attr.artifactId}"/>
+            <ww:param name="version" value="%{#attr.v}"/>
           </ww:url>
         </c:set>
         <a href="${url}">${v}</a>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactTitle.tag b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactTitle.tag
index f11c0ee..bfcb5e4 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactTitle.tag
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/tags/showArtifactTitle.tag
@@ -17,7 +17,7 @@
   ~ under the License.

   --%>

 

-<%@ taglib prefix="ww" uri="/webwork" %>

+<%@ taglib prefix="s" uri="/struts-tags" %>

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 <%@ attribute name="groupId" required="true" %>

 <%@ attribute name="artifactId" %>

@@ -27,17 +27,17 @@
     <c:set var="url">

       <c:choose>

         <c:when test="${!empty (version)}">

-          <ww:url action="showArtifact" namespace="/">

-            <ww:param name="groupId" value="%{'${groupId}'}"/>

-            <ww:param name="artifactId" value="%{'${artifactId}'}"/>

-            <ww:param name="version" value="%{'${version}'}"/>

-          </ww:url>

+          <s:url action="showArtifact" namespace="/">

+            <s:param name="groupId" value="%{#attr.groupId}"/>

+            <s:param name="artifactId" value="%{#attr.artifactId}"/>

+            <s:param name="version" value="%{#attr.version}"/>

+          </s:url>

         </c:when>

         <c:otherwise>

-          <ww:url action="browseArtifact" namespace="/">

-            <ww:param name="groupId" value="%{'${groupId}'}"/>

-            <ww:param name="artifactId" value="%{'${artifactId}'}"/>

-          </ww:url>

+          <s:url action="browseArtifact" namespace="/">

+            <s:param name="groupId" value="%{#attr.groupId}"/>

+            <s:param name="artifactId" value="%{#attr.artifactId}"/>

+          </s:url>

         </c:otherwise>

       </c:choose>

     </c:set>

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/web.xml b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/web.xml
index 0764db5..a8c6135 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/web.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/web.xml
@@ -24,12 +24,10 @@
 
 	<display-name>Apache Archiva</display-name>
 
-	<filter>
-		<filter-name>webwork-cleanup</filter-name>
-		<filter-class>
-			com.opensymphony.webwork.dispatcher.ActionContextCleanUp
-		</filter-class>
-	</filter>
+        <filter>
+          <filter-name>webwork-cleanup</filter-name>
+          <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
+        </filter>
 
 	<filter>
 		<filter-name>sitemesh</filter-name>
@@ -38,12 +36,10 @@
 		</filter-class>
 	</filter>
 
-	<filter>
-		<filter-name>webwork</filter-name>
-		<filter-class>
-			com.opensymphony.webwork.dispatcher.FilterDispatcher
-		</filter-class>
-	</filter>
+        <filter>
+          <filter-name>webwork</filter-name>
+          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
+        </filter>
 
 	<!-- this must be before the sitemesh filter -->
 	<filter-mapping>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css
index ca951f8..b799c25 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css
@@ -69,6 +69,11 @@
     float: right;
 }
 
+.composite {
+	margin-left: 10%;
+	margin-right: 10%;
+}
+
 #banner {
     padding: 0px;
 }
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-theme.css b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-theme.css
index 46856ba..e86aba3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-theme.css
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/maven-theme.css
@@ -23,7 +23,7 @@
 
 body, td, th, select, input, li {
     font-family: Verdana, Helvetica, Arial, sans-serif;
-    font-size: 11pt;
+    font-size: 9pt;
 }
 
 select, input {
@@ -123,9 +123,7 @@
 }
 
 #breadcrumbs {
-    border-top: 1px solid #fff;
-    border-bottom: 1px solid #999;
-    background-color: #F3B455;
+    background-image: url(../images/breadcrumbs.jpg);
     padding: 2px 8px;
 }
 
@@ -298,8 +296,9 @@
 }
 
 #footer {
-    background: url( ../images/footerborder.gif ) 0 5px repeat-x;
+    border-top: 1px solid #CCCCCC;
     padding: 14px 4px 12px 4px;
+	color: #333333;
     margin-top: 2em;
 }
 
@@ -329,3 +328,11 @@
 	margin-right: 20px;
 	
 }
+
+#searchBox {
+	margin: 5%;
+}
+
+#searchHint {
+	margin: 5%;
+}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
index 114580c..c939955 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
@@ -214,7 +214,9 @@
 }
 
 .eXtremeTable .tableRegion .tableHeader {
-	background-color: #F3B455;
+	background-color: None;
+	background-image: url(../images/breadcrumbs.jpg);
+	color: gray;
 }
 
 .eXtremeTable .tableRegion .tableHeaderSort {
@@ -229,11 +231,17 @@
 	border-color: gray !important;	
 }
 
+table.tools th.toolHeading
+{
+	color: gray;
+}
+
 .tools .toolHeading {
 	padding: 0px 3px 0px 3px;
 	margin: 0px !important;
 	font-size: 11px !important;
-	background-color: #F3B455 !important;
+	background-color: red;
+	background-image: url(../images/breadcrumbs.jpg);
 }
 
 div.repository h3 {
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/images/breadcrumbs.jpg b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/images/breadcrumbs.jpg
new file mode 100644
index 0000000..1385fa0
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/images/breadcrumbs.jpg
Binary files differ
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/checkboxlist.ftl b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/checkboxlist.ftl
index 75d8c6d..7bfad75 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/checkboxlist.ftl
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/checkboxlist.ftl
@@ -1,4 +1,4 @@
-<@ww.iterator value="parameters.list">
+<@s.iterator value="parameters.list">
     <#if parameters.listKey?exists>
         <#assign itemKey = stack.findValue(parameters.listKey)/>
     <#else>
@@ -36,4 +36,4 @@
 <label for="${parameters.id?html}${itemKey?html}"><#rt/>
     ${itemValue}<#t/>
 </label><br/>
-</@ww.iterator>
+</@s.iterator>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/radiomap.ftl b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/radiomap.ftl
index 89ef578..64796bc 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/radiomap.ftl
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/archiva/radiomap.ftl
@@ -1,4 +1,4 @@
-<@ww.iterator value="parameters.list">
+<@s.iterator value="parameters.list">
     <#if parameters.listKey?exists>
         <#assign itemKey = stack.findValue(parameters.listKey)/>
     <#else>
@@ -36,4 +36,4 @@
 <label for="${parameters.id?html}${itemKey?html}"><#rt/>
     ${itemValue}<#t/>
 </label><br/>
-</@ww.iterator>
+</@s.iterator>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/xhtml/hidden.ftl b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/xhtml/hidden.ftl
index c97423f..2755cb3 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/xhtml/hidden.ftl
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/template/xhtml/hidden.ftl
@@ -1,7 +1,7 @@
 <input type="hidden"<#rt/>
  name="${parameters.name?default("")?html}"<#rt/>
 <#if parameters.nameValue?exists>
- value="<@ww.property value="parameters.nameValue"/>"<#rt/>
+ value="<@s.property value="parameters.nameValue"/>"<#rt/>
 </#if>
 <#if parameters.id?exists>
  id="${parameters.id?html}"<#rt/>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AbstractWebworkTestCase.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AbstractWebworkTestCase.java
index 35f526e..d5cefc2 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AbstractWebworkTestCase.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AbstractWebworkTestCase.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.ActionSupport;
+import com.opensymphony.xwork2.ActionSupport;
 import org.apache.commons.lang.StringUtils;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganizationInfoActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganizationInfoActionTest.java
index 66ca872..4a8b0ea 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganizationInfoActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/EditOrganizationInfoActionTest.java
@@ -19,12 +19,8 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
-import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.Configuration;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.OrganisationInformation;
-import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.easymock.MockControl;
 
 /**
  * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/OrganizationInfoActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/OrganizationInfoActionTest.java
index fec9e8f..42b7525 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/OrganizationInfoActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/appearance/OrganizationInfoActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.OrganisationInformation;
 import org.apache.maven.archiva.configuration.Configuration;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorActionTest.java
index 213ce9f..8f35ec7 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
@@ -33,7 +33,7 @@
 import org.apache.maven.archiva.policies.ReleasesPolicy;
 import org.apache.maven.archiva.policies.SnapshotsPolicy;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorActionTest.java
index d3d30f1..b92e8e2 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -28,7 +28,7 @@
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorActionTest.java
index b8b9006..451c023 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorActionTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.maven.archiva.web.action.admin.connectors.proxy;
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
@@ -25,7 +25,7 @@
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorActionTest.java
index 31364f4..cafc8eb 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
@@ -33,7 +33,7 @@
 import org.apache.maven.archiva.policies.ReleasesPolicy;
 import org.apache.maven.archiva.policies.SnapshotsPolicy;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorActionTest.java
index 16544fd..5afbb7b 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorActionTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.maven.archiva.web.action.admin.connectors.proxy;
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
@@ -25,7 +25,7 @@
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsActionTest.java
index fd54661..ad37f07 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -28,7 +28,7 @@
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsActionTest.java
index 1e1d6b3..2f5615d 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -30,7 +30,7 @@
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.configuration.functors.ProxyConnectorConfigurationOrderComparator;
 import org.apache.maven.archiva.web.action.AbstractWebworkTestCase;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
 import org.codehaus.plexus.registry.RegistryException;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryActionTest.java
index beaafba..2c7e9be 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryActionTest.java
@@ -19,15 +19,15 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.role.RoleManager;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
@@ -63,6 +63,7 @@
         return AbstractManagedRepositoriesAction.class.getName().replace( '.', '/' ) + "Test.xml";
     }
     
+    @Override
     protected void setUp()
         throws Exception
     {
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryActionTest.java
index 8656ebe..263efe7 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryActionTest.java
@@ -19,12 +19,12 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java
index 41536c1..a183746 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
@@ -31,8 +31,8 @@
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.role.RoleManager;
 import org.codehaus.plexus.redback.role.RoleManagerException;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.registry.RegistryException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryActionTest.java
index 1457f59..2cdd83a 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryActionTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupActionTest.java
index 46efd31..ffcac5d 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupActionTest.java
@@ -21,12 +21,12 @@
 
 import java.util.Collections;
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java
index 5c944f8..b02afc4 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java
@@ -19,14 +19,14 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.role.RoleManager;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryActionTest.java
index eb8a929..85f8909 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryActionTest.java
@@ -19,12 +19,12 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java
index 1b372a1..5440d23 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.java
@@ -21,9 +21,9 @@
 
 import com.meterware.servletunit.ServletRunner;
 import com.meterware.servletunit.ServletUnitClient;
-import com.opensymphony.xwork.Action;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import com.opensymphony.xwork2.Action;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 
 /**
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsActionTest.java
index 5b12e8e..5918b33 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsActionTest.java
@@ -25,14 +25,14 @@
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
 import com.meterware.servletunit.ServletRunner;
 import com.meterware.servletunit.ServletUnitClient;
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 
 /**
  * RepositoryGroupsActionTest
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesActionTest.java
index 9cd3606..e5783d4 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesActionTest.java
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/SortRepositoriesActionTest.java
@@ -22,12 +22,12 @@
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.struts2.interceptor.SecureActionException;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
-import com.opensymphony.xwork.Action;
+import com.opensymphony.xwork2.Action;
 
 /**
  * SortRepositoriesActionTest
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/AbstractManagedRepositoriesActionTest.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/AbstractManagedRepositoriesActionTest.xml
index ba213da..5feec48 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/AbstractManagedRepositoriesActionTest.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/AbstractManagedRepositoriesActionTest.xml
@@ -26,7 +26,7 @@
     </component>
 
     <component>
-      <role>com.opensymphony.xwork.Action</role>
+      <role>com.opensymphony.xwork2.Action</role>
       <role-hint>addManagedRepositoryAction</role-hint>
       <implementation>org.apache.maven.archiva.web.action.admin.repositories.AddManagedRepositoryAction</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
@@ -34,7 +34,7 @@
     </component>
     
     <component>
-      <role>com.opensymphony.xwork.Action</role>
+      <role>com.opensymphony.xwork2.Action</role>
       <role-hint>deleteManagedRepositoryAction</role-hint>
       <implementation>org.apache.maven.archiva.web.action.admin.repositories.DeleteManagedRepositoryAction</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
@@ -48,7 +48,7 @@
     </component>
     
     <component>
-      <role>com.opensymphony.xwork.Action</role>
+      <role>com.opensymphony.xwork2.Action</role>
       <role-hint>editManagedRepositoryAction</role-hint>
       <implementation>org.apache.maven.archiva.web.action.admin.repositories.EditManagedRepositoryAction</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.xml
index 43c1eae..40c33e0 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.xml
@@ -30,7 +30,7 @@
       <implementation>org.apache.maven.archiva.web.action.admin.repositories.RoleManagerStub</implementation>
     </component>
     <component>
-      <role>com.opensymphony.xwork.Action</role>
+      <role>com.opensymphony.xwork2.Action</role>
       <role-hint>deleteManagedRepositoryAction</role-hint>
       <implementation>org.apache.maven.archiva.web.action.admin.repositories.DeleteManagedRepositoryAction</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml
index d6c8682..bffa416 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesActionTest.xml
@@ -25,7 +25,7 @@
       <lifecycle-handler>basic</lifecycle-handler>
     </component>
     <component>
-      <role>com.opensymphony.xwork.Action</role>
+      <role>com.opensymphony.xwork2.Action</role>
       <role-hint>repositoriesAction</role-hint>
       <implementation>org.apache.maven.archiva.web.action.admin.repositories.RepositoriesAction</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
diff --git a/archiva-modules/archiva-web/archiva-webdav/pom.xml b/archiva-modules/archiva-web/archiva-webdav/pom.xml
index 9c95ff0..2a825f0 100644
--- a/archiva-modules/archiva-web/archiva-webdav/pom.xml
+++ b/archiva-modules/archiva-web/archiva-webdav/pom.xml
@@ -81,7 +81,7 @@
     </dependency>
     <dependency>
       <groupId>org.codehaus.redback</groupId>
-      <artifactId>redback-xwork-integration</artifactId>
+      <artifactId>redback-struts2-integration</artifactId>
     </dependency>
     <dependency>
       <groupId>org.codehaus.redback</groupId>
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java
index fb47038..332462a 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java
@@ -64,7 +64,7 @@
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
-import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork2.ActionContext;
 
 /**
  * @author <a href="mailto:james@atlassian.com">James William Dumay</a> Portions from the Apache Jackrabbit Project
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
index f56d7ab..14645f6 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
@@ -85,12 +85,12 @@
 import org.codehaus.plexus.redback.policy.MustChangePasswordException;
 import org.codehaus.plexus.redback.system.SecuritySession;
 import org.codehaus.plexus.redback.system.SecuritySystemConstants;
-import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
+import org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.opensymphony.xwork.ActionContext;
+import com.opensymphony.xwork2.ActionContext;
 
 /**
  * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
index 1ebf02a..e06d331 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
@@ -32,7 +32,7 @@
 import org.codehaus.plexus.redback.authorization.UnauthorizedException;
 import org.codehaus.plexus.redback.policy.MustChangePasswordException;
 import org.codehaus.plexus.redback.policy.AccountLockedException;
-import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
+import org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java
index a73e72d..d8b1d98 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java
@@ -46,7 +46,7 @@
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.security.ArchivaXworkUser;
 import org.apache.maven.archiva.security.ServletAuthenticator;
-import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
+import org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator;
 import org.codehaus.plexus.spring.PlexusToSpringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java
index 1b7d82b..4d0bc44 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java
@@ -46,7 +46,7 @@
 import org.codehaus.plexus.redback.policy.MustChangePasswordException;
 import org.codehaus.plexus.redback.system.SecuritySession;
 import org.codehaus.plexus.redback.users.User;
-import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
+import org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator;
 
 public class ArchivaDavSessionProviderTest extends TestCase
 {
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java
index e029ca5..5e1b006 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java
@@ -40,8 +40,8 @@
 import org.codehaus.plexus.redback.authorization.UnauthorizedException;
 import org.codehaus.plexus.redback.system.DefaultSecuritySession;
 import org.codehaus.plexus.redback.system.SecuritySession;
-import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
-import org.codehaus.plexus.redback.xwork.filter.authentication.basic.HttpBasicAuthentication;
+import org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator;
+import org.codehaus.plexus.redback.struts2.filter.authentication.basic.HttpBasicAuthentication;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 import org.easymock.classextension.MockClassControl;
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/maven/archiva/webdav/RepositoryServletTest.xml b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/maven/archiva/webdav/RepositoryServletTest.xml
index c691ee0..fd67257 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/maven/archiva/webdav/RepositoryServletTest.xml
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/maven/archiva/webdav/RepositoryServletTest.xml
@@ -144,7 +144,7 @@
           <field-name>mimeTypes</field-name>
         </requirement>
         <requirement>
-          <role>org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator</role>
+          <role>org.codehaus.plexus.redback.struts2.filter.authentication.HttpAuthenticator</role>
           <role-hint>basic</role-hint>
           <field-name>httpAuth</field-name>
         </requirement>
diff --git a/pom.xml b/pom.xml
index 2c32561..1d3daa9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.0-alpha-3</version>
+        <version>1.0-alpha-4</version>
         <executions>
           <execution>
             <goals>
@@ -83,6 +83,7 @@
                     <exclude>ant:ant-optional</exclude>
                     <!-- exclude>org.apache.maven.wagon:wagon-http-lightweight</exclude -->
                     <exclude>xom:xom</exclude>
+                    <exclude>org.codehaus.plexus:plexus-xwork-integration</exclude>
                   </excludes>
                 </bannedDependencies>
               </rules>
@@ -410,7 +411,7 @@
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-spring</artifactId>
-        <version>1.0</version>
+        <version>1.2</version>
         <exclusions>
           <exclusion>
             <groupId>org.codehaus.plexus</groupId>
@@ -653,6 +654,9 @@
           </exclusion>
         </exclusions>
       </dependency>
+      
+      <!-- redback -->
+      
       <dependency>
         <groupId>org.codehaus.redback</groupId>
         <artifactId>redback-rbac-memory</artifactId>
@@ -660,8 +664,8 @@
         <scope>test</scope>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
@@ -672,8 +676,8 @@
         <scope>test</scope>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
@@ -684,8 +688,8 @@
         <scope>test</scope>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
@@ -695,8 +699,8 @@
         <version>${redback.version}</version>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
@@ -706,8 +710,8 @@
         <version>${redback.version}</version>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
@@ -717,8 +721,8 @@
         <version>${redback.version}</version>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
@@ -728,25 +732,25 @@
         <version>${redback.version}</version>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.codehaus.redback</groupId>
-        <artifactId>redback-taglib</artifactId>
+        <artifactId>redback-struts2-taglib</artifactId>
         <version>${redback.version}</version>
         <exclusions>
           <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.codehaus.redback</groupId>
-        <artifactId>redback-xwork-content</artifactId>
+        <artifactId>redback-struts2-content</artifactId>
         <version>${redback.version}</version>
         <type>war</type>
         <exclusions>
@@ -754,11 +758,15 @@
             <groupId>classworlds</groupId>
             <artifactId>classworlds</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.codehaus.redback</groupId>
-        <artifactId>redback-xwork-integration</artifactId>
+        <artifactId>redback-struts2-integration</artifactId>
         <version>${redback.version}</version>
         <exclusions>
           <exclusion>
@@ -772,13 +780,12 @@
           <exclusion>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-container-default</artifactId>
-          </exclusion>
+          </exclusion>	
         </exclusions>
       </dependency>
+      
+      <!-- redback -->
+      
       <dependency>
         <groupId>org.codehaus.plexus.registry</groupId>
         <artifactId>plexus-registry-api</artifactId>
@@ -870,9 +877,20 @@
         <version>${wagon.version}</version>
       </dependency>
       <dependency>
-        <groupId>com.opensymphony</groupId>
-        <artifactId>webwork</artifactId>
-        <version>2.2.6</version>
+        <groupId>org.apache.struts</groupId>
+        <artifactId>struts2-core</artifactId>
+        <version>2.0.11.2</version>
+        <exclusions>
+          <exclusion>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.struts</groupId>
+        <artifactId>struts2-spring-plugin</artifactId>
+        <version>2.0.11.2</version>
         <exclusions>
           <exclusion>
             <groupId>commons-logging</groupId>
@@ -930,7 +948,7 @@
       <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
-        <version>2.5.1</version>
+        <version>2.5.5</version>
         <exclusions>
           <exclusion>
             <groupId>commons-logging</groupId>
@@ -941,7 +959,18 @@
       <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
-        <version>2.5.1</version>
+        <version>2.5.5</version>
+        <exclusions>
+          <exclusion>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-beans</artifactId>
+        <version>2.5.5</version>
         <exclusions>
           <exclusion>
             <groupId>commons-logging</groupId>
@@ -995,17 +1024,6 @@
         </exclusions>
       </dependency>
       <dependency>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-xwork-integration</artifactId>
-        <version>1.0-alpha-7</version>
-        <exclusions>
-          <exclusion>
-            <groupId>velocity</groupId>
-            <artifactId>velocity-dep</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
         <groupId>net.sf.ehcache</groupId>
         <artifactId>ehcache</artifactId>
         <version>1.3.0</version>
@@ -1021,7 +1039,7 @@
   <properties>
     <maven.version>2.0.8</maven.version>
     <wagon.version>1.0-beta-4</wagon.version>
-    <redback.version>1.1.1</redback.version>
+    <redback.version>1.2-SNAPSHOT</redback.version>
     <jetty.version>6.1.6</jetty.version>
     <binder.version>0.8.1</binder.version>
   </properties>