diff --git a/genesis-maven-plugin/pom.xml b/genesis-maven-plugin/pom.xml
deleted file mode 100644
index 66f24c9..0000000
--- a/genesis-maven-plugin/pom.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis</artifactId>
-        <version>2.1-SNAPSHOT</version>
-    </parent>
-    
-    <artifactId>genesis-maven-plugin</artifactId>
-    <name>Genesis Maven Plugin</name>
-    <packaging>maven-plugin</packaging>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.codehaus.groovy.maven</groupId>
-            <artifactId>gmaven-mojo</artifactId>
-            <version>1.0-rc-3</version>
-        </dependency>
-    </dependencies>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-enforcer-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <requireJavaVersion>
-                                    <version>[1.4,)</version>
-                                </requireJavaVersion>
-                            </rules>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.codehaus.groovy.maven</groupId>
-                <artifactId>gmaven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>generateStubs</goal>
-                            <goal>compile</goal>
-                            <goal>generateTestStubs</goal>
-                            <goal>testCompile</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-plugin-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>helpmojo</goal>
-                            <goal>descriptor</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-remote-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>process</goal>
-                        </goals>
-                        <configuration>
-                            <resourceBundles>
-                                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
-                            </resourceBundles>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <optimize>true</optimize>
-                    <debug>true</debug>
-                    <showDeprecation>true</showDeprecation>
-                    <showWarnings>true</showWarnings>
-                    <source>1.4</source>
-                    <target>1.4</target>
-                </configuration>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <source>1.4</source>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-plugin-plugin</artifactId>
-                <version>2.4.2</version>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.5</version>
-                <configuration>
-                    <quiet>true</quiet>
-                    <source>1.4</source>
-                    <links>
-                        <link>http://java.sun.com/j2se/1.4.2/docs/api</link>
-                    </links>
-                    <tags>
-                        <!-- Maven tags -->
-                        <tag>
-                            <name>goal</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>phase</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>execute</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>requiresDependencyResolution</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>parameter</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>required</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>readonly</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <!-- Plexus tags -->
-                        <tag>
-                            <name>plexus.component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.requirement</name>
-                            <placement>Xf</placement>
-                        </tag>
-                    </tags>
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
-</project>
-
diff --git a/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateConfigurationMojo.groovy b/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateConfigurationMojo.groovy
deleted file mode 100644
index 202c9f2..0000000
--- a/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateConfigurationMojo.groovy
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.geronimo.genesis.plugin
-
-import org.codehaus.groovy.maven.mojo.GroovyMojo
-
-import org.apache.maven.project.MavenProject
-
-/**
- * Validate the basic project configuration.
- *
- * @goal validate-configuration
- * @phase validate
- * @since 2.0
- *
- * @version $Id$
- */
-class ValidateConfigurationMojo
-    extends GroovyMojo
-{
-    /**
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    MavenProject project
-    
-    void execute() {
-        if (project.groupId.startsWith('org.apache.geronimo.genesis')) {
-            return
-        }
-        
-        def failIfNotConfigured = { var, value, name ->
-            if (var.startsWith(value)) {
-                fail("Genesis child project must configure element: $name")
-            }
-        }
-        
-        // TODO: project/url
-        
-        // TODO: project/distributionManagement/site
-        
-        failIfNotConfigured(
-            project.description,
-            'Genesis provides',
-            'project/description')
-        
-        failIfNotConfigured(
-            project.scm.connection,
-            'scm:svn:http://svn.apache.org/repos/asf/geronimo/genesis',
-            'project/scm/connection')
-        
-        failIfNotConfigured(
-            project.scm.developerConnection,
-            'scm:svn:https://svn.apache.org/repos/asf/geronimo/genesis',
-            'project/scm/developerConnection')
-        
-        failIfNotConfigured(
-            project.scm.url,
-            'http://svn.apache.org/viewvc/geronimo/geronimo/genesis',
-            'project/scm/url')
-    }
-}
diff --git a/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateReleaseConfigurationMojo.groovy b/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateReleaseConfigurationMojo.groovy
deleted file mode 100644
index 9885fc2..0000000
--- a/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateReleaseConfigurationMojo.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.geronimo.genesis.plugin
-
-import org.codehaus.groovy.maven.mojo.GroovyMojo
-
-import org.apache.maven.project.MavenProject
-
-/**
- * Validate the relese configuration.
- *
- * @goal validate-release-configuration
- * @phase validate
- * @since 2.0
- *
- * @version $Id$
- */
-class ValidateReleaseConfigurationMojo
-    extends GroovyMojo
-{
-    /**
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    MavenProject project
-    
-    void execute() {
-        // Optionally prevent non-staged releases for projects
-        if (project.properties['release.stageRequired']) {
-            if (project.properties['release'] != 'stage') {
-                fail('Release requires staging; use -Drelease=stage')
-            }
-        }
-        
-        // Make sure that we have a configured GPG passphrase
-        def phrase = project.properties['gpg.passphrase']
-        if (phrase == null || phrase.trim() == '') {
-            fail('Missing required property: gpg.passphrase')
-        }
-    }
-}
diff --git a/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateReleaseStageConfigurationMojo.groovy b/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateReleaseStageConfigurationMojo.groovy
deleted file mode 100644
index 647e177..0000000
--- a/genesis-maven-plugin/src/main/groovy/org/apache/geronimo/genesis/plugin/ValidateReleaseStageConfigurationMojo.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.geronimo.genesis.plugin
-
-import org.codehaus.groovy.maven.mojo.GroovyMojo
-
-import org.apache.maven.project.MavenProject
-
-/**
- * Validate the relese=stage configuration.
- *
- * @goal validate-release-stage-configuration
- * @phase validate
- * @since 2.0
- *
- * @version $Id$
- */
-class ValidateReleaseStageConfigurationMojo
-    extends GroovyMojo
-{
-    /**
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    MavenProject project
-    
-    void execute() {
-        // Make sure that we have a valid stage deployment URL configured,
-        // and that the URL is parsable (ie. not a file reference, which won't work
-        def url = project.properties['release.stageDeployUrl']
-        if (url == null || url.trim() == '') {
-            fail('Missing required property: release.stageDeployUrl')
-        }
-        try {
-            new URL(url)
-        }
-        catch (Exception e) {
-            fail("Invalid URL: $url")
-        }
-    }
-}
diff --git a/genesis-skin/genesis-geronimo-skin/pom.xml b/genesis-skin/genesis-geronimo-skin/pom.xml
deleted file mode 100644
index 59e5f97..0000000
--- a/genesis-skin/genesis-geronimo-skin/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis.skin</groupId>
-        <artifactId>genesis-skin</artifactId>
-        <version>2.0-SNAPSHOT</version>
-    </parent>
-    
-    <artifactId>genesis-geronimo-skin</artifactId>
-    <name>Genesis Skin :: Geronimo</name>
-
-</project>
-
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/META-INF/maven/site.vm b/genesis-skin/genesis-geronimo-skin/src/main/resources/META-INF/maven/site.vm
deleted file mode 100644
index 9413b6f..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/META-INF/maven/site.vm
+++ /dev/null
@@ -1,412 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-##
-## 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.
-##
-##
-## $Rev$ $Date$
-##
-#macro (spacer $width $height)
-    <img src="images/spacer.gif" width="$width" height="$height" border="0">
-#end
-
-#macro ( link $href $name )
-  #if ( ( $href.toLowerCase().startsWith("http") || $href.toLowerCase().startsWith("https") ) )
-    <a href="$href" class="externalLink">$name</a>
-  #else
-    <a href="$href">$name</a>
-  #end
-#end
-
-#macro ( banner $banner $id )
-  #if ( $banner )
-    #if( $banner.href )
-      <a href="$banner.href" id="$id" #if( $banner.alt ) title="$banner.alt" #end >
-    #else
-        <div id="$id">
-    #end
-
-    #if( $banner.src )
-        #set ( $src = $banner.src )
-        #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) )
-            #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
-            #set ( $src = $src.replaceAll( "\\", "/" ) )
-        #end
-        #if ($banner.alt)
-            #set ($alt = $banner.alt)
-        #else
-            #set ( $alt = $banner.name )
-        #end
-        <img src="$src" alt="$alt"/>
-    #else
-        $banner.name
-    #end
-
-    #if($banner.href)
-        </a>
-    #else
-        </div>
-    #end
-  #end
-#end
-
-#macro ( links $links )
-  #set ( $counter = 0 )
-  #foreach( $item in $links )
-    #set ( $counter = $counter + 1 )
-    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
-    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
-    #link( $currentItemHref $item.name )
-    #if ( $links.size() > $counter )
-      |
-    #end
-  #end
-#end
-
-#macro ( breadcrumbs $breadcrumbs )
-  #set ( $counter = 0 )
-  #foreach( $item in $breadcrumbs )
-    #set ( $counter = $counter + 1 )
-    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
-    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
-
-    #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
-      $item.name
-    #else
-      #link( $currentItemHref $item.name )
-    #end
-    #if ( $breadcrumbs.size() > $counter )
-      &gt;
-    #end
-  #end
-#end
-
-#macro ( displayTree $display $item )
-  #if ( $item && $item.items && $item.items.size() > 0 )
-    #foreach( $subitem in $item.items )
-      #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
-      #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
-      #set ( $display = false )
-      #if ( $alignedFileName == $subitemHref )
-        #set ( $display = true )
-      #end
-
-      #displayTree( $display $subitem )
-    #end
-  #end
-#end
-
-#macro ( menuItem $item )
-  #set ( $collapse = "none" )
-  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
-  #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
-
-  #if ( $item && $item.items && $item.items.size() > 0 )
-    #if ( $item.collapse == false )
-      #set ( $collapse = "expanded" )
-    #else
-      ## By default collapsed
-      #set ( $collapse = "collapsed" )
-    #end
-
-    #set ( $display = false )
-    #displayTree( $display $item )
-        
-    #if ( $alignedFileName == $currentItemHref || $display )
-      #set ( $collapse = "expanded" )
-    #end
-  #end
-  <li class="$collapse">
-    #if ( $item.img )
-      #if ( ! ( $item.img.toLowerCase().startsWith("http") || $item.img.toLowerCase().startsWith("https") ) )
-        #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
-        #set ( $src = $src.replaceAll( "\\", "/" ) )
-        <img src="$src"/>
-      #else
-        <img src="$item.img" align="absbottom" style="border-width: 0"/>
-      #end
-    #end
-    #if ( $alignedFileName == $currentItemHref )
-      <strong>$item.name</strong>
-    #else
-      #link( $currentItemHref $item.name )
-    #end
-  #if ( $item && $item.items && $item.items.size() > 0 )
-    #if ( $collapse == "expanded" )
-      <ul>
-        #foreach( $subitem in $item.items )
-          #menuItem( $subitem )
-        #end
-      </ul>
-    #end
-  #end
-  </li>
-#end
-
-#macro ( mainMenu $menus )
-  #foreach( $menu in $menus )
-    #if ( $menu.name )
-    <h5>$menu.name</h5>
-    #end
-    #if ( $menu.items && $menu.items.size() > 0 )
-    <ul>
-      #foreach( $item in $menu.items )
-        #menuItem( $item )
-      #end
-    </ul>
-    #end
-  #end
-#end
-
-#macro ( copyright )
-  #if ( $project )
-    #set ( $currentYear = ${currentDate.year} + 1900 )
-
-    #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
-      ${project.inceptionYear}-${currentYear}
-    #else
-      ${currentYear}
-    #end
-
-    #if ( ${project.organization} && ${project.organization.name} )
-      ${project.organization.name}
-    #end
-  #end
-#end
-
-#macro ( publishDate $position $publishDate $version )
-  #if ( $publishDate && $publishDate.format )
-    #set ( $format = $publishDate.format )
-  #else
-    #set ( $format = "yyyy-MM-dd" )
-  #end
-
-  $dateFormat.applyPattern( $format )
-
-  #set ( $dateToday = $dateFormat.format( $currentDate ) )
-
-  #if ( $publishDate && $publishDate.position )
-    #set ( $datePosition = $publishDate.position )
-  #else
-    #set ( $datePosition = "left" )
-  #end
-
-  #if ( $version )
-    #if ( $version.position )
-      #set ( $versionPosition = $version.position )
-    #else
-      #set ( $versionPosition = "left" )
-    #end
-  #else
-    #set ( $version = "" )
-    #set ( $versionPosition = "left" )
-  #end
-
-  #set ( $breadcrumbs = $decoration.body.breadcrumbs )
-  #set ( $links = $decoration.body.links )
-
-  #if ( $datePosition.equalsIgnoreCase( "right" ) && $links && $links.size() > 0 )
-    #set ( $prefix = "&nbsp;|" )
-  #else
-    #set ( $prefix = "" )
-  #end
-
-  #if ( $datePosition.equalsIgnoreCase( $position ) )
-    #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
-      $prefix $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
-      #if ( $versionPosition.equalsIgnoreCase( $position ) )
-        &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
-      #end
-    #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
-      <div id="lastPublished">
-        $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
-        #if ( $versionPosition.equalsIgnoreCase( $position ) )
-          &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
-        #end
-      </div>
-    #elseif ( $datePosition.equalsIgnoreCase("left") )
-      <div class="xleft">
-        $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
-        #if ( $versionPosition.equalsIgnoreCase( $position ) )
-          &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
-        #end
-        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
-          | #breadcrumbs( $breadcrumbs )
-        #end
-      </div>
-    #end
-  #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
-    #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
-      $prefix $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
-    #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
-      <div id="lastPublished">
-        $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
-      </div>
-    #elseif ( $versionPosition.equalsIgnoreCase("left") )
-      <div class="xleft">
-        $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
-        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
-          | #breadcrumbs( $breadcrumbs )
-        #end
-      </div>
-    #end
-  #elseif ( $position.equalsIgnoreCase( "left" ) )
-    #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
-      <div class="xleft">
-        #breadcrumbs( $breadcrumbs )
-      </div>
-    #end
-  #end
-#end
-
-#macro (poweredByLogo $poweredBy)
-    #if($poweredBy)
-        #foreach ($item in $poweredBy)
-            #if( $item.href )
-                #set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
-                #set ( $href = $href.replaceAll( "\\", "/" ) )
-            #else
-                #set ( $href="http://maven.apache.org/" )
-            #end
-
-            #if($item.name)
-                #set ($name = $item.name)
-            #else
-                #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" )  )
-                #set ( $name = "${name} Maven"  )
-            #end
-
-            #if($item.img)
-                #set ($img = $item.img)
-            #else
-                #set ( $img = "images/logos/maven-feather.png" )
-            #end
-
-            <a href="$href" title="$name" class="poweredBy">
-              #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
-              #set ( $img = $img.replaceAll( "\\", "/" ) )
-              <img  class="poweredBy"  
-                    alt="$name" 
-                    src="$img" 
-                    width="90"
-                    height="30"
-              />
-            </a>
-        #end
-        #if( $poweredBy.isEmpty() )
-          <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
-            <img class="poweredBy" 
-                 alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" 
-                 src="$relativePath/images/logos/maven-feather.png" 
-                 width="90"
-                 height="30"
-                 border="1" />
-          </a>
-        #end
-    #else
-        <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
-          <img class="poweredBy" 
-               alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" 
-               src="$relativePath/images/logos/maven-feather.png" 
-               width="90"
-               height="30"
-               border="1"
-               />
-        </a>
-    #end
-#end
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>$title</title>
-    <style type="text/css" media="all">
-      @import url("$relativePath/css/maven-base.css");
-      @import url("$relativePath/css/maven-theme.css");
-      @import url("$relativePath/css/site.css");
-    </style>
-    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
-    #foreach( $author in $authors )
-      <meta name="author" content="$author" />
-    #end
-    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
-    #if ( $decoration.body.head )
-      #foreach( $item in $decoration.body.head.getChildren() )
-        ## Workaround for DOXIA-150 due to a non-desired behaviour in p-u
-        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toString()
-        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toUnescapedString()
-        #set ( $documentHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" )
-        #set ( $documentHeader = $documentHeader.replaceAll( "\\", "" ) )
-        #if ( $item.name == "script" )
-          $StringUtils.replace( $item.toUnescapedString(), $documentHeader, "" )
-        #else
-          $StringUtils.replace( $item.toString(), $documentHeader, "" )
-        #end
-      #end
-    #end
-  </head>
-  <body class="composite">
-    <div id="banner">
-      #banner( $decoration.bannerLeft "bannerLeft" )
-      #banner( $decoration.bannerRight "bannerRight" )
-      <div class="clear">
-        <hr/>
-      </div>
-    </div>
-    <div id="breadcrumbs">
-      #publishDate( "left" $decoration.publishDate $decoration.version )
-      <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div>
-      <div class="clear">
-        <hr/>
-      </div>
-    </div>
-        
-        <table bgcolor="#FFFFFF">
-            <tr>
-                <td>
-                    <div id="leftColumn">
-                        <div id="navcolumn">
-                            #publishDate("navigation-top" $decoration.publishDate $decoration.version)
-                            #mainMenu($decoration.body.menus)
-                            #poweredByLogo($decoration.poweredBy)
-                            #publishDate("navigation-bottom" $decoration.publishDate $decoration.version)
-                        </div>
-                    </div>
-                    <div id="bodyColumn">
-                        <div id="contentBox">
-                            $bodyContent
-                        </div>
-                    </div>
-                </td>
-            </tr>
-            <tr>
-                <td>
-                    #spacer(1 4)
-                </td>
-            </tr>
-        </table>
-        
-    <div class="clear">
-      <hr/>
-    </div>
-    <div id="footer">
-      <div class="xright">&#169;#copyright()#publishDate( "bottom" $decoration.publishDate $decoration.version )</div>
-      <div class="clear">
-        <hr/>
-      </div>
-    </div>
-  </body>
-</html>
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/css/maven-base.css b/genesis-skin/genesis-geronimo-skin/src/main/resources/css/maven-base.css
deleted file mode 100644
index 1305c1d..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/css/maven-base.css
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-    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.
-*/
-
-/* $Rev$ $Date$ */
-
-body {
-  margin: 0px;
-  padding: 0px;
-}
-img {
-  border:none;
-}
-table {
-  padding:0px;
-  width: 100%;
-  margin-left: -2px;
-  margin-right: -2px;
-}
-acronym {
-  cursor: help;
-  border-bottom: 1px dotted #feb;
-}
-table.bodyTable th, table.bodyTable td {
-  padding: 2px 4px 2px 4px;
-  vertical-align: top;
-}
-div.clear{
-  clear:both;
-  visibility: hidden;
-}
-div.clear hr{
-  display: none;
-}
-#bannerLeft, #bannerRight {
-  font-size: xx-large;
-  font-weight: bold;
-}
-#bannerLeft img, #bannerRight img {
-  margin: 0px;
-}
-.xleft, #bannerLeft img {
-  float:left;
-  text-shadow: #7CFC00;
-}
-.xright, #bannerRight img {
-  float:right;
-  text-shadow: #7CFC00;
-}
-#banner {
-  padding: 0px;
-}
-#banner img {
-  border: none;
-}
-#breadcrumbs {
-  padding: 3px 10px 3px 10px;
-}
-#leftColumn {
- width: 170px;
- float:left;
- overflow: auto;
-}
-#bodyColumn {
-  margin-right: 1.5em;
-  margin-left: 197px;
-}
-#legend {
-  padding: 8px 0 8px 0;
-}
-#navcolumn {
-  padding: 8px 4px 0 8px;
-}
-#navcolumn h5 {
-  margin: 0;
-  padding: 0;
-  font-size: small;
-}
-#navcolumn ul {
-  margin: 0;
-  padding: 0;
-  font-size: small;
-}
-#navcolumn li {
-  list-style-type: none;
-  background-image: none;
-  background-repeat: no-repeat;
-  background-position: 0 0.4em;
-  padding-left: 16px;
-  list-style-position: outside;
-  line-height: 1.2em;
-  font-size: smaller;
-}
-#navcolumn li.expanded {
-  background-image: url(../images/expanded.gif);
-}
-#navcolumn li.collapsed {
-  background-image: url(../images/collapsed.gif);
-}
-#poweredBy {
-  text-align: center;
-}
-#navcolumn img {
-  margin-top: 10px;
-  margin-bottom: 3px;
-}
-#poweredBy img {
-  display:block;
-  margin: 20px 0 20px 17px;
-  border: 1px solid black;
-  width: 90px;
-  height: 30px;
-}
-#search img {
-    margin: 0px;
-    display: block;
-}
-#search #q, #search #btnG {
-    border: 1px solid #999;
-    margin-bottom:10px;
-}
-#search form {
-    margin: 0px;
-}
-#lastPublished {
-  font-size: x-small;
-}
-.navSection {
-  margin-bottom: 2px;
-  padding: 8px;
-}
-.navSectionHead {
-  font-weight: bold;
-  font-size: x-small;
-}
-.section {
-  padding: 4px;
-}
-#footer {
-  padding: 3px 10px 3px 10px;
-  font-size: x-small;
-}
-#breadcrumbs {
-  font-size: x-small;
-  margin: 0pt;
-}
-.source {
-  padding: 12px;
-  margin: 1em 7px 1em 7px;
-}
-.source pre {
-  margin: 0px;
-  padding: 0px;
-}
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/css/maven-theme.css b/genesis-skin/genesis-geronimo-skin/src/main/resources/css/maven-theme.css
deleted file mode 100644
index 05bf448..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/css/maven-theme.css
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-    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.
-*/
-
-/* $Rev$ $Date$ */
-
-body {
-  padding: 0px 0px 10px 0px;
-  background-color: #EEEEEE;
-}
-
-body, td, select, input, li {
-  font-family: Verdana, Helvetica, Arial, sans-serif;
-  font-size: 13px;
-}
-
-code {
-  font-family: Courier, monospace;
-  font-size: 13px;
-}
-
-a {
-  text-decoration: none;
-}
-
-a:link {
-  color:#36a;
-}
-
-a:visited  {
-  color:#47a;
-}
-
-a:active, a:hover {
-  color:#69c;
-}
-
-#legend li.externalLink {
-  background: url(../images/external.png) left top no-repeat;
-  padding-left: 18px;
-}
-
-a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
-  background: url(../images/external.png) right center no-repeat;
-  padding-right: 18px;
-}
-
-#legend li.newWindow {
-  background: url(../images/newwindow.png) left top no-repeat;
-  padding-left: 18px;
-}
-
-a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
-  background: url(../images/newwindow.png) right center no-repeat;
-  padding-right: 18px;
-}
-
-h2 {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #999;
-  color: #900;
-  background-color: #ddd;
-  font-weight:900;
-  font-size: x-large;
-}
-
-h3 {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #aaa;
-  color: #900;
-  background-color: #eee;
-  font-weight: normal;
-  font-size: large;
-}
-
-h4 {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #bbb;
-  color: #900;
-  background-color: #fff;
-  font-weight: normal;
-  font-size: large;
-}
-
-h5 {
-  padding: 4px 4px 4px 6px;
-  color: #900;
-  font-size: normal;
-}
-
-p {
-  line-height: 1.3em;
-  font-size: small;
-}
-
-#breadcrumbs {
-  border-top: 1px solid #aaa;
-  border-bottom: 1px solid #aaa;
-  background-color: #ccc;
-}
-
-#leftColumn {
-  margin: 10px 0 0 5px;
-  border: 1px solid #999;
-  background-color: #eee;
-}
-
-#navcolumn h5 {
-  font-size: smaller;
-  border-bottom: 1px solid #aaaaaa;
-  padding-top: 2px;
-  color: #000;
-}
-
-table.bodyTable th {
-  color: white;
-  background-color: #bbb;
-  text-align: left;
-  font-weight: bold;
-}
-
-table.bodyTable th, table.bodyTable td {
-  font-size: 1em;
-}
-
-table.bodyTable tr.a {
-  background-color: #ddd;
-}
-
-table.bodyTable tr.b {
-  background-color: #eee;
-}
-
-.source {
-  border: 1px solid #999;
-}
-dl {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #aaa;
-  background-color: #ffc;
-}
-dt {
-  color: #900;
-}
-#organizationLogo img, #projectLogo img, #projectLogo span{
-  margin: 8px;
-}
-
-#banner {
-	height: 64px;
-	background: url(../images/top_bgstretch_1x64.gif);
-}
-
-.errormark, .warningmark, .donemark, .infomark {
-  background: url(../images/icon_error_sml.gif) no-repeat;
-}
-
-.warningmark {
-  background-image: url(../images/icon_warning_sml.gif);
-}
-
-.donemark {
-  background-image: url(../images/icon_success_sml.gif);
-}
-
-.infomark {
-  background-image: url(../images/icon_info_sml.gif);
-}
-
-#footer {
-    /*
-    padding: 3px 10px 3px 10px;
-    font-size: x-small;
-    */
-    background-image:      url('../images/border_bottom.gif');
-    background-repeat:     repeat-x;
-    background-position:   left top;
-    padding-top:           6px;
-    color:                 #666;
-}
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/css/print.css b/genesis-skin/genesis-geronimo-skin/src/main/resources/css/print.css
deleted file mode 100644
index c577aff..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/css/print.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-    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.
-*/
-
-/* $Rev$ $Date$ */
-
-#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn {
-	display: none !important;
-}
-
-#bodyColumn, body.docs div.docs {
-	margin: 0 !important;
-	border: none !important
-}
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/border_bottom.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/border_bottom.gif
deleted file mode 100644
index b93012a..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/border_bottom.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/external.png b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/external.png
deleted file mode 100644
index 3f999fc..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/external.png
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_error_sml.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_error_sml.gif
deleted file mode 100644
index 61132ef..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_error_sml.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_info_sml.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_info_sml.gif
deleted file mode 100644
index c6cb9ad..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_info_sml.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_success_sml.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_success_sml.gif
deleted file mode 100644
index 52e85a4..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_success_sml.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_warning_sml.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_warning_sml.gif
deleted file mode 100644
index 873bbb5..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/icon_warning_sml.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/logos/maven-feather.png b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/logos/maven-feather.png
deleted file mode 100644
index 5beac16..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/logos/maven-feather.png
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/newwindow.png b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/newwindow.png
deleted file mode 100644
index 6287f72..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/newwindow.png
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/spacer.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/spacer.gif
deleted file mode 100644
index b82e6ec..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/spacer.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/top_bgstretch_1x64.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/top_bgstretch_1x64.gif
deleted file mode 100644
index f94ebc7..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/top_bgstretch_1x64.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/topleft_logo_437x64.gif b/genesis-skin/genesis-geronimo-skin/src/main/resources/images/topleft_logo_437x64.gif
deleted file mode 100644
index a270013..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/main/resources/images/topleft_logo_437x64.gif
+++ /dev/null
Binary files differ
diff --git a/genesis-skin/genesis-geronimo-skin/src/site/apt/usage.apt b/genesis-skin/genesis-geronimo-skin/src/site/apt/usage.apt
deleted file mode 100644
index bd78c37..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/site/apt/usage.apt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-~~ 
-~~ 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.
-~~ 
-
- ------
- Genesis Geronimo Skin
- ------
- ???
- ------
- ???
-
-Usage
-
- FIXME
diff --git a/genesis-skin/genesis-geronimo-skin/src/site/site.xml b/genesis-skin/genesis-geronimo-skin/src/site/site.xml
deleted file mode 100644
index e79d518..0000000
--- a/genesis-skin/genesis-geronimo-skin/src/site/site.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<project name="${project.name}">
-    
-    <body>
-        <menu ref="parent"/>
-        <menu ref="modules"/>
-        <menu name="${project.name}">
-            <item name="Overview" href="index.html"/>
-            <item name="Usage" href="usage.html"/>
-        </menu>
-        <menu ref="reports"/>
-    </body>
-
-</project>
-
-
diff --git a/genesis-skin/pom.xml b/genesis-skin/pom.xml
deleted file mode 100644
index 3a9251c..0000000
--- a/genesis-skin/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis</artifactId>
-        <version>2.0-SNAPSHOT</version>
-    </parent>
-    
-    <groupId>org.apache.geronimo.genesis.skin</groupId>
-    <artifactId>genesis-skin</artifactId>
-    <name>Genesis Skin</name>
-    <packaging>pom</packaging>
-    
-    <!--
-    <modules>
-        <module>genesis-geronimo-skin</module>
-    </modules>
-    -->
-
-</project>
-
diff --git a/pom.xml b/pom.xml
index df6b03d..d80c752 100644
--- a/pom.xml
+++ b/pom.xml
@@ -124,24 +124,6 @@
         </site>
     </distributionManagement>
 
-    <pluginRepositories>
-
-        <pluginRepository>
-            <id>apache.snapshots</id>
-            <name>Apache Snapshots Repository</name>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-            <layout>default</layout>
-            <snapshots>
-                <enabled>true</enabled>
-                <updatePolicy>daily</updatePolicy>
-                <checksumPolicy>ignore</checksumPolicy>
-            </snapshots>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-        </pluginRepository>
-
-    </pluginRepositories>
 
     <modules>
         <module>apache-source-release-assembly-descriptor</module>
diff --git a/src/site/site.xml b/src/site/site.xml
index 82c8e58..18d090f 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -22,14 +22,6 @@
 
 <project name="${project.name}">
 
-    <!--
-    <skin>
-        <groupId>org.apache.geronimo.genesis.skin</groupId>
-        <artifactId>genesis-geronimo-skin</artifactId>
-        <version>2.0</version>
-    </skin>
-    -->
-    
     <publishDate format="dd MMM yyyy"/>
     
     <!--
diff --git a/trunk/LICENSE b/trunk/LICENSE
deleted file mode 100644
index 6b0b127..0000000
--- a/trunk/LICENSE
+++ /dev/null
@@ -1,203 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/trunk/NOTICE b/trunk/NOTICE
deleted file mode 100644
index 863b96b..0000000
--- a/trunk/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Geronimo
-Copyright 2003-2009 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/apache-source-release-assembly-descriptor/pom.xml b/trunk/apache-source-release-assembly-descriptor/pom.xml
deleted file mode 100644
index fc98393..0000000
--- a/trunk/apache-source-release-assembly-descriptor/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.geronimo.genesis</groupId>
-        <artifactId>genesis</artifactId>
-        <version>2.1</version>
-    </parent>
-
-  <artifactId>apache-source-release-assembly-descriptor</artifactId>
-
-  <name>Apache Source Release Assembly Descriptor</name>
-  <description>
-    This jar contains a customized source assembly descriptor to produce Apache compliant source bundles.
-  </description>
-</project>
diff --git a/trunk/apache-source-release-assembly-descriptor/src/main/resources/assemblies/source-release.xml b/trunk/apache-source-release-assembly-descriptor/src/main/resources/assemblies/source-release.xml
deleted file mode 100644
index 31026fb..0000000
--- a/trunk/apache-source-release-assembly-descriptor/src/main/resources/assemblies/source-release.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
--->
-
-<assembly>
-  <id>source-release</id>
-  <formats>
-    <format>tar.gz</format>
-    <format>zip</format>
-  </formats>
-  <fileSets>
-    <fileSet>
-      <directory>${project.basedir}</directory>
-      <useDefaultExcludes>true</useDefaultExcludes>
-      <excludes>
-        <exclude>**/${project.build.directory}/**</exclude>
-      </excludes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/trunk/genesis-default-flava/genesis-java1.4-flava/pom.xml b/trunk/genesis-default-flava/genesis-java1.4-flava/pom.xml
deleted file mode 100644
index 8923d3d..0000000
--- a/trunk/genesis-default-flava/genesis-java1.4-flava/pom.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis-default-flava</artifactId>
-        <version>2.1</version>
-    </parent>
-    
-    <artifactId>genesis-java1.4-flava</artifactId>
-    <name>Genesis Flava :: Java 1.4</name>
-    <packaging>pom</packaging>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.4</source>
-                    <target>1.4</target>
-                </configuration>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-enforcer-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <requireJavaVersion>
-                                    <version>[1.4,)</version>
-                                </requireJavaVersion>
-                            </rules>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <source>1.4</source>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <quiet>true</quiet>
-                    <source>1.4</source>
-                    <links>
-                        <link>http://java.sun.com/j2se/1.4.2/docs/api</link>
-                    </links>
-                    <tags>
-                        <tag>
-                            <name>goal</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>phase</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>execute</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>requiresDependencyResolution</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>parameter</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>required</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>readonly</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.requirement</name>
-                            <placement>Xf</placement>
-                        </tag>
-                    </tags>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-pmd-plugin</artifactId>
-                <configuration>
-                    <targetJdk>1.4</targetJdk>
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
-</project>
-
diff --git a/trunk/genesis-default-flava/genesis-java5-flava/pom.xml b/trunk/genesis-default-flava/genesis-java5-flava/pom.xml
deleted file mode 100644
index f6c58d8..0000000
--- a/trunk/genesis-default-flava/genesis-java5-flava/pom.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis-default-flava</artifactId>
-        <version>2.1</version>
-    </parent>
-    
-    <artifactId>genesis-java5-flava</artifactId>
-    <name>Genesis Flava :: Java 5</name>
-    <packaging>pom</packaging>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-enforcer-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <requireJavaVersion>
-                                    <version>[1.5,)</version>
-                                </requireJavaVersion>
-                            </rules>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <quiet>true</quiet>
-                    <source>1.5</source>
-                    <links>
-                        <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
-                    </links>
-                    <tags>
-                        <tag>
-                            <name>goal</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>phase</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>execute</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>requiresDependencyResolution</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>parameter</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>required</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>readonly</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.requirement</name>
-                            <placement>Xf</placement>
-                        </tag>
-                    </tags>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-pmd-plugin</artifactId>
-                <configuration>
-                    <targetJdk>1.5</targetJdk>
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
-</project>
-
diff --git a/trunk/genesis-default-flava/genesis-java6-flava/pom.xml b/trunk/genesis-default-flava/genesis-java6-flava/pom.xml
deleted file mode 100644
index c3d7f89..0000000
--- a/trunk/genesis-default-flava/genesis-java6-flava/pom.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis-default-flava</artifactId>
-        <version>2.1</version>
-    </parent>
-    
-    <artifactId>genesis-java6-flava</artifactId>
-    <name>Genesis Flava :: Java 6</name>
-    <packaging>pom</packaging>
-    
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.6</source>
-                    <target>1.6</target>
-                </configuration>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-enforcer-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <requireJavaVersion>
-                                    <version>[1.6,)</version>
-                                </requireJavaVersion>
-                            </rules>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <source>1.6</source>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <configuration>
-                    <quiet>true</quiet>
-                    <source>1.6</source>
-                    <links>
-                        <link>http://java.sun.com/j2se/1.6.0/docs/api</link>
-                    </links>
-                    <tags>
-                        <tag>
-                            <name>goal</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>phase</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>execute</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>requiresDependencyResolution</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>parameter</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>required</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>readonly</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.requirement</name>
-                            <placement>Xf</placement>
-                        </tag>
-                    </tags>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-pmd-plugin</artifactId>
-                <configuration>
-                    <targetJdk>1.6</targetJdk>
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
-</project>
-
diff --git a/trunk/genesis-default-flava/pom.xml b/trunk/genesis-default-flava/pom.xml
deleted file mode 100644
index d52dcfe..0000000
--- a/trunk/genesis-default-flava/pom.xml
+++ /dev/null
@@ -1,407 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis</artifactId>
-        <version>2.1</version>
-    </parent>
-    
-    <artifactId>genesis-default-flava</artifactId>
-    <name>Genesis Flava :: Default</name>
-    <packaging>pom</packaging>
-
-    <build>
-        <!--
-        NOTE: This causes problems while building Genesis, projects which need the additional
-              packaging bits, should define this locally until Maven can handle installing
-              this extention in the reactor that also builds the artifact.
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.geronimo.genesis</groupId>
-                <artifactId>genesis-packaging</artifactId>
-                <version>2.0-SNAPSHOT</version>
-            </extension>
-        </extensions>
-        -->
-
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>false</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-
-            <resource>
-                <directory>${project.basedir}/src/main/filtered-resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <testResources>
-            <testResource>
-                <directory>${project.basedir}/src/test/resources</directory>
-                <filtering>false</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </testResource>
-
-            <testResource>
-                <directory>${project.basedir}/src/test/filtered-resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </testResource>
-        </testResources>
-
-        <pluginManagement>
-            <plugins>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <configuration>
-                        <silent>true</silent>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-ear-plugin</artifactId>
-                    <configuration>
-                        <archive>
-                            <addMavenDescriptor>false</addMavenDescriptor>
-                        </archive>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-rar-plugin</artifactId>
-                    <configuration>
-                        <archive>
-                            <addMavenDescriptor>false</addMavenDescriptor>
-                        </archive>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-resources-plugin</artifactId>
-                    <configuration>
-                        <encoding>UTF-8</encoding>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <configuration>
-                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
-                        <forkMode>once</forkMode>
-                        <argLine>-enableassertions</argLine>
-                        <failIfNoTests>false</failIfNoTests>
-                        <workingDirectory>${project.build.directory}</workingDirectory>
-                        <excludes>
-                            <exclude>**/Abstract*.java</exclude>
-                            <exclude>**/Test*.java</exclude>
-                        </excludes>
-                        <includes>
-                            <include>**/*Test.java</include>
-                        </includes>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-war-plugin</artifactId>
-                    <configuration>
-                        <archive>
-                            <addMavenDescriptor>false</addMavenDescriptor>
-                        </archive>
-                    </configuration>
-                    <dependencies>
-                        <!-- maven-archiver 2.1 is broken... won't allow custom manifestEntires, need to override until war plugin is updated. -->
-                        <dependency>
-                            <groupId>org.apache.maven</groupId>
-                            <artifactId>maven-archiver</artifactId>
-                            <version>2.2</version>
-                        </dependency>
-                    </dependencies>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.felix</groupId>
-                    <artifactId>maven-bundle-plugin</artifactId>
-                    <configuration>
-                        <instructions>
-                            <Implementation-Title>${project.name}</Implementation-Title>
-                            <Implementation-Version>${project.version}</Implementation-Version>
-                            <Bundle-DocURL>${project.url}</Bundle-DocURL>
-                            <!-- private-package is useful to make sure you listed all the packages you meant to -->
-                            <!--<Private-Package />-->
-                        </instructions>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>com.google.code.maven-license-plugin</groupId>
-                    <artifactId>maven-license-plugin</artifactId>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>check</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                    <configuration>
-                        <aggregate>true</aggregate>
-                        <header>${project.basedir}/src/etc/license-header.txt</header>
-                        <encoding>UTF-8</encoding>
-                        <useDefaultExcludes>true</useDefaultExcludes>
-                        <excludes>
-                            <exclude>**/README.txt</exclude>
-                            <exclude>**/LICENSE.txt</exclude>
-                            <exclude>**/NOTICE.txt</exclude>
-                            <exclude>**/*.psd</exclude>
-                            <exclude>**/*.mdxml</exclude>
-                        </excludes>
-                        <useDefaultMapping>true</useDefaultMapping>
-                        <mapping>
-                            <jjt>JAVADOC_STYLE</jjt>
-                        </mapping>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <optimize>true</optimize>
-                    <debug>true</debug>
-                    <showDeprecation>true</showDeprecation>
-                    <showWarnings>true</showWarnings>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-enforcer-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <requireMavenVersion>
-                                    <version>[2.2.1,)</version>
-                                </requireMavenVersion>
-                                <validateConfiguration implementation="org.apache.geronimo.genesis.enforcer.ValidateConfiguration" />
-                            </rules>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.geronimo.genesis</groupId>
-                        <artifactId>genesis-enforcer-rules</artifactId>
-                        <version>2.1</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>ianal-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>verify-legal-files</goal>
-                        </goals>
-                        <configuration>
-                            <strict>true</strict>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <!-- TODO the versions duplicate those in plugin management in parent pom.  Are they independent?
-    if so, versions should be moved to parent pom <reporting> section and removed here.  Otherwise just remove them here -->
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.5</version>
-
-                <reportSets>
-                    <reportSet>
-                        <reports>
-                            <report>javadoc</report>
-                            <report>test-javadoc</report>
-                        </reports>
-                    </reportSet>
-                </reportSets>
-
-                <configuration>
-                    <quiet>true</quiet>
-                    <tags>
-                        <tag>
-                            <name>goal</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>phase</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>execute</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>requiresDependencyResolution</name>
-                            <placement>Xt</placement>
-                        </tag>
-                        <tag>
-                            <name>parameter</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>required</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>readonly</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.component</name>
-                            <placement>Xf</placement>
-                        </tag>
-                        <tag>
-                            <name>plexus.requirement</name>
-                            <placement>Xf</placement>
-                        </tag>
-                    </tags>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jxr-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-pmd-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-project-info-reports-plugin</artifactId>
-                <configuration>
-                    <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-report-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>cobertura-maven-plugin</artifactId>
-                <configuration>
-                    <quiet>true</quiet>
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <profiles>
-        <profile>
-            <id>license-check</id>
-
-            <pluginRepositories>
-                <pluginRepository>
-                    <id>mc-release</id>
-                    <url>http://mc-repo.googlecode.com/svn/maven2/releases</url>
-                    <snapshots>
-                        <enabled>false</enabled>
-                    </snapshots>
-                    <releases>
-                        <enabled>true</enabled>
-                    </releases>
-                </pluginRepository>
-            </pluginRepositories>
-
-            <build>
-                <defaultGoal>license:check</defaultGoal>
-                <plugins>
-                    <plugin>
-                        <groupId>com.google.code.maven-license-plugin</groupId>
-                        <artifactId>maven-license-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>check</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-    <modules>
-        <module>genesis-java6-flava</module>
-        <module>genesis-java5-flava</module>
-        <module>genesis-java1.4-flava</module>
-    </modules>
-    
-</project>
-
diff --git a/trunk/genesis-enforcer-rules/pom.xml b/trunk/genesis-enforcer-rules/pom.xml
deleted file mode 100644
index 69fcdf8..0000000
--- a/trunk/genesis-enforcer-rules/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>genesis</artifactId>
-        <groupId>org.apache.geronimo.genesis</groupId>
-        <version>2.1</version>
-    </parent>
-    <artifactId>genesis-enforcer-rules</artifactId>
-    <name>Genesis Enforcer Rules</name>
-    <!--<properties>-->
-        <!--<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>-->
-    <!--</properties>-->
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.maven.enforcer</groupId>
-            <artifactId>enforcer-api</artifactId>
-            <version>1.0-beta-1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
-            <artifactId>maven-project</artifactId>
-            <version>2.2.1</version>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/trunk/genesis-enforcer-rules/src/main/java/org/apache/geronimo/genesis/enforcer/ValidateConfiguration.java b/trunk/genesis-enforcer-rules/src/main/java/org/apache/geronimo/genesis/enforcer/ValidateConfiguration.java
deleted file mode 100644
index 77a3541..0000000
--- a/trunk/genesis-enforcer-rules/src/main/java/org/apache/geronimo/genesis/enforcer/ValidateConfiguration.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.geronimo.genesis.enforcer;
-
-import org.apache.maven.enforcer.rule.api.EnforcerRule;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
-
-/**
- * @version $Rev$ $Date$
- */
-public class ValidateConfiguration implements EnforcerRule {
-
-
-    public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
-
-        try {
-            String groupId = (String) helper.evaluate( "${project.groupId}" );
-            //do not apply validation to genesis projects as i
-            if (groupId.startsWith("org.apache.geronimo.genesis")) {
-                return;
-            }
-            check(helper, "project.description", "project/description", "Genesis provides");
-            check(helper, "project.scm.connection", "project/scm/connection", "scm:svn:http://svn.apache.org/repos/asf/geronimo/genesis");
-            check(helper, "project.scm.developerConnection", "project/scm/developerConnection", "scm:svn:https://svn.apache.org/repos/asf/geronimo/genesis");
-            check(helper, "project.scm.url", "project/scm/url", "http://svn.apache.org/viewvc/geronimo/geronimo/genesis");
-        } catch (ExpressionEvaluationException e) {
-
-        }
-
-    }
-
-    private void check(EnforcerRuleHelper helper, String path, String xmlPath, String prefix) throws ExpressionEvaluationException, EnforcerRuleException {
-        String actual = (String) helper.evaluate( "${" + path + "}" );
-        if (actual == null || actual.startsWith(prefix)) {
-            throw new EnforcerRuleException(xmlPath + " must be supplied");
-        }
-    }
-
-    public boolean isCacheable() {
-        return true;
-    }
-
-    public boolean isResultValid(EnforcerRule enforcerRule) {
-        return true;
-    }
-
-    public String getCacheId() {
-        return "";
-    }
-}
diff --git a/trunk/genesis-packaging/pom.xml b/trunk/genesis-packaging/pom.xml
deleted file mode 100644
index 79acda4..0000000
--- a/trunk/genesis-packaging/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<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.geronimo.genesis</groupId>
-        <artifactId>genesis</artifactId>
-        <version>2.1</version>
-    </parent>
-    
-    <artifactId>genesis-packaging</artifactId>
-    <name>Genesis Packaging</name>
-
-</project>
-
diff --git a/trunk/genesis-packaging/src/main/resources/META-INF/plexus/components.xml b/trunk/genesis-packaging/src/main/resources/META-INF/plexus/components.xml
deleted file mode 100644
index d3391d6..0000000
--- a/trunk/genesis-packaging/src/main/resources/META-INF/plexus/components.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<component-set>
-    <components>
-        
-        <!--
-        Custom packaging for resource-bundle modules.
-        -->
-        <component>
-            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
-            <role-hint>resource-bundle</role-hint>
-            <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
-            <configuration>
-                <lifecycles>
-                    <lifecycle>
-                        <id>default</id>
-                        <phases>
-                            <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
-                            <package>org.apache.maven.plugins:maven-jar-plugin:jar</package>
-                            <install>org.apache.maven.plugins:maven-install-plugin:install</install>
-                            <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
-                        </phases>
-                    </lifecycle>
-                </lifecycles>
-            </configuration>
-        </component>
-
-        <!--
-        Install resource-bundle artifact files as .jar files
-        -->
-        <component>
-            <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
-            <role-hint>resource-bundle</role-hint>
-            <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
-            <configuration>
-                <type>resource-bundle</type>
-                <extension>jar</extension>
-                <packaging>resource-bundle</packaging>
-                <addedToClasspath>false</addedToClasspath>
-                <language>java</language>
-            </configuration>
-        </component>
-        
-        <!--
-        Custom packaging for testsuite child modules.
-        -->
-        <component>
-            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
-            <role-hint>integration-test</role-hint>
-            <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
-            <configuration>
-                <lifecycles>
-                    <lifecycle>
-                        <id>default</id>
-                        <phases>
-                            <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
-                            <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
-                            <package>org.apache.maven.plugins:maven-jar-plugin:jar</package>
-                            <integration-test>org.apache.maven.plugins:maven-surefire-plugin:test</integration-test>
-                            <install>org.apache.maven.plugins:maven-install-plugin:install</install>
-                            <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
-                        </phases>
-                    </lifecycle>
-                </lifecycles>
-            </configuration>
-        </component>
-        
-    </components>
-</component-set>
diff --git a/trunk/pom.xml b/trunk/pom.xml
deleted file mode 100644
index df6b03d..0000000
--- a/trunk/pom.xml
+++ /dev/null
@@ -1,394 +0,0 @@
-<?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.
---><!-- $Rev$ $Date$ --><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</groupId>
-        <artifactId>apache</artifactId>
-        <version>13</version>
-    </parent>
-
-    <groupId>org.apache.geronimo.genesis</groupId>
-    <artifactId>genesis</artifactId>
-    <name>Genesis</name>
-    <packaging>pom</packaging>
-
-    <version>2.1</version>
-
-    <description>
-        Genesis provides build support for Apache Geronimo's Maven projects.
-    </description>
-
-    <!-- NOTE: until the  source-release assembly descriptor is released you need to build "clean install" before
-    using the -Papache-release profile -->
-
-    <url>http://geronimo.apache.org</url>
-
-    <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org</url>
-    </organization>
-
-    <licenses>
-        <license>
-            <name>The Apache Software License, Version 2.0</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <inceptionYear>2003</inceptionYear>
-
-    <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/geronimo/genesis/tags/genesis-2.1</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/genesis/tags/genesis-2.1</developerConnection>
-        <url>http://svn.apache.org/viewvc/geronimo/geronimo/genesis/tags/genesis-2.1</url>
-    </scm>
-
-    <issueManagement>
-        <system>jira</system>
-        <url>https://issues.apache.org/jira/browse/GERONIMO</url>
-    </issueManagement>
-
-    <!--
-    TODO: Nabble forum bits need to be upgraded.
-
-          http://www.nabble.com/help/Answer.jtp?id=42&skin=134
-    -->
-
-    <mailingLists>
-        <mailingList>
-            <name>Geronimo User List</name>
-            <subscribe>user-subscribe@geronimo.apache.org</subscribe>
-            <unsubscribe>user-unsubscribe@geronimo.apache.org</unsubscribe>
-            <post>mailto:user@geronimo.apache.org</post>
-            <archive>http://mail-archives.apache.org/mod_mbox/geronimo-user</archive>
-            <otherArchives>
-                <otherArchive>http://www.nabble.com/Apache-Geronimo---Users-f135.html</otherArchive>
-            </otherArchives>
-        </mailingList>
-
-        <mailingList>
-            <name>Geronimo Developer List</name>
-            <subscribe>dev-subscribe@geronimo.apache.org</subscribe>
-            <unsubscribe>dev-unsubscribe@geronimo.apache.org</unsubscribe>
-            <post>mailto:dev@geronimo.apache.org</post>
-            <archive>http://mail-archives.apache.org/mod_mbox/geronimo-dev</archive>
-            <otherArchives>
-                <otherArchive>http://www.nabble.com/Apache-Geronimo---Dev-f136.html</otherArchive>
-            </otherArchives>
-        </mailingList>
-
-        <mailingList>
-            <name>Source Control List</name>
-            <subscribe>scm-subscribe@geronimo.apache.org</subscribe>
-            <unsubscribe>scm-unsubscribe@geronimo.apache.org</unsubscribe>
-            <post>scm@geronimo.apache.org</post>
-            <archive>http://mail-archives.apache.org/mod_mbox/geronimo-scm</archive>
-        </mailingList>
-
-    </mailingLists>
-
-    <prerequisites>
-        <maven>3.0.3</maven>
-    </prerequisites>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <siteId>genesis</siteId>
-        <site.deploy.url>scp://people.apache.org:/www/geronimo.apache.org</site.deploy.url>
-    </properties>
-
-    <distributionManagement>
-        <site>
-            <id>apache-website</id>
-            <url>${site.deploy.url}/maven/${siteId}/${project.version}</url>
-        </site>
-    </distributionManagement>
-
-    <pluginRepositories>
-
-        <pluginRepository>
-            <id>apache.snapshots</id>
-            <name>Apache Snapshots Repository</name>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-            <layout>default</layout>
-            <snapshots>
-                <enabled>true</enabled>
-                <updatePolicy>daily</updatePolicy>
-                <checksumPolicy>ignore</checksumPolicy>
-            </snapshots>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-        </pluginRepository>
-
-    </pluginRepositories>
-
-    <modules>
-        <module>apache-source-release-assembly-descriptor</module>
-        <module>genesis-packaging</module>
-        <module>genesis-default-flava</module>
-        <module>genesis-enforcer-rules</module>
-    </modules>
-
-    <build>
-        <defaultGoal>install</defaultGoal>
-
-        <pluginManagement>
-            <plugins>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>2.2</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.3</version>
-                    <configuration>
-                        <tarLongFileMode>gnu</tarLongFileMode>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-changes-plugin</artifactId>
-                    <version>2.7.1</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-changelog-plugin</artifactId>
-                    <version>2.2</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-checkstyle-plugin</artifactId>
-                    <version>2.9.1</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <version>2.4</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-ear-plugin</artifactId>
-                    <version>2.8</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-ejb-plugin</artifactId>
-                    <version>2.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-help-plugin</artifactId>
-                    <version>2.1.1</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-jxr-plugin</artifactId>
-                    <version>2.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-pmd-plugin</artifactId>
-                    <version>2.7.1</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-rar-plugin</artifactId>
-                    <version>2.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-release-plugin</artifactId>
-                    <configuration>
-                        <autoVersionSubmodules>true</autoVersionSubmodules>
-                        <allowTimestampedSnapshots>false</allowTimestampedSnapshots>
-                        <preparationGoals>clean install</preparationGoals>
-                        <goals>deploy</goals>
-                    </configuration>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-remote-resources-plugin</artifactId>
-                    <version>1.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-shade-plugin</artifactId>
-                    <version>2.0</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-report-plugin</artifactId>
-                    <version>2.13</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-verifier-plugin</artifactId>
-                    <version>1.0</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-war-plugin</artifactId>
-                    <version>2.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.apache.felix</groupId>
-                    <artifactId>maven-bundle-plugin</artifactId>
-                    <version>2.3.7</version>
-                    <extensions>true</extensions>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.groovy.maven</groupId>
-                    <artifactId>gmaven-plugin</artifactId>
-                    <version>1.0</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>build-helper-maven-plugin</artifactId>
-                    <version>1.7</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>cobertura-maven-plugin</artifactId>
-                    <version>2.5.2</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo.jspc</groupId>
-                    <artifactId>jspc-maven-plugin</artifactId>
-                    <version>2.0-alpha-3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>ianal-maven-plugin</artifactId>
-                    <version>1.0-alpha-1</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>jaxb2-maven-plugin</artifactId>
-                    <version>1.5</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>selenium-maven-plugin</artifactId>
-                    <version>2.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>shitty-maven-plugin</artifactId>
-                    <version>1.0-alpha-3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>sql-maven-plugin</artifactId>
-                    <version>1.5</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>xmlbeans-maven-plugin</artifactId>
-                    <version>2.3.3</version>
-                </plugin>
-
-                <plugin>
-                    <groupId>com.google.code.maven-license-plugin</groupId>
-                    <artifactId>maven-license-plugin</artifactId>
-                    <version>1.3.1</version>
-                </plugin>
-
-            </plugins>
-        </pluginManagement>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>strict-enforcement</id>
-            <activation>
-                <property>
-                    <name>enforce</name>
-                    <value>strict</value>
-                </property>
-            </activation>
-
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-enforcer-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>enforce</goal>
-                                </goals>
-                                <configuration>
-                                    <rules>
-                                        <requirePluginVersions>
-                                            <banLatest>true</banLatest>
-                                            <banRelease>true</banRelease>
-                                            <banSnapshots>true</banSnapshots>
-                                            <banTimestamps>true</banTimestamps>
-                                        </requirePluginVersions>
-                                        <requireReleaseDeps>
-                                            <searchTransitive>true</searchTransitive>
-                                        </requireReleaseDeps>
-                                    </rules>
-                                    <fail>true</fail>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/trunk/src/site/site.xml b/trunk/src/site/site.xml
deleted file mode 100644
index 18d090f..0000000
--- a/trunk/src/site/site.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?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.
--->
-
-<!-- $Rev$ $Date$ -->
-
-<project name="${project.name}">
-
-    <publishDate format="dd MMM yyyy"/>
-    
-    <!--
-    <bannerLeft>
-        <src>images/topleft_logo_437x64.gif</src>
-        <href>http://geronimo.apache.org</href>
-    </bannerLeft>
-    -->
-    
-    <body>
-        <links>
-            <item name="Geronimo" href="http://geronimo.apache.org/"/>
-            <item name="Apache" href="http://apache.org/"/>
-        </links>
-        
-        <menu ref="parent"/>
-        
-        <menu ref="modules"/>
-        
-        <menu ref="reports"/>
-    </body>
-
-</project>
-
