diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml
index c0b9023..99bceb7 100644
--- a/apps/showcase/pom.xml
+++ b/apps/showcase/pom.xml
@@ -95,6 +95,11 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-velocity-plugin</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
             <scope>provided</scope>
diff --git a/apps/showcase/src/main/resources/struts-tags-ui.xml b/apps/showcase/src/main/resources/struts-tags-ui.xml
index 69b9bda..13e33d6 100644
--- a/apps/showcase/src/main/resources/struts-tags-ui.xml
+++ b/apps/showcase/src/main/resources/struts-tags-ui.xml
@@ -24,7 +24,7 @@
 	"http://struts.apache.org/dtds/struts-2.5.dtd">
 
 <struts>
-    <package name="ui-tags" extends="struts-default" namespace="/tags/ui">
+    <package name="ui-tags" extends="velocity-default" namespace="/tags/ui">
         <action name="example" class="org.apache.struts2.showcase.UITagExample">
             <result>/WEB-INF/tags/ui/example.jsp</result>
             <result name="input">/WEB-INF/tags/ui/example.jsp</result>
diff --git a/assembly/src/main/assembly/all.xml b/assembly/src/main/assembly/all.xml
index 36ca3f5..0c08b48 100644
--- a/assembly/src/main/assembly/all.xml
+++ b/assembly/src/main/assembly/all.xml
@@ -209,6 +209,10 @@
         <directory>../plugins/tiles/target/apidocs</directory>
         <outputDirectory>docs/struts2-plugins/struts2-tiles-plugin/apidocs</outputDirectory>
       </fileSet>
+      <fileSet>
+        <directory>../plugins/velocity/target/apidocs</directory>
+        <outputDirectory>docs/struts2-plugins/struts2-velocity-plugin/apidocs</outputDirectory>
+      </fileSet>
 
     <!-- bundles -->
     <fileSet>
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
index 24d388e..ce1587d 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
@@ -22,6 +22,7 @@
 import com.opensymphony.xwork2.FileManager;
 import com.opensymphony.xwork2.FileManagerFactory;
 import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.config.BeanSelectionProvider;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationException;
 import com.opensymphony.xwork2.config.ConfigurationProvider;
@@ -116,6 +117,7 @@
         this.errorIfMissing = errorIfMissing;
 
         Map<String, String> mappings = new HashMap<>();
+        mappings.put("-//Apache Struts//XWork 2.6//EN", "xwork-2.6.dtd");
         mappings.put("-//Apache Struts//XWork 2.5//EN", "xwork-2.5.dtd");
         mappings.put("-//Apache Struts//XWork 2.3//EN", "xwork-2.3.dtd");
         mappings.put("-//Apache Struts//XWork 2.1.3//EN", "xwork-2.1.3.dtd");
@@ -219,14 +221,28 @@
 
                     final String nodeName = child.getNodeName();
 
-                    if ("bean".equals(nodeName)) {
+                    if ("bean-selection".equals(nodeName)) {
+                        String name = child.getAttribute("name");
+                        String impl = child.getAttribute("class");
+                        try {
+                            Class classImpl = ClassLoaderUtil.loadClass(impl, getClass());
+                            if (BeanSelectionProvider.class.isAssignableFrom(classImpl)) {
+                                BeanSelectionProvider provider = (BeanSelectionProvider) classImpl.newInstance();
+                                provider.register(containerBuilder, props);
+                            } else {
+                                throw new ConfigurationException("The bean-provider: name:" + name + " class:" + impl + " does not implement " + BeanSelectionProvider.class.getName(), childNode);
+                            }
+                        } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
+                            throw new ConfigurationException("Unable to load bean-provider: name:" + name + " class:" + impl, e, childNode);
+                        }
+                    } else if ("bean".equals(nodeName)) {
                         String type = child.getAttribute("type");
                         String name = child.getAttribute("name");
                         String impl = child.getAttribute("class");
                         String onlyStatic = child.getAttribute("static");
                         String scopeStr = child.getAttribute("scope");
                         boolean optional = "true".equals(child.getAttribute("optional"));
-                        Scope scope = Scope.SINGLETON;
+                        Scope scope;
                         if ("prototype".equals(scopeStr)) {
                             scope = Scope.PROTOTYPE;
                         } else if ("request".equals(scopeStr)) {
@@ -237,6 +253,8 @@
                             scope = Scope.SINGLETON;
                         } else if ("thread".equals(scopeStr)) {
                             scope = Scope.THREAD;
+                        } else {
+                            scope = Scope.SINGLETON;
                         }
 
                         if (StringUtils.isEmpty(name)) {
diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java
index 3f9da83..2d12095 100644
--- a/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java
@@ -102,9 +102,6 @@
     
     /** Maximum strong sizing for MruCacheStorage for freemarker */
     public static final String STRUTS_FREEMARKER_MRU_MAX_STRONG_SIZE = "struts.freemarker.mru.max.strong.size";
-    
-    /** org.apache.struts2.views.velocity.VelocityManager implementation class */
-    public static final String STRUTS_VELOCITY_MANAGER_CLASSNAME = "struts.velocity.manager.classname";
 
     /** The Velocity configuration file path */
     public static final String STRUTS_VELOCITY_CONFIGFILE = "struts.velocity.configfile";
diff --git a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java b/core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java
similarity index 98%
rename from core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
rename to core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java
index 0ebe8cd..2551f77 100644
--- a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
+++ b/core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java
@@ -67,7 +67,6 @@
 import org.apache.struts2.util.ContentTypeMatcher;
 import org.apache.struts2.views.freemarker.FreemarkerManager;
 import org.apache.struts2.views.util.UrlHelper;
-import org.apache.struts2.views.velocity.VelocityManager;
 
 /**
  * Selects the implementations of key framework extension points, using the loaded
@@ -365,9 +364,7 @@
  *   <li><code>struts.configuration.xml.reload = true</code></li>
  * </ul>
  */
-public class DefaultBeanSelectionProvider extends AbstractBeanSelectionProvider {
-
-    private static final Logger LOG = LogManager.getLogger(DefaultBeanSelectionProvider.class);
+public class StrutsBeanSelectionProvider extends AbstractBeanSelectionProvider {
 
     public void register(ContainerBuilder builder, LocatableProperties props) {
         alias(ObjectFactory.class, StrutsConstants.STRUTS_OBJECTFACTORY, builder, props);
@@ -404,7 +401,6 @@
         alias(ActionMapper.class, StrutsConstants.STRUTS_MAPPER_CLASS, builder, props);
         alias(MultiPartRequest.class, StrutsConstants.STRUTS_MULTIPART_PARSER, builder, props, Scope.PROTOTYPE);
         alias(FreemarkerManager.class, StrutsConstants.STRUTS_FREEMARKER_MANAGER_CLASSNAME, builder, props);
-        alias(VelocityManager.class, StrutsConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME, builder, props);
         alias(UrlRenderer.class, StrutsConstants.STRUTS_URL_RENDERER, builder, props);
         alias(ActionValidatorManager.class, StrutsConstants.STRUTS_ACTIONVALIDATORMANAGER, builder, props);
         alias(ValueStackFactory.class, StrutsConstants.STRUTS_VALUESTACKFACTORY, builder, props);
diff --git a/core/src/main/java/org/apache/struts2/config/StrutsJavaConfiguration.java b/core/src/main/java/org/apache/struts2/config/StrutsJavaConfiguration.java
index da84d5e..1129304 100644
--- a/core/src/main/java/org/apache/struts2/config/StrutsJavaConfiguration.java
+++ b/core/src/main/java/org/apache/struts2/config/StrutsJavaConfiguration.java
@@ -19,8 +19,10 @@
 package org.apache.struts2.config;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.struts2.config.entities.BeanConfig;
+import org.apache.struts2.config.entities.BeanSelectionConfig;
 import org.apache.struts2.config.entities.ConstantConfig;
 
 public interface StrutsJavaConfiguration {
@@ -28,5 +30,7 @@
 
     List<ConstantConfig> constants();
 
+    default Optional<BeanSelectionConfig> beanSelection() { return Optional.empty();}
+
     List<String> unknownHandlerStack();
 }
diff --git a/core/src/main/java/org/apache/struts2/config/StrutsJavaConfigurationProvider.java b/core/src/main/java/org/apache/struts2/config/StrutsJavaConfigurationProvider.java
index 5aaaf57..7538ea3 100644
--- a/core/src/main/java/org/apache/struts2/config/StrutsJavaConfigurationProvider.java
+++ b/core/src/main/java/org/apache/struts2/config/StrutsJavaConfigurationProvider.java
@@ -24,9 +24,12 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
+import com.opensymphony.xwork2.config.BeanSelectionProvider;
+import com.opensymphony.xwork2.util.ClassLoaderUtil;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.struts2.config.entities.BeanConfig;
+import org.apache.struts2.config.entities.BeanSelectionConfig;
 import org.apache.struts2.config.entities.ConstantConfig;
 
 import com.opensymphony.xwork2.config.Configuration;
@@ -91,6 +94,20 @@
             }
         }
 
+        // bean-selection
+        javaConfig.beanSelection().ifPresent(beanSelectionConfig -> {
+            try {
+                LOG.debug("Registering bean selection provider {} of type {}",
+                    beanSelectionConfig.getName(), beanSelectionConfig.getClazz().getName());
+
+                BeanSelectionProvider provider = beanSelectionConfig.getClazz().newInstance();
+                provider.register(builder, props);
+            } catch (IllegalAccessException | InstantiationException e) {
+                throw new ConfigurationException("Unable to load : name:" + beanSelectionConfig.getName()
+                    + " class:" + beanSelectionConfig.getClazz().getName());
+            }
+        });
+
         // unknown-handler-stack
         List<String> unknownHandlers = javaConfig.unknownHandlerStack();
         if (unknownHandlers != null) {
@@ -125,10 +142,10 @@
             } else {
                 if (containerBuilder.contains(beanConf.getType(), beanConf.getName())) {
                     Location loc = LocationUtils
-                            .getLocation(loadedBeans.get(beanConf.getType().getName() + beanConf.getName()));
+                        .getLocation(loadedBeans.get(beanConf.getType().getName() + beanConf.getName()));
                     if (throwExceptionOnDuplicateBeans) {
                         throw new ConfigurationException("Bean type " + beanConf.getType() + " with the name "
-                                + beanConf.getName() + " has already been loaded by " + loc, javaConfig);
+                            + beanConf.getName() + " has already been loaded by " + loc, javaConfig);
                     }
                 }
 
@@ -137,17 +154,21 @@
                 beanConf.getClazz().getDeclaredConstructors();
 
                 LOG.debug("Loaded type: {} name: {} clazz: {}", beanConf.getType(), beanConf.getName(),
-                        beanConf.getClazz());
+                    beanConf.getClazz());
+
                 containerBuilder.factory(
-                        beanConf.getType(), beanConf.getName(), new LocatableFactory(beanConf.getName(),
-                                beanConf.getType(), beanConf.getClazz(), beanConf.getScope(), javaConfig),
-                        beanConf.getScope());
+                    beanConf.getType(),
+                    beanConf.getName(),
+                    new LocatableFactory(
+                        beanConf.getName(), beanConf.getType(), beanConf.getClazz(), beanConf.getScope(), javaConfig
+                    ),
+                    beanConf.getScope());
             }
             loadedBeans.put(beanConf.getType().getName() + beanConf.getName(), javaConfig);
         } catch (Throwable ex) {
             if (!beanConf.isOptional()) {
                 throw new ConfigurationException(
-                        "Unable to load bean: type:" + beanConf.getType() + " class:" + beanConf.getClazz(), ex);
+                    "Unable to load bean: type:" + beanConf.getType() + " class:" + beanConf.getClazz(), ex);
             } else {
                 LOG.debug("Unable to load optional class: {}", beanConf.getClazz());
             }
diff --git a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
index ef27b6c..5f4bf9e 100644
--- a/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
+++ b/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
@@ -73,6 +73,7 @@
         dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN", "struts-2.1.7.dtd");
         dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.3//EN", "struts-2.3.dtd");
         dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.5//EN", "struts-2.5.dtd");
+        dtdMappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.6//EN", "struts-2.6.dtd");
         setDtdMappings(dtdMappings);
         File file = new File(filename);
         if (file.getParent() != null) {
diff --git a/core/src/main/java/org/apache/struts2/config/entities/BeanSelectionConfig.java b/core/src/main/java/org/apache/struts2/config/entities/BeanSelectionConfig.java
new file mode 100644
index 0000000..dfa7697
--- /dev/null
+++ b/core/src/main/java/org/apache/struts2/config/entities/BeanSelectionConfig.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package org.apache.struts2.config.entities;
+
+import com.opensymphony.xwork2.config.BeanSelectionProvider;
+import com.opensymphony.xwork2.inject.Container;
+
+public class BeanSelectionConfig {
+
+    private final Class<? extends BeanSelectionProvider> clazz;
+    private final String name;
+
+    public BeanSelectionConfig(Class<? extends BeanSelectionProvider> clazz) {
+        this(clazz, Container.DEFAULT_NAME);
+    }
+
+    public BeanSelectionConfig(Class<? extends BeanSelectionProvider> clazz, String name) {
+        this.clazz = clazz;
+        this.name = name;
+    }
+
+    public Class<? extends BeanSelectionProvider> getClazz() {
+        return clazz;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java
index d92ce00..904296f 100644
--- a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java
+++ b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java
@@ -185,7 +185,6 @@
         map.put(StrutsConstants.STRUTS_FREEMARKER_TEMPLATES_CACHE_UPDATE_DELAY, freemarkerTemplatesCacheUpdateDelay);
         map.put(StrutsConstants.STRUTS_FREEMARKER_BEANWRAPPER_CACHE, Objects.toString(freemarkerBeanwrapperCache, null));
         map.put(StrutsConstants.STRUTS_FREEMARKER_MRU_MAX_STRONG_SIZE, Objects.toString(freemarkerMruMaxStrongSize, null));
-        map.put(StrutsConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME, beanConfToString(velocityManagerClassname));
         map.put(StrutsConstants.STRUTS_VELOCITY_CONFIGFILE, velocityConfigfile);
         map.put(StrutsConstants.STRUTS_VELOCITY_TOOLBOXLOCATION, velocityToolboxlocation);
         map.put(StrutsConstants.STRUTS_VELOCITY_CONTEXTS, StringUtils.join(velocityContexts, ','));
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 575de94..27d025b 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -44,7 +44,7 @@
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsException;
 import org.apache.struts2.StrutsStatics;
-import org.apache.struts2.config.DefaultBeanSelectionProvider;
+import org.apache.struts2.config.StrutsBeanSelectionProvider;
 import org.apache.struts2.config.DefaultPropertiesProvider;
 import org.apache.struts2.config.PropertiesConfigurationProvider;
 import org.apache.struts2.config.StrutsJavaConfiguration;
@@ -481,7 +481,7 @@
     }
 
     private void init_AliasStandardObjects() {
-        configurationManager.addContainerProvider(new DefaultBeanSelectionProvider());
+        configurationManager.addContainerProvider(new StrutsBeanSelectionProvider());
     }
 
     private Container init_PreloadConfiguration() {
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java b/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java
index cf4dd47..7859702 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/StaticContentLoader.java
@@ -1,59 +1,61 @@
-/*
- * 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.
- */
-package org.apache.struts2.dispatcher;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * Interface for loading static resources, based on a path. After implementing your own static content loader
- * you must tell the framework how to use it, eg.
- *
- * &lt;bean name="myContentLoader" type="org.apache.struts2.dispatcher" class="com.company.struts.MyContentLoader"/&gt;
- * &lt;constant name="struts.staticContentLoader" value="myContentLoader"/&gt;
- *
- * Check {@link org.apache.struts2.config.DefaultBeanSelectionProvider} for more details.
- */
-public interface StaticContentLoader {
-
-    /**
-     * @param path Requested resource path
-     * @return true if this loader is able to load this type of resource, false otherwise
-     */
-    public boolean canHandle(String path);
-
-    /**
-     * @param filterConfig The filter configuration
-     */
-    public abstract void setHostConfig(HostConfig filterConfig);
-
-    /**
-     * Locate a static resource and copy directly to the response, setting the
-     * appropriate caching headers.
-     *
-     * @param path     The resource name
-     * @param request  The request
-     * @param response The response
-     * @throws IOException If anything goes wrong
-     */
-    public abstract void findStaticResource(String path, HttpServletRequest request, HttpServletResponse response)
-            throws IOException;
-
-}
+/*
+ * 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.
+ */
+package org.apache.struts2.dispatcher;
+
+import org.apache.struts2.config.StrutsBeanSelectionProvider;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * Interface for loading static resources, based on a path. After implementing your own static content loader
+ * you must tell the framework how to use it, eg.
+ *
+ * &lt;bean name="myContentLoader" type="org.apache.struts2.dispatcher" class="com.company.struts.MyContentLoader"/&gt;
+ * &lt;constant name="struts.staticContentLoader" value="myContentLoader"/&gt;
+ *
+ * Check {@link StrutsBeanSelectionProvider} for more details.
+ */
+public interface StaticContentLoader {
+
+    /**
+     * @param path Requested resource path
+     * @return true if this loader is able to load this type of resource, false otherwise
+     */
+    public boolean canHandle(String path);
+
+    /**
+     * @param filterConfig The filter configuration
+     */
+    public abstract void setHostConfig(HostConfig filterConfig);
+
+    /**
+     * Locate a static resource and copy directly to the response, setting the
+     * appropriate caching headers.
+     *
+     * @param path     The resource name
+     * @param request  The request
+     * @param response The response
+     * @throws IOException If anything goes wrong
+     */
+    public abstract void findStaticResource(String path, HttpServletRequest request, HttpServletResponse response)
+            throws IOException;
+
+}
diff --git a/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java b/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java
index 5a01df3..cab6c40 100644
--- a/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java
+++ b/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java
@@ -18,55 +18,16 @@
  */
 package org.apache.struts2.views;
 
-import java.util.Arrays;
-import java.util.List;
+import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.views.freemarker.tags.StrutsModels;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.struts2.views.freemarker.tags.StrutsModels;
-import org.apache.struts2.views.velocity.components.ActionDirective;
-import org.apache.struts2.views.velocity.components.ActionErrorDirective;
-import org.apache.struts2.views.velocity.components.ActionMessageDirective;
-import org.apache.struts2.views.velocity.components.AnchorDirective;
-import org.apache.struts2.views.velocity.components.BeanDirective;
-import org.apache.struts2.views.velocity.components.CheckBoxDirective;
-import org.apache.struts2.views.velocity.components.CheckBoxListDirective;
-import org.apache.struts2.views.velocity.components.ComboBoxDirective;
-import org.apache.struts2.views.velocity.components.ComponentDirective;
-import org.apache.struts2.views.velocity.components.DateDirective;
-import org.apache.struts2.views.velocity.components.DoubleSelectDirective;
-import org.apache.struts2.views.velocity.components.FieldErrorDirective;
-import org.apache.struts2.views.velocity.components.FileDirective;
-import org.apache.struts2.views.velocity.components.FormDirective;
-import org.apache.struts2.views.velocity.components.HeadDirective;
-import org.apache.struts2.views.velocity.components.HiddenDirective;
-import org.apache.struts2.views.velocity.components.I18nDirective;
-import org.apache.struts2.views.velocity.components.IncludeDirective;
-import org.apache.struts2.views.velocity.components.LabelDirective;
-import org.apache.struts2.views.velocity.components.OptionTransferSelectDirective;
-import org.apache.struts2.views.velocity.components.ParamDirective;
-import org.apache.struts2.views.velocity.components.PasswordDirective;
-import org.apache.struts2.views.velocity.components.PropertyDirective;
-import org.apache.struts2.views.velocity.components.PushDirective;
-import org.apache.struts2.views.velocity.components.RadioDirective;
-import org.apache.struts2.views.velocity.components.ResetDirective;
-import org.apache.struts2.views.velocity.components.SelectDirective;
-import org.apache.struts2.views.velocity.components.SetDirective;
-import org.apache.struts2.views.velocity.components.SubmitDirective;
-import org.apache.struts2.views.velocity.components.TextAreaDirective;
-import org.apache.struts2.views.velocity.components.TextDirective;
-import org.apache.struts2.views.velocity.components.TextFieldDirective;
-import org.apache.struts2.views.velocity.components.TokenDirective;
-import org.apache.struts2.views.velocity.components.URLDirective;
-import org.apache.struts2.views.velocity.components.UpDownSelectDirective;
-
-import com.opensymphony.xwork2.util.ValueStack;
-
 /**
  * The default Struts tag library
  */
-public class DefaultTagLibrary implements TagLibraryDirectiveProvider, TagLibraryModelProvider {
+public class DefaultTagLibrary implements TagLibraryModelProvider {
 
     public Object getModels(ValueStack stack, HttpServletRequest req,
                             HttpServletResponse res) {
@@ -74,53 +35,8 @@
         return new StrutsModels(stack, req, res);
     }
 
-    public List<Class> getDirectiveClasses() {
-        Class[] directives = new Class[] {
-            ActionDirective.class,
-            BeanDirective.class,
-            CheckBoxDirective.class,
-            CheckBoxListDirective.class,
-            ComboBoxDirective.class,
-            ComponentDirective.class,
-            DateDirective.class,
-            DoubleSelectDirective.class,
-            FileDirective.class,
-            FormDirective.class,
-            HeadDirective.class,
-            HiddenDirective.class,
-            AnchorDirective.class,
-            I18nDirective.class,
-            IncludeDirective.class,
-            LabelDirective.class,
-            ParamDirective.class,
-            PasswordDirective.class,
-            PushDirective.class,
-            PropertyDirective.class,
-            RadioDirective.class,
-            SelectDirective.class,
-            SetDirective.class,
-            SubmitDirective.class,
-            ResetDirective.class,
-            TextAreaDirective.class,
-            TextDirective.class,
-            TextFieldDirective.class,
-            TokenDirective.class,
-            URLDirective.class,
-            ActionErrorDirective.class,
-            ActionMessageDirective.class,
-            FieldErrorDirective.class,
-            OptionTransferSelectDirective.class,
-            UpDownSelectDirective.class
-        };
-        return Arrays.asList(directives);
-    }
-
     public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
         return getModels(stack, req, res);
     }
 
-    public List<Class> getVelocityDirectiveClasses() {
-        return getDirectiveClasses();
-    }
-
 }
diff --git a/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java b/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java
index 4df60a0..7636846 100644
--- a/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java
+++ b/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java
@@ -36,6 +36,6 @@
      * 
      * @return A list of Velocity directive classes
      */
-    public List<Class> getDirectiveClasses();
+    List<Class> getDirectiveClasses();
 
 }
diff --git a/core/src/main/resources/struts-2.6.dtd b/core/src/main/resources/struts-2.6.dtd
new file mode 100644
index 0000000..964fd69
--- /dev/null
+++ b/core/src/main/resources/struts-2.6.dtd
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<!-- START SNIPPET: strutsDtd -->
+
+<!--
+   Struts configuration DTD.
+   Use the following DOCTYPE
+
+   <!DOCTYPE struts PUBLIC
+	"-//Apache Software Foundation//DTD Struts Configuration 2.6//EN"
+	"http://struts.apache.org/dtds/struts-2.6.dtd">
+-->
+
+<!ELEMENT struts ((package|include|bean|constant)*,bean-selection?, unknown-handler-stack?)>
+<!ATTLIST struts
+    order CDATA #IMPLIED
+>
+
+<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-allowed-methods?, global-exception-mappings?, action*)>
+<!ATTLIST package
+    name CDATA #REQUIRED
+    extends CDATA #IMPLIED
+    namespace CDATA #IMPLIED
+    abstract CDATA #IMPLIED
+    strict-method-invocation (true|false) "true"
+>
+
+<!ELEMENT result-types (result-type+)>
+
+<!ELEMENT result-type (param*)>
+<!ATTLIST result-type
+    name CDATA #REQUIRED
+    class CDATA #REQUIRED
+    default (true|false) "false"
+>
+
+<!ELEMENT interceptors (interceptor|interceptor-stack)+>
+
+<!ELEMENT interceptor (param*)>
+<!ATTLIST interceptor
+    name CDATA #REQUIRED
+    class CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-stack (interceptor-ref*)>
+<!ATTLIST interceptor-stack
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-ref (param*)>
+<!ATTLIST interceptor-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-interceptor-ref (#PCDATA)>
+<!ATTLIST default-interceptor-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-action-ref (#PCDATA)>
+<!ATTLIST default-action-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-class-ref (#PCDATA)>
+<!ATTLIST default-class-ref
+    class CDATA #REQUIRED
+>
+
+<!ELEMENT global-results (result+)>
+
+<!ELEMENT global-allowed-methods (#PCDATA)>
+
+<!ELEMENT global-exception-mappings (exception-mapping+)>
+
+<!ELEMENT action ((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)>
+<!ATTLIST action
+    name CDATA #REQUIRED
+    class CDATA #IMPLIED
+    method CDATA #IMPLIED
+    converter CDATA #IMPLIED
+>
+
+<!ELEMENT param (#PCDATA)>
+<!ATTLIST param
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT result (#PCDATA|param)*>
+<!ATTLIST result
+    name CDATA #IMPLIED
+    type CDATA #IMPLIED
+>
+
+<!ELEMENT exception-mapping (#PCDATA|param)*>
+<!ATTLIST exception-mapping
+    name CDATA #IMPLIED
+    exception CDATA #REQUIRED
+    result CDATA #REQUIRED
+>
+
+<!ELEMENT allowed-methods (#PCDATA)>
+
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+    file CDATA #REQUIRED
+>
+
+<!ELEMENT bean (#PCDATA)>
+<!ATTLIST bean
+    type CDATA #IMPLIED
+    name CDATA #IMPLIED
+    class CDATA #REQUIRED
+    scope CDATA #IMPLIED
+    static CDATA #IMPLIED
+    optional CDATA #IMPLIED
+>
+
+<!ELEMENT bean-selection (#PCDATA)>
+<!ATTLIST bean-selection
+    name CDATA #IMPLIED
+    class CDATA #IMPLIED
+>
+
+<!ELEMENT constant (#PCDATA)>
+<!ATTLIST constant
+    name CDATA #REQUIRED
+    value CDATA #REQUIRED
+>
+
+<!ELEMENT unknown-handler-stack (unknown-handler-ref*)>
+<!ELEMENT unknown-handler-ref (#PCDATA)>
+<!ATTLIST unknown-handler-ref
+    name CDATA #REQUIRED
+>
+
+<!-- END SNIPPET: strutsDtd -->
+
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index ed850bd..9da9daf 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -23,8 +23,8 @@
 <!--
     When declaring beans in this file you must either use name="struts" or don't name the bean at all.
 
-    The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.DefaultBeanSelectionProvider} -
-    it is then the default bean's name and {@link org.apache.struts2.config.DefaultBeanSelectionProvider} links name "struts"
+    The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.StrutsBeanSelectionProvider} -
+    it is then the default bean's name and {@link org.apache.struts2.config.StrutsBeanSelectionProvider} links name "struts"
     with "default" (aliasing it)
 
     If name won't be defined then the "default" value will be used {@link com.opensymphony.xwork2.inject.Container#DEFAULT_NAME}
@@ -106,16 +106,13 @@
     <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="prototype"/>
     <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta-stream" class="org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="prototype"/>
 
-    <bean type="org.apache.struts2.views.TagLibraryDirectiveProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" />
     <bean type="org.apache.struts2.views.TagLibraryModelProvider" name="s" class="org.apache.struts2.views.DefaultTagLibrary" />
 
     <bean class="org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader" />
     <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" />
-    <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" />
 
     <bean class="org.apache.struts2.components.template.TemplateEngineManager" />
     <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" />
-    <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" />
     <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" />
 
     <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" />
@@ -201,7 +198,6 @@
             <result-type name="redirect" class="org.apache.struts2.result.ServletRedirectResult"/>
             <result-type name="redirectAction" class="org.apache.struts2.result.ServletActionRedirectResult"/>
             <result-type name="stream" class="org.apache.struts2.result.StreamResult"/>
-            <result-type name="velocity" class="org.apache.struts2.result.VelocityResult"/>
             <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
             <result-type name="plainText" class="org.apache.struts2.result.PlainTextResult" />
             <result-type name="postback" class="org.apache.struts2.result.PostbackResult" />
diff --git a/core/src/main/resources/template/archive/ajax/a-close.vm b/core/src/main/resources/template/archive/ajax/a-close.vm
deleted file mode 100644
index f8c9229..0000000
--- a/core/src/main/resources/template/archive/ajax/a-close.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-</a>
diff --git a/core/src/main/resources/template/archive/ajax/a.vm b/core/src/main/resources/template/archive/ajax/a.vm
deleted file mode 100644
index 83c3501..0000000
--- a/core/src/main/resources/template/archive/ajax/a.vm
+++ /dev/null
@@ -1,33 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<a dojoType="BindAnchor" evalResult="true"
-#if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-#if ($parameters.href) href="$!struts.htmlEncode($parameters.href)" #end
-#if ($parameters.notifyTopics) notifyTopics="$!struts.htmlEncode($parameters.notifyTopics)" #end
-#if ($parameters.errorText) errorHtml="$!struts.htmlEncode($parameters.errorText)" #end
-#if ($parameters.showErrorTransportText)  showTransportError="true" #end
-#if ($parameters.afterLoading) onLoad="$!parameters.afterLoading" #end
-#if ($parameters.preInvokeJS) preInvokeJS="$!parameters.preInvokeJS" #end
-#if ($parameters.tabindex) tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
->
diff --git a/core/src/main/resources/template/archive/ajax/div-close.vm b/core/src/main/resources/template/archive/ajax/div-close.vm
deleted file mode 100644
index da96f0c..0000000
--- a/core/src/main/resources/template/archive/ajax/div-close.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-</div>
diff --git a/core/src/main/resources/template/archive/ajax/div.vm b/core/src/main/resources/template/archive/ajax/div.vm
deleted file mode 100644
index 2d7d925..0000000
--- a/core/src/main/resources/template/archive/ajax/div.vm
+++ /dev/null
@@ -1,35 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<div dojoType='BindDiv'
-#if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-#if ($parameters.href) href="$!parameters.href" #end
-#if ($parameters.loadingText) loadingHtml="$!struts.htmlEncode($parameters.loadingText)" #end
-#if ($parameters.errorText) errorHtml="$!struts.htmlEncode($parameters.errorText)" #end
-#if ($parameters.showErrorTransportText) showTransportError="true" #end
-#if ($parameters.delay) delay="$!parameters.delay" #end
-#if ($parameters.updateFreq) refresh="$!parameters.updateFreq" #end
-#if ($parameters.listenTopics) listenTopics="$!parameters.listenTopics" #end
-#if ($parameters.afterLoading) onLoad="$!parameters.afterLoading" #end
-#if ($parameters.tabindex) tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
->
diff --git a/core/src/main/resources/template/archive/ajax/form-close.vm b/core/src/main/resources/template/archive/ajax/form-close.vm
deleted file mode 100644
index 9e62164..0000000
--- a/core/src/main/resources/template/archive/ajax/form-close.vm
+++ /dev/null
@@ -1,22 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-</table>
-</form>
diff --git a/core/src/main/resources/template/archive/ajax/form.vm b/core/src/main/resources/template/archive/ajax/form.vm
deleted file mode 100644
index 2ad6075..0000000
--- a/core/src/main/resources/template/archive/ajax/form.vm
+++ /dev/null
@@ -1,39 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#if ($parameters.validate)
-<script src="$!base/struts/validationClient.js"></script>
-<script src="$!base/dwr/interface/validator.js"></script>
-<script src="$!base/dwr/engine.js"></script>
-<script src="$!base/struts/template/xhtml/validation.js"></script>
-#end
-<form
-#if ($parameters.namespace) namespace="$!struts.htmlEncode($parameters.namespace)" #end
-#if ($parameters.id) id="$!struts.htmlEncode($parameters.id)" #end
-#if ($parameters.name) name="$!struts.htmlEncode($parameters.name)" #end
-#if ($parameters.action) action="$!struts.htmlEncode($parameters.action)" #end
-#if ($parameters.target) target="$!struts.htmlEncode($parameters.target)" #end
-#if ($parameters.method) method="$!struts.htmlEncode($parameters.method)" #end
-#if ($parameters.enctype) enctype="$!struts.htmlEncode($parameters.enctype)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-onSubmit="return false;"
->
-<table class="wwFormTable">
diff --git a/core/src/main/resources/template/archive/ajax/submit.vm b/core/src/main/resources/template/archive/ajax/submit.vm
deleted file mode 100644
index 26056fa..0000000
--- a/core/src/main/resources/template/archive/ajax/submit.vm
+++ /dev/null
@@ -1,33 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<button type="submit" dojoType="BindButton"<#rt/>
-#if ($parameters.form && $parameters.form.id)  formId="$parameters.form.id" #end
-#if ($parameters.name) name="$!struts.htmlEncode($parameters.name)" #end
-#if ($parameters.nameValue) value="$!struts.htmlEncode($parameters.nameValue)" #end
-#if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-#if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-#if ($parameters.resultDivId) targetDiv="$!struts.htmlEncode($parameters.resultDivId)" #end
-#if ($parameters.onLoadJS) onLoad="$!parameters.onLoadJS" #end
-#if ($parameters.preInvokeJS) preInvokeJS="$!parameters.preInvokeJS" #end
-#if ($parameters.notifyTopics) notifyTopics="$!struts.htmlEncode($parameters.notifyTopics)" #end
-#if ($parameters.listenTopics) listenTopics="$!struts.htmlEncode($parameters.listenTopics)" #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/core/src/main/resources/template/archive/ajax/tab-close.vm b/core/src/main/resources/template/archive/ajax/tab-close.vm
deleted file mode 100644
index 2353ee7..0000000
--- a/core/src/main/resources/template/archive/ajax/tab-close.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-    </div>
-    </div>
-
-    <script type="text/javascript">
-        var tabpanelc_$!parameters.id = new TabContent( "$!parameters.id", $!parameters.remote );
-        dojo.event.topic.subscribe( "$!parameters.subscribeTopicName", tabpanelc_$!parameters.id, "updateVisibility" );
-    </script>
diff --git a/core/src/main/resources/template/archive/ajax/tab.vm b/core/src/main/resources/template/archive/ajax/tab.vm
deleted file mode 100644
index 5551944..0000000
--- a/core/src/main/resources/template/archive/ajax/tab.vm
+++ /dev/null
@@ -1,37 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<div class="tab_contents_header" id="tab_contents_${parameters.id}">
-    <div class="tab_contents"
-         id="tab_contents_update_${parameters.id}"
-	 #if ($parameters.remote)
-	      dojoType='BindDiv'
-	      #if ($parameters.href) href="$!struts.htmlEncode($parameters.href)" #end
-	      #if ($parameters.loadingText) loadingHtml="$!struts.htmlEncode($parameters.loadingText)" #end
-	      #if ($parameters.errorText) errorHtml="$!struts.htmlEncode($parameters.errorText)" #end
-	      #if ($parameters.showErrorTransportText) showTransportError="true" #end
-	      #if ($parameters.delay) delay="$!parameters.delay" #end
-	      #if ($parameters.updateFreq) refresh="$!parameters.updateFreq" #end
-	      #if ($parameters.listenTopics) listenTopics="$!struts.htmlEncode($parameters.listenTopics)" #end
-	      #if ($parameters.afterLoading) onLoad="$!struts.htmlEncode($parameters.afterLoading)" #end
-     #end
- 	 #if ($parameters.cssClass) class="$!struts.htmlEncode($parameters.cssClass)" #end
-	 #if ($parameters.cssStyle) style="$!struts.htmlEncode($parameters.cssStyle)" #end
-      >
diff --git a/core/src/main/resources/template/archive/simple/checkbox.vm b/core/src/main/resources/template/archive/simple/checkbox.vm
deleted file mode 100644
index bd9e0e8..0000000
--- a/core/src/main/resources/template/archive/simple/checkbox.vm
+++ /dev/null
@@ -1,30 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input type="checkbox" name="$!struts.htmlEncode($parameters.name)" value="$!struts.htmlEncode($parameters.fieldValue)"
-#if ($parameters.nameValue)        checked="checked"                                        #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/core/src/main/resources/template/archive/simple/checkboxlist.vm b/core/src/main/resources/template/archive/simple/checkboxlist.vm
deleted file mode 100644
index 979bc3a..0000000
--- a/core/src/main/resources/template/archive/simple/checkboxlist.vm
+++ /dev/null
@@ -1,45 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#set( $items = $parameters.list )
-#if( $items )
-    #set( $itemCount = 0 )
-    #foreach( $item in $items )
-        #set( $itemCount = $itemCount + 1)
-        $stack.push($item)
-        #if( $parameters.listKey )
-            #set( $itemKey = $stack.findValue($parameters.listKey) )
-        #else
-            #set( $itemKey = $item )
-        #end
-        #if( $parameters.listValue )
-            #set( $itemValue  = $stack.findValue($parameters.listValue) )
-        #else
-            #set( $itemValue = $item )
-        #end
-        <input type="checkbox" name="$!struts.htmlEncode($parameters.name)" value="$!struts.htmlEncode($itemKey)"
-        #parse("/$parameters.templateDir/simple/scripting-events.vm")
-        id="$!struts.htmlEncode($parameters.name)-$itemCount" #if( $tag.contains($parameters.nameValue, $itemKey) ) checked="checked" #end />
-        <label for="$!struts.htmlEncode($parameters.name)-$itemCount" class="checkboxLabel">$!struts.htmlEncode($itemValue)</label><br />
-        #set ($trash = $stack.pop())
-    #end
-#else
-  &nbsp;
-#end
diff --git a/core/src/main/resources/template/archive/simple/combobox.vm b/core/src/main/resources/template/archive/simple/combobox.vm
deleted file mode 100644
index 42fc0e3..0000000
--- a/core/src/main/resources/template/archive/simple/combobox.vm
+++ /dev/null
@@ -1,43 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input type="text"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.maxlength)        maxlength="$!struts.htmlEncode($parameters.maxlength)"  #end
-#if ($parameters.nameValue)        value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/><br />
-
-#if ($parameters.list)
-<select onChange="this.form.elements['$!struts.htmlEncode($parameters.name)'].value=this.options[this.selectedIndex].value"
-     #if ($parameters.disabled == true) disabled="disabled" #end
->
-#foreach ($param in $parameters.list)
-    <option value="$!struts.htmlEncode($param)"#if ($parameters.name == $param) selected="selected"#end>$!struts.htmlEncode($param)</option>
-#end
-</select>#end
diff --git a/core/src/main/resources/template/archive/simple/debug.vm b/core/src/main/resources/template/archive/simple/debug.vm
deleted file mode 100644
index d65d091..0000000
--- a/core/src/main/resources/template/archive/simple/debug.vm
+++ /dev/null
@@ -1,85 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<script type="text/javascript">
-<!--
-    function toggleDebug(debugId) {
-        var debugDiv = document.getElementById(debugId);
-        if (debugDiv) {
-            var display = debugDiv.style.display;
-            if (display == 'none') {
-                debugDiv.style.display = 'block';
-            } else if (display == 'block') {
-                debugDiv.style.display = 'none';
-            }
-        }
-    }
--->
-</script>
-<p />
-
-#set ($id = $parameters.id)
-#if ($id) #else #set ($id = 'debug') #end
-<a href="#" onclick="toggleDebug('$id');return false;">[Debug]</a>
-<div style="display:none" id="$id">
-<h2>Struts ValueStack Debug</h2>
-<p />
-
-#set($contextMap = $stack.context)
-
-<h3>Value Stack Contents</h3>
-#set ($stackContents = $parameters.stackValues)
-<table border="0" cellpadding="5" cellspacing="0" width="100%" bgcolor="#DDDDDD">
-    <tr><th>Object</th><th>Property Name</th><th>Property Value</th></tr>
-
-    #set ($index = 1)
-    #foreach ($stackObject in $stackContents)
-    <tr>
-        <td rowspan="$stackObject.value.size()">$stackObject.key</td>
-        #set ($renderRow = false)
-        #set ($propertyMap = $stackObject.value)
-        #foreach ($propertyName in $propertyMap.keySet())
-            #if ($renderRow == true)<tr>#else #set ($renderRow = true) #end
-        <td bgcolor="#if (($index % 2) == 0)#BBBBBB#else#CCCCCC#end">$propertyName</td>
-        <td bgcolor="#if (($index % 2) == 0)#BBBBBB#else#CCCCCC#end">$propertyMap.get($propertyName)</td>
-    </tr>
-            #set ($index = $index + 1)
-        #end
-    #end
-</table>
-
-<h3>Stack Context</h3>
-<i>These items are available using the #key notation</i>
-<table border="0" cellpadding="5" cellspacing="0" width="100%" bgcolor="#DDDDDD">
-    <tr>
-        <th>Key</th><th>Value</th>
-    </tr>
-
-    #set ($index = 1)
-    #foreach ($contextKey in $contextMap.keySet())
-    <tr bgcolor="#if (($index % 2) == 0)#BBBBBB#else#CCCCCC#end">
-        <td>$contextKey</td><td>$contextMap.get($contextKey)</td>
-    </tr>
-    #set ($index = $index + 1)
-    #end
-</table>
-<p />
-
-</div>
diff --git a/core/src/main/resources/template/archive/simple/doubleselect.vm b/core/src/main/resources/template/archive/simple/doubleselect.vm
deleted file mode 100644
index 3b7ee7f..0000000
--- a/core/src/main/resources/template/archive/simple/doubleselect.vm
+++ /dev/null
@@ -1,108 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-`#parse("/$parameters.templateDir/simple/select.vm")
-#set ( $startCount = 0)
-#if ($parameters.headerKey && $parameters.headerValue)
-    #set ( $startCount = $startCount + 1)
-#end
-#if ($parameters.emptyOption)
-    #set ( $startCount = $startCount + 1)
-#end
-
-<br />
-<select name="$!struts.htmlEncode($parameters.doubleName)"
-    #if ($parameters.disabled)         disabled="disabled"                                         #end
-    #if ($parameters.doubleTabindex)   tabindex="$!struts.htmlEncode($parameters.doubleTabindex)" #end
-    #if ($parameters.doubleId)         id="$!struts.htmlEncode($parameters.doubleId)"             #end
-    #if ($parameters.multiple)         multiple="multiple"                                         #end
-    #if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"          #end
-    #if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"          #end
->
-</select>
-<script type="text/javascript">
-#set( $itemCount = $startCount )
-var $!struts.htmlEncode($parameters.name)Group = new Array($!{parameters.listSize} + $startCount);
-for (i = 0; i < ($!{parameters.listSize} + $startCount); i++)
-$!struts.htmlEncode($parameters.name)Group[i] = new Array();
-#foreach( $item in $items )
-    $stack.push($item)
-    #if( $parameters.listKey )
-        #set( $itemKey = $stack.findValue($parameters.listKey) )
-    #else
-        #set( $itemKey = $item )
-    #end
-    #if( $parameters.listValue )
-        #set( $itemValue  = $stack.findValue($parameters.listValue) )
-    #else
-        #set( $itemValue = $item )
-    #end
-    #set( $doubleItems = $stack.findValue($parameters.doubleList) )
-    #set( $doubleItemCount = 0 )
-    #if( $doubleItems )
-        #foreach( $doubleItem in $doubleItems )
-            $stack.push($doubleItem)
-            #if( $parameters.doubleListKey )
-                #set( $doubleItemKey = $stack.findValue($parameters.doubleListKey) )
-            #else
-                #set( $doubleItemKey = $doubleItem )
-            #end
-            #if( $parameters.doubleListValue )
-                #set( $doubleItemValue  = $stack.findValue($parameters.doubleListValue) )
-            #else
-                #set( $doubleItemValue = $doubleItem )
-            #end
-            $!struts.htmlEncode($parameters.name)Group[$itemCount][$doubleItemCount] = new Option("$doubleItemKey", "$doubleItemValue");
-            #set( $doubleItemCount = $doubleItemCount + 1 )
-            #set ($trash = $stack.pop())
-        #end
-        #set( $itemCount = $itemCount + 1 )
-    #end
-    #set ($trash = $stack.pop())
-#end
-var $!struts.htmlEncode($parameters.name)Temp = document.$!struts.htmlEncode(${parameters.formName}).$!struts.htmlEncode(${parameters.doubleName});
-#set( $itemCount = $startCount )
-#set( $redirectTo = 0 )
-#foreach( $item in $items )
-    $stack.push($item)
-    #if( $parameters.listValue )
-        #set( $itemValue  = $stack.findValue($parameters.listValue) )
-    #else
-        #set( $itemValue = $item )
-    #end
-    #if( $tag.contains($parameters.nameValue, $itemKey) )
-        #set( $redirectTo = $itemCount )
-    #end
-    #set( $itemCount = $itemCount + 1 )
-    #set ($trash = $stack.pop())
-#end
-$!{struts.htmlEncode($parameters.name)}Redirect($redirectTo);
-function $!{struts.htmlEncode($parameters.name)}Redirect(x) {
-    for (m = $!{struts.htmlEncode($parameters.name)}Temp.options.length - 1; m >= 0; m--)
-        $!{struts.htmlEncode($parameters.name)}Temp.remove(m);
-
-    for (i = 0; i < $!{parameters.name}Group[x].length; i++) {
-        $!{struts.htmlEncode($parameters.name)}Temp.options[i] = new Option($!{struts.htmlEncode($parameters.name)}Group[x][i].text, $!{struts.htmlEncode($parameters.name)}Group[x][i].value);
-    }
-
-    if ($!{parameters.name}Temp.options.length > 0)
-        $!{struts.htmlEncode($parameters.name)}Temp.options[0].selected = true;
-}
-</script>
diff --git a/core/src/main/resources/template/archive/simple/empty.vm b/core/src/main/resources/template/archive/simple/empty.vm
deleted file mode 100644
index 7627ce1..0000000
--- a/core/src/main/resources/template/archive/simple/empty.vm
+++ /dev/null
@@ -1,20 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
diff --git a/core/src/main/resources/template/archive/simple/file.vm b/core/src/main/resources/template/archive/simple/file.vm
deleted file mode 100644
index 129cab5..0000000
--- a/core/src/main/resources/template/archive/simple/file.vm
+++ /dev/null
@@ -1,32 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input type="file"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.nameValue)        value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.accept)           accept="$!struts.htmlEncode($parameters.accept)"        #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/core/src/main/resources/template/archive/simple/form-close.vm b/core/src/main/resources/template/archive/simple/form-close.vm
deleted file mode 100644
index dc96bcc..0000000
--- a/core/src/main/resources/template/archive/simple/form-close.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-</form>
diff --git a/core/src/main/resources/template/archive/simple/form.vm b/core/src/main/resources/template/archive/simple/form.vm
deleted file mode 100644
index 59ec46d..0000000
--- a/core/src/main/resources/template/archive/simple/form.vm
+++ /dev/null
@@ -1,32 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<form
-#if ($parameters.namespace) namespace="$!parameters.namespace"                  #end
-#if ($parameters.id)        id="$!struts.htmlEncode($parameters.id)"           #end
-#if ($parameters.name)      name="$!struts.htmlEncode($parameters.name)"       #end
-#if ($parameters.action)    action="$!struts.htmlEncode($parameters.action)"   #end
-#if ($parameters.target)    target="$!struts.htmlEncode($parameters.target)"   #end
-#if ($parameters.method)    method="$!struts.htmlEncode($parameters.method)"   #end
-#if ($parameters.enctype)   enctype="$!struts.htmlEncode($parameters.enctype)" #end
-#if ($parameters.cssClass)  class="$!struts.htmlEncode($parameters.cssClass)"  #end
-#if ($parameters.cssStyle)  style="$!struts.htmlEncode($parameters.cssStyle)"  #end
->
-
diff --git a/core/src/main/resources/template/archive/simple/hidden.vm b/core/src/main/resources/template/archive/simple/hidden.vm
deleted file mode 100644
index 672b210..0000000
--- a/core/src/main/resources/template/archive/simple/hidden.vm
+++ /dev/null
@@ -1,28 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input
-    type="hidden"
-    #if ($parameters.name)      name="$!struts.htmlEncode($parameters.name)"       #end
-    #if ($parameters.nameValue) value="$!struts.htmlEncode($parameters.nameValue)" #end
-    #if ($parameters.cssClass)  class="$!struts.htmlEncode($parameters.cssClass)"  #end
-    #if ($parameters.cssStyle)  style="$!struts.htmlEncode($parameters.cssStyle)"  #end
-    #if ($parameters.id)        id="$!struts.htmlEncode($parameters.id)"           #end
-/>
diff --git a/core/src/main/resources/template/archive/simple/label.vm b/core/src/main/resources/template/archive/simple/label.vm
deleted file mode 100644
index 008e519..0000000
--- a/core/src/main/resources/template/archive/simple/label.vm
+++ /dev/null
@@ -1,26 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<label
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#if ($parameters.for)              for="$!struts.htmlEncode($parameters.for)"              #end
->#if ($parameters.nameValue)$!struts.htmlEncode($parameters.nameValue)#end</label>
diff --git a/core/src/main/resources/template/archive/simple/password.vm b/core/src/main/resources/template/archive/simple/password.vm
deleted file mode 100644
index 0a9bc1e..0000000
--- a/core/src/main/resources/template/archive/simple/password.vm
+++ /dev/null
@@ -1,34 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input type="password"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.maxlength)        maxlength="$!struts.htmlEncode($parameters.maxlength)"  #end
-#if ($parameters.nameValue && $parameters.showPassword && $parameters.showPassword == true)
-                                   value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/core/src/main/resources/template/archive/simple/radiomap.vm b/core/src/main/resources/template/archive/simple/radiomap.vm
deleted file mode 100644
index 6664395..0000000
--- a/core/src/main/resources/template/archive/simple/radiomap.vm
+++ /dev/null
@@ -1,55 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#set( $items = $parameters.list )
-#if( $items )
-    #foreach( $item in $items )
-        $stack.push($item)
-
-        #if( $parameters.listKey )
-            #set( $itemKey = $stack.findValue($parameters.listKey) )
-        #else
-            #set( $itemKey = $item )
-        #end
-
-        #if( $parameters.listValue )
-            #set( $itemValue  = $stack.findValue($parameters.listValue) )
-        #else
-            #set( $itemValue = $item )
-        #end
-
-        <input
-            type="radio"
-            #if( $tag.contains($parameters.nameValue, $itemKey) )checked="checked"#end
-            #if ($parameters.name)
-                                        name="$!struts.htmlEncode($parameters.name)"
-                                        id="$!struts.htmlEncode($parameters.name)$!struts.htmlEncode($itemKey)"
-            #end
-            #if ($itemKey)              value="$!struts.htmlEncode($itemKey)"                #end
-            #if ($parameters.disabled)  disabled="disabled"                                   #end
-            #if ($parameters.tabindex)  tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-            #if ($parameters.cssClass)  class="$!struts.htmlEncode($parameters.cssClass)"    #end
-            #if ($parameters.cssStyle)  style="$!struts.htmlEncode($parameters.cssStyle)"    #end
-            #parse("/$parameters.templateDir/simple/scripting-events.vm")
-        /><label for="$!struts.htmlEncode($parameters.name)$!struts.htmlEncode($itemKey)">$!itemValue</label>
-
-        #set ($trash = $stack.pop())
-    #end
-#end
diff --git a/core/src/main/resources/template/archive/simple/scripting-events.vm b/core/src/main/resources/template/archive/simple/scripting-events.vm
deleted file mode 100644
index de9ea10..0000000
--- a/core/src/main/resources/template/archive/simple/scripting-events.vm
+++ /dev/null
@@ -1,34 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#if ($parameters.onclick)     onclick="$!struts.htmlEncode($parameters.onclick)"         #end
-#if ($parameters.ondblclick)  ondblclick="$!struts.htmlEncode($parameters.ondblclick)"   #end
-#if ($parameters.onmousedown) onmousedown="$!struts.htmlEncode($parameters.onmousedown)" #end
-#if ($parameters.onmouseup)   onmouseup="$!struts.htmlEncode($parameters.onmouseup)"     #end
-#if ($parameters.onmouseover) onmouseover="$!struts.htmlEncode($parameters.onmouseover)" #end
-#if ($parameters.onmousemove) onmousemove="$!struts.htmlEncode($parameters.onmousemove)" #end
-#if ($parameters.onmouseout)  onmouseout="$!struts.htmlEncode($parameters.onmouseout)"   #end
-#if ($parameters.onfocus)     onfocus="$!struts.htmlEncode($parameters.onfocus)"         #end
-#if ($parameters.onblur)      onblur="$!struts.htmlEncode($parameters.onblur)"           #end
-#if ($parameters.onkeypress)  onkeypress="$!struts.htmlEncode($parameters.onkeypress)"   #end
-#if ($parameters.onkeydown)   onkeydown="$!struts.htmlEncode($parameters.onkeydown)"     #end
-#if ($parameters.onkeyup)     onkeyup="$!struts.htmlEncode($parameters.onkeyup)"         #end
-#if ($parameters.onselect)    onselect="$!struts.htmlEncode($parameters.onselect)"       #end
-#if ($parameters.onchange)    onchange="$!struts.htmlEncode($parameters.onchange)"       #end
diff --git a/core/src/main/resources/template/archive/simple/select.vm b/core/src/main/resources/template/archive/simple/select.vm
deleted file mode 100644
index 4e7fd8e..0000000
--- a/core/src/main/resources/template/archive/simple/select.vm
+++ /dev/null
@@ -1,63 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<select name="$!struts.htmlEncode($parameters.name)"
-    #if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"         #end
-    #if ($parameters.disabled)         disabled="disabled"                                   #end
-    #if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)" #end
-    #if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"             #end
-    #if ($parameters.multiple)         multiple="multiple"                                   #end
-    #if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"    #end
-    #if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"    #end
-    #parse("/$parameters.templateDir/simple/scripting-events.vm")
->
-
-#if ($parameters.headerKey && $parameters.headerValue)
-    <option value="$!struts.htmlEncode($parameters.headerKey)">$!struts.htmlEncode($parameters.headerValue)</option>
-#end
-
-#if ($parameters.emptyOption)
-    <option value=""></option>
-#end
-
-#set( $items = $parameters.list )
-#if( $items )
-    #foreach( $item in $items )
-        $stack.push($item)
-
-        #if( $parameters.listKey )
-            #set( $itemKey = $stack.findValue($parameters.listKey) )
-        #else
-            #set( $itemKey = $item )
-        #end
-
-        #if( $parameters.listValue )
-            #set( $itemValue = $stack.findValue($parameters.listValue) )
-        #else
-            #set( $itemValue = $item )
-        #end
-
-        <option value="$!struts.htmlEncode($itemKey)"#if( $tag.contains($parameters.nameValue, $itemKey) ) selected="selected"#end>$!struts.htmlEncode($itemValue)</option>
-
-        #set ($trash = $stack.pop())
-    #end
-#end
-
-</select>
diff --git a/core/src/main/resources/template/archive/simple/submit.vm b/core/src/main/resources/template/archive/simple/submit.vm
deleted file mode 100644
index 07f4652..0000000
--- a/core/src/main/resources/template/archive/simple/submit.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input type="submit"
-#if ($parameters.name)       name="$!struts.htmlEncode($parameters.name)"           #end
-#if ($parameters.nameValue)  value="$!struts.htmlEncode($parameters.nameValue)"     #end
-#if ($parameters.cssClass)   class="$!struts.htmlEncode($parameters.cssClass)"      #end
-#if ($parameters.cssStyle)   style="$!struts.htmlEncode($parameters.cssStyle)"      #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/core/src/main/resources/template/archive/simple/table.vm b/core/src/main/resources/template/archive/simple/table.vm
deleted file mode 100644
index 0082020..0000000
--- a/core/src/main/resources/template/archive/simple/table.vm
+++ /dev/null
@@ -1,101 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#set($webTable=$tag)
-#set($tableModel=$webTable.Model)
-
-
-#if($tableModel)
-		<p align="center">
-			<table bgcolor="white" border="0" cellpadding="1" cellspacing="0" >
-				<tr>
-					<td>
-						<table  border="0" cellpadding="2" cellspacing="1">
-
-                            <tr bgcolor="yellow">
-
-                            #*
-                                Show the visible column names.  Use the display name that can
-                                be set in the jsp.
-                            *#
-                            #foreach($curColumn in $webTable.Columns)
-                                #if($curColumn.isVisible())
-                                        <th>
-
-                                            #if($webTable.isSortable())
-                                                <table border="0" cellspacing="0" cellpadding="0">
-												<tr>
-												    <td>
-												        $curColumn.DisplayName
-												    </td>
-												    <td>
-												        <table border="0" cellspacing="0" cellpadding="0">
-												            <tr>
-                                                                <td align="bottom">
-
-                                                                    #if(($webTable.sortColumn == $curColumn.offset) && ($webTable.sortOrder == 'ASC'))
-                                                                        <img src="#tag( URL "value='/images/sorted_asc.gif'")" border="0" align="bottom" />                                                                    #else
-                                                                        <a href="#bodytag( URL )
-                                                                                    #param( $webTable.sortColumnLinkName $curColumn.offset)
-                                                                                    #param( $webTable.sortOrderLinkName 'ASC')
-                                                                                 #end">
-                                                                       <img src="#tag( URL "value='/images/unsorted_asc.gif'")" border="0" align="bottom" /></a>
-                                                                    #end
-                                                                </td>
-												            </tr>
-												            <tr>
-
-                                                                <td align="top">
-                                                                    #if(($webTable.sortColumn == $curColumn.offset) && ($webTable.sortOrder == 'DESC'))
-                                                                        <img src="#tag( URL "value='/images/sorted_desc.gif'")" border="0" align="top" />
-                                                                    #else
-                                                                        <a href="#bodytag( URL )
-                                                                                    #param( $webTable.sortColumnLinkName $curColumn.offset)
-                                                                                    #param( $webTable.sortOrderLinkName 'DESC')
-                                                                                  #end"><img src="#tag( URL "value='/images/unsorted_desc.gif'")" border="0" align="top" /></a>
-                                                                    #end
-                                                                </td>
-                                                            </tr>
-												        </table>
-
-												    </td>
-												</tr>
-												</table>
-                                            #else
-                                                $curColumn.DisplayName
-                                            #end
-                                        </th>
-                                #end
-                            #end
-                            </tr>
-                             #foreach($curRow in $webTable.RowIterator)
-                                <tr #if($velocityCount % 2 == 1) bgcolor="EEEEFF" #else bgcolor="FFFFFF" #end/>
-                                #foreach($curColumn in $curRow)
-                                <td>$curColumn</td>
-
-                                #end
-                             #end
-						</table>
-					</td>
-				</tr>
-			</table>
-		</p>
-
-#end
diff --git a/core/src/main/resources/template/archive/simple/text.vm b/core/src/main/resources/template/archive/simple/text.vm
deleted file mode 100644
index 9dd8f30..0000000
--- a/core/src/main/resources/template/archive/simple/text.vm
+++ /dev/null
@@ -1,34 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<input type="text"
-                                   name="$!struts.htmlEncode($parameters.name)"
-#if ($parameters.size)             size="$!struts.htmlEncode($parameters.size)"            #end
-#if ($parameters.maxlength)        maxlength="$!struts.htmlEncode($parameters.maxlength)"  #end
-#if ($parameters.nameValue)        value="$!struts.htmlEncode($parameters.nameValue)"      #end
-#if ($parameters.disabled && $parameters.disabled == true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
-/>
diff --git a/core/src/main/resources/template/archive/simple/textarea.vm b/core/src/main/resources/template/archive/simple/textarea.vm
deleted file mode 100644
index 7a51745..0000000
--- a/core/src/main/resources/template/archive/simple/textarea.vm
+++ /dev/null
@@ -1,33 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<textarea name="$!struts.htmlEncode($parameters.name)"
-          cols="$!struts.htmlEncode($parameters.cols)"
-          rows="$!struts.htmlEncode($parameters.rows)"
-#if ($parameters.wrap)             wrap="$!struts.htmlEncode($parameters.wrap)"            #end
-#if ($parameters.disabled && $parameters.disabled== true)
-                                   disabled="disabled"                                      #end
-#if ($parameters.readonly)         readonly="readonly"                                      #end
-#if ($parameters.tabindex)         tabindex="$!struts.htmlEncode($parameters.tabindex)"    #end
-#if ($parameters.id)               id="$!struts.htmlEncode($parameters.id)"                #end
-#if ($parameters.cssClass)         class="$!struts.htmlEncode($parameters.cssClass)"       #end
-#if ($parameters.cssStyle)         style="$!struts.htmlEncode($parameters.cssStyle)"       #end
-#parse("/$parameters.templateDir/simple/scripting-events.vm")
->#if ($parameters.nameValue)$!struts.htmlEncode($parameters.nameValue)#end</textarea>
diff --git a/core/src/main/resources/template/archive/xhtml/checkbox.vm b/core/src/main/resources/template/archive/xhtml/checkbox.vm
deleted file mode 100644
index 9e77217..0000000
--- a/core/src/main/resources/template/archive/xhtml/checkbox.vm
+++ /dev/null
@@ -1,39 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#if( $fieldErrors.get($parameters.name) )
-  #set ($hasFieldErrors = $fieldErrors.get($parameters.name))
-  #foreach ($error in $fieldErrors.get($parameters.name))
-    <tr>
-        <td align="left" valign="top" colspan="2"><span class="errorMessage">$!error</span></td>
-    </tr>
-  #end
-#end
-
-<tr>
-    <td valign="top" colspan="2">
-#* Use an extra table so that the checkbox doesn't align with the other columns. *#
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-    <tr>
-        <td valign="middle">#parse("$!{tag.templateDir}/simple/checkbox.vm")</td>
-        <td width="100%" valign="middle"><label #if ($parameters.id) for="$!struts.htmlEncode($parameters.id)"#end#if ($hasFieldErrors) class="checkboxErrorLabel"#else class="checkboxLabel"#end>$!struts.htmlEncode($parameters.label)</label></td>
-    </tr>
-</table>
-#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/checkboxlist.vm b/core/src/main/resources/template/archive/xhtml/checkboxlist.vm
deleted file mode 100644
index 85cf568..0000000
--- a/core/src/main/resources/template/archive/xhtml/checkboxlist.vm
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse( "/$parameters.templateDir/xhtml/controlheader.vm" )
-#parse( "/$parameters.templateDir/simple/checkboxlist.vm" )
-#parse( "/$parameters.templateDir/xhtml/controlfooter.vm" )
diff --git a/core/src/main/resources/template/archive/xhtml/combobox.vm b/core/src/main/resources/template/archive/xhtml/combobox.vm
deleted file mode 100644
index d47f5e9..0000000
--- a/core/src/main/resources/template/archive/xhtml/combobox.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/combobox.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/controlfooter.vm b/core/src/main/resources/template/archive/xhtml/controlfooter.vm
deleted file mode 100644
index b7ddce9..0000000
--- a/core/src/main/resources/template/archive/xhtml/controlfooter.vm
+++ /dev/null
@@ -1,22 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-$!{parameters.after}</td>
-</tr>
diff --git a/core/src/main/resources/template/archive/xhtml/controlheader.vm b/core/src/main/resources/template/archive/xhtml/controlheader.vm
deleted file mode 100644
index a07d787..0000000
--- a/core/src/main/resources/template/archive/xhtml/controlheader.vm
+++ /dev/null
@@ -1,47 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-## Only show message if errors are available.
-## This will be done if ActionSupport is used.
-#if( $fieldErrors.get($parameters.name) )
-  #set ($hasFieldErrors = $fieldErrors.get($parameters.name))
-  #foreach ($error in $fieldErrors.get($parameters.name))
-    <tr errorFor="$parameters.id">
-        #if ($parameters.labelposition == 'top')<td align="left" valign="top" colspan="2">#else<td align="center" valign="top" colspan="2">#end<span class="errorMessage">$!struts.htmlEncode($error)</span></td>
-    </tr>
-  #end
-#end
-## if the label position is top,
-## then give the label it's own row in the table
-<tr>
-#if ($parameters.labelposition && $parameters.labelposition == 'top')<td align="left" valign="top" colspan="2">#else<td align="right" valign="top">#end#if ($parameters.label)<label #if ($parameters.id) for="$!struts.htmlEncode($parameters.id)"#end#if ($hasFieldErrors) class="errorLabel"#else class="label"#end>#if ($parameters.required)<span class="required">*</span>#end$!struts.htmlEncode($parameters.label):</label>#end</td>
-## add the extra row
-#if ($parameters.labelposition && $parameters.labelposition == 'top')
-</tr>
-<tr>
-#end
-#if ($parameters.form.validate && $parameters.form.validate == true)
-    #if ($parameters.onblur)
-        #set ($parameters.onblur = "validate(this);${parameters.onblur}")
-    #else
-        #set ($parameters.onblur = "validate(this)")
-    #end
-#end
-    <td>
diff --git a/core/src/main/resources/template/archive/xhtml/debug.vm b/core/src/main/resources/template/archive/xhtml/debug.vm
deleted file mode 100644
index f4e2cd9..0000000
--- a/core/src/main/resources/template/archive/xhtml/debug.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/debug.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/doubleselect.vm b/core/src/main/resources/template/archive/xhtml/doubleselect.vm
deleted file mode 100644
index d5c894f..0000000
--- a/core/src/main/resources/template/archive/xhtml/doubleselect.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/doubleselect.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/empty.vm b/core/src/main/resources/template/archive/xhtml/empty.vm
deleted file mode 100644
index 7627ce1..0000000
--- a/core/src/main/resources/template/archive/xhtml/empty.vm
+++ /dev/null
@@ -1,20 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
diff --git a/core/src/main/resources/template/archive/xhtml/file.vm b/core/src/main/resources/template/archive/xhtml/file.vm
deleted file mode 100644
index 65750ac..0000000
--- a/core/src/main/resources/template/archive/xhtml/file.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/file.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/form-close.vm b/core/src/main/resources/template/archive/xhtml/form-close.vm
deleted file mode 100644
index 4b5b26b..0000000
--- a/core/src/main/resources/template/archive/xhtml/form-close.vm
+++ /dev/null
@@ -1,22 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-</table>
-#parse("/$parameters.templateDir/simple/form-close.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/form.vm b/core/src/main/resources/template/archive/xhtml/form.vm
deleted file mode 100644
index 1beb97e..0000000
--- a/core/src/main/resources/template/archive/xhtml/form.vm
+++ /dev/null
@@ -1,28 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#if ($parameters.validate && $parameters.validate == true)
-<script src="${base}/struts/validationClient.js"></script>
-<script src="${base}/dwr/interface/validator.js"></script>
-<script src="${base}/dwr/engine.js"></script>
-<script src="${base}/struts/template/xhtml/validation.js"></script>
-#end
-#parse("/$parameters.templateDir/simple/form.vm")
-<table class="wwFormTable">
diff --git a/core/src/main/resources/template/archive/xhtml/hidden.vm b/core/src/main/resources/template/archive/xhtml/hidden.vm
deleted file mode 100644
index 5dc922d..0000000
--- a/core/src/main/resources/template/archive/xhtml/hidden.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/simple/hidden.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/label.vm b/core/src/main/resources/template/archive/xhtml/label.vm
deleted file mode 100644
index 08c8e9f..0000000
--- a/core/src/main/resources/template/archive/xhtml/label.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/label.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/password.vm b/core/src/main/resources/template/archive/xhtml/password.vm
deleted file mode 100644
index 211dfbe..0000000
--- a/core/src/main/resources/template/archive/xhtml/password.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/password.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/radiomap.vm b/core/src/main/resources/template/archive/xhtml/radiomap.vm
deleted file mode 100644
index 793e15f..0000000
--- a/core/src/main/resources/template/archive/xhtml/radiomap.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/radiomap.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/select.vm b/core/src/main/resources/template/archive/xhtml/select.vm
deleted file mode 100644
index 001ec89..0000000
--- a/core/src/main/resources/template/archive/xhtml/select.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/select.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/submit.vm b/core/src/main/resources/template/archive/xhtml/submit.vm
deleted file mode 100644
index 0ec2837..0000000
--- a/core/src/main/resources/template/archive/xhtml/submit.vm
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-<tr>
-    <td colspan="2"><div #if ($parameters.align) align="$!struts.htmlEncode($parameters.align)" #end
->#parse("/$parameters.templateDir/simple/submit.vm")</div>#parse( "/$parameters.templateDir/xhtml/controlfooter.vm" )
diff --git a/core/src/main/resources/template/archive/xhtml/table.vm b/core/src/main/resources/template/archive/xhtml/table.vm
deleted file mode 100644
index 78a9f4e..0000000
--- a/core/src/main/resources/template/archive/xhtml/table.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/simple/table.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/text.vm b/core/src/main/resources/template/archive/xhtml/text.vm
deleted file mode 100644
index 64a24be..0000000
--- a/core/src/main/resources/template/archive/xhtml/text.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/text.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
diff --git a/core/src/main/resources/template/archive/xhtml/textarea.vm b/core/src/main/resources/template/archive/xhtml/textarea.vm
deleted file mode 100644
index a8514e6..0000000
--- a/core/src/main/resources/template/archive/xhtml/textarea.vm
+++ /dev/null
@@ -1,22 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/xhtml/controlheader.vm")#parse("/$parameters.templateDir/simple/textarea.vm")#parse("/$parameters.templateDir/xhtml/controlfooter.vm")
-
diff --git a/core/src/main/resources/template/archive/xhtml/token.vm b/core/src/main/resources/template/archive/xhtml/token.vm
deleted file mode 100644
index 04d011d..0000000
--- a/core/src/main/resources/template/archive/xhtml/token.vm
+++ /dev/null
@@ -1,21 +0,0 @@
-#*
- * $Id$
- *
- * 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.
- *#
-#parse("/$parameters.templateDir/simple/token.vm")
diff --git a/core/src/main/resources/xwork-2.6.dtd b/core/src/main/resources/xwork-2.6.dtd
new file mode 100644
index 0000000..ba6dddf
--- /dev/null
+++ b/core/src/main/resources/xwork-2.6.dtd
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<!-- START SNIPPET: xworkDtd -->
+
+<!--
+   XWork configuration DTD.
+   Use the following DOCTYPE
+
+   <!DOCTYPE xwork PUBLIC
+	"-//Apache Struts//XWork 2.6//EN"
+	"http://struts.apache.org/dtds/xwork-2.6.dtd">
+-->
+
+<!ELEMENT xwork ((package|include|bean|constant)*, bean-selection?, unknown-handler-stack?)>
+<!ATTLIST xwork
+    order CDATA #IMPLIED
+>
+
+<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-allowed-methods?, global-exception-mappings?, action*)>
+<!ATTLIST package
+    name CDATA #REQUIRED
+    extends CDATA #IMPLIED
+    namespace CDATA #IMPLIED
+    abstract CDATA #IMPLIED
+    strict-method-invocation (true|false) "true"
+>
+
+<!ELEMENT result-types (result-type+)>
+
+<!ELEMENT result-type (param*)>
+<!ATTLIST result-type
+    name CDATA #REQUIRED
+    class CDATA #REQUIRED
+    default (true|false) "false"
+>
+
+<!ELEMENT interceptors (interceptor|interceptor-stack)+>
+
+<!ELEMENT interceptor (param*)>
+<!ATTLIST interceptor
+    name CDATA #REQUIRED
+    class CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-stack (interceptor-ref*)>
+<!ATTLIST interceptor-stack
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-ref (param*)>
+<!ATTLIST interceptor-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-interceptor-ref (#PCDATA)>
+<!ATTLIST default-interceptor-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-action-ref (#PCDATA)>
+<!ATTLIST default-action-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-class-ref (#PCDATA)>
+<!ATTLIST default-class-ref
+   class CDATA #REQUIRED
+>
+
+<!ELEMENT global-results (result+)>
+
+<!ELEMENT global-allowed-methods (#PCDATA)>
+
+<!ELEMENT global-exception-mappings (exception-mapping+)>
+
+<!ELEMENT action ((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)>
+<!ATTLIST action
+    name CDATA #REQUIRED
+    class CDATA #IMPLIED
+    method CDATA #IMPLIED
+    converter CDATA #IMPLIED
+>
+
+<!ELEMENT param (#PCDATA)>
+<!ATTLIST param
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT result (#PCDATA|param)*>
+<!ATTLIST result
+    name CDATA #IMPLIED
+    type CDATA #IMPLIED
+>
+
+<!ELEMENT exception-mapping (#PCDATA|param)*>
+<!ATTLIST exception-mapping
+    name CDATA #IMPLIED
+    exception CDATA #REQUIRED
+    result CDATA #REQUIRED
+>
+
+<!ELEMENT allowed-methods (#PCDATA)>
+
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+    file CDATA #REQUIRED
+>
+
+<!ELEMENT bean (#PCDATA)>
+<!ATTLIST bean
+    type CDATA #IMPLIED
+    name CDATA #IMPLIED
+    class CDATA #REQUIRED
+    scope CDATA #IMPLIED
+    static CDATA #IMPLIED
+    optional CDATA #IMPLIED
+>
+
+<!ELEMENT bean-selection (#PCDATA)>
+<!ATTLIST bean-selection
+    name CDATA #IMPLIED
+    class CDATA #IMPLIED
+>
+
+<!ELEMENT constant (#PCDATA)>
+<!ATTLIST constant
+    name CDATA #REQUIRED
+    value CDATA #REQUIRED
+>
+
+<!ELEMENT unknown-handler-stack (unknown-handler-ref*)>
+<!ELEMENT unknown-handler-ref (#PCDATA)>
+<!ATTLIST unknown-handler-ref
+    name CDATA #REQUIRED
+>
+
+<!-- END SNIPPET: xworkDtd -->
+
diff --git a/core/src/test/java/com/opensymphony/xwork2/util/location/LocationUtilsTest.java b/core/src/test/java/com/opensymphony/xwork2/util/location/LocationUtilsTest.java
index a47d718..f64ffef 100644
--- a/core/src/test/java/com/opensymphony/xwork2/util/location/LocationUtilsTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/util/location/LocationUtilsTest.java
@@ -19,9 +19,11 @@
 package com.opensymphony.xwork2.util.location;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.struts2.config.StrutsJavaConfiguration;
 import org.apache.struts2.config.entities.BeanConfig;
+import org.apache.struts2.config.entities.BeanSelectionConfig;
 import org.apache.struts2.config.entities.ConstantConfig;
 
 import junit.framework.TestCase;
@@ -74,6 +76,10 @@
             public List<BeanConfig> beans() {
                 return null;
             }
+            @Override
+            public Optional<BeanSelectionConfig> beanSelection() {
+                return Optional.empty();
+            }
         };
         Location loc = LocationUtils.getLocation(conf, null);
 
diff --git a/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java b/core/src/test/java/org/apache/struts2/config/StrutsBeanSelectionProviderTest.java
similarity index 96%
rename from core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java
rename to core/src/test/java/org/apache/struts2/config/StrutsBeanSelectionProviderTest.java
index 42e07bb..30cc175 100644
--- a/core/src/test/java/org/apache/struts2/config/DefaultBeanSelectionProviderTest.java
+++ b/core/src/test/java/org/apache/struts2/config/StrutsBeanSelectionProviderTest.java
@@ -29,7 +29,7 @@
 import com.opensymphony.xwork2.inject.ContainerBuilder;
 import com.opensymphony.xwork2.util.location.LocatableProperties;
 
-public class DefaultBeanSelectionProviderTest extends XWorkTestCase {
+public class StrutsBeanSelectionProviderTest extends XWorkTestCase {
 
     public void testRegister() {
         LocalizedTextProvider localizedTextProvider = container.getInstance(LocalizedTextProvider.class);
diff --git a/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java b/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java
index 933de81..5e08f98 100644
--- a/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java
+++ b/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java
@@ -19,10 +19,14 @@
 package org.apache.struts2.config;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
+import java.util.Set;
 
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.config.entities.BeanConfig;
+import org.apache.struts2.config.entities.BeanSelectionConfig;
 import org.apache.struts2.config.entities.ConstantConfig;
 import org.junit.Assert;
 import org.junit.Test;
@@ -46,18 +50,26 @@
         StrutsJavaConfiguration javaConfig = new StrutsJavaConfiguration() {
             @Override
             public List<String> unknownHandlerStack() {
-                return Arrays.asList(expectedUnknownHandler);
+                return Collections.singletonList(expectedUnknownHandler);
             }
 
             @Override
             public List<ConstantConfig> constants() {
-                return Arrays.asList(constantConfig);
+                return Collections.singletonList(constantConfig);
             }
 
             @Override
             public List<BeanConfig> beans() {
-                return Arrays.asList(new BeanConfig(TestBean.class),
-                        new BeanConfig(TestBean.class, "testBean", TestBean.class, Scope.PROTOTYPE, true, true));
+                return Arrays.asList(
+                    new BeanConfig(TestBean.class, "struts"),
+                    new BeanConfig(TestBean.class, "struts.static", TestBean.class, Scope.PROTOTYPE, true, true),
+                    new BeanConfig(TestBean.class, "struts.test.bean", TestBean.class)
+                );
+            }
+
+            @Override
+            public Optional<BeanSelectionConfig> beanSelection() {
+                return Optional.of(new BeanSelectionConfig(TestBeanSelectionProvider.class, "testBeans"));
             }
         };
         StrutsJavaConfigurationProvider provider = new StrutsJavaConfigurationProvider(javaConfig);
@@ -83,5 +95,13 @@
         Container container = builder.create(true);
         TestBean testBean = container.getInstance(TestBean.class);
         Assert.assertNotNull(testBean);
+
+        testBean = container.getInstance(TestBean.class, "struts");
+        Assert.assertNotNull(testBean);
+
+        // bean selection
+        Set<String> names = container.getInstanceNames(TestBean.class);
+        Assert.assertTrue(names.contains("struts"));
+        Assert.assertTrue(names.contains("struts.test.bean"));
     }
 }
diff --git a/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java b/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java
new file mode 100644
index 0000000..79d6dd2
--- /dev/null
+++ b/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+package org.apache.struts2.config;
+
+import com.opensymphony.xwork2.TestBean;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.util.location.LocatableProperties;
+
+public class TestBeanSelectionProvider extends AbstractBeanSelectionProvider {
+
+    @Override
+    public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
+        alias(TestBean.class, "struts.test.bean", builder, props);
+    }
+
+}
diff --git a/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java b/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java
index 3fb8d0d..dbd406d 100644
--- a/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java
+++ b/core/src/test/java/org/apache/struts2/views/TemplateEngineManagerTest.java
@@ -27,8 +27,6 @@
 import org.apache.struts2.components.template.Template;
 import org.apache.struts2.components.template.TemplateEngine;
 import org.apache.struts2.components.template.TemplateEngineManager;
-import org.apache.struts2.components.template.VelocityTemplateEngine;
-import org.apache.struts2.dispatcher.mapper.CompositeActionMapper;
 
 import com.mockobjects.dynamic.C;
 import com.mockobjects.dynamic.Mock;
@@ -47,9 +45,8 @@
         mgr = new TemplateEngineManager();
         mockContainer = new Mock(Container.class);
         mockContainer.matchAndReturn("getInstance", C.args(C.eq(TemplateEngine.class), C.eq("jsp")), new JspTemplateEngine());
-        mockContainer.matchAndReturn("getInstance", C.args(C.eq(TemplateEngine.class), C.eq("vm")), new VelocityTemplateEngine());
         mockContainer.matchAndReturn("getInstance", C.args(C.eq(TemplateEngine.class), C.eq("ftl")), new FreemarkerTemplateEngine());
-        mockContainer.matchAndReturn("getInstanceNames", C.args(C.eq(TemplateEngine.class)), new HashSet() {{
+        mockContainer.matchAndReturn("getInstanceNames", C.args(C.eq(TemplateEngine.class)), new HashSet<String>() {{
             add("jsp");
             add("vm");
             add("ftl");
@@ -60,18 +57,13 @@
     }
     
     public void testTemplateTypeFromTemplateNameAndDefaults() {
-        
         TemplateEngine engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo"), null);
         assertTrue(engine instanceof JspTemplateEngine);
-        engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo.vm"), null);
-        assertTrue(engine instanceof VelocityTemplateEngine);
     }
 
     public void testTemplateTypeOverrides() {
         TemplateEngine engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo"), "ftl");
         assertTrue(engine instanceof FreemarkerTemplateEngine);
-        engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo.vm"), "ftl");
-        assertTrue(engine instanceof VelocityTemplateEngine);
         engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo.ftl"), "");
         assertTrue(engine instanceof FreemarkerTemplateEngine);
     }
@@ -81,7 +73,7 @@
         TemplateEngine engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo"), null);
         Template template = new Template("/template", "simple", "foo." + TemplateEngineManager.DEFAULT_TEMPLATE_TYPE);
         TemplateEngine defaultTemplateEngine = mgr.getTemplateEngine(template, null);
-        assertTrue(engine.getClass().equals(defaultTemplateEngine.getClass()));
+        assertEquals(engine.getClass(), defaultTemplateEngine.getClass());
     }
 
     protected void tearDown() throws Exception {
diff --git a/plugins/config-browser/pom.xml b/plugins/config-browser/pom.xml
index d494d4b..1286000 100644
--- a/plugins/config-browser/pom.xml
+++ b/plugins/config-browser/pom.xml
@@ -34,4 +34,11 @@
     <properties>
     	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-velocity-plugin</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java
index c1eec8a..8827fd8 100644
--- a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java
+++ b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java
@@ -30,6 +30,7 @@
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
 import org.apache.struts2.views.freemarker.FreemarkerManager;
+import org.apache.struts2.views.velocity.VelocityConstants;
 import org.apache.struts2.views.velocity.VelocityManager;
 
 import java.util.Map;
@@ -57,7 +58,7 @@
         bindings.put(ActionMapper.class.getName(), addBindings(container, ActionMapper.class, StrutsConstants.STRUTS_MAPPER_CLASS));
         bindings.put(MultiPartRequest.class.getName(), addBindings(container, MultiPartRequest.class, StrutsConstants.STRUTS_MULTIPART_PARSER));
         bindings.put(FreemarkerManager.class.getName(), addBindings(container, FreemarkerManager.class, StrutsConstants.STRUTS_FREEMARKER_MANAGER_CLASSNAME));
-        bindings.put(VelocityManager.class.getName(), addBindings(container, VelocityManager.class, StrutsConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME));
+        bindings.put(VelocityManager.class.getName(), addBindings(container, VelocityManager.class, VelocityConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME));
         bindings.put(UrlRenderer.class.getName(), addBindings(container, UrlRenderer.class, StrutsConstants.STRUTS_URL_RENDERER));
     }
 
diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml
index 9162538..d78412c 100644
--- a/plugins/osgi/pom.xml
+++ b/plugins/osgi/pom.xml
@@ -63,14 +63,8 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity-tools</artifactId>
-            <optional>true</optional>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-velocity-plugin</artifactId>
         </dependency>
 
         <dependency>
diff --git a/plugins/pom.xml b/plugins/pom.xml
index 4ecdd0e..66bb555 100644
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -32,6 +32,7 @@
     <name>Struts 2 Plugins</name>
 
     <modules>
+        <module>async</module>
         <module>bean-validation</module>
         <module>cdi</module>
         <module>config-browser</module>
@@ -55,7 +56,7 @@
         <module>spring</module>
         <module>testng</module>
         <module>tiles</module>
-        <module>async</module>
+        <module>velocity</module>
     </modules>
 
     <dependencies>
diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml
index 06146d0..81f08b6 100644
--- a/plugins/portlet/pom.xml
+++ b/plugins/portlet/pom.xml
@@ -41,6 +41,11 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-velocity-plugin</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <optional>true</optional>
diff --git a/plugins/sitemesh/pom.xml b/plugins/sitemesh/pom.xml
index 66375ae5..8a47ea2 100644
--- a/plugins/sitemesh/pom.xml
+++ b/plugins/sitemesh/pom.xml
@@ -36,16 +36,11 @@
             <groupId>opensymphony</groupId>
             <artifactId>sitemesh</artifactId>
         </dependency>
+
         <!-- Velocity -->
         <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity-tools</artifactId>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-velocity-plugin</artifactId>
             <optional>true</optional>
         </dependency>
 
diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml
new file mode 100644
index 0000000..649e1d4
--- /dev/null
+++ b/plugins/velocity/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.struts</groupId>
+        <artifactId>struts2-plugins</artifactId>
+        <version>2.6-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>struts2-velocity-plugin</artifactId>
+    <packaging>jar</packaging>
+    <name>Struts 2 Velocity Plugin</name>
+
+    <dependencies>
+
+        <!-- Velocity -->
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-tools</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.servlet.jsp</groupId>
+            <artifactId>jsp-api</artifactId>
+        </dependency>
+
+        <!-- The Servlet API mocks in Spring Framework 4.0 support Servlet 3.0 and higher
+           So this is only necessary in tests-->
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.1.0</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>mockobjects</groupId>
+            <artifactId>mockobjects-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+    <properties>
+    	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+</project>
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsResourceLoader.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
similarity index 87%
rename from core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
index 469e570..f8f6075 100644
--- a/core/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
@@ -24,11 +24,9 @@
 
 public class StrutsVelocityContext extends VelocityContext {
 
-    private static final long serialVersionUID = 8497212428904436963L;
     ValueStack stack;
     VelocityContext[] chainedContexts;
 
-
     public StrutsVelocityContext(ValueStack stack) {
         this(null, stack);
     }
@@ -38,7 +36,6 @@
         this.stack = stack;
     }
 
-
     public boolean internalContainsKey(Object key) {
         boolean contains = super.internalContainsKey(key);
 
@@ -63,8 +60,8 @@
 
         // if we still haven't found it, le's search through our chained contexts
         if (chainedContexts != null) {
-            for (int index = 0; index < chainedContexts.length; index++) {
-                if (chainedContexts[index].containsKey(key)) {
+            for (VelocityContext chainedContext : chainedContexts) {
+                if (chainedContext.containsKey(key)) {
                     return true;
                 }
             }
@@ -97,9 +94,9 @@
 
         // finally, if we're chained to other contexts, let's look in them
         if (chainedContexts != null) {
-            for (int index = 0; index < chainedContexts.length; index++) {
-                if (chainedContexts[index].containsKey(key)) {
-                    return chainedContexts[index].internalGet(key);
+            for (VelocityContext chainedContext : chainedContexts) {
+                if (chainedContext.containsKey(key)) {
+                    return chainedContext.internalGet(key);
                 }
             }
         }
diff --git a/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityBeanSelectionProvider.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityBeanSelectionProvider.java
new file mode 100644
index 0000000..f53ec66
--- /dev/null
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityBeanSelectionProvider.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+package org.apache.struts2.views.velocity;
+
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.util.location.LocatableProperties;
+import org.apache.struts2.config.AbstractBeanSelectionProvider;
+import org.apache.struts2.config.StrutsBeanSelectionProvider;
+
+/**
+ * Please see {@link StrutsBeanSelectionProvider} for more details.
+ *
+ * <p>
+ * The following is a list of the allowed extension points:
+ *
+ * <table border="1" summary="">
+ *   <tr>
+ *     <th>Type</th>
+ *     <th>Property</th>
+ *     <th>Scope</th>
+ *     <th>Description</th>
+ *   </tr>
+ *   <tr>
+ *     <td>org.apache.struts2.views.velocity.VelocityManager</td>
+ *     <td>struts.velocity.manager.classname</td>
+ *     <td>singleton</td>
+ *     <td>Loads and processes Velocity templates</td>
+ *   </tr>
+ * </table>
+ */
+public class VelocityBeanSelectionProvider extends AbstractBeanSelectionProvider {
+
+    @Override
+    public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
+        alias(VelocityManager.class, VelocityConstants.STRUTS_VELOCITY_MANAGER_CLASSNAME, builder, props);
+    }
+
+}
diff --git a/core/src/main/resources/template/archive/simple/token.vm b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityConstants.java
similarity index 73%
rename from core/src/main/resources/template/archive/simple/token.vm
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityConstants.java
index 5e5d18d..f905662 100644
--- a/core/src/main/resources/template/archive/simple/token.vm
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityConstants.java
@@ -1,6 +1,4 @@
-#*
- * $Id$
- *
+/*
  * 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
@@ -17,6 +15,12 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- *#
-<input type="hidden" name="$!{parameters.tokenNameField}" value="$struts.htmlEncode($!parameters.name)"/>
-<input type="hidden" name="$!parameters.name" value="$struts.htmlEncode($!parameters.token)"/>
+ */
+package org.apache.struts2.views.velocity;
+
+public final class VelocityConstants {
+
+    /** org.apache.struts2.views.velocity.VelocityManager implementation class */
+    public static final String STRUTS_VELOCITY_MANAGER_CLASSNAME = "struts.velocity.manager.classname";
+
+}
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
similarity index 94%
rename from core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
index f94ac7e..6cbbaed 100644
--- a/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
@@ -53,22 +53,15 @@
  * Manages the environment for Velocity result types
  */
 public class VelocityManager {
+
     private static final Logger LOG = LogManager.getLogger(VelocityManager.class);
+
     public static final String STRUTS = "struts";
+
     private ObjectFactory objectFactory;
 
     public static final String KEY_VELOCITY_STRUTS_CONTEXT = ".KEY_velocity.struts2.context";
 
-    /**
-     * the parent JSP tag
-     */
-    public static final String PARENT = "parent";
-
-    /**
-     * the current JSP tag
-     */
-    public static final String TAG = "tag";
-
     private VelocityEngine velocityEngine;
 
     /**
@@ -77,7 +70,6 @@
     protected ToolboxManager toolboxManager = null;
     private String toolBoxLocation;
 
-
     /**
      * Names of contexts that will be chained on every request
      */
@@ -137,8 +129,8 @@
         VelocityContext[] chainedContexts = prepareChainedContexts(req, res, stack.getContext());
         StrutsVelocityContext context = new StrutsVelocityContext(chainedContexts, stack);
         Map standardMap = ContextUtil.getStandardContext(stack, req, res);
-        for (Iterator iterator = standardMap.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
+        for (Object o : standardMap.entrySet()) {
+            Map.Entry entry = (Map.Entry) o;
             context.put((String) entry.getKey(), entry.getValue());
         }
         context.put(STRUTS, new VelocityStrutsUtil(velocityEngine, context, stack, req, res));
@@ -236,13 +228,13 @@
 
         String defaultUserDirective = properties.getProperty("userdirective");
 
-        /**
-         * if the user has specified an external velocity configuration file, we'll want to search for it in the
-         * following order
-         *
-         * 1. relative to the context path
-         * 2. relative to /WEB-INF
-         * 3. in the class path
+        /*
+          if the user has specified an external velocity configuration file, we'll want to search for it in the
+          following order
+
+          1. relative to the context path
+          2. relative to /WEB-INF
+          3. in the class path
          */
         String configfile;
 
@@ -301,16 +293,15 @@
             if (in != null) {
                 try {
                     in.close();
-                } catch (IOException e) {
+                } catch (IOException ignore) {
                 }
             }
         }
 
         // overide with programmatically set properties
         if (this.velocityProperties != null) {
-            Iterator keys = this.velocityProperties.keySet().iterator();
-            while (keys.hasNext()) {
-                String key = (String) keys.next();
+            for (Object o : this.velocityProperties.keySet()) {
+                String key = (String) o;
                 properties.setProperty(key, this.velocityProperties.getProperty(key));
             }
         }
@@ -330,8 +321,8 @@
         if (LOG.isDebugEnabled()) {
             LOG.debug("Initializing Velocity with the following properties ...");
 
-            for (Iterator iter = properties.keySet().iterator(); iter.hasNext(); ) {
-                String key = (String) iter.next();
+            for (Object o : properties.keySet()) {
+                String key = (String) o;
                 String value = properties.getProperty(key);
                 LOG.debug("    '{}' = '{}'", key, value);
             }
@@ -394,9 +385,6 @@
         }
     }
 
-
-
-
     /**
      * <p>
      * Instantiates a new VelocityEngine.
@@ -488,11 +476,11 @@
         } else {
             // remove strutsfile from resource loader property
             String prop = properties.getProperty(Velocity.RESOURCE_LOADER);
-            if (prop.indexOf("strutsfile,") != -1) {
+            if (prop.contains("strutsfile,")) {
                 prop = replace(prop, "strutsfile,", "");
-            } else if (prop.indexOf(", strutsfile") != -1) {
+            } else if (prop.contains(", strutsfile")) {
                 prop = replace(prop, ", strutsfile", "");
-            } else if (prop.indexOf("strutsfile") != -1) {
+            } else if (prop.contains("strutsfile")) {
                 prop = replace(prop, "strutsfile", "");
             }
 
diff --git a/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityTagLibrary.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityTagLibrary.java
new file mode 100644
index 0000000..6135164
--- /dev/null
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/VelocityTagLibrary.java
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+package org.apache.struts2.views.velocity;
+
+import org.apache.struts2.views.TagLibraryDirectiveProvider;
+import org.apache.struts2.views.velocity.components.ActionDirective;
+import org.apache.struts2.views.velocity.components.ActionErrorDirective;
+import org.apache.struts2.views.velocity.components.ActionMessageDirective;
+import org.apache.struts2.views.velocity.components.AnchorDirective;
+import org.apache.struts2.views.velocity.components.BeanDirective;
+import org.apache.struts2.views.velocity.components.CheckBoxDirective;
+import org.apache.struts2.views.velocity.components.CheckBoxListDirective;
+import org.apache.struts2.views.velocity.components.ComboBoxDirective;
+import org.apache.struts2.views.velocity.components.ComponentDirective;
+import org.apache.struts2.views.velocity.components.DateDirective;
+import org.apache.struts2.views.velocity.components.DoubleSelectDirective;
+import org.apache.struts2.views.velocity.components.FieldErrorDirective;
+import org.apache.struts2.views.velocity.components.FileDirective;
+import org.apache.struts2.views.velocity.components.FormDirective;
+import org.apache.struts2.views.velocity.components.HeadDirective;
+import org.apache.struts2.views.velocity.components.HiddenDirective;
+import org.apache.struts2.views.velocity.components.I18nDirective;
+import org.apache.struts2.views.velocity.components.IncludeDirective;
+import org.apache.struts2.views.velocity.components.LabelDirective;
+import org.apache.struts2.views.velocity.components.OptionTransferSelectDirective;
+import org.apache.struts2.views.velocity.components.ParamDirective;
+import org.apache.struts2.views.velocity.components.PasswordDirective;
+import org.apache.struts2.views.velocity.components.PropertyDirective;
+import org.apache.struts2.views.velocity.components.PushDirective;
+import org.apache.struts2.views.velocity.components.RadioDirective;
+import org.apache.struts2.views.velocity.components.ResetDirective;
+import org.apache.struts2.views.velocity.components.SelectDirective;
+import org.apache.struts2.views.velocity.components.SetDirective;
+import org.apache.struts2.views.velocity.components.SubmitDirective;
+import org.apache.struts2.views.velocity.components.TextAreaDirective;
+import org.apache.struts2.views.velocity.components.TextDirective;
+import org.apache.struts2.views.velocity.components.TextFieldDirective;
+import org.apache.struts2.views.velocity.components.TokenDirective;
+import org.apache.struts2.views.velocity.components.URLDirective;
+import org.apache.struts2.views.velocity.components.UpDownSelectDirective;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class VelocityTagLibrary implements TagLibraryDirectiveProvider {
+
+    @Override
+    public List<Class> getDirectiveClasses() {
+        Class[] directives = new Class[] {
+            ActionDirective.class,
+            BeanDirective.class,
+            CheckBoxDirective.class,
+            CheckBoxListDirective.class,
+            ComboBoxDirective.class,
+            ComponentDirective.class,
+            DateDirective.class,
+            DoubleSelectDirective.class,
+            FileDirective.class,
+            FormDirective.class,
+            HeadDirective.class,
+            HiddenDirective.class,
+            AnchorDirective.class,
+            I18nDirective.class,
+            IncludeDirective.class,
+            LabelDirective.class,
+            ParamDirective.class,
+            PasswordDirective.class,
+            PushDirective.class,
+            PropertyDirective.class,
+            RadioDirective.class,
+            SelectDirective.class,
+            SetDirective.class,
+            SubmitDirective.class,
+            ResetDirective.class,
+            TextAreaDirective.class,
+            TextDirective.class,
+            TextFieldDirective.class,
+            TokenDirective.class,
+            URLDirective.class,
+            ActionErrorDirective.class,
+            ActionMessageDirective.class,
+            FieldErrorDirective.class,
+            OptionTransferSelectDirective.class,
+            UpDownSelectDirective.class
+        };
+        return Arrays.asList(directives);
+    }
+
+    /**
+     * @deprecated please use {#getDirectiveClasses}
+     */
+    @Deprecated()
+    public List<Class> getVelocityDirectiveClasses() {
+        return getDirectiveClasses();
+    }
+
+}
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ActionDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ActionErrorDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ActionMessageDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AnchorDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/BeanDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/CheckBoxListDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ComboBoxDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ComponentDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/DateDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/DoubleSelectDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/FieldErrorDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/FileDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/FormDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/HeadDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/HiddenDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/I18nDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/IncludeDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/InputTransferSelectDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/LabelDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/OptGroupDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/OptionTransferSelectDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ParamDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/PasswordDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/PropertyDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/PushDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/RadioDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/ResetDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/SelectDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/SetDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/SubmitDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TextAreaDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TextDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TextFieldDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/TokenDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/URLDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/UpDownSelectDirective.java
diff --git a/core/src/main/java/org/apache/struts2/views/velocity/package.html b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/package.html
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/velocity/package.html
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/package.html
diff --git a/core/src/main/java/org/apache/struts2/result/VelocityResult.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/result/VelocityResult.java
similarity index 98%
rename from core/src/main/java/org/apache/struts2/result/VelocityResult.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/result/VelocityResult.java
index b552fb7..c62f687 100644
--- a/core/src/main/java/org/apache/struts2/result/VelocityResult.java
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/result/VelocityResult.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.struts2.result;
+package org.apache.struts2.views.velocity.result;
 
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.ActionInvocation;
@@ -26,6 +26,7 @@
 import org.apache.logging.log4j.Logger;
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.result.StrutsResultSupport;
 import org.apache.struts2.views.JspSupportServlet;
 import org.apache.struts2.views.velocity.VelocityManager;
 import org.apache.velocity.Template;
diff --git a/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/template/VelocityTemplateEngine.java
similarity index 93%
rename from core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java
rename to plugins/velocity/src/main/java/org/apache/struts2/views/velocity/template/VelocityTemplateEngine.java
index 24f4564..423029e 100644
--- a/core/src/main/java/org/apache/struts2/components/template/VelocityTemplateEngine.java
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/template/VelocityTemplateEngine.java
@@ -16,12 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.struts2.components.template;
+package org.apache.struts2.views.velocity.template;
 
 import com.opensymphony.xwork2.inject.Inject;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.components.template.BaseTemplateEngine;
+import org.apache.struts2.components.template.Template;
+import org.apache.struts2.components.template.TemplateRenderingContext;
 import org.apache.struts2.views.velocity.VelocityManager;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.context.Context;
@@ -29,7 +32,6 @@
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.io.Writer;
 import java.util.List;
 import java.util.Map;
diff --git a/plugins/velocity/src/main/resources/struts-plugin.xml b/plugins/velocity/src/main/resources/struts-plugin.xml
new file mode 100644
index 0000000..39112ba
--- /dev/null
+++ b/plugins/velocity/src/main/resources/struts-plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<!DOCTYPE struts PUBLIC
+	"-//Apache Software Foundation//DTD Struts Configuration 2.6//EN"
+	"http://struts.apache.org/dtds/struts-2.6.dtd">
+    
+<struts>
+
+    <bean name="struts" class="org.apache.struts2.views.velocity.VelocityManager" />
+
+    <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm"
+          class="org.apache.struts2.views.velocity.template.VelocityTemplateEngine" />
+
+    <bean type="org.apache.struts2.views.TagLibraryDirectiveProvider" name="s"
+          class="org.apache.struts2.views.velocity.VelocityTagLibrary" />
+
+    <package name="velocity-default" extends="struts-default">
+        <result-types>
+            <result-type name="velocity" class="org.apache.struts2.views.velocity.result.VelocityResult"/>
+        </result-types>
+    </package>
+
+    <bean-selection name="velocityBeans" class="org.apache.struts2.views.velocity.VelocityBeanSelectionProvider"/>
+
+</struts>
diff --git a/core/src/test/java/org/apache/struts2/result/VelocityResultTest.java b/plugins/velocity/src/test/java/org/apache/struts2/views/velocity/result/VelocityResultTest.java
similarity index 85%
rename from core/src/test/java/org/apache/struts2/result/VelocityResultTest.java
rename to plugins/velocity/src/test/java/org/apache/struts2/views/velocity/result/VelocityResultTest.java
index 9ba000f..7fa4bb9 100644
--- a/core/src/test/java/org/apache/struts2/result/VelocityResultTest.java
+++ b/plugins/velocity/src/test/java/org/apache/struts2/views/velocity/result/VelocityResultTest.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.struts2.result;
+package org.apache.struts2.views.velocity.result;
 
-import org.apache.struts2.StrutsInternalTestCase;
+import com.opensymphony.xwork2.XWorkTestCase;
+import junit.framework.TestCase;
 import org.apache.struts2.result.StrutsResultSupport;
-import org.apache.struts2.result.VelocityResult;
 import org.apache.velocity.Template;
 import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.exception.ParseErrorException;
@@ -36,7 +36,7 @@
 /**
  *
  */
-public class VelocityResultTest extends StrutsInternalTestCase {
+public class VelocityResultTest extends XWorkTestCase {
 
     ActionInvocation actionInvocation;
     Mock mockActionProxy;
@@ -56,11 +56,11 @@
         ValueStack stack = ActionContext.getContext().getValueStack();
         stack.push(bean);
 
-        assertEquals(location, stack.findValue("location"));
+        TestCase.assertEquals(location, stack.findValue("location"));
 
         result.setLocation("${location}");
         result.execute(actionInvocation);
-        assertEquals(location, result.finalLocation);
+        TestCase.assertEquals(location, result.finalLocation);
     }
 
     public void testCanResolveLocationUsingStaticExpression() throws Exception {
@@ -68,15 +68,15 @@
         String location = "/any.action";
         result.setLocation("${'" + location + "'}");
         result.execute(actionInvocation);
-        assertEquals(location, result.finalLocation);
+        TestCase.assertEquals(location, result.finalLocation);
     }
 
     public void testResourcesFoundUsingAbsolutePath() throws Exception {
         String location = "/WEB-INF/views/registration.vm";
 
         Template template = result.getTemplate(stack, velocity, actionInvocation, location, "UTF-8");
-        assertNotNull(template);
-        assertEquals("expect absolute locations to be handled as is", location, velocity.templateName);
+        TestCase.assertNotNull(template);
+        TestCase.assertEquals("expect absolute locations to be handled as is", location, velocity.templateName);
     }
 
     public void testResourcesFoundUsingNames() throws Exception {
@@ -84,8 +84,8 @@
         String expectedTemplateName = namespace + "/" + location;
 
         Template template = result.getTemplate(stack, velocity, actionInvocation, location, "UTF-8");
-        assertNotNull(template);
-        assertEquals("expect the prefix to be appended to the path when the location is not absolute", expectedTemplateName, velocity.templateName);
+        TestCase.assertNotNull(template);
+        TestCase.assertEquals("expect the prefix to be appended to the path when the location is not absolute", expectedTemplateName, velocity.templateName);
     }
 
     protected void setUp() throws Exception {
diff --git a/plugins/velocity/src/test/java/org/apache/struts2/views/velocity/template/VelocityTemplateEngineTest.java b/plugins/velocity/src/test/java/org/apache/struts2/views/velocity/template/VelocityTemplateEngineTest.java
new file mode 100644
index 0000000..b206e2a
--- /dev/null
+++ b/plugins/velocity/src/test/java/org/apache/struts2/views/velocity/template/VelocityTemplateEngineTest.java
@@ -0,0 +1,84 @@
+/*
+ * 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.
+ */
+package org.apache.struts2.views.velocity.template;
+
+import com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.inject.Container;
+import org.apache.struts2.components.template.FreemarkerTemplateEngine;
+import org.apache.struts2.components.template.JspTemplateEngine;
+import org.apache.struts2.components.template.Template;
+import org.apache.struts2.components.template.TemplateEngine;
+import org.apache.struts2.components.template.TemplateEngineManager;
+
+import java.util.HashSet;
+
+public class VelocityTemplateEngineTest extends XWorkTestCase {
+
+    private TemplateEngineManager mgr;
+
+    public void setUp() throws Exception {
+        super.setUp();
+
+        mgr = new TemplateEngineManager();
+        Mock mockContainer = new Mock(Container.class);
+        mockContainer.matchAndReturn("getInstance", C.args(C.eq(TemplateEngine.class), C.eq("jsp")), new JspTemplateEngine());
+        mockContainer.matchAndReturn("getInstance", C.args(C.eq(TemplateEngine.class), C.eq("vm")), new VelocityTemplateEngine());
+        mockContainer.matchAndReturn("getInstance", C.args(C.eq(TemplateEngine.class), C.eq("ftl")), new FreemarkerTemplateEngine());
+        mockContainer.matchAndReturn("getInstanceNames", C.args(C.eq(TemplateEngine.class)), new HashSet<String>() {{
+            add("jsp");
+            add("vm");
+            add("ftl");
+        }});
+
+        mgr.setContainer((Container) mockContainer.proxy());
+        mgr.setDefaultTemplateType("jsp");
+    }
+
+    public void testTemplateTypeFromTemplateNameAndDefaults() {
+
+        TemplateEngine engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo"), null);
+        assertTrue(engine instanceof JspTemplateEngine);
+        engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo.vm"), null);
+        assertTrue(engine instanceof VelocityTemplateEngine);
+    }
+
+    public void testTemplateTypeOverrides() {
+        TemplateEngine engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo"), "ftl");
+        assertTrue(engine instanceof FreemarkerTemplateEngine);
+        engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo.vm"), "ftl");
+        assertTrue(engine instanceof VelocityTemplateEngine);
+        engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo.ftl"), "");
+        assertTrue(engine instanceof FreemarkerTemplateEngine);
+    }
+
+    public void testTemplateTypeUsesDefaultWhenNotSetInConfiguration() {
+        mgr.setDefaultTemplateType(null);
+        TemplateEngine engine = mgr.getTemplateEngine(new Template("/template", "simple", "foo"), null);
+        Template template = new Template("/template", "simple", "foo." + TemplateEngineManager.DEFAULT_TEMPLATE_TYPE);
+        TemplateEngine defaultTemplateEngine = mgr.getTemplateEngine(template, null);
+        assertEquals(engine.getClass(), defaultTemplateEngine.getClass());
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f8128dc..8b42a17 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,9 +75,9 @@
     <modules>
         <module>bom</module>
         <module>core</module>
-        <module>apps</module>
         <module>plugins</module>
         <module>bundles</module>
+        <module>apps</module>
     </modules>
 
     <licenses>
@@ -691,6 +691,11 @@
                 <artifactId>struts2-osgi-demo-bundle</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.struts</groupId>
+                <artifactId>struts2-velocity-plugin</artifactId>
+                <version>${project.version}</version>
+            </dependency>
 
             <dependency>
                 <groupId>org.freemarker</groupId>
@@ -731,7 +736,6 @@
                 <groupId>org.apache.velocity</groupId>
                 <artifactId>velocity</artifactId>
                 <version>1.7</version>
-                <optional>true</optional>
             </dependency>
 
             <dependency>
