- added feature to create war archives
- kickstarter will start all bundles on startup
- performance improvements (caching added)
- legal links, privacy statement, terms of use, ... added
- minor bugfixes
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF
index 3220b89..bea95fd 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@
  org.eclipse.equinox.http.registry,
  org.apache.ant;bundle-version="1.7.0"
 Import-Package: javax.servlet;version="2.4.0",
- javax.servlet.http;version="2.4.0"
+ javax.servlet.http;version="2.4.0",
+ org.apache.log4j
 Export-Package: org.eclipse.epp.wizard.installerbuilder,
  org.eclipse.epp.wizard.jnlpbuilder,
  org.eclipse.epp.wizard.util
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java
index 019d926..e52482c 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.installerbuilder;
 
 import java.io.FileInputStream;
@@ -5,62 +15,66 @@
 import java.io.IOException;
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
 public class Activator implements BundleActivator {
 
-	public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.installerbuilder.configuration";
-	public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "installerbuilder.properties";
-	private static BundleContext context;
+  static Logger logger = Logger.getLogger( Activator.class );
+  public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.installerbuilder.configuration";
+  public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "installerbuilder.properties";
+  private static BundleContext context;
 
-	public static BundleContext getContext() {
-		return context;
-	}
+  public static BundleContext getContext() {
+    return context;
+  }
+  private Configuration configuration;
+  private InstallerCache installerCache;
 
-	private Configuration configuration;
-	private static Activator plugin;
+  public InstallerCache getInstallerCache() {
+    return installerCache;
+  }
+  private static Activator plugin;
 
-	public Activator() {
-	}
+  public Activator() {
+  }
 
-	/**
-	 * Returns the shared instance
-	 * 
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
+  /**
+   * Returns the shared instance
+   * 
+   * @return the shared instance
+   */
+  public static Activator getDefault() {
+    return plugin;
+  }
 
-	public void start(BundleContext context) throws Exception {
-		Activator.context = context;
-		plugin = this;
-	}
+  public void start( BundleContext context ) throws Exception {
+    Activator.context = context;
+    plugin = this;
+    getConfiguration();
+    installerCache = new InstallerCache( configuration.getInstallerCacheSize() );
+  }
 
-	public void stop(BundleContext context) throws Exception {
-		Activator.context = null;
-	}
+  public void stop( BundleContext context ) throws Exception {
+    Activator.context = null;
+  }
 
-	public synchronized Configuration getConfiguration() {
-		if (configuration == null) {
-			String configurationFile = System.getProperty(
-					PROPERTY_CONFIGURATION,
-					PROPERTY_CONFIGURATION_DEFAULT_VALUE);
-			System.out.println("Loading configuration from file: "
-					+ configurationFile);
-			Properties properties = new Properties();
-			try {
-				properties.load(new FileInputStream(configurationFile));
-				configuration = new Configuration(properties);
-			} catch (FileNotFoundException exc) {
-				// TODO Auto-generated catch block
-				exc.printStackTrace();
-			} catch (IOException exc) {
-				// TODO Auto-generated catch block
-				exc.printStackTrace();
-			}
-		}
-		return configuration;
-	}
+  public synchronized Configuration getConfiguration() {
+    if( configuration == null ) {
+      String configurationFile = System.getProperty( PROPERTY_CONFIGURATION,
+                                                     PROPERTY_CONFIGURATION_DEFAULT_VALUE );
+      logger.info( "Loading configuration from file: " + configurationFile );
+      Properties properties = new Properties();
+      try {
+        properties.load( new FileInputStream( configurationFile ) );
+        configuration = new Configuration( properties );
+      } catch( FileNotFoundException exc ) {
+        logger.error( "Could not load configuration", exc );
+      } catch( IOException exc ) {
+        logger.error( "Could not load configuration", exc );
+      }
+    }
+    return configuration;
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java
index 4d7a8e3..c19a874 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.installerbuilder;
 
 import java.io.ByteArrayInputStream;
@@ -41,35 +51,34 @@
   private static final String ENCODING = "UTF-8";
   private static final int BUFFER = 512;
   private static final long serialVersionUID = 1L;
-  
+
   @Override
   protected void doGet( final HttpServletRequest req,
                         final HttpServletResponse resp )
     throws ServletException, IOException
   {
-    
     String os = req.getParameter( "os" );
     String iuParam = req.getParameter( "ius" );
     String filename = req.getParameter( "filename" );
-
     execute( os, iuParam, filename );
-
   }
 
   public static void execute( final String os,
                               final String iuParam,
-                              final String filename )
-    throws IOException
+                              final String filename ) throws IOException
   {
-    File downloadDir = Activator.getDefault().getConfiguration().getDownloadsDirectory();
-    IPath outDirPath = new Path( new File(downloadDir, OUTPUT_PATH).getAbsolutePath() );
-    IPath rawInstallerDirPath = new Path( new File(downloadDir, INSTALLER_TEMPLATE_PATH).getAbsolutePath() );
+    File downloadDir = Activator.getDefault()
+      .getConfiguration()
+      .getDownloadsDirectory();
+    IPath outDirPath = new Path( new File( downloadDir, OUTPUT_PATH ).getAbsolutePath() );
+    IPath rawInstallerDirPath = new Path( new File( downloadDir,
+                                                    INSTALLER_TEMPLATE_PATH ).getAbsolutePath() );
     String[] ius = getIUs( iuParam );
     File template = findRawInstallerFile( rawInstallerDirPath, os );
     IPath outFilePath = outDirPath.append( filename );
     ceateCustomInstaller( os, template, ius, outFilePath.toFile() );
   }
-  
+
   public static String getFileName( final String os, final String[] ids ) {
     String hash = ids.toString();
     try {
@@ -81,12 +90,11 @@
     return "eclipse-" + os + "-" + hash + "." + OsUtil.getArchiveExtension( os );
   }
 
-  //////////////////
+  // ////////////////
   // helping methods
-  //////////////////
-
+  // ////////////////
   private static String[] getIUs( final String param ) {
-    List<String> result = new ArrayList<String>(); 
+    List<String> result = new ArrayList<String>();
     StringTokenizer tknizr = new StringTokenizer( param, ",", false );
     while( tknizr.hasMoreTokens() ) {
       String token = tknizr.nextToken();
@@ -99,7 +107,7 @@
                                             final File inFile,
                                             final String ius[],
                                             final File outFile )
-    throws IOException //FIXME
+    throws IOException // FIXME
   {
     InputStream in = null;
     OutputStream out = null;
@@ -121,13 +129,11 @@
             entry = zis.getNextEntry();
           }
           zos.putNextEntry( new ZipEntry( "eclipse/installer.properties" ) );
-          ByteArrayInputStream confStream
-            = new ByteArrayInputStream( bytes );
+          ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
           copy( confStream, zos );
           zos.closeEntry();
-          
         } catch( IOException e ) {
-          //TODO
+          // TODO
           e.printStackTrace();
         } finally {
           tryClose( zis );
@@ -152,19 +158,17 @@
             entry = tis.getNextEntry();
           }
           String entryName = "eclipse/installer.properties";
-          if (os == "macosx") {
+          if( os == "macosx" ) {
             entryName = "eclipse/p2installer.app/Contents/MacOS/installer.properties";
           }
           TarEntry tarEntry = new TarEntry( entryName );
-          ByteArrayInputStream confStream
-            = new ByteArrayInputStream( bytes );
+          ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
           tarEntry.setSize( bytes.length );
           tos.putNextEntry( tarEntry );
           copy( confStream, tos );
           tos.closeEntry();
-          
         } catch( IOException e ) {
-          //TODO
+          // TODO
           e.printStackTrace();
         } finally {
           tryClose( tis );
@@ -182,35 +186,51 @@
   }
 
   private static String getInstallerConfiguration( final String ius[] )
-    throws IOException //FIXME
+    throws IOException // FIXME
   {
     String result = "";
-    File downloadDir = Activator.getDefault().getConfiguration().getDownloadsDirectory();
-    IPath templateDirPath = new Path( new File(downloadDir, INSTALLER_TEMPLATE_PATH).getAbsolutePath() );
+    File downloadDir = Activator.getDefault()
+      .getConfiguration()
+      .getDownloadsDirectory();
+    IPath templateDirPath = new Path( new File( downloadDir,
+                                                INSTALLER_TEMPLATE_PATH ).getAbsolutePath() );
     File inFile = templateDirPath.append( "installer.properties" ).toFile();
     InputStream in = null;
     try {
-     in = new FileInputStream( inFile    );
-     ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
-     copy( in, bufferStream );
-     result = customize( bufferStream.toString( ENCODING ), ius );
+      in = new FileInputStream( inFile );
+      ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+      copy( in, bufferStream );
+      result = customize( bufferStream.toString( ENCODING ), ius );
     } catch( IOException ioe ) {
-     ioe.printStackTrace();
+      ioe.printStackTrace();
     } finally {
-     tryClose( in );
+      tryClose( in );
     }
     return result;
   }
-  
+
   private static String customize( final String input, final String[] ius ) {
     String result = input;
-    result = result.replaceAll( "\\$\\{roots\\}", StringUtil.toCommaList( ius, false ) );
-    result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); //FIXME: (jb) get this from initial selection on eclispe.org
+    result = result.replaceAll( "\\$\\{roots\\}",
+                                StringUtil.toCommaList( ius, false ) );
+    result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); // FIXME
+                                                                             // :
+                                                                             // (
+                                                                             // jb
+                                                                             // )
+                                                                             // get
+                                                                             // this
+                                                                             // from
+                                                                             // initial
+                                                                             // selection
+                                                                             // on
+                                                                             // eclispe
+                                                                             // .
+                                                                             // org
     return result;
   }
-  
-  private static File findRawInstallerFile( final IPath path,
-                                            final String os )
+
+  private static File findRawInstallerFile( final IPath path, final String os )
   {
     File result = null;
     File dir = path.toFile();
@@ -222,14 +242,14 @@
     }
     return result;
   }
-  
+
   private static void tryClose( final InputStream stream ) {
     if( stream != null ) {
       try {
         stream.close();
       } catch( IOException e ) {
         e.printStackTrace();
-        //TODO Activator.log( e );
+        // TODO Activator.log( e );
       }
     }
   }
@@ -240,13 +260,12 @@
         stream.close();
       } catch( IOException e ) {
         e.printStackTrace();
-        //TODO Activator.log( e );
+        // TODO Activator.log( e );
       }
     }
   }
 
-  private static void copy( final InputStream in,
-                            final OutputStream out )
+  private static void copy( final InputStream in, final OutputStream out )
     throws IOException
   {
     byte[] data = new byte[ BUFFER ];
@@ -264,5 +283,4 @@
     copy( is, baos );
     return new ByteArrayInputStream( baos.toByteArray() );
   }
-  
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java
index 47fccd9..51031c1 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java
@@ -1,46 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.installerbuilder;
 
 import java.io.File;
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
+
 public class Configuration {
-	final static String DOWNLOADS = "downloads";
-	final static String TMPDIR = "tmpdir";
-	protected File downloadsDirectory;
-	protected File tempDirectory;
 
-	public File getTempDirectory() {
-		return tempDirectory;
-	}
+  static Logger logger = Logger.getLogger( Configuration.class );
+  final static String DOWNLOADS = "downloads";
+  final static String TMPDIR = "tmpdir";
+  final static String INSTALLER_CACHE_SIZE = "installer.cache.size";
+  final static String INSTALLER_CACHE_SIZE_DEFAULT = "100";
+  protected int installerCacheSize;
 
-	private Properties properties;
+  public int getInstallerCacheSize() {
+    return installerCacheSize;
+  }
+  protected File downloadsDirectory;
+  protected File tempDirectory;
 
-	public Configuration(Properties properties) {
-		this.properties = properties;
-		downloadsDirectory = createDirectoryObject(DOWNLOADS);
-		tempDirectory = createDirectoryObject(TMPDIR);
-	}
+  public File getTempDirectory() {
+    return tempDirectory;
+  }
+  private Properties properties;
 
-	private File createDirectoryObject(String key) {
-		String value = properties.getProperty(key);
-		if (value == null) {
-			throw new RuntimeException("Configuration value for '" + key
-					+ "' not defined in configuration properties");
-		}
-		File file = new File(value);
-		if (!file.canRead()) {
-			throw new RuntimeException("Cannot read from file '"
-					+ file.getAbsolutePath() + "'");
-		}
-		if (!file.isDirectory()) {
-			throw new RuntimeException("'" + file.getAbsolutePath()
-					+ "' is not a directory");
-		}
-		return file;
-	}
+  public Configuration( Properties properties ) {
+    this.properties = properties;
+    downloadsDirectory = createDirectoryObject( DOWNLOADS );
+    tempDirectory = createDirectoryObject( TMPDIR );
+    installerCacheSize = Integer.parseInt( properties.getProperty( INSTALLER_CACHE_SIZE,
+                                                                   INSTALLER_CACHE_SIZE_DEFAULT ) );
+    if( logger.isInfoEnabled() ) {
+      StringBuilder sb = new StringBuilder();
+      sb.append( "EPP Wizard Installer builder configuration:" );
+      sb.append( "\n\t downloadsDirectory: "
+                 + downloadsDirectory.getAbsolutePath() );
+      sb.append( "\n\t tempDirectory:      " + tempDirectory.getAbsolutePath() );
+      sb.append( "\n\t installerCacheSize: " + installerCacheSize );
+      logger.info( sb );
+    }
+  }
 
-	public File getDownloadsDirectory() {
-		return downloadsDirectory;
-	}
+  private File createDirectoryObject( String key ) {
+    String value = properties.getProperty( key );
+    if( value == null ) {
+      throw new RuntimeException( "Configuration value for '"
+                                  + key
+                                  + "' not defined in configuration properties" );
+    }
+    File file = new File( value );
+    if( !file.canRead() ) {
+      throw new RuntimeException( "Cannot read from file '"
+                                  + file.getAbsolutePath()
+                                  + "'" );
+    }
+    if( !file.isDirectory() ) {
+      throw new RuntimeException( "'"
+                                  + file.getAbsolutePath()
+                                  + "' is not a directory" );
+    }
+    return file;
+  }
 
+  public File getDownloadsDirectory() {
+    return downloadsDirectory;
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java
index b1598ac..8a15d49 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.installerbuilder;
 
 import java.io.BufferedOutputStream;
@@ -27,185 +37,197 @@
  */
 public class Download extends HttpServlet {
 
-	@Override
-	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
-			throws ServletException, IOException {
-		doGet(req, resp);
-	}
+  @Override
+  protected void doPost( HttpServletRequest req, HttpServletResponse resp )
+    throws ServletException, IOException
+  {
+    doGet( req, resp );
+  }
+  private static final String ENCODING = "UTF-8";
+  private static final long serialVersionUID = 1L;
+  private static final int BUFFER = 1024;
 
-	private static final String ENCODING = "UTF-8";
-	private static final long serialVersionUID = 1L;
-	private static final int BUFFER = 1024;
+  @SuppressWarnings("unchecked")
+  @Override
+  protected void doGet( final HttpServletRequest req,
+                        final HttpServletResponse resp )
+    throws ServletException, IOException
+  {
+    resp.setHeader( "Content-Disposition", "attachment; filename="
+                                           + "out.txt"
+                                           + ";" );
+    PrintStream printStream = new PrintStream( new BufferedOutputStream( resp.getOutputStream() ) );
+    printStream.print( "foo.bar" );
+    printStream.close();
+    if( true )
+      return;
+    Map<Object, Object> map = req.getParameterMap();
+    String requestedPath = req.getPathInfo();
+    String reqURL = req.getRequestURL().toString();
+    String codebase = reqURL.substring( 0, reqURL.length()
+                                           - requestedPath.length() );
+    IPath path = new Path( "" );
+    if( requestedPath != null ) {
+      path = new Path( requestedPath );
+    }
+    if( !trySendGeneratedFile( resp, path, codebase ) ) {
+      if( !isTemplateFile( resp, path, codebase ) ) {
+        send404( resp );
+      }
+    }
+    resp.flushBuffer();
+  }
 
-	@SuppressWarnings("unchecked")
-	@Override
-	protected void doGet(final HttpServletRequest req,
-			final HttpServletResponse resp) throws ServletException,
-			IOException {
-		resp.setHeader("Content-Disposition", "attachment; filename="
-				+ "out.txt" + ";");
-		PrintStream printStream = new PrintStream(new BufferedOutputStream(resp
-				.getOutputStream()));
-		printStream.print("foo.bar");
-		printStream.close();
-		if (true)
-			return;
+  // ////////////////
+  // helping methods
+  // ////////////////
+  private void send404( final HttpServletResponse resp ) {
+    try {
+      resp.sendError( 404 );
+    } catch( IOException exc ) {
+      // TODO Auto-generated catch block
+      exc.printStackTrace();
+    }
+    resp.addHeader( "Status", "404 Not Found" );
+  }
 
-		Map<Object, Object> map = req.getParameterMap();
-		String requestedPath = req.getPathInfo();
-		String reqURL = req.getRequestURL().toString();
-		String codebase = reqURL.substring(0, reqURL.length()
-				- requestedPath.length());
-		IPath path = new Path("");
-		if (requestedPath != null) {
-			path = new Path(requestedPath);
-		}
-		if (!trySendGeneratedFile(resp, path, codebase)) {
-			if (!isTemplateFile(resp, path, codebase)) {
-				send404(resp);
-			}
-		}
-		resp.flushBuffer();
-	}
+  private boolean isTemplateFile( final HttpServletResponse resp,
+                                  final IPath path,
+                                  final String codebase )
+  {
+    boolean result = false;
+    File downloadDir = Activator.getDefault()
+      .getConfiguration()
+      .getDownloadsDirectory();
+    File jnlpDir = new File( downloadDir, "templates/jnlp" );
+    File item = new File( jnlpDir, path.toString() );
+    URL entry = null;
+    try {
+      entry = item.toURI().toURL();
+    } catch( MalformedURLException exc1 ) {
+      exc1.printStackTrace();
+    }
+    if( entry != null ) {
+      try {
+        sendFile( resp, entry, codebase );
+        result = true;
+      } catch( IOException exc ) {
+        // thats ok, will try to satisfy the request later
+        exc.printStackTrace();
+      }
+    }
+    return result;
+  }
 
-	// ////////////////
-	// helping methods
-	// ////////////////
+  private void sendFile( final HttpServletResponse resp,
+                         final File archiveFile,
+                         final String codebase )
+    throws FileNotFoundException, IOException
+  {
+    String ext = new Path( archiveFile.toString() ).getFileExtension();
+    sendFile( resp, new FileInputStream( archiveFile ), codebase, ext );
+  }
 
-	private void send404(final HttpServletResponse resp) {
-		try {
-			resp.sendError(404);
-		} catch (IOException exc) {
-			// TODO Auto-generated catch block
-			exc.printStackTrace();
-		}
-		resp.addHeader("Status", "404 Not Found");
-	}
+  private void sendFile( final HttpServletResponse resp,
+                         final URL entry,
+                         final String codebase ) throws IOException
+  {
+    String ext = new Path( entry.getFile() ).getFileExtension();
+    ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+    copy( entry.openStream(), bufferStream );
+    sendFile( resp,
+              new ByteArrayInputStream( bufferStream.toByteArray() ),
+              codebase,
+              ext );
+  }
 
-	private boolean isTemplateFile(final HttpServletResponse resp,
-			final IPath path, final String codebase) {
-		boolean result = false;
-		File downloadDir = Activator.getDefault().getConfiguration()
-				.getDownloadsDirectory();
-		File jnlpDir = new File(downloadDir, "templates/jnlp");
-		File item = new File(jnlpDir, path.toString());
-		URL entry = null;
-		try {
-			entry = item.toURI().toURL();
-		} catch (MalformedURLException exc1) {
-			exc1.printStackTrace();
-		}
-		if (entry != null) {
-			try {
-				sendFile(resp, entry, codebase);
-				result = true;
-			} catch (IOException exc) {
-				// thats ok, will try to satisfy the request later
-				exc.printStackTrace();
-			}
-		}
-		return result;
-	}
+  private void sendFile( final HttpServletResponse resp,
+                         final InputStream is,
+                         final String codebase,
+                         final String ext ) throws IOException
+  {
+    InputStream inputStream = is;
+    if( ext.equals( "jnlp" ) ) {
+      String result = "";
+      try {
+        ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+        copy( is, bufferStream );
+        result = bufferStream.toString( ENCODING )
+          .replaceAll( "\\$\\{codebase\\}", codebase );
+      } catch( IOException ioe ) {
+        ioe.printStackTrace();
+      } finally {
+        tryClose( is );
+      }
+      inputStream = new ByteArrayInputStream( result.getBytes( ENCODING ) );
+    }
+    resp.addHeader( "Content-Type", getContentType( ext ) );
+    resp.addHeader( "Content-Length", String.valueOf( inputStream.available() ) );
+    resp.flushBuffer();
+    OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
+    copy( inputStream, os );
+    os.flush();
+  }
 
-	private void sendFile(final HttpServletResponse resp,
-			final File archiveFile, final String codebase)
-			throws FileNotFoundException, IOException {
-		String ext = new Path(archiveFile.toString()).getFileExtension();
-		sendFile(resp, new FileInputStream(archiveFile), codebase, ext);
-	}
+  private boolean trySendGeneratedFile( final HttpServletResponse resp,
+                                        final IPath path,
+                                        final String codebase )
+  {
+    boolean result = false;
+    File downloadDir = Activator.getDefault()
+      .getConfiguration()
+      .getDownloadsDirectory();
+    Path outPath = new Path( new File( downloadDir, BuildInstaller.OUTPUT_PATH ).getAbsolutePath() );
+    File archiveFile = outPath.append( path.lastSegment() ).toFile();
+    if( archiveFile.isFile() ) {
+      try {
+        sendFile( resp, archiveFile, codebase );
+        result = true;
+      } catch( FileNotFoundException exc ) {
+        // thats ok, will try to satisfy the request later
+      } catch( IOException exc ) {
+        // thats ok, will try to satisfy the request later
+        exc.printStackTrace();
+      }
+    }
+    return result;
+  }
 
-	private void sendFile(final HttpServletResponse resp, final URL entry,
-			final String codebase) throws IOException {
-		String ext = new Path(entry.getFile()).getFileExtension();
-		ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
-		copy(entry.openStream(), bufferStream);
-		sendFile(resp, new ByteArrayInputStream(bufferStream.toByteArray()),
-				codebase, ext);
-	}
+  private String getContentType( final String fileExt ) {
+    String result = "application/octet-stream";
+    if( fileExt.equalsIgnoreCase( "zip" ) ) {
+      result = "application/x-zip";
+    } else if( fileExt.equalsIgnoreCase( "gz" ) ) {
+      result = "application/x-gzip";
+    } else if( fileExt.equalsIgnoreCase( "tar" ) ) {
+      result = "application/x-tar";
+    } else if( fileExt.equalsIgnoreCase( "jnlp" ) ) {
+      result = "application/x-java-jnlp-file";
+    } else if( fileExt.equalsIgnoreCase( "jar" ) ) {
+      result = "application/java-archive";
+    }
+    return result;
+  }
 
-	private void sendFile(final HttpServletResponse resp, final InputStream is,
-			final String codebase, final String ext) throws IOException {
-		InputStream inputStream = is;
-		if (ext.equals("jnlp")) {
-			String result = "";
-			try {
-				ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
-				copy(is, bufferStream);
-				result = bufferStream.toString(ENCODING).replaceAll(
-						"\\$\\{codebase\\}", codebase);
-			} catch (IOException ioe) {
-				ioe.printStackTrace();
-			} finally {
-				tryClose(is);
-			}
-			inputStream = new ByteArrayInputStream(result.getBytes(ENCODING));
-		}
-		resp.addHeader("Content-Type", getContentType(ext));
-		resp.addHeader("Content-Length", String
-				.valueOf(inputStream.available()));
-		resp.flushBuffer();
-		OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
-		copy(inputStream, os);
-		os.flush();
-	}
+  private static void copy( final InputStream in, final OutputStream out )
+    throws IOException
+  {
+    byte[] data = new byte[ BUFFER ];
+    int currentByte = in.read( data, 0, BUFFER );
+    while( currentByte != -1 ) {
+      out.write( data, 0, currentByte );
+      currentByte = in.read( data, 0, BUFFER );
+    }
+  }
 
-	private boolean trySendGeneratedFile(final HttpServletResponse resp,
-			final IPath path, final String codebase) {
-		boolean result = false;
-		File downloadDir = Activator.getDefault().getConfiguration()
-				.getDownloadsDirectory();
-		Path outPath = new Path(new File(downloadDir,
-				BuildInstaller.OUTPUT_PATH).getAbsolutePath());
-		File archiveFile = outPath.append(path.lastSegment()).toFile();
-		if (archiveFile.isFile()) {
-			try {
-				sendFile(resp, archiveFile, codebase);
-				result = true;
-			} catch (FileNotFoundException exc) {
-				// thats ok, will try to satisfy the request later
-			} catch (IOException exc) {
-				// thats ok, will try to satisfy the request later
-				exc.printStackTrace();
-			}
-		}
-		return result;
-	}
-
-	private String getContentType(final String fileExt) {
-		String result = "application/octet-stream";
-		if (fileExt.equalsIgnoreCase("zip")) {
-			result = "application/x-zip";
-		} else if (fileExt.equalsIgnoreCase("gz")) {
-			result = "application/x-gzip";
-		} else if (fileExt.equalsIgnoreCase("tar")) {
-			result = "application/x-tar";
-		} else if (fileExt.equalsIgnoreCase("jnlp")) {
-			result = "application/x-java-jnlp-file";
-		} else if (fileExt.equalsIgnoreCase("jar")) {
-			result = "application/java-archive";
-		}
-		return result;
-	}
-
-	private static void copy(final InputStream in, final OutputStream out)
-			throws IOException {
-		byte[] data = new byte[BUFFER];
-		int currentByte = in.read(data, 0, BUFFER);
-		while (currentByte != -1) {
-			out.write(data, 0, currentByte);
-			currentByte = in.read(data, 0, BUFFER);
-		}
-	}
-
-	private static void tryClose(final InputStream stream) {
-		if (stream != null) {
-			try {
-				stream.close();
-			} catch (IOException e) {
-				e.printStackTrace();
-				// TODO Activator.log( e );
-			}
-		}
-	}
-
+  private static void tryClose( final InputStream stream ) {
+    if( stream != null ) {
+      try {
+        stream.close();
+      } catch( IOException e ) {
+        e.printStackTrace();
+        // TODO Activator.log( e );
+      }
+    }
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java
index ae5b992..1654d4e 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java
@@ -1,28 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.installerbuilder;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Properties;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.tools.tar.TarEntry;
-import org.apache.tools.tar.TarInputStream;
-import org.apache.tools.tar.TarOutputStream;
+import org.apache.log4j.Logger;
 import org.eclipse.epp.wizard.util.OsUtil;
 
 /**
@@ -30,265 +30,122 @@
  */
 public class Installer extends HttpServlet {
 
-	private static final String INSTALLER_PROPERTIES_FILENAME = "installer.properties";
-	private static final String PROPERTY_PLACEHOLDER_MARKER = "%?%";
-	private static final char FILE_EXTENSION_SEPARATOR = '.';
-	private static final String TEMPFILE_EXTENSION = ".tmp";
-	private static final String TEMPFILE_NAME = "installer";
-	private static final long serialVersionUID = 1L;
-	private static final int BUFFER = 1024;
-	private Configuration configuration;
-	private HttpServletRequest request;
-	private static final String ENCODING = "UTF-8";
-	private static final String INSTALLER_TEMPLATE_PATH = "templates/installer";
+  static Logger logger = Logger.getLogger( Installer.class );
+  private static final char FILE_EXTENSION_SEPARATOR = '.';
+  private static final long serialVersionUID = 1L;
+  private static final int BUFFER = 1024;
+  private HttpServletRequest request;
+  private static final String[] P2_PROPERTIES = {
+    "eclipse.p2.roots", "eclipse.p2.metadata", "eclipse.p2.artifacts"
+  };
 
-	@Override
-	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
-			throws ServletException, IOException {
-		doGet(req, resp);
-	}
+  @Override
+  protected void doPost( HttpServletRequest req, HttpServletResponse resp )
+    throws ServletException, IOException
+  {
+    doGet( req, resp );
+  }
 
+  @Override
+  protected void doGet( final HttpServletRequest req,
+                        final HttpServletResponse resp )
+    throws ServletException, IOException
+  {
+    try {
+      String os = req.getParameter( "os" );
+      request = req;
+      Properties p2Properties = extractP2Properties();
+      String extension = OsUtil.getArchiveExtension( os );
+      InstallerCache.Entry installerFile = getCustomInstaller( os, p2Properties );
+      try {
+        sendFile( resp,
+                  new FileInputStream( installerFile.getFile() ),
+                  "eclipse-wizard-installer",
+                  extension );
+      } finally {
+        installerFile.release();
+      }
+    } catch( IOException ex ) {
+      // This happens usually when the download is aborted by the client
+      logger.warn( "IO exception handling installer request", ex );
+      throw new RuntimeException( "IO error handling installer request", ex );
+    } catch( Throwable t ) {
+      logger.error( "Internal error handling installer request", t );
+      throw new RuntimeException( "Internal error handling installer request",
+                                  t );
+    }
+  }
 
-	@Override
-	protected void doGet(final HttpServletRequest req,
-			final HttpServletResponse resp) throws ServletException,
-			IOException {
-		configuration = Activator.getDefault().getConfiguration();
-		String os = req.getParameter("os");
-		request = req;
+  private Properties extractP2Properties() {
+    Properties properties = new Properties();
+    for( String key : P2_PROPERTIES ) {
+      String value = request.getParameter( key );
+      properties.setProperty( key, value );
+    }
+    return properties;
+  }
 
-		File tempFile = createTempFile();
-		File rawFile = findRawInstallerFile(new File(configuration
-				.getDownloadsDirectory(), "templates/installer"), os);
-		String extension = OsUtil.getArchiveExtension(os);
-		
-		ceateCustomInstaller(os, rawFile, new String[] { "IUS" }, tempFile);
-		
-		sendFile(resp, new FileInputStream(tempFile),
-				"eclipse-wizard-installer", extension);
-		tempFile.delete();
-	}
+  public static String getExtension( File file ) {
+    String extension = null;
+    String filename = file.getName();
+    int index = filename.lastIndexOf( FILE_EXTENSION_SEPARATOR );
+    if( index > 0 && index < filename.length() - 1 ) {
+      extension = filename.substring( index + 1 ).toLowerCase();
+    }
+    return extension;
+  }
 
-	private File createTempFile() throws IOException {
-		File downloadsDirectory = configuration.getTempDirectory();
-		File tempFile = File.createTempFile(TEMPFILE_NAME, TEMPFILE_EXTENSION,
-				downloadsDirectory);
+  private void sendFile( final HttpServletResponse resp,
+                         final InputStream inputStream,
+                         final String filename,
+                         final String ext ) throws IOException
+  {
+    resp.addHeader( "Content-Type", getContentType( ext ) );
+    resp.addHeader( "Content-Length", String.valueOf( inputStream.available() ) );
+    resp.setHeader( "Content-Disposition", "attachment; filename="
+                                           + filename
+                                           + "."
+                                           + ext
+                                           + ";" );
+    resp.flushBuffer();
+    OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
+    copy( inputStream, os );
+    os.flush();
+    inputStream.close();
+  }
 
-		return tempFile;
-	}
+  private String getContentType( final String fileExt ) {
+    String result = "application/octet-stream";
+    if( fileExt.equalsIgnoreCase( "zip" ) ) {
+      result = "application/x-zip";
+    } else if( fileExt.equalsIgnoreCase( "gz" ) ) {
+      result = "application/x-gzip";
+    } else if( fileExt.equalsIgnoreCase( "tar" ) ) {
+      result = "application/x-tar";
+    } else if( fileExt.equalsIgnoreCase( "jnlp" ) ) {
+      result = "application/x-java-jnlp-file";
+    } else if( fileExt.equalsIgnoreCase( "jar" ) ) {
+      result = "application/java-archive";
+    }
+    return result;
+  }
 
-	public static String getExtension(File file) {
-		String extension = null;
-		String filename = file.getName();
-		int index = filename.lastIndexOf(FILE_EXTENSION_SEPARATOR);
+  private InstallerCache.Entry getCustomInstaller( final String os,
+                                                   Properties properties )
+  {
+    InstallerCache.Key key = new InstallerCache.Key( os, properties );
+    logger.debug( "Request for " + key );
+    return Activator.getDefault().getInstallerCache().getInstaller( key );
+  }
 
-		if (index > 0 && index < filename.length() - 1) {
-			extension = filename.substring(index + 1).toLowerCase();
-		}
-		return extension;
-	}
-
-	private File findRawInstallerFile(final File dir, final String os) {
-		File result = null;
-		File[] files = dir.listFiles();
-		for (File found : files) {
-			if (found.getName().indexOf(os) > -1) {
-				result = found;
-			}
-		}
-		return result;
-	}
-
-	private void sendFile(final HttpServletResponse resp,
-			final InputStream inputStream, final String filename,
-			final String ext) throws IOException {
-		resp.addHeader("Content-Type", getContentType(ext));
-		resp.addHeader("Content-Length", String
-				.valueOf(inputStream.available()));
-		resp.setHeader("Content-Disposition", "attachment; filename="
-				+ filename + "." + ext + ";");
-		resp.flushBuffer();
-		OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
-		copy(inputStream, os);
-		os.flush();
-		inputStream.close();
-	}
-
-	private String getContentType(final String fileExt) {
-		String result = "application/octet-stream";
-		if (fileExt.equalsIgnoreCase("zip")) {
-			result = "application/x-zip";
-		} else if (fileExt.equalsIgnoreCase("gz")) {
-			result = "application/x-gzip";
-		} else if (fileExt.equalsIgnoreCase("tar")) {
-			result = "application/x-tar";
-		} else if (fileExt.equalsIgnoreCase("jnlp")) {
-			result = "application/x-java-jnlp-file";
-		} else if (fileExt.equalsIgnoreCase("jar")) {
-			result = "application/java-archive";
-		}
-		return result;
-	}
-
-	private void ceateCustomInstaller(final String os, final File inFile,
-			final String ius[], final File outFile) throws IOException // FIXME
-	{
-		InputStream in = null;
-		OutputStream out = null;
-		try {
-			out = new FileOutputStream(outFile);
-			in = new FileInputStream(inFile);
-			String config = getInstallerConfiguration();
-			byte[] bytes = config.getBytes(ENCODING);
-			if (inFile.getName().endsWith(".zip")) {
-				ZipInputStream zis = null;
-				ZipOutputStream zos = null;
-				try {
-					zis = new ZipInputStream(in);
-					zos = new ZipOutputStream(out);
-					ZipEntry entry = zis.getNextEntry();
-					while (entry != null) {
-						// Do not store directories explicitly
-						if (!entry.isDirectory()) {
-							ZipEntry zipEntry = new ZipEntry(entry.getName());
-							zos.putNextEntry(zipEntry);
-							copy(readSubStream(zis), zos);
-						}
-						entry = zis.getNextEntry();
-					}
-					zos.putNextEntry(new ZipEntry(
-							"eclipse/installer.properties"));
-					ByteArrayInputStream confStream = new ByteArrayInputStream(
-							bytes);
-					copy(confStream, zos);
-					zos.closeEntry();
-
-				} catch (IOException e) {
-					// TODO
-					e.printStackTrace();
-				} finally {
-					tryClose(zis);
-					tryClose(zos);
-				}
-			} else if (inFile.getName().endsWith(".tar.gz")) {
-				GZIPInputStream gzis = null;
-				TarInputStream tis = null;
-				GZIPOutputStream gzos = null;
-				TarOutputStream tos = null;
-				try {
-					gzis = new GZIPInputStream(in);
-					tis = new TarInputStream(gzis);
-					gzos = new GZIPOutputStream(out);
-					tos = new TarOutputStream(gzos);
-					tos.setLongFileMode(TarOutputStream.LONGFILE_GNU);
-					TarEntry entry = tis.getNextEntry();
-					while (entry != null) {
-						tos.putNextEntry(entry);
-						copy(readSubStream(tis), tos);
-						tos.closeEntry();
-						entry = tis.getNextEntry();
-					}
-					String entryName = "eclipse/installer.properties";
-					if (os.equals("macosx")) {
-						entryName = "eclipse/p2installer.app/Contents/MacOS/installer.properties";
-					}
-					TarEntry tarEntry = new TarEntry(entryName);
-					ByteArrayInputStream confStream = new ByteArrayInputStream(
-							bytes);
-					tarEntry.setSize(bytes.length);
-					tos.putNextEntry(tarEntry);
-					copy(confStream, tos);
-					tos.closeEntry();
-
-				} catch (IOException e) {
-					// TODO
-					e.printStackTrace();
-				} finally {
-					tryClose(tis);
-					tryClose(gzis);
-					tryClose(tos);
-					tryClose(gzos);
-				}
-			}
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		} finally {
-			tryClose(in);
-			tryClose(out);
-		}
-	}
-
-	private static void copy(final InputStream in, final OutputStream out)
-			throws IOException {
-		byte[] data = new byte[BUFFER];
-		int currentByte = in.read(data, 0, BUFFER);
-		while (currentByte != -1) {
-			out.write(data, 0, currentByte);
-			currentByte = in.read(data, 0, BUFFER);
-		}
-	}
-
-	private String getInstallerConfiguration() throws IOException // FIXME
-	{
-		String result = "";
-		File downloadDir = Activator.getDefault().getConfiguration()
-				.getDownloadsDirectory();
-		File templateDir = new File(downloadDir, INSTALLER_TEMPLATE_PATH);
-		File inFile = new File(templateDir, INSTALLER_PROPERTIES_FILENAME);
-		Properties installerProperties = new Properties();
-		installerProperties.load(new FileInputStream(inFile));
-		for (Object okey : installerProperties.keySet()) {
-			String key = (String) okey;
-			if (installerProperties.getProperty(key).equals(PROPERTY_PLACEHOLDER_MARKER)) {
-				String value = request.getParameter(key);
-				if (value != null) {
-					installerProperties.setProperty(key, value);
-				} else {
-					throw new RuntimeException(
-							"No value for placeholder parameter in request: "
-									+ key);
-				}
-			}
-		}
-
-		try {
-			ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
-			installerProperties.store(bufferStream, "");
-			result = bufferStream.toString();
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		} finally {
-		}
-		return result;
-	}
-
-	private static InputStream readSubStream(final InputStream is)
-			throws IOException {
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		copy(is, baos);
-		return new ByteArrayInputStream(baos.toByteArray());
-	}
-
-	private static void tryClose(final InputStream stream) {
-		if (stream != null) {
-			try {
-				stream.close();
-			} catch (IOException e) {
-				e.printStackTrace();
-				// TODO Activator.log( e );
-			}
-		}
-	}
-
-	private static void tryClose(final OutputStream stream) {
-		if (stream != null) {
-			try {
-				stream.close();
-			} catch (IOException e) {
-				e.printStackTrace();
-				// TODO Activator.log( e );
-			}
-		}
-	}
-
+  private static void copy( final InputStream in, final OutputStream out )
+    throws IOException
+  {
+    byte[] data = new byte[ BUFFER ];
+    int currentByte = in.read( data, 0, BUFFER );
+    while( currentByte != -1 ) {
+      out.write( data, 0, currentByte );
+      currentByte = in.read( data, 0, BUFFER );
+    }
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/InstallerCache.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/InstallerCache.java
new file mode 100644
index 0000000..382c776
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/InstallerCache.java
@@ -0,0 +1,391 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.installerbuilder;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import org.apache.log4j.Logger;
+import org.apache.tools.tar.TarEntry;
+import org.apache.tools.tar.TarInputStream;
+import org.apache.tools.tar.TarOutputStream;
+
+/**
+ * Cache for generated installers, uses the filesystem as a backing store
+ * 
+ * @author mwoelker
+ */
+public class InstallerCache {
+
+  static Logger logger = Logger.getLogger( InstallerCache.class );
+  public static class Key {
+
+    @Override
+    public String toString() {
+      return "os=" + os + ";" + properties.toString();
+    }
+
+    public String getOs() {
+      return os;
+    }
+
+    public Properties getProperties() {
+      return properties;
+    }
+
+    @Override
+    public int hashCode() {
+      final int prime = 31;
+      int result = 1;
+      result = prime * result + ( ( os == null )
+                                                ? 0
+                                                : os.hashCode() );
+      result = prime
+               * result
+               + ( ( properties == null )
+                                         ? 0
+                                         : properties.hashCode() );
+      return result;
+    }
+
+    @Override
+    public boolean equals( Object obj ) {
+      if( this == obj )
+        return true;
+      if( obj == null )
+        return false;
+      if( getClass() != obj.getClass() )
+        return false;
+      Key other = ( Key )obj;
+      if( os == null ) {
+        if( other.os != null )
+          return false;
+      } else if( !os.equals( other.os ) )
+        return false;
+      if( properties == null ) {
+        if( other.properties != null )
+          return false;
+      } else if( !properties.equals( other.properties ) )
+        return false;
+      return true;
+    }
+    String os;
+
+    public Key( String os, Properties properties ) {
+      super();
+      this.os = os;
+      this.properties = properties;
+    }
+    Properties properties;
+  }
+  /**
+   * Entry in the cache, the actual installer file is created lazily, to reduce
+   * monitor contention on the cacheMap
+   * 
+   * @author mwoelker
+   */
+  public class Entry {
+
+    private Key key;
+
+    public Entry( Key key ) {
+      super();
+      this.key = key;
+    }
+    long acquisitionCount = 0;
+
+    public synchronized File getFile() {
+      if( file == null ) {
+        file = createInstaller( key );
+      }
+      return file;
+    }
+    File file;
+    boolean evicted = false;
+    boolean disposed = false;
+
+    public synchronized void acquire() {
+      acquisitionCount++;
+    }
+
+    public synchronized void release() {
+      acquisitionCount--;
+      if( acquisitionCount == 0 && evicted ) {
+        // Perform postponed eviction
+        logger.debug( "Evicting (actual): " + key );
+        deleteFile();
+      }
+    }
+
+    private void deleteFile() {
+      if( file != null ) {
+        file.delete();
+      }
+    }
+
+    public synchronized void evict() {
+      evicted = true;
+      if( acquisitionCount == 0 ) {
+        logger.debug( "Evicting directly: " + key );
+        deleteFile();
+      } else {
+        // File still in use, evict later
+        logger.debug( "Evicting (postponed): " + key );
+      }
+    }
+  }
+  protected class CacheMap extends LinkedHashMap<Key, Entry> {
+
+    private static final long serialVersionUID = 1L;
+    private final int capacity;
+
+    @Override
+    protected boolean removeEldestEntry( Map.Entry<Key, org.eclipse.epp.wizard.installerbuilder.InstallerCache.Entry> eldest )
+    {
+      boolean remove = false;
+      if( this.size() > this.capacity ) {
+        // remove Least recently used entry, and evict value from cache
+        remove = true;
+        eldest.getValue().evict();
+      }
+      return remove;
+    }
+
+    public CacheMap( int capacity, float loadFactor, boolean accessOrder ) {
+      super( capacity, loadFactor, accessOrder );
+      this.capacity = capacity;
+    }
+  }
+  final CacheMap cacheMap;
+  Configuration configuration = Activator.getDefault().getConfiguration();
+  private static final String INSTALLER_PROPERTIES_FILENAME = "installer.properties";
+  private static final String INSTALLER_TEMPLATE_PATH = "templates/installer";
+  private static final String PROPERTY_PLACEHOLDER_MARKER = "%?%";
+  private static final String ENCODING = "UTF-8";
+  private static final String TEMPFILE_EXTENSION = ".tmp";
+  private static final String TEMPFILE_NAME = "installer";
+  private static final int BUFFER = 1024;
+
+  public InstallerCache( int installerCacheSize ) {
+    cacheMap = new CacheMap( installerCacheSize, 1.75f, true );
+  }
+
+  public Entry getInstaller( Key key ) {
+    Entry entry;
+    synchronized( cacheMap ) {
+      entry = cacheMap.get( key );
+      if( entry == null ) {
+        entry = new Entry( key );
+        cacheMap.put( key, entry );
+      }
+      entry.acquire();
+    }
+    return entry;
+  }
+
+  protected File createInstaller( Key key ) {
+    File outFile = createTempFile();
+    File inFile = findRawInstallerFile( new File( configuration.getDownloadsDirectory(),
+                                                  "templates/installer" ),
+                                        key.getOs() );
+    InputStream in = null;
+    OutputStream out = null;
+    try {
+      out = new FileOutputStream( outFile );
+      in = new FileInputStream( inFile );
+      String config = getInstallerConfiguration( key.getOs(),
+                                                 key.getProperties() );
+      byte[] bytes = config.getBytes( ENCODING );
+      if( inFile.getName().endsWith( ".zip" ) ) {
+        ZipInputStream zis = null;
+        ZipOutputStream zos = null;
+        try {
+          zis = new ZipInputStream( in );
+          zos = new ZipOutputStream( out );
+          ZipEntry entry = zis.getNextEntry();
+          while( entry != null ) {
+            // Do not store directories explicitly
+            if( !entry.isDirectory() ) {
+              ZipEntry zipEntry = new ZipEntry( entry.getName() );
+              zos.putNextEntry( zipEntry );
+              copy( readSubStream( zis ), zos );
+            }
+            entry = zis.getNextEntry();
+          }
+          zos.putNextEntry( new ZipEntry( "eclipse/installer.properties" ) );
+          ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
+          copy( confStream, zos );
+          zos.closeEntry();
+        } catch( IOException e ) {
+          logger.error( "Could not create installer", e );
+        } finally {
+          tryClose( zis );
+          tryClose( zos );
+        }
+      } else if( inFile.getName().endsWith( ".tar.gz" ) ) {
+        GZIPInputStream gzis = null;
+        TarInputStream tis = null;
+        GZIPOutputStream gzos = null;
+        TarOutputStream tos = null;
+        try {
+          gzis = new GZIPInputStream( in );
+          tis = new TarInputStream( gzis );
+          gzos = new GZIPOutputStream( out );
+          tos = new TarOutputStream( gzos );
+          tos.setLongFileMode( TarOutputStream.LONGFILE_GNU );
+          TarEntry entry = tis.getNextEntry();
+          while( entry != null ) {
+            tos.putNextEntry( entry );
+            copy( readSubStream( tis ), tos );
+            tos.closeEntry();
+            entry = tis.getNextEntry();
+          }
+          String entryName = "eclipse/installer.properties";
+          if( key.getOs().equals( "macosx" ) ) {
+            entryName = "eclipse/p2installer.app/Contents/MacOS/installer.properties";
+          }
+          TarEntry tarEntry = new TarEntry( entryName );
+          ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
+          tarEntry.setSize( bytes.length );
+          tos.putNextEntry( tarEntry );
+          copy( confStream, tos );
+          tos.closeEntry();
+        } catch( IOException e ) {
+          logger.error( "Could not create installer", e );
+        } finally {
+          tryClose( tis );
+          tryClose( gzis );
+          tryClose( tos );
+          tryClose( gzos );
+        }
+      }
+    } catch( IOException ioe ) {
+      logger.error( "Could not create installer", ioe );
+    } finally {
+      tryClose( in );
+      tryClose( out );
+    }
+    return outFile;
+  }
+
+  private File findRawInstallerFile( final File dir, final String os ) {
+    File result = null;
+    File[] files = dir.listFiles();
+    for( File found : files ) {
+      if( found.getName().indexOf( os ) > -1 ) {
+        result = found;
+      }
+    }
+    return result;
+  }
+
+  private String getInstallerConfiguration( String os, Properties p2Properties )
+    throws IOException // FIXME
+  {
+    String result = "";
+    File downloadDir = Activator.getDefault()
+      .getConfiguration()
+      .getDownloadsDirectory();
+    File templateDir = new File( downloadDir, INSTALLER_TEMPLATE_PATH );
+    File inFile = new File( templateDir, INSTALLER_PROPERTIES_FILENAME );
+    Properties installerProperties = new Properties();
+    installerProperties.load( new FileInputStream( inFile ) );
+    for( Object okey : installerProperties.keySet() ) {
+      String key = ( String )okey;
+      if( installerProperties.getProperty( key )
+        .equals( PROPERTY_PLACEHOLDER_MARKER ) )
+      {
+        String value = p2Properties.getProperty( key );
+        if( value != null ) {
+          installerProperties.setProperty( key, value );
+        } else {
+          throw new RuntimeException( "No value for placeholder parameter in request: "
+                                      + key );
+        }
+      }
+    }
+    try {
+      ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+      installerProperties.store( bufferStream, "" );
+      result = bufferStream.toString();
+    } catch( IOException e ) {
+      logger.error( "Could not create installer", e );
+    } finally {
+    }
+    return result;
+  }
+
+  private static InputStream readSubStream( final InputStream is )
+    throws IOException
+  {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    copy( is, baos );
+    return new ByteArrayInputStream( baos.toByteArray() );
+  }
+
+  private static void tryClose( final InputStream stream ) {
+    if( stream != null ) {
+      try {
+        stream.close();
+      } catch( IOException e ) {
+        logger.error( "Could not create installer", e );
+      }
+    }
+  }
+
+  private static void tryClose( final OutputStream stream ) {
+    if( stream != null ) {
+      try {
+        stream.close();
+      } catch( IOException e ) {
+        logger.error( "Could not create installer", e );
+      }
+    }
+  }
+
+  private File createTempFile() {
+    File downloadsDirectory = configuration.getTempDirectory();
+    File tempFile;
+    try {
+      tempFile = File.createTempFile( TEMPFILE_NAME,
+                                      TEMPFILE_EXTENSION,
+                                      downloadsDirectory );
+    } catch( IOException e ) {
+      throw new RuntimeException( "Unable to create installer temp file", e );
+    }
+    return tempFile;
+  }
+
+  private static void copy( final InputStream in, final OutputStream out )
+    throws IOException
+  {
+    byte[] data = new byte[ BUFFER ];
+    int currentByte = in.read( data, 0, BUFFER );
+    while( currentByte != -1 ) {
+      out.write( data, 0, currentByte );
+      currentByte = in.read( data, 0, BUFFER );
+    }
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java
index 9b48c0e..9944cfd 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.jnlpbuilder;
 
 import java.io.ByteArrayOutputStream;
@@ -28,50 +38,60 @@
  */
 public class CustomJnlp extends HttpServlet {
 
-//  public static final String OUT_PATH = "/opt/epp/htdocs";
-//  public static final String OUT_PATH = "C:/opt/epp/htdocs";
+  // public static final String OUT_PATH = "/opt/epp/htdocs";
+  // public static final String OUT_PATH = "C:/opt/epp/htdocs";
   public static final String JNLP_TEMPLATE_PATH = "templates/jnlp/epp.jnlp";
   private static final String ENCODING = "UTF-8";
   private static final int BUFFER = 512;
   private static final long serialVersionUID = 1L;
-  
+
   @Override
   protected void doGet( final HttpServletRequest req,
                         final HttpServletResponse resp )
     throws ServletException, IOException
   {
-    
-    String codebase = "http://" + req.getServerName() + ":" + req.getServerPort() + "/download";
+    String codebase = "http://"
+                      + req.getServerName()
+                      + ":"
+                      + req.getServerPort()
+                      + "/download";
     String iuParam = req.getParameter( "ius" );
-    
-    String href = req.getRequestURL().append( "?" + req.getQueryString() ).toString();
+    String href = req.getRequestURL()
+      .append( "?" + req.getQueryString() )
+      .toString();
     resp.addHeader( "Content-Type", "application/x-java-jnlp-file" );
     execute( codebase, iuParam, href );
     resp.flushBuffer();
   }
 
   public static void execute( final String codebase,
-                                final String iuParam,
-                                final String filename ) throws IOException
+                              final String iuParam,
+                              final String filename ) throws IOException
   {
-    File downloadDir = Activator.getDefault().getConfiguration().getDownloadsDirectory();
-    IPath outDirPath = new Path( new File(downloadDir, BuildInstaller.OUTPUT_PATH).getAbsolutePath() );
+    File downloadDir = Activator.getDefault()
+      .getConfiguration()
+      .getDownloadsDirectory();
+    IPath outDirPath = new Path( new File( downloadDir,
+                                           BuildInstaller.OUTPUT_PATH ).getAbsolutePath() );
     String[] ius = getIUs( iuParam );
-//    URL template = Activator.getContext().getBundle().getEntry(TEMPLATE_PATH);
+    // URL template =
+    // Activator.getContext().getBundle().getEntry(TEMPLATE_PATH);
     IPath outFilePath = outDirPath.append( filename );
-    File templateFile = new File(downloadDir, JNLP_TEMPLATE_PATH );
-    String jnlp = ceateCustomJnlp( templateFile.toURI().toURL(), ius, codebase, filename );
+    File templateFile = new File( downloadDir, JNLP_TEMPLATE_PATH );
+    String jnlp = ceateCustomJnlp( templateFile.toURI().toURL(),
+                                   ius,
+                                   codebase,
+                                   filename );
     OutputStream os = new FileOutputStream( outFilePath.toFile() );
     os.write( jnlp.getBytes( ENCODING ) );
     tryClose( os );
   }
-  
-  //////////////////
-  // helping methods
-  //////////////////
 
+  // ////////////////
+  // helping methods
+  // ////////////////
   private static String[] getIUs( final String param ) {
-    List<String> result = new ArrayList<String>(); 
+    List<String> result = new ArrayList<String>();
     StringTokenizer tknizr = new StringTokenizer( param, ",", false );
     while( tknizr.hasMoreTokens() ) {
       String token = tknizr.nextToken();
@@ -81,9 +101,9 @@
   }
 
   private static String ceateCustomJnlp( final URL template,
-                                            final String ius[],
-                                            final String codebase,
-                                            final String filename )
+                                         final String ius[],
+                                         final String codebase,
+                                         final String filename )
   {
     String result = "";
     InputStream in = null;
@@ -92,9 +112,9 @@
       ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
       copy( in, bufferStream );
       result = customize( bufferStream.toString( ENCODING ),
-                                 ius,
-                                 codebase,
-                                 filename );
+                          ius,
+                          codebase,
+                          filename );
     } catch( IOException ioe ) {
       ioe.printStackTrace();
     } finally {
@@ -106,12 +126,27 @@
   private static String customize( final String input,
                                    final String[] ius,
                                    final String codebase,
-                                   final String href ) {
+                                   final String href )
+  {
     String result = input;
     result = result.replaceAll( "\\$\\{codebase\\}", codebase );
     result = result.replaceAll( "\\$\\{href\\}", href );
-    result = result.replaceAll( "\\$\\{roots\\}", StringUtil.toCommaList( ius, false ) );
-    result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); //FIXME: (jb) get this from initial selection on eclispe.org
+    result = result.replaceAll( "\\$\\{roots\\}",
+                                StringUtil.toCommaList( ius, false ) );
+    result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); // FIXME
+                                                                             // :
+                                                                             // (
+                                                                             // jb
+                                                                             // )
+                                                                             // get
+                                                                             // this
+                                                                             // from
+                                                                             // initial
+                                                                             // selection
+                                                                             // on
+                                                                             // eclispe
+                                                                             // .
+                                                                             // org
     return result;
   }
 
@@ -121,7 +156,7 @@
         stream.close();
       } catch( IOException e ) {
         e.printStackTrace();
-        //TODO Activator.log( e );
+        // TODO Activator.log( e );
       }
     }
   }
@@ -132,13 +167,12 @@
         stream.close();
       } catch( IOException e ) {
         e.printStackTrace();
-        //TODO Activator.log( e );
+        // TODO Activator.log( e );
       }
     }
   }
 
-  private static void copy( final InputStream in,
-                            final OutputStream out )
+  private static void copy( final InputStream in, final OutputStream out )
     throws IOException
   {
     byte[] data = new byte[ BUFFER ];
@@ -159,5 +193,4 @@
     }
     return "startinstaller-" + hash + ".jnlp";
   }
-  
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java
index 2652463..7e4e193 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java
index 6e455ff..e487d38 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.util;
 
 import java.util.HashMap;
@@ -8,25 +18,21 @@
  */
 public class OsUtil {
 
-  private static final String[] PLATFORMS
-    = new String[] { "win32", "linux",
-			"macosx" };
+  private static final String[] PLATFORMS = new String[]{
+    "win32", "linux", "macosx"
+  };
   private static final Map<String, String> EXTS = new HashMap<String, String>();
-
   static {
     EXTS.put( "win32", "zip" );
     EXTS.put( "linux", "tar.gz" );
-    EXTS.put("macosx", "tar.gz");
+    EXTS.put( "macosx", "tar.gz" );
   }
-  
+
   public static String[] getPlatforms() {
     return PLATFORMS;
   }
-  
+
   public static String getArchiveExtension( final String os ) {
     return EXTS.get( os );
   }
-  
-  
-  
 }
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StressTest.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StressTest.java
new file mode 100644
index 0000000..3d0aa76
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StressTest.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.util;
+
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Random;
+
+public class StressTest implements Runnable {
+
+  private static final int THREADS = 10;
+  private static final int TIMES = 10;
+  private static final int SPREAD = 10;
+  static Random random = new Random();
+
+  /**
+   * @param args
+   */
+  public static void main( String[] args ) {
+    for( int i = 0; i < THREADS; i++ ) {
+      Thread thread = new Thread( new StressTest() );
+      thread.setName( String.format( "Stresser %3d", i ) );
+      thread.start();
+    }
+  }
+  static double total = 0;
+  static double count = 0;
+
+  private static synchronized double getAverage( double datapoint ) {
+    total += datapoint;
+    count++;
+    return total / count;
+  }
+
+  private static void runTest() {
+    try {
+      int value = Math.abs( ( int )( SPREAD * random.nextGaussian() ) );
+      long start = System.nanoTime();
+      // Construct data
+      String data = URLEncoder.encode( "os", "UTF-8" )
+                    + "="
+                    + URLEncoder.encode( "linux", "UTF-8" );
+      data += "&"
+              + URLEncoder.encode( "eclipse.p2.roots", "UTF-8" )
+              + "="
+              + URLEncoder.encode( "value2", "UTF-8" );
+      data += "&"
+              + URLEncoder.encode( "eclipse.p2.metadata", "UTF-8" )
+              + "="
+              + URLEncoder.encode( "value2", "UTF-8" );
+      data += "&"
+              + URLEncoder.encode( "eclipse.p2.artifacts", "UTF-8" )
+              + "="
+              + URLEncoder.encode( "value" + value, "UTF-8" );
+      // Send data
+      URL url = new URL( "http://localhost:8888/installer/" );
+      URLConnection conn = url.openConnection();
+      conn.setDoOutput( true );
+      OutputStreamWriter wr = new OutputStreamWriter( conn.getOutputStream() );
+      wr.write( data );
+      wr.flush();
+      // Get the response
+      if( true ) {
+        // FileOutputStream fos = new FileOutputStream("out.tar.gz");
+        InputStream is = conn.getInputStream();
+        byte[] buffer = new byte[ 1024 ];
+        @SuppressWarnings("unused")
+        int bytes;
+        while( -1 != ( bytes = is.read( buffer ) ) ) {
+          // fos.write(buffer, 0, bytes);
+        }
+        is.close();
+        // fos.close();
+      }
+      wr.close();
+      long end = System.nanoTime();
+      double average = getAverage( ( end - start ) / 1000 );
+      System.out.println( String.format( "%s Time [%5d] %20d (avg: %12.3f)",
+                                         Thread.currentThread().getName(),
+                                         value,
+                                         ( end - start ) / 1000,
+                                         average ) );
+    } catch( Exception e ) {
+      e.printStackTrace();
+    }
+  }
+
+  public void run() {
+    for( int i = 0; i < TIMES; i++ ) {
+      runTest();
+    }
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java
index c4399e9..0caa98b 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java
@@ -1,14 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.util;
 
 import java.security.NoSuchAlgorithmException;
 
-
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public class StringUtil {
 
-  public static String toCommaList( final String[] items, final boolean space ) {
+  public static String toCommaList( final String[] items, final boolean space )
+  {
     StringBuilder result = new StringBuilder();
     for( int i = 0; i < items.length; i++ ) {
       if( i > 0 ) {
@@ -33,5 +43,4 @@
   {
     return Crypt.md5encrypt( value );
   }
-
 }
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.classpath b/plugins/org.eclipse.epp.wizard.kickstarter/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.gitignore b/plugins/org.eclipse.epp.wizard.kickstarter/.gitignore
new file mode 100644
index 0000000..215520f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.gitignore
@@ -0,0 +1 @@
+org.eclipse.equinox.servletbridge/
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.project b/plugins/org.eclipse.epp.wizard.kickstarter/.project
new file mode 100644
index 0000000..cba8fc2
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.epp.wizard.kickstarter</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.epp.wizard.kickstarter/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ef25a09
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Fri Aug 15 09:35:06 CEST 2008

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.kickstarter/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d190c76
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Kickstarter Plug-in
+Bundle-SymbolicName: org.eclipse.epp.wizard.kickstarter
+Bundle-Version: 1.0.0
+Bundle-Activator: org.eclipse.epp.wizard.kickstarter.Activator
+Require-Bundle: org.eclipse.core.runtime
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.apache.log4j
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/build.properties b/plugins/org.eclipse.epp.wizard.kickstarter/build.properties
new file mode 100644
index 0000000..41eb6ad
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/build.properties
@@ -0,0 +1,4 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .

diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/src/org/eclipse/epp/wizard/kickstarter/Activator.java b/plugins/org.eclipse.epp.wizard.kickstarter/src/org/eclipse/epp/wizard/kickstarter/Activator.java
new file mode 100644
index 0000000..e2719e8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/src/org/eclipse/epp/wizard/kickstarter/Activator.java
@@ -0,0 +1,97 @@
+/*******************************************************************************

+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Innoopract Informationssysteme GmbH - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.epp.wizard.kickstarter;

+

+import org.apache.log4j.Logger;

+import org.eclipse.core.runtime.Plugin;

+import org.eclipse.osgi.framework.internal.core.BundleFragment;

+import org.osgi.framework.Bundle;

+import org.osgi.framework.BundleContext;

+import org.osgi.framework.FrameworkEvent;

+import org.osgi.framework.FrameworkListener;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+@SuppressWarnings("restriction")

+public class Activator extends Plugin implements FrameworkListener {

+	static Logger logger = Logger.getLogger(Activator.class);

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.epp.wizard.kickstarter";

+

+	// The shared instance

+	private static Activator plugin;

+

+	private BundleContext context;

+

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see

+	 * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		context.addFrameworkListener(this);

+		plugin = this;

+		this.context = context;

+		kickstartBundles();

+	}

+

+	private void kickstartBundles() {

+		for (Bundle bundle : context.getBundles()) {

+			try {

+				// Do not start fragments & already starting bundles

+				if (!(bundle instanceof BundleFragment)

+						&& (bundle.getState() != Bundle.STARTING)) {

+					logger.info("Kickstarting "

+							+ String.format("%-45s", bundle.getSymbolicName()) + "  "

+							+ bundle.getHeaders().get("Bundle-Version"));

+					bundle.start();

+				}

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+		}

+		logger.info("Kickstart completed");

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see

+	 * org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 * 

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+	public void frameworkEvent(FrameworkEvent event) {

+	}

+

+}

diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF
index 87577c6..c39cb34 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF
@@ -7,8 +7,13 @@
 Require-Bundle: org.eclipse.core.runtime
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: org.eclipse.epp.wizard.internal,
+Import-Package: org.apache.log4j,
  org.eclipse.epp.wizard.model,
+ org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.metadata,
+ org.eclipse.equinox.internal.p2.metadata.repository,
+ org.eclipse.equinox.internal.p2.metadata.repository.io,
+ org.eclipse.equinox.internal.p2.persistence,
  org.eclipse.equinox.internal.provisional.p2.core,
  org.eclipse.equinox.internal.provisional.p2.metadata,
  org.eclipse.equinox.internal.provisional.p2.metadata.repository,
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch b/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch
index a503269..78b97c3 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch
@@ -1,24 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>

-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">

-<booleanAttribute key="append.args" value="true"/>

-<booleanAttribute key="automaticAdd" value="true"/>

-<booleanAttribute key="automaticValidate" value="false"/>

-<stringAttribute key="bootstrap" value=""/>

-<stringAttribute key="checked" value="[NONE]"/>

-<booleanAttribute key="clearConfig" value="false"/>

-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata generator"/>

-<booleanAttribute key="default_auto_start" value="true"/>

-<intAttribute key="default_start_level" value="4"/>

-<stringAttribute key="deselected_workspace_plugins" value="org.eclipse.epp.wizard.p2.generator,org.eclipse.rap.ui.forms,org.mortbay.jetty,org.eclipse.equinox.http.jetty,org.apache.commons.logging"/>

-<booleanAttribute key="includeOptional" value="true"/>

-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consoleLog"/>

-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>

-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true"/>

-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:org.eclipse.epp.wizard}"/>

-<stringAttribute key="pde.version" value="3.3"/>

-<booleanAttribute key="show_selected_only" value="false"/>

-<stringAttribute key="target_bundles" value="javax.xml@default:default,org.apache.xerces@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.apache.xml.serializer@default:default,org.eclipse.ecf@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ui@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.runtime@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.junit@default:default,com.ibm.icu@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.osgi@:,org.eclipse.osgi.services@default:default,org.eclipse.help@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.jobs@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.databinding@default:default,org.apache.ant@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.security@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.equinox.registry@default:default,org.eclipse.ant.core@default:default,org.apache.xml.resolver@default:default,org.eclipse.swt@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.frameworkadmin@default:default"/>

-<booleanAttribute key="tracing" value="false"/>

-<booleanAttribute key="useDefaultConfigArea" value="true"/>

-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.rwt.q07@default:false,org.eclipse.equinox.p2.metadata.generator@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,org.eclipse.epp.wizard.model@default:default,javax.servlet@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.rap.jface@default:default,org.eclipse.epp.wizard.metadata.generator@default:true,org.jdom@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.epp.wizard@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.rap.ui@default:default"/>

-</launchConfiguration>

+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata generator"/>
+<booleanAttribute key="default_auto_start" value="true"/>
+<intAttribute key="default_start_level" value="4"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.apache.commons.logging,org.eclipse.rap.ui.forms,org.mortbay.jetty,org.eclipse.equinox.http.jetty"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:org.eclipse.epp.wizard}"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="target_bundles" value="org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ui.workbench@default:default,org.apache.xerces*2.9.0.v200805270400@default:default,org.eclipse.help@default:default,com.ibm.icu@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.jface@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ecf@default:default,org.eclipse.core.databinding@default:default,org.apache.xml.resolver*1.2.0.v200806030312@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.core.jobs@default:default,org.apache.xml.resolver*1.1.0.20080508-1430PRD@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ant.core@default:default,org.apache.ant@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.osgi@:,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ui@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.security@default:default,org.eclipse.swt@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.osgi.services@default:default,org.eclipse.core.runtime@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.apache.xml.serializer@default:default,org.apache.xerces*2.8.0.20080508-1430PRD@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.common@default:default,javax.xml@default:default,org.junit@default:default"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<stringAttribute key="workspace_bundles" value="org.eclipse.equinox.http.registry@default:default,p2test@default:default,org.eclipse.epp.wizard.kickstarter@default:default,org.eclipse.equinox.servletbridge@default:default,org.eclipse.rap.rwt.q07@default:false,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.rap.jface@default:default,org.eclipse.epp.wizard@default:default,org.eclipse.rap.ui@default:default,org.apache.log4j@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.epp.wizard.metadata.generator@default:true,org.eclipse.equinox.p2.director@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,javax.servlet@default:default,org.jdom@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.equinox.p2.installer@default:default,org.eclipse.equinox.http.servletbridge@default:default,org.eclipse.equinox.p2.tools@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.epp.wizard.model@default:default"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties b/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties
index ec3c586..b5a94d5 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties
@@ -1,5 +1,6 @@
-source.. = src/

-output.. = bin/

-bin.includes = META-INF/,\

-               .

-

+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
+
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/plugin.xml b/plugins/org.eclipse.epp.wizard.metadata.generator/plugin.xml
new file mode 100644
index 0000000..7148895
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="id1"
+         point="org.eclipse.core.runtime.applications">
+      <application
+            cardinality="singleton-global"
+            thread="main"
+            visible="true">
+         <run
+               class="org.eclipse.epp.wizard.metadata.generator.Application">
+         </run>
+      </application>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java
index c275bb6..98ef210 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java
@@ -1,69 +1,59 @@
-/*******************************************************************************

- * Copyright (c) 2008 Innoopract Informationssysteme GmbH.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *     Innoopract Informationssysteme GmbH - initial API and implementation

- ******************************************************************************/

-package org.eclipse.epp.wizard.metadata.generator;

-

-import java.io.File;

-

-import org.eclipse.core.runtime.Plugin;

-import org.osgi.framework.BundleContext;

-

-/**

- * The activator class controls the plug-in life cycle

- */

-public class Activator extends Plugin {

-

-	// The plug-in ID

-	public static final String PLUGIN_ID = "org.eclipse.epp.wizard.metadata.generator";

-

-	// The shared instance

-	private static Activator plugin;

-	

-	/**

-	 * The constructor

-	 */

-	public Activator() {

-	}

-

-	/*

-	 * (non-Javadoc)

-	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)

-	 */

-	public void start(BundleContext context) throws Exception {

-		super.start(context);

-		System.out.println("=== Generating metadata");

-		plugin = this;

-		File in = new File("../org.eclipse.epp.wizard/data/model/IUs");

-		File out = new File("../org.eclipse.epp.wizard/data/metadata");

-		MetadataGenerator metadataGenerator = new MetadataGenerator(in, out);

-		metadataGenerator.run();

-		

-		System.out.println("=== done");

-	}

-

-	/*

-	 * (non-Javadoc)

-	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)

-	 */

-	public void stop(BundleContext context) throws Exception {

-		plugin = null;

-		super.stop(context);

-	}

-

-	/**

-	 * Returns the shared instance

-	 *

-	 * @return the shared instance

-	 */

-	public static Activator getDefault() {

-		return plugin;

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+  // The plug-in ID
+  public static final String PLUGIN_ID = "org.eclipse.epp.wizard.metadata.generator";
+  // The shared instance
+  private static Activator plugin;
+
+  /**
+   * The constructor
+   */
+  public Activator() {
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+   */
+  public void start( BundleContext context ) throws Exception {
+    super.start( context );
+    plugin = this;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+   */
+  public void stop( BundleContext context ) throws Exception {
+    plugin = null;
+    super.stop( context );
+  }
+
+  /**
+   * Returns the shared instance
+   * 
+   * @return the shared instance
+   */
+  public static Activator getDefault() {
+    return plugin;
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Application.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Application.java
new file mode 100644
index 0000000..53e62d1
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Application.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.File;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+public class Application implements IApplication {
+
+  public Object start( IApplicationContext context ) throws Exception {
+    File in = new File( "data/model/IUs" );
+    File out = new File( "data/metadata" );
+    MetadataGenerator metadataGenerator = new MetadataGenerator( in, out );
+    metadataGenerator.run();
+    return null;
+  }
+
+  public void stop() {
+    // TODO Auto-generated method stub
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java
index 6f8dfc4..1976443 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java
@@ -1,65 +1,72 @@
-/*******************************************************************************

- * Copyright (c) 2008 Innoopract Informationssysteme GmbH.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *     Innoopract Informationssysteme GmbH - initial API and implementation

- ******************************************************************************/

-package org.eclipse.epp.wizard.metadata.generator;

-

-import java.io.File;

-import java.io.FilenameFilter;

-import java.net.URL;

-import java.util.Properties;

-

-import org.eclipse.core.runtime.NullProgressMonitor;

-import org.eclipse.epp.wizard.internal.P2MetadataReader;

-import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;

-import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;

-import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.SimpleMetadataRepositoryFactory;

-

-@SuppressWarnings("restriction")

-public class MetadataGenerator {

-

-	private static final String IU_EXTENSION = ".iu";

-	private File out;

-	private File in;

-	private String repositoryTitle = "EPP Wizard Metadata repository";

-

-	public MetadataGenerator(File in, File out) {

-		this.in = in;

-		this.out = out;

-	}

-

-	public void run() {

-		try {

-			File contentFile = out;

-			File[] files = in.listFiles(new FilenameFilter() {

-

-				public boolean accept(File dir, String name) {

-					return name.endsWith(IU_EXTENSION);

-				}

-

-			});

-

-			IMetadataRepository metadataRepository = new SimpleMetadataRepositoryFactory()

-					.create(contentFile.toURI().toURL(),

-							repositoryTitle, "",

-							new Properties());

-			for (File file : files) {

-				URL url = file.toURI().toURL();

-				IInstallableUnit unit = P2MetadataReader.readInstallableUnit(

-						url, url.openStream(), new NullProgressMonitor());

-				metadataRepository

-						.addInstallableUnits(new IInstallableUnit[] { unit });

-			}

-		} catch (Throwable e) {

-			// TODO Auto-generated catch block

-			e.printStackTrace();

-		}

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.net.URL;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
+import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.SimpleMetadataRepositoryFactory;
+
+@SuppressWarnings("restriction")
+public class MetadataGenerator {
+
+  static Logger logger = Logger.getLogger( MetadataGenerator.class );
+  private static final String IU_EXTENSION = ".iu";
+  private File out;
+  private File in;
+  private String repositoryTitle = "EPP Wizard Metadata repository";
+
+  public MetadataGenerator( File in, File out ) {
+    this.in = in;
+    this.out = out;
+  }
+
+  public void run() {
+    try {
+      File contentFile = out;
+      logger.info( "Finding IUs in directory : " + in.getAbsolutePath() );
+      File[] files = in.listFiles( new FilenameFilter() {
+
+        public boolean accept( File dir, String name ) {
+          return name.endsWith( IU_EXTENSION );
+        }
+      } );
+      logger.info( "Creating metadata repository: "
+                   + contentFile.getAbsolutePath() );
+      IMetadataRepository metadataRepository = new SimpleMetadataRepositoryFactory().create( contentFile.toURI()
+                                                                                               .toURL(),
+                                                                                             repositoryTitle,
+                                                                                             "",
+                                                                                             new Properties() );
+      for( File file : files ) {
+        logger.info( "Reading iu from file: " + file.getAbsolutePath() );
+        URL url = file.toURI().toURL();
+        IInstallableUnit unit = P2MetadataReader.readInstallableUnit( url,
+                                                                      url.openStream(),
+                                                                      new NullProgressMonitor() );
+        metadataRepository.addInstallableUnits( new IInstallableUnit[]{
+          unit
+        } );
+        logger.info( "Added IU \"" + unit.getId() + "\" to repository" );
+      }
+      logger.info( "Finished generating repository" );
+    } catch( Throwable e ) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataConstants.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataConstants.java
new file mode 100644
index 0000000..8ea2f8a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataConstants.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2008
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *      Henrik Lindberg
+ ******************************************************************************/
+
+package org.eclipse.epp.wizard.metadata.generator;
+
+/**
+ * @author Henrik Lindberg
+ * 
+ */
+public interface P2MetadataConstants
+{
+
+    static final String IU_METADATA_FORMAT = "InstallableUnit"; //$NON-NLS-1$
+
+    static final String INSTALLABLE_ELEMENT = "installable"; //$NON-NLS-1$
+
+    static final String INSTALLABLE_VERSION = "1.0.0"; //$NON-NLS-1$
+
+    static final String IU_METADATA_FORMAT_VERSION = "1.0.0"; //$NON-NLS-1$
+
+    static final String DEFAULT_IU_VERSION_STRING = "1.0.0"; //$NON-NLS-1$
+
+    static final String DEFAULT_IU_LICENSE_TEMPLATE = "The code, documentation and other materials contained herein have been"
+            + " licensed under the NAMEOFLICENSE - VERSION by the copyright holder(s)"
+            + " listed in the Copyright section.";
+
+    static final String DEFAULT_IU_COPYRIGHT_TEMPLATE = "Annotation to copyright URL, or the actual copyright text.";
+
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataReader.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataReader.java
new file mode 100644
index 0000000..d274363
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataReader.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2008
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *      Henrik Lindberg
+ ******************************************************************************/
+
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
+import org.eclipse.equinox.internal.p2.metadata.repository.Activator;
+import org.eclipse.equinox.internal.p2.metadata.repository.Messages;
+import org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser;
+import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
+import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
+import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Version;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * P2 Metadata Reader used to centralize reading of P2 metadata as API is likely to change.
+ * The InstallableUnit reader reuses the MetadataRepository handler for InstallableUnit but in an 
+ * ugly way.
+ * 
+ * TODO: The format, parser and writer should either be private, and use its own impl of
+ * the IInstallableUnit interface for the sole purpose of editing, or the Metadata API should
+ * allow creation of mutable instances.
+ * 
+ * @author Henrik Lindberg
+ */
+@SuppressWarnings("restriction")
+public class P2MetadataReader implements P2MetadataConstants
+{
+
+    /**
+     * Reads metadata from the given stream, and returns the contained array
+     * of abstract metadata repositories.
+     * This method performs buffering, and closes the stream when finished.
+     */
+    public static InstallableUnit readInstallableUnit(URL location, InputStream input, IProgressMonitor monitor) throws ProvisionException {
+        BufferedInputStream bufferedInput = null;
+        try {
+            try {
+                bufferedInput = new BufferedInputStream(input);
+
+                Parser repositoryParser = new Parser(Activator.getContext(), Activator.ID);
+                repositoryParser.parse(input, monitor);
+                IStatus result = repositoryParser.getStatus();
+                switch (result.getSeverity()) {
+                    case IStatus.CANCEL :
+                        throw new OperationCanceledException();
+                    case IStatus.ERROR :
+                        throw new ProvisionException(result);
+                    case IStatus.WARNING :
+                    case IStatus.INFO :
+                        LogHelper.log(result);
+                }
+                return repositoryParser.getInstallableUnit();
+            } 
+            catch(Exception e)
+            {
+                e.printStackTrace(); // REMOVE ENTIRE CATCH
+                return null;
+            }
+            finally {
+                if (bufferedInput != null)
+                    bufferedInput.close();
+            }
+        } catch (IOException ioe) {
+            String msg = NLS.bind(Messages.io_failedRead, location);
+            throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, ioe));
+        }
+    }
+
+    private interface XMLConstants extends org.eclipse.equinox.internal.p2.metadata.repository.io.XMLConstants {
+
+        // Constants defining the structure of the XML for a MetadataRepository
+
+        // A format version number for metadata repository XML.
+        public static final String XML_VERSION = "1.0.0"; //$NON-NLS-1$
+        public static final Version CURRENT_VERSION = new Version(XML_VERSION);
+        public static final VersionRange XML_TOLERANCE = new VersionRange(CURRENT_VERSION, true, new Version(2, 0, 0), false);
+
+        // Constants for processing Instructions
+        public static final String PI_IU_TARGET = "InstallableUnit"; //$NON-NLS-1$
+
+        // Constants for metadata IU elements
+        public static final String IU_ELEMENT = "installable"; //$NON-NLS-1$
+
+    }
+
+    @SuppressWarnings("unchecked")
+    protected XMLWriter.ProcessingInstruction[] createPI(Class iuClass) {
+        //TODO We should remove this processing instruction, but currently old clients rely on this. See bug 210450.
+        return new XMLWriter.ProcessingInstruction[] {XMLWriter.ProcessingInstruction.makeClassVersionInstruction(XMLConstants.PI_IU_TARGET, iuClass, XMLConstants.CURRENT_VERSION)};
+    }
+
+
+    /*
+     *  Parser for the contents of a installable unit,
+     *  as written by the Writer class.
+     */
+    private static class Parser extends MetadataParser implements XMLConstants {
+
+        private InstallableUnit theInstallableUnit = null;
+
+        public Parser(BundleContext context, String bundleId) {
+            super(context, bundleId);
+        }
+
+        public synchronized void parse(InputStream stream, IProgressMonitor monitor) throws IOException {
+            this.status = null;
+            setProgressMonitor(monitor);
+            monitor.beginTask("Loading installable unit", IProgressMonitor.UNKNOWN);
+            try {
+                // TODO: currently not caching the parser since we make no assumptions
+                //       or restrictions on concurrent parsing
+                getParser();
+                IUHandler iuHandler = new IUHandler();
+                xmlReader.setContentHandler(new IUDocHandler(IU_ELEMENT, iuHandler));
+                xmlReader.parse(new InputSource(stream));
+                if (isValidXML()) {
+                    theInstallableUnit = iuHandler.getInstallableUnit();
+                }
+            } catch (SAXException e) {
+                throw new IOException(e.getMessage());
+            } catch (ParserConfigurationException e) {
+                throw new IOException(e.getMessage());
+            } finally {
+                monitor.done();
+                stream.close();
+            }
+        }
+
+        public InstallableUnit getInstallableUnit() {
+            return theInstallableUnit;
+        }
+
+        @Override
+        protected Object getRootObject() {
+            return getInstallableUnit();
+        }
+
+        private final class IUDocHandler extends DocHandler {
+
+            public IUDocHandler(String rootName, RootHandler rootHandler) {
+                super(rootName, rootHandler);
+            }
+
+            @Override
+            public void processingInstruction(String target, String data) throws SAXException {
+                if (PI_IU_TARGET.equals(target)) {
+                    Version repositoryVersion = extractPIVersion(target, data);
+                    if (!P2MetadataReader.XMLConstants.XML_TOLERANCE.isIncluded(repositoryVersion)) {
+                        throw new SAXException(NLS.bind(Messages.io_IncompatibleVersion, repositoryVersion, P2MetadataReader.XMLConstants.XML_TOLERANCE));
+                    }
+                }
+            }
+
+        }
+
+        private final class IUHandler extends RootHandler {
+            private InstallableUnitHandler unitHandler = null;
+            ArrayList<InstallableUnitDescription> units = null;
+
+            private InstallableUnit installableUnit = null;
+
+            public IUHandler() {
+                super();
+            }
+
+            public InstallableUnit getInstallableUnit() {
+                return this.installableUnit;
+            }
+
+            @Override
+            protected void handleRootAttributes(Attributes attributes) {
+                // root element *is* the Installable Unit - the default parser is from
+                // the meta data repository parser, and it expects to parse a number of
+                // units, returning InstallableUnitDescription instances in a List.
+            }
+
+            @Override
+            public void startElement(String name, Attributes attributes) {
+                checkCancel();
+                if (name.equals(INSTALLABLE_UNIT_ELEMENT)) {
+                    this.units = new ArrayList<InstallableUnitDescription>(1);
+                    this.unitHandler = new InstallableUnitHandler(this, attributes, units); 
+                } else {
+                    invalidElement(name, attributes);
+                }
+            }
+
+            @Override
+            protected void finished() {
+                if (isValidXML()) {
+                    // TODO: This is an Ugly cast because the unit handler returns an interface rather than the mutable instance.
+                    //
+                     this.installableUnit = (InstallableUnit) this.unitHandler.getInstallableUnit();
+                }
+            }
+        }
+
+        @Override
+        protected String getErrorMessage() {
+            return Messages.io_parseError;
+        }
+
+        @Override
+        public String toString() {
+            // TODO:
+            return null;
+        }
+    }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java
index 397835a..668c4a4 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java
@@ -1,104 +1,90 @@
-/*******************************************************************************

- * Copyright (c) 2008 Innoopract Informationssysteme GmbH.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *     Innoopract Informationssysteme GmbH - initial API and implementation

- ******************************************************************************/

-package org.eclipse.epp.wizard.metadata.generator;

-

-import java.io.File;

-import java.io.FileNotFoundException;

-import java.io.FileOutputStream;

-import java.io.FilenameFilter;

-import java.io.OutputStreamWriter;

-import java.io.UnsupportedEncodingException;

-import java.util.regex.Matcher;

-import java.util.regex.Pattern;

-

-import javax.xml.transform.OutputKeys;

-import javax.xml.transform.Result;

-import javax.xml.transform.Source;

-import javax.xml.transform.TransformerConfigurationException;

-import javax.xml.transform.TransformerException;

-

-public class Package2IU {

-

-	/**

-	 * Converts EPP package definition

-	 * (http://wiki.eclipse.org/EPP/Configuration_File_Format) to IU format

-	 * 

-	 * @param args

-	 */

-	public static void main(String[] args) {

-

-		File packageDirectory = new File(

-				"../org.eclipse.epp.wizard/data/model/packages");

-		File xsltFile = new File(

-				"../org.eclipse.epp.wizard/data/model/packages/package2iu.xslt");

-		File[] files = packageDirectory.listFiles(new FilenameFilter() {

-

-			public boolean accept(File dir, String name) {

-				return name.endsWith(".xml");

-			}

-

-		});

-		Source xsltSource = new javax.xml.transform.stream.StreamSource(

-				xsltFile);

-

-		// create an instance of TransformerFactory

-		javax.xml.transform.TransformerFactory transFact = javax.xml.transform.TransformerFactory

-				.newInstance();

-		transFact.setAttribute("indent-number", 4);

-		try {

-			javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource);

-			trans.setOutputProperty(OutputKeys.INDENT, "yes");

-			Pattern pattern = Pattern.compile("eclipse_([a-z]+)_340.xml");

-			for (File file : files) {

-				Matcher matcher = pattern.matcher(file.getName());

-				String pkg = null;

-				if(matcher.find())

-				{

-					System.out.println(matcher.group(1));

-					pkg = matcher.group(1);

-				}

-				else

-				{

-					continue;

-				}

-				try {

-					File xmlFile = file;

-					File outFile = new File(packageDirectory,pkg +".iu");

-

-					Source xmlSource = new javax.xml.transform.stream.StreamSource(

-							xmlFile);

-					Result result = new javax.xml.transform.stream.StreamResult(

-							new OutputStreamWriter(

-									new FileOutputStream(outFile), "UTF-8"));

-					trans.setParameter("epp.name", "epp."+pkg);

-					trans.setParameter("epp.version", "3.4.0.qualifier");

-					trans.transform(xmlSource, result);

-				} catch (TransformerConfigurationException e) {

-					// TODO h block

-					e.printStackTrace();

-				} catch (TransformerException e) {

-					// TODO Auto-generatedAuto-generated catc catch block

-					e.printStackTrace();

-				} catch (UnsupportedEncodingException e) {

-					// TODO Auto-generated catch block

-					e.printStackTrace();

-				} catch (FileNotFoundException e) {

-					// TODO Auto-generated catch block

-					e.printStackTrace();

-				}

-			}

-		} catch (TransformerConfigurationException e1) {

-			// TODO Auto-generated catch block

-			e1.printStackTrace();

-		}

-

-	}

-}

+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+
+public class Package2IU {
+
+  /**
+   * Converts EPP package definition
+   * (http://wiki.eclipse.org/EPP/Configuration_File_Format) to IU format
+   * 
+   * @param args
+   */
+  public static void main( String[] args ) {
+    File packageDirectory = new File( "../org.eclipse.epp.wizard/data/model/packages" );
+    File xsltFile = new File( "../org.eclipse.epp.wizard/data/model/packages/package2iu.xslt" );
+    File[] files = packageDirectory.listFiles( new FilenameFilter() {
+
+      public boolean accept( File dir, String name ) {
+        return name.endsWith( ".xml" );
+      }
+    } );
+    Source xsltSource = new javax.xml.transform.stream.StreamSource( xsltFile );
+    // create an instance of TransformerFactory
+    javax.xml.transform.TransformerFactory transFact = javax.xml.transform.TransformerFactory.newInstance();
+    transFact.setAttribute( "indent-number", 4 );
+    try {
+      javax.xml.transform.Transformer trans = transFact.newTransformer( xsltSource );
+      trans.setOutputProperty( OutputKeys.INDENT, "yes" );
+      Pattern pattern = Pattern.compile( "eclipse_([a-z]+)_340.xml" );
+      for( File file : files ) {
+        Matcher matcher = pattern.matcher( file.getName() );
+        String pkg = null;
+        if( matcher.find() ) {
+          System.out.println( matcher.group( 1 ) );
+          pkg = matcher.group( 1 );
+        } else {
+          continue;
+        }
+        try {
+          File xmlFile = file;
+          File outFile = new File( packageDirectory, pkg + ".iu" );
+          Source xmlSource = new javax.xml.transform.stream.StreamSource( xmlFile );
+          Result result = new javax.xml.transform.stream.StreamResult( new OutputStreamWriter( new FileOutputStream( outFile ),
+                                                                                               "UTF-8" ) );
+          trans.setParameter( "epp.name", "epp." + pkg );
+          trans.setParameter( "epp.version", "3.4.0.qualifier" );
+          trans.transform( xmlSource, result );
+        } catch( TransformerConfigurationException e ) {
+          // TODO h block
+          e.printStackTrace();
+        } catch( TransformerException e ) {
+          // TODO Auto-generatedAuto-generated catc catch block
+          e.printStackTrace();
+        } catch( UnsupportedEncodingException e ) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        } catch( FileNotFoundException e ) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }
+      }
+    } catch( TransformerConfigurationException e1 ) {
+      // TODO Auto-generated catch block
+      e1.printStackTrace();
+    }
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF
index 354f196..0f2b98e 100644
--- a/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF
@@ -4,13 +4,14 @@
 Bundle-SymbolicName: org.eclipse.epp.wizard.model
 Bundle-Version: 0.0.1.qualifier
 Bundle-ClassPath: jdom.jar, eppmodel.jar
-Require-Bundle: org.junit;resolution:=optional,
- org.jdom,
+Require-Bundle: org.jdom,
  org.eclipse.equinox.p2.metadata.repository,
- org.eclipse.equinox.p2.metadata
+ org.eclipse.equinox.p2.metadata,
+ org.junit;bundle-version="3.8.2";resolution:=optional
 Export-Package: org.eclipse.epp.wizard.model
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: org.eclipse.core.runtime;version="3.4.0",
+Import-Package: org.apache.log4j,
+ org.eclipse.core.runtime;version="3.4.0",
  org.eclipse.equinox.internal.p2.metadata.repository,
  org.eclipse.equinox.internal.provisional.p2.core,
  org.eclipse.equinox.internal.provisional.p2.metadata.query,
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java
index a534254..876b313 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java
@@ -12,30 +12,42 @@
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
 
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
 import org.jdom.JDOMException;
 
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
+@SuppressWarnings("restriction")
 public class EPPModel {
 
-	public EPPModel(Structure structure) {
-		super();
-		this.structure = structure;
-	}
+  public EPPModel( Structure structure ) {
+    super();
+    this.structure = structure;
+  }
+  private Structure structure;
 
-	private Structure structure;
+  public Structure getStructure() {
+    return structure;
+  }
 
-	public Structure getStructure() {
-		return structure;
-	}
+  public List<IURef> getAllRefs( IURef ref ) {
+    return refMap.get( ref.getIU() );
+  }
+  private HashMap<InstallableUnit, List<IURef>> refMap = new HashMap<InstallableUnit, List<IURef>>();
 
-	public static EPPModel read(final URL modelLocation, final URL metadataRepository)
-			throws IOException,
-			JDOMException {
-		return (new EPPModelDeserializer()).deserialize(modelLocation,
-				metadataRepository);
-	}
+  public HashMap<InstallableUnit, List<IURef>> getRefMap() {
+    return refMap;
+  }
 
+  public static EPPModel read( final URL modelLocation,
+                               final URL metadataRepository )
+    throws IOException, JDOMException
+  {
+    return ( new EPPModelDeserializer() ).deserialize( modelLocation,
+                                                       metadataRepository );
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java
index 9d1dd4e..de38545 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java
@@ -33,104 +33,113 @@
 @SuppressWarnings("restriction")
 public class EPPModelDeserializer {
 
-	private static final String TAG_INFO = "info";
-	private static final String TAG_SCREEN = "screen";
-	private static final String TAG_GROUP = "group";
-	private static final String TAG_IUREF = "iuref";
-	private static final String TAG_REFID = "refid";
-	private static final String TAG_LABEL = "label";
-	private static final String TAG_ICON = "icon";
-	private static final String TAG_ALIAS = "alias";
-	private static final String TAG_STRUCTURE = "structure";
-	private IMetadataRepository repository;
+  private static final String TAG_INFO = "info";
+  private static final String TAG_SCREEN = "screen";
+  private static final String TAG_GROUP = "group";
+  private static final String TAG_IUREF = "iuref";
+  private static final String TAG_REFID = "refid";
+  private static final String TAG_LABEL = "label";
+  private static final String TAG_ICON = "icon";
+  private static final String TAG_ALIAS = "alias";
+  private static final String TAG_STRUCTURE = "structure";
+  private IMetadataRepository repository;
 
-	public EPPModel deserialize(final URL modelUrl, final URL metadataURL)
-			throws JDOMException, IOException {
-		InputStream input = new BufferedInputStream(modelUrl.openStream());
-		SAXBuilder builder = new SAXBuilder();
-		Document document = builder.build(input);
-		Element root = document.getRootElement();
-		EPPModel model = readModel(root);
-		MetadataRepositoryManager repositoryManager = new MetadataRepositoryManager();
-		try {
-			repository = repositoryManager.loadRepository(metadataURL,
-					new NullProgressMonitor());
-			resolveReferences(model);
-		} catch (ProvisionException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return model;
-	}
+  public EPPModel deserialize( final URL modelUrl, final URL metadataURL )
+    throws JDOMException, IOException
+  {
+    InputStream input = new BufferedInputStream( modelUrl.openStream() );
+    SAXBuilder builder = new SAXBuilder();
+    Document document = builder.build( input );
+    Element root = document.getRootElement();
+    EPPModel model = readModel( root );
+    MetadataRepositoryManager repositoryManager = new MetadataRepositoryManager();
+    try {
+      repository = repositoryManager.loadRepository( metadataURL,
+                                                     new NullProgressMonitor() );
+      resolveReferences( model );
+    } catch( ProvisionException e ) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    return model;
+  }
 
-	@SuppressWarnings("unchecked")
-	private InstallableUnit findIU(String id) {
-		Collector collector = new Collector();
-		repository.query(new InstallableUnitQuery(id), collector,
-				new NullProgressMonitor());
-		Collection<Object> results = collector.toCollection();
-		if (results.size() != 1) {
-			throw new RuntimeException("Unexpected number of results for IU "
-					+ id + "(" + results.size() + ")");
-		}
-		return (InstallableUnit) results.iterator().next();
-	}
+  @SuppressWarnings("unchecked")
+  private InstallableUnit findIU( String id ) {
+    Collector collector = new Collector();
+    repository.query( new InstallableUnitQuery( id ),
+                      collector,
+                      new NullProgressMonitor() );
+    Collection<Object> results = collector.toCollection();
+    if( results.size() != 1 ) {
+      throw new RuntimeException( "Unexpected number of results for IU "
+                                  + id
+                                  + "("
+                                  + results.size()
+                                  + ")" );
+    }
+    return ( InstallableUnit )results.iterator().next();
+  }
 
-	private void resolveReferences(EPPModel model) {
-		for (Screen screen : model.getStructure().getScreens()) {
-			for (Group group : screen.getGroups()) {
-				for (IURef iuRef : group.getIURefs()) {
-					InstallableUnit iu = findIU(iuRef.getRefId());
-					iuRef.setIU(iu);
-				}
-			}
-		}
-	}
+  private void resolveReferences( EPPModel model ) {
+    for( Screen screen : model.getStructure().getScreens() ) {
+      for( Group group : screen.getGroups() ) {
+        for( IURef iuRef : group.getIURefs() ) {
+          InstallableUnit iu = findIU( iuRef.getRefId() );
+          iuRef.setIU( iu );
+          List<IURef> refList = model.getRefMap().get( iu );
+          if( refList == null ) {
+            refList = new ArrayList<IURef>();
+            model.getRefMap().put( iu, refList );
+          }
+          refList.add( iuRef );
+        }
+      }
+    }
+  }
 
-	private EPPModel readModel(Element root) {
-		Element structureElement = root.getChild(TAG_STRUCTURE);
-		Structure structure = readStructure(structureElement);
-		EPPModel model = new EPPModel(structure);
-		return model;
-	}
+  private EPPModel readModel( Element root ) {
+    Element structureElement = root.getChild( TAG_STRUCTURE );
+    Structure structure = readStructure( structureElement );
+    EPPModel model = new EPPModel( structure );
+    return model;
+  }
 
-	private Structure readStructure(Element structureElement) {
-		List<Screen> screenList = new ArrayList<Screen>();
-		for (Object screenObject : structureElement.getChildren(TAG_SCREEN)) {
-			Element screenElement = (Element) screenObject;
-			screenList.add(readScreen(screenElement));
-		}
-		return new Structure(screenList);
-	}
+  private Structure readStructure( Element structureElement ) {
+    List<Screen> screenList = new ArrayList<Screen>();
+    for( Object screenObject : structureElement.getChildren( TAG_SCREEN ) ) {
+      Element screenElement = ( Element )screenObject;
+      screenList.add( readScreen( screenElement ) );
+    }
+    return new Structure( screenList );
+  }
 
-	private Screen readScreen(Element screenElement) {
-		List<Group> groupList = new ArrayList<Group>();
-		for (Object groupObject : screenElement.getChildren(TAG_GROUP)) {
-			Element groupElement = (Element) groupObject;
-			groupList.add(readGroup(groupElement));
-		}
-		String screenLabel = screenElement.getAttributeValue(TAG_LABEL);
-		return new Screen(screenLabel, groupList);
-	}
+  private Screen readScreen( Element screenElement ) {
+    List<Group> groupList = new ArrayList<Group>();
+    for( Object groupObject : screenElement.getChildren( TAG_GROUP ) ) {
+      Element groupElement = ( Element )groupObject;
+      groupList.add( readGroup( groupElement ) );
+    }
+    String screenLabel = screenElement.getAttributeValue( TAG_LABEL );
+    return new Screen( screenLabel, groupList );
+  }
 
-	private Group readGroup(Element groupElement) {
-		List<IURef> iuRefList = new ArrayList<IURef>();
-		for (Object iuRefObject : groupElement.getChildren(TAG_IUREF)) {
-			Element iuRefElement = (Element) iuRefObject;
-			iuRefList.add(readIURef(iuRefElement));
-		}
-		String groupLabel = groupElement.getAttributeValue(TAG_LABEL);
-		String groupAlias = groupElement.getAttributeValue(TAG_ALIAS);
-		String groupIcon = groupElement.getAttributeValue(TAG_ICON);
-		String description = groupElement.getChildTextTrim(TAG_INFO);
-		return new Group(groupLabel, groupAlias, groupIcon, description,
-				iuRefList);
-	}
+  private Group readGroup( Element groupElement ) {
+    List<IURef> iuRefList = new ArrayList<IURef>();
+    for( Object iuRefObject : groupElement.getChildren( TAG_IUREF ) ) {
+      Element iuRefElement = ( Element )iuRefObject;
+      iuRefList.add( readIURef( iuRefElement ) );
+    }
+    String groupLabel = groupElement.getAttributeValue( TAG_LABEL );
+    String groupAlias = groupElement.getAttributeValue( TAG_ALIAS );
+    String groupIcon = groupElement.getAttributeValue( TAG_ICON );
+    String description = groupElement.getChildTextTrim( TAG_INFO );
+    return new Group( groupLabel, groupAlias, groupIcon, description, iuRefList );
+  }
 
-	private IURef readIURef(Element iuRefElement) {
-		String refid = iuRefElement.getAttributeValue(TAG_REFID);
-		String alias = iuRefElement.getAttributeValue(TAG_ALIAS);
-		return new IURef(refid, alias);
-	}
-
+  private IURef readIURef( Element iuRefElement ) {
+    String refid = iuRefElement.getAttributeValue( TAG_REFID );
+    String alias = iuRefElement.getAttributeValue( TAG_ALIAS );
+    return new IURef( refid, alias );
+  }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java
index 44f9f51..166ccd6 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java
@@ -10,33 +10,30 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.model;
 
-
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public class Feature {
 
-	public Feature(String id, String label, String description) {
-		super();
-		this.description = description;
-		this.id = id;
-		this.label = label;
-	}
+  public Feature( String id, String label, String description ) {
+    super();
+    this.description = description;
+    this.id = id;
+    this.label = label;
+  }
+  private final String id;
+  private final String label;
 
-	private final String id;
-	private final String label;
+  public String getId() {
+    return id;
+  }
 
-	public String getId() {
-		return id;
-	}
+  public String getLabel() {
+    return label;
+  }
 
-	public String getLabel() {
-		return label;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	private final String description;
+  public String getDescription() {
+    return description;
+  }
+  private final String description;
 }
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java
index afe45fb..6741cea 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java
@@ -10,46 +10,43 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.model;
 
-
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public class FeatureRef {
 
-	private Group parent;
-	private Feature feature;
+  private Group parent;
+  private Feature feature;
 
-	public FeatureRef(String id, String alias) {
-		super();
-		this.id = id;
-		this.alias = alias;
-	}
+  public FeatureRef( String id, String alias ) {
+    super();
+    this.id = id;
+    this.alias = alias;
+  }
 
-	public void setParent(Group parent) {
-		this.parent = parent;
-	}
+  public void setParent( Group parent ) {
+    this.parent = parent;
+  }
+  private final String id;
+  private final String alias;
 
-	private final String id;
-	private final String alias;
+  public Group getParent() {
+    return parent;
+  }
 
-	public Group getParent() {
-		return parent;
-	}
+  public String getId() {
+    return id;
+  }
 
-	public String getId() {
-		return id;
-	}
+  public String getAlias() {
+    return alias;
+  }
 
-	public String getAlias() {
-		return alias;
-	}
+  public void setFeature( Feature feature ) {
+    this.feature = feature;
+  }
 
-	public void setFeature(Feature feature) {
-		this.feature = feature;
-	}
-
-	public Feature getFeature() {
-		return feature;
-	}
-
+  public Feature getFeature() {
+    return feature;
+  }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java
index 8a9fd65..fd2a8e6 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java
@@ -17,18 +17,18 @@
  */
 public class Features {
 
-	private final List<Feature> features;
+  private final List<Feature> features;
 
-	public Features(List<Feature> features) {
-		super();
-		this.features = features;
-	}
+  public Features( List<Feature> features ) {
+    super();
+    this.features = features;
+  }
 
-	public Feature[] getFeatures() {
-		return features.toArray(new Feature[features.size()]);
-	}
+  public Feature[] getFeatures() {
+    return features.toArray( new Feature[ features.size() ] );
+  }
 
-	public Feature getFeature(FeatureRef featureRef) {
-		return featureRef.getFeature();
-	}
+  public Feature getFeature( FeatureRef featureRef ) {
+    return featureRef.getFeature();
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java
index 26703ab..12ee4ff 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java
@@ -27,7 +27,6 @@
   private final String icon;
   private final String info;
 
-  
   public String getInfo() {
     return info;
   }
@@ -59,7 +58,9 @@
     this.label = label;
     this.alias = alias;
     this.icon = icon;
-    this.info = info == null?"":info;
+    this.info = info == null
+                            ? ""
+                            : info;
     this.iuRefs = iuRefs;
     for( IURef iuRef : iuRefs ) {
       iuRef.setParent( this );
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java
index eae4b01..29d95ac 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java
@@ -12,47 +12,44 @@
 
 import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
 
-
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 @SuppressWarnings("restriction")
 public class IURef {
 
-	private Group parent;
-	private InstallableUnit feature;
+  private Group parent;
+  private InstallableUnit feature;
 
-	public IURef(String refid, String alias) {
-		super();
-		this.refid = refid;
-		this.alias = alias;
-	}
+  public IURef( String refid, String alias ) {
+    super();
+    this.refid = refid;
+    this.alias = alias;
+  }
 
-	public void setParent(Group parent) {
-		this.parent = parent;
-	}
+  public void setParent( Group parent ) {
+    this.parent = parent;
+  }
+  private final String refid;
+  private final String alias;
 
-	private final String refid;
-	private final String alias;
+  public Group getParent() {
+    return parent;
+  }
 
-	public Group getParent() {
-		return parent;
-	}
+  public String getRefId() {
+    return refid;
+  }
 
-	public String getRefId() {
-		return refid;
-	}
+  public String getAlias() {
+    return alias;
+  }
 
-	public String getAlias() {
-		return alias;
-	}
+  public void setIU( InstallableUnit feature ) {
+    this.feature = feature;
+  }
 
-	public void setIU(InstallableUnit feature) {
-		this.feature = feature;
-	}
-
-	public InstallableUnit getIU() {
-		return feature;
-	}
-
+  public InstallableUnit getIU() {
+    return feature;
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java
index 5978abb..5eb6ef6 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java
@@ -17,25 +17,22 @@
  */
 public class Screen {
 
+  public Group[] getGroups() {
+    return groups.toArray( new Group[ groups.size() ] );
+  }
 
-	public Group[] getGroups() {
-		return groups.toArray(new Group[groups.size()]);
-	}
+  public String getLabel() {
+    return label;
+  }
 
-	public String getLabel() {
-		return label;
-	}
-
-	public Screen(String label, List<Group> groups) {
-		super();
-		this.groups = groups;
-		this.label = label;
-		for (Group group : groups) {
-			group.setParent(this);
-		}
-	}
-
-	private final List<Group> groups;
-	private final String label;
-
+  public Screen( String label, List<Group> groups ) {
+    super();
+    this.groups = groups;
+    this.label = label;
+    for( Group group : groups ) {
+      group.setParent( this );
+    }
+  }
+  private final List<Group> groups;
+  private final String label;
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java
index d07b6bf..9c230d8 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java
@@ -17,14 +17,13 @@
  */
 public class Structure {
 
-	protected List<Screen> screens;
+  protected List<Screen> screens;
 
-	public Structure(final List<Screen> screens) {
-		this.screens = screens;
-	}
+  public Structure( final List<Screen> screens ) {
+    this.screens = screens;
+  }
 
-	public Screen[] getScreens() {
-		return screens.toArray(new Screen[screens.size()]);
-	}
-
+  public Screen[] getScreens() {
+    return screens.toArray( new Screen[ screens.size() ] );
+  }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java b/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java
index 330a33b..f717ca8 100644
--- a/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java
+++ b/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java
@@ -19,43 +19,38 @@
  */
 public class Model_Test extends TestCase {
 
-	public void testModel() throws Exception {
-		URL url = getFile("eppmodel.xml");
-		URL urlmetadata = new URL("file:test/org/eclipse/epp/wizard/model");
-		EPPModel model = EPPModel.read(url, urlmetadata);
-		assertNotNull(model);
+  public void testModel() throws Exception {
+    URL url = getFile( "eppmodel.xml" );
+    URL urlmetadata = new URL( "file:test/org/eclipse/epp/wizard/model" );
+    EPPModel model = EPPModel.read( url, urlmetadata );
+    assertNotNull( model );
+    Structure structure = model.getStructure();
+    assertNotNull( structure );
+    Screen[] screens = structure.getScreens();
+    assertEquals( 3, screens.length );
+    Group[] groups = screens[ 0 ].getGroups();
+    assertEquals( 2, groups.length );
+    assertEquals( "group.png", groups[ 0 ].getIcon() );
+    assertEquals( "Classic info", groups[ 0 ].getInfo() );
+    assertEquals( "", groups[ 1 ].getInfo() );
+    assertEquals( "Screen 1", screens[ 0 ].getLabel() );
+    IURef[] featureRefs = groups[ 0 ].getIURefs();
+    assertEquals( 3, featureRefs.length );
+  }
 
-		Structure structure = model.getStructure();
-		assertNotNull(structure);
-		Screen[] screens = structure.getScreens();
-		assertEquals(3, screens.length);
+  private URL getFile( final String name ) {
+    return getClass().getResource( name );
+  }
 
-		Group[] groups = screens[0].getGroups();
-		assertEquals(2, groups.length);
-		assertEquals("group.png", groups[0].getIcon());
-        assertEquals("Classic info", groups[0].getInfo());
-        assertEquals("", groups[1].getInfo());
-
-		assertEquals("Screen 1", screens[0].getLabel());
-
-		IURef[] featureRefs = groups[0].getIURefs();
-		assertEquals(3, featureRefs.length);
-
-	}
-
-	private URL getFile(final String name) {
-		return getClass().getResource(name);
-	}
-
-	public void testParents() throws Exception {
-		URL url = getFile("eppmodel.xml");
-		URL urlmetadata = new URL("file:test/org/eclipse/epp/wizard/model");
-		EPPModel model = EPPModel.read(url, urlmetadata);
-		assertNotNull(model);
-		Screen screen = model.getStructure().getScreens()[0];
-		Group group = screen.getGroups()[0];
-		IURef featureRef = group.getIURefs()[0];
-		assertSame(screen, group.getParent());
-		assertSame(group, featureRef.getParent());
-	}
+  public void testParents() throws Exception {
+    URL url = getFile( "eppmodel.xml" );
+    URL urlmetadata = new URL( "file:test/org/eclipse/epp/wizard/model" );
+    EPPModel model = EPPModel.read( url, urlmetadata );
+    assertNotNull( model );
+    Screen screen = model.getStructure().getScreens()[ 0 ];
+    Group group = screen.getGroups()[ 0 ];
+    IURef featureRef = group.getIURefs()[ 0 ];
+    assertSame( screen, group.getParent() );
+    assertSame( group, featureRef.getParent() );
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf b/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf
index e3c04c1..eb26866 100644
--- a/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf
+++ b/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf
@@ -3,13 +3,16 @@
 <provider id="org.eclipse.team.cvs.core.cvsnature">
 <project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/tools,org.eclipse.orbit/javax.servlet,javax.servlet,v2_4"/>
 <project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/tools,org.eclipse.orbit/org.apache.commons.logging,org.apache.commons.logging,v1_0_4"/>
+<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/tools,org.eclipse.orbit/org.apache.log4j,org.apache.log4j,v1_2_13"/>
 <project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/releng/org.eclipse.epp.config,org.eclipse.epp.config"/>
 <project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard,org.eclipse.epp.wizard"/>
 <project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.installer.jnlp.feature,org.eclipse.epp.wizard.installer.jnlp.feature"/>
 <project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.installerbuilder,org.eclipse.epp.wizard.installerbuilder"/>
+<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.kickstarter,org.eclipse.epp.wizard.kickstarter"/>
 <project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.metadata.generator,org.eclipse.epp.wizard.metadata.generator"/>
 <project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.model,org.eclipse.epp.wizard.model"/>
 <project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.releng,org.eclipse.epp.wizard.releng"/>
+<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.war.feature,org.eclipse.epp.wizard.war.feature"/>
 <project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.equinox.http.jetty,org.eclipse.equinox.http.jetty"/>
 <project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.equinox.http.registry,org.eclipse.equinox.http.registry"/>
 <project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.equinox.http.servlet,org.eclipse.equinox.http.servlet"/>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.classpath b/plugins/org.eclipse.epp.wizard.war.feature/.classpath
new file mode 100644
index 0000000..d171cd4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.project b/plugins/org.eclipse.epp.wizard.war.feature/.project
new file mode 100644
index 0000000..c79d1f8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.epp.wizard.war.feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..bc8f45b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Dec 04 14:46:45 CET 2007

+eclipse.preferences.version=1

+encoding/<project>=ISO-8859-1

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.runtime.prefs b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..eca65dd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Tue Dec 04 14:46:31 CET 2007

+eclipse.preferences.version=1

+line.separator=\n

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..47b0de7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Aug 14 09:32:14 CEST 2008

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.debug.lineNumber=generate

+org.eclipse.jdt.core.compiler.debug.localVariable=generate

+org.eclipse.jdt.core.compiler.debug.sourceFile=generate

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/bare feature.xml b/plugins/org.eclipse.epp.wizard.war.feature/bare feature.xml
new file mode 100644
index 0000000..3035d46
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/bare feature.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.epp.wizard.war.feature"

+      label="RAP Demo Deployment Feature"

+      version="1.1.0.qualifier"

+      provider-name="eclipse.org">

+

+   <description url="http://www.example.com/description">

+      [Enter Feature Description here.]

+   </description>

+

+   <copyright url="http://www.example.com/copyright">

+      [Enter Copyright Description here.]

+   </copyright>

+

+   <license url="http://www.example.com/license">

+      [Enter License Description here.]

+   </license>

+

+   <plugin

+         id="org.eclipse.core.commands"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.core.contenttype"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.core.jobs"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.core.runtime"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.common"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.http.registry"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.http.servlet"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.http.servletbridge"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.preferences"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.registry"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.osgi"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.osgi.services"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.jface"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.rwt"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.ui.workbench"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.core.expressions"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.equinox.app"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.rwt.q07"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         fragment="true"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.jface.databinding"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.core.databinding"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="com.ibm.icu"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.ui.views"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.update.configurator"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.rap.core.databinding"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build.properties b/plugins/org.eclipse.epp.wizard.war.feature/build.properties
new file mode 100644
index 0000000..82ab19c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/.eclipseproduct b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/.eclipseproduct
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/.eclipseproduct
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/configuration/config.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/configuration/config.ini
new file mode 100644
index 0000000..7874020
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/configuration/config.ini
@@ -0,0 +1,3 @@
+#Eclipse Runtime Configuration File

+osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.rap.ui@4:start, org.eclipse.epp.wizard.kickstarter@5:start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@startosgi.bundles.default

+StartLevel=4

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/features/org.eclipse.epp.wizard.war.feature_1.1.0.200809191530/feature.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/features/org.eclipse.epp.wizard.war.feature_1.1.0.200809191530/feature.xml
new file mode 100644
index 0000000..c85d4db
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/features/org.eclipse.epp.wizard.war.feature_1.1.0.200809191530/feature.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.epp.wizard.war.feature"
+      label="RAP Demo Deployment Feature"
+      version="1.1.0.200809191530"
+      provider-name="eclipse.org">
+
+   <description url="http://www.example.com/description">
+      [Enter Feature Description here.]
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <plugin
+         id="org.eclipse.core.commands"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.I20080509-2000"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.contenttype"
+         download-size="0"
+         install-size="0"
+         version="3.3.0.v20080604-1400"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.jobs"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.v20080512"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.runtime"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.v20080512"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.common"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.v20080421-2006"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.http.registry"
+         download-size="0"
+         install-size="0"
+         version="1.0.100.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.http.servlet"
+         download-size="0"
+         install-size="0"
+         version="1.0.100.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.http.servletbridge"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.preferences"
+         download-size="0"
+         install-size="0"
+         version="3.2.200.v20080421-2006"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.registry"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.v20080516-0950"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.v20080605-1900"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi.services"
+         download-size="0"
+         install-size="0"
+         version="3.1.200.v20071203"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.jface"
+         download-size="0"
+         install-size="0"
+         version="1.1.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.rwt"
+         download-size="0"
+         install-size="0"
+         version="1.1.1.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.ui.workbench"
+         download-size="0"
+         install-size="0"
+         version="1.1.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.expressions"
+         download-size="0"
+         install-size="0"
+         version="3.4.0.v20080603-2000"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.app"
+         download-size="0"
+         install-size="0"
+         version="1.1.0.v20080421-2006"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.ui"
+         download-size="0"
+         install-size="0"
+         version="1.1.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.rwt.q07"
+         download-size="0"
+         install-size="0"
+         version="1.1.1.200809191530"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.databinding"
+         download-size="0"
+         install-size="0"
+         version="1.1.0.I20080527-2000"
+         unpack="false"/>
+
+   <plugin
+         id="com.ibm.icu"
+         download-size="0"
+         install-size="0"
+         version="3.8.1.v20080530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.core"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.metadata"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.v20080514-1900"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.metadata.repository"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.v20080604"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf"
+         download-size="0"
+         install-size="0"
+         version="2.0.0.v20080611-1715"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.filetransfer"
+         download-size="0"
+         install-size="0"
+         version="2.0.0.v20080611-1715"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.identity"
+         download-size="0"
+         install-size="0"
+         version="2.0.0.v20080611-1715"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.provider.filetransfer"
+         download-size="0"
+         install-size="0"
+         version="2.0.0.v20080611-1715"
+         unpack="false"/>
+
+   <plugin
+         id="org.sat4j.core"
+         download-size="0"
+         install-size="0"
+         version="2.0.0.v20080602"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.v20080512-1800"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard.model"
+         download-size="0"
+         install-size="0"
+         version="0.0.1.200809191530"/>
+
+   <plugin
+         id="org.jdom"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard.installerbuilder"
+         download-size="0"
+         install-size="0"
+         version="1.0.0.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.ant"
+         download-size="0"
+         install-size="0"
+         version="1.7.0.v200803061910"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard.kickstarter"
+         download-size="0"
+         install-size="0"
+         version="1.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.update.configurator"
+         download-size="0"
+         install-size="0"
+         version="3.2.200.v20080417"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.servletbridge"
+         download-size="0"
+         install-size="0"
+         version="1.0.100.200809191530"/>
+
+   <plugin
+         id="org.apache.commons.logging"
+         download-size="0"
+         install-size="0"
+         version="1.0.4.200809191530"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.log4j"
+         download-size="0"
+         install-size="0"
+         version="1.2.13.200809191530"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/launch.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/launch.ini
new file mode 100644
index 0000000..17af11d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/launch.ini
@@ -0,0 +1,11 @@
+# Eclipse Runtime Configuration Overrides

+# These properties are loaded prior to starting the framework and can also be used to override System Properties

+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework

+# "*" can be used together with @null to clear System Properties that match a prefix name. 

+

+osgi.*=@null

+org.osgi.*=@null

+eclipse.*=@null

+

+osgi.parentClassloader=app

+osgi.contextClassLoaderParent=app

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar
new file mode 100644
index 0000000..1d8a0a0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.RSA b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.RSA
new file mode 100644
index 0000000..e2cd92a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.RSA
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.SF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.SF
new file mode 100644
index 0000000..6aa1062
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.SF
@@ -0,0 +1,179 @@
+Signature-Version: 1.0

+SHA1-Digest-Manifest: 1iePozeNaYedj3pwNanW8CsYGvw=

+Created-By: 1.5.0 (IBM Corporation)

+SHA1-Digest-Manifest-Main-Attributes: sLr0yW4M0a1ipbNr9eD2tqFGL+A=

+

+Name: lib/ant-apache-bsf.jar

+SHA1-Digest: hQfq5SERvd0ZHo1nnWmGcrUSyY0=

+

+Name: lib/ant-trax.jar

+SHA1-Digest: /3LYBFLrHM28/M8HJQUrJMYtINI=

+

+Name: etc/maudit-frames.xsl

+SHA1-Digest: e4NgLEojZEPMlfb+Rg4oS9YefwI=

+

+Name: bin/lcp.bat

+SHA1-Digest: ht7K8egtl8CXVp+7ajDzNNGufuw=

+

+Name: bin/runrc.cmd

+SHA1-Digest: rvTECv/IAtT0qsW991ycr90KTCk=

+

+Name: etc/jdepend.xsl

+SHA1-Digest: KAs0gH/77sXvTGoslrkcojg4kIA=

+

+Name: bin/antenv.cmd

+SHA1-Digest: shibnxJFfkcuU81dMvU6/cIE1HI=

+

+Name: about_files/LICENSE.sax.txt

+SHA1-Digest: CnKqzCUI0E0NUSlVIAfUd8gctxU=

+

+Name: META-INF/eclipse.inf

+SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=

+

+Name: lib/ant-launcher.jar

+SHA1-Digest: 9B4YrLyaddtZv+NIJAyKzT/Z6k0=

+

+Name: lib/ant-apache-bcel.jar

+SHA1-Digest: 9+29TLOJAd/Jj2vlDO+YpRtJU9w=

+

+Name: lib/ant-antlr.jar

+SHA1-Digest: /ql7BNvec8ByEXwcASXAfuAdwRs=

+

+Name: etc/changelog.xsl

+SHA1-Digest: 28VXChLI6W894ez54gbFuV9IsZw=

+

+Name: etc/jdepend-frames.xsl

+SHA1-Digest: i9wZDIiOsZKs2U5TVLNKxIeBMZA=

+

+Name: lib/ant-starteam.jar

+SHA1-Digest: Ym5KP+2A+Lv/5p7odBUr6pT9psw=

+

+Name: about.html

+SHA1-Digest: e3HTMcpkKpSD9bcIsM/rxHFlD2Y=

+

+Name: lib/ant-jai.jar

+SHA1-Digest: YfmZyOIeT7RGgSNUGvRsi6MWuuE=

+

+Name: lib/ant-junit.jar

+SHA1-Digest: oBdtwGu+dnG1qfSQwoHGGLedxw0=

+

+Name: lib/ant-swing.jar

+SHA1-Digest: ifq7a9qUlYlTMBHfXBMxRkqGTh4=

+

+Name: lib/ant-apache-log4j.jar

+SHA1-Digest: klk8wOlr5gmxXrXuOKYyJj025Z0=

+

+Name: bin/ant

+SHA1-Digest: Qyg1i/x7ZcY/p/Qr0WeJ7P4lKHo=

+

+Name: bin/ant.cmd

+SHA1-Digest: 5ozb0JpMH7EoCdFAAb4/pJ/+QRM=

+

+Name: lib/ant-commons-net.jar

+SHA1-Digest: HJuYsYtSgFYwac6oA0NO8AnFCLw=

+

+Name: lib/ant-jsch.jar

+SHA1-Digest: 9qiI7gQSLwMaWT8dqlh9A71PCqQ=

+

+Name: lib/ant-netrexx.jar

+SHA1-Digest: vU/K2kE6qvq/LI0fK0BexEoJR3Q=

+

+Name: etc/checkstyle/checkstyle-text.xsl

+SHA1-Digest: hKiB6TIqYGZ3zfBT8Jceh3rSsIs=

+

+Name: lib/ant-jdepend.jar

+SHA1-Digest: mmDcluY7lsEYIdnw0p/CmwYLTFo=

+

+Name: lib/ant-stylebook.jar

+SHA1-Digest: vsk+ORb4UuyvvuaU5l4Uu/yzbmM=

+

+Name: about_files/NOTICE

+SHA1-Digest: hjhewkratrRFsF9j9NjgMJh0LVM=

+

+Name: etc/coverage-frames.xsl

+SHA1-Digest: 3tYfA3HsFpHXH76TOY1OD8U9TI8=

+

+Name: lib/ant-nodeps.jar

+SHA1-Digest: 9/v6IChWlOo4/fEVWZqCMf6lYU4=

+

+Name: bin/complete-ant-cmd.pl

+SHA1-Digest: qVFTRrqziNcZLUyMnCAgcr4SI04=

+

+Name: about_files/LICENSE.dom.html

+SHA1-Digest: xK0He1PkoQXdHC48ROEqZRNXTL4=

+

+Name: etc/tagdiff.xsl

+SHA1-Digest: X2Mck00J8K5RQTZEnDdBbpsTqXw=

+

+Name: etc/junit-frames.xsl

+SHA1-Digest: 0sVZ2Q5jpuuVNzqQ1WuuzzzycPo=

+

+Name: lib/ant-weblogic.jar

+SHA1-Digest: W/tLpvUl5/E1pp4hJTFTUgZJbnU=

+

+Name: lib/ant-jmf.jar

+SHA1-Digest: 6MH3l709oYnaxoYWWVQACWmTihI=

+

+Name: bin/ant.bat

+SHA1-Digest: Cu2gJzPViS+ab1UsyOjXD5iu+2Y=

+

+Name: plugin.properties

+SHA1-Digest: zYa9huK4G27wnS7xZt6UxArDy80=

+

+Name: etc/checkstyle/checkstyle-xdoc.xsl

+SHA1-Digest: zeO0EeZnwDCV9iVCKfpcnHpcuy4=

+

+Name: lib/ant.jar

+SHA1-Digest: bd0SsHhtAdWP7SwZu7bA6V9iBH8=

+

+Name: lib/ant-javamail.jar

+SHA1-Digest: jdP1khRToEcEk9UNKnrN5wmawHY=

+

+Name: lib/ant-apache-resolver.jar

+SHA1-Digest: LQ/3HXoqUyvQXbp+60FYfizCPqY=

+

+Name: bin/antRun

+SHA1-Digest: 1hZvmZPZ+eZ/sTSIu6/doEfJOyg=

+

+Name: bin/envset.cmd

+SHA1-Digest: 2SicCx0q9QaS8alBCFmBkz6Sm8E=

+

+Name: bin/antRun.pl

+SHA1-Digest: azu4U4NaWUSQWNSb5a5EooQQ6D0=

+

+Name: etc/mmetrics-frames.xsl

+SHA1-Digest: YiWiKi6R1TwSM10uOnBAwLL8oHc=

+

+Name: etc/checkstyle/checkstyle-frames.xsl

+SHA1-Digest: qJOZwLZJwFL+bcITcY38iZgE4dU=

+

+Name: lib/ant-apache-oro.jar

+SHA1-Digest: C+2kMMPZceQiJZalESuu2TqvzLk=

+

+Name: bin/antRun.bat

+SHA1-Digest: 9saks5drsyGIx9eOSn4WD095J+4=

+

+Name: etc/junit-noframes.xsl

+SHA1-Digest: b487cHUaG4THhSYl4sLXDLWGywE=

+

+Name: bin/runant.pl

+SHA1-Digest: oStMMfwbLjoDNhIpO3Un4en43ow=

+

+Name: about_files/asl-v20.txt

+SHA1-Digest: pJO0L/tUizs1vz2W9gV2VmGJsDs=

+

+Name: etc/junit-frames-xalan1.xsl

+SHA1-Digest: VRPo84XRIwm0CcYp0cINVfMEC0E=

+

+Name: etc/log.xsl

+SHA1-Digest: 6OiMllDnscwJUI2k32C8mYSiJH0=

+

+Name: lib/ant-commons-logging.jar

+SHA1-Digest: rGx32tHSaaq5GOz82V0Ig3Vi1+U=

+

+Name: lib/ant-apache-regexp.jar

+SHA1-Digest: Hlb3OGMu5wkDW1wzVWlc5J7UPrY=

+

+Name: bin/runant.py

+SHA1-Digest: o3lgIOKhYBh3OX9nN19wGiPkFIU=

+

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..431e500
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/MANIFEST.MF
@@ -0,0 +1,234 @@
+Manifest-Version: 1.0

+Bundle-RequiredExecutionEnvironment: J2SE-1.2

+Bundle-SymbolicName: org.apache.ant

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-Localization: plugin

+Bundle-Version: 1.7.0.v200803061910

+Bundle-ClassPath: lib/ant.jar,lib/ant-antlr.jar,lib/ant-apache-bcel.ja

+ r,lib/ant-apache-bsf.jar,lib/ant-apache-log4j.jar,lib/ant-apache-oro.

+ jar,lib/ant-apache-regexp.jar,lib/ant-apache-resolver.jar,lib/ant-com

+ mons-logging.jar,lib/ant-commons-net.jar,lib/ant-jai.jar,lib/ant-java

+ mail.jar,lib/ant-jdepend.jar,lib/ant-jmf.jar,lib/ant-jsch.jar,lib/ant

+ -junit.jar,lib/ant-launcher.jar,lib/ant-netrexx.jar,lib/ant-nodeps.ja

+ r,lib/ant-starteam.jar,lib/ant-stylebook.jar,lib/ant-swing.jar,lib/an

+ t-trax.jar,lib/ant-weblogic.jar

+Bundle-Vendor: %providerName

+Export-Package: images,org.apache.tools.ant,org.apache.tools.ant.dispa

+ tch,org.apache.tools.ant.filters,org.apache.tools.ant.filters.util,or

+ g.apache.tools.ant.helper,org.apache.tools.ant.input,org.apache.tools

+ .ant.launch,org.apache.tools.ant.listener,org.apache.tools.ant.loader

+ ,org.apache.tools.ant.taskdefs,org.apache.tools.ant.taskdefs.compiler

+ s,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.taskde

+ fs.cvslib,org.apache.tools.ant.taskdefs.email,org.apache.tools.ant.ta

+ skdefs.optional,org.apache.tools.ant.taskdefs.optional.ccm,org.apache

+ .tools.ant.taskdefs.optional.clearcase,org.apache.tools.ant.taskdefs.

+ optional.depend,org.apache.tools.ant.taskdefs.optional.depend.constan

+ tpool,org.apache.tools.ant.taskdefs.optional.dotnet,org.apache.tools.

+ ant.taskdefs.optional.ejb,org.apache.tools.ant.taskdefs.optional.exte

+ nsion,org.apache.tools.ant.taskdefs.optional.extension.resolvers,org.

+ apache.tools.ant.taskdefs.optional.i18n,org.apache.tools.ant.taskdefs

+ .optional.image,org.apache.tools.ant.taskdefs.optional.j2ee,org.apach

+ e.tools.ant.taskdefs.optional.javacc,org.apache.tools.ant.taskdefs.op

+ tional.javah,org.apache.tools.ant.taskdefs.optional.jdepend,org.apach

+ e.tools.ant.taskdefs.optional.jlink,org.apache.tools.ant.taskdefs.opt

+ ional.jsp,org.apache.tools.ant.taskdefs.optional.jsp.compilers,org.ap

+ ache.tools.ant.taskdefs.optional.junit,org.apache.tools.ant.taskdefs.

+ optional.junit.xsl,org.apache.tools.ant.taskdefs.optional.native2asci

+ i,org.apache.tools.ant.taskdefs.optional.net,org.apache.tools.ant.tas

+ kdefs.optional.perforce,org.apache.tools.ant.taskdefs.optional.pvcs,o

+ rg.apache.tools.ant.taskdefs.optional.scm,org.apache.tools.ant.taskde

+ fs.optional.script,org.apache.tools.ant.taskdefs.optional.sos,org.apa

+ che.tools.ant.taskdefs.optional.sound,org.apache.tools.ant.taskdefs.o

+ ptional.splash,org.apache.tools.ant.taskdefs.optional.ssh,org.apache.

+ tools.ant.taskdefs.optional.starteam,org.apache.tools.ant.taskdefs.op

+ tional.unix,org.apache.tools.ant.taskdefs.optional.vss,org.apache.too

+ ls.ant.taskdefs.optional.windows,org.apache.tools.ant.taskdefs.rmic,o

+ rg.apache.tools.ant.types,org.apache.tools.ant.types.conditions,org.a

+ pache.tools.ant.types.mappers,org.apache.tools.ant.types.optional,org

+ .apache.tools.ant.types.optional.depend,org.apache.tools.ant.types.op

+ tional.image,org.apache.tools.ant.types.resolver,org.apache.tools.ant

+ .types.resources,org.apache.tools.ant.types.resources.comparators,org

+ .apache.tools.ant.types.resources.selectors,org.apache.tools.ant.type

+ s.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org

+ .apache.tools.ant.types.spi,org.apache.tools.ant.util,org.apache.tool

+ s.ant.util.depend,org.apache.tools.ant.util.depend.bcel,org.apache.to

+ ols.ant.util.facade,org.apache.tools.ant.util.java15,org.apache.tools

+ .ant.util.optional,org.apache.tools.ant.util.regexp,org.apache.tools.

+ bzip2,org.apache.tools.mail,org.apache.tools.tar,org.apache.tools.zip

+Require-Bundle: org.eclipse.osgi

+

+Name: lib/ant-apache-bsf.jar

+SHA1-Digest: cLbTh5sinbLWGWUDCS84n0i2a0E=

+

+Name: lib/ant-trax.jar

+SHA1-Digest: 3HKcsIRJKPlrfuIaJUDOtGEndrg=

+

+Name: etc/maudit-frames.xsl

+SHA1-Digest: BIZGVBGe+t+oL7NBTtnF6SSR2UI=

+

+Name: bin/lcp.bat

+SHA1-Digest: tVZ9b7fPb0VxK6VtxdbHL/Snslc=

+

+Name: bin/runrc.cmd

+SHA1-Digest: tEBZS6nXZrF77Q5oOO0NyffnU28=

+

+Name: etc/jdepend.xsl

+SHA1-Digest: OMznHreSkSUr+5YOtNAlZZLjZWQ=

+

+Name: bin/antenv.cmd

+SHA1-Digest: 2NIxw+ojKZeK7CNeLtrR7kFNG2E=

+

+Name: about_files/LICENSE.sax.txt

+SHA1-Digest: uLnQn2qwT77aJ6MThuLeWz1I5ek=

+

+Name: META-INF/eclipse.inf

+SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=

+

+Name: lib/ant-launcher.jar

+SHA1-Digest: GPILSOan10oQR0XsnIUpAkN3hW8=

+

+Name: lib/ant-apache-bcel.jar

+SHA1-Digest: 249vQWKFKUpoY2wsy/gVYRVQA9Y=

+

+Name: lib/ant-antlr.jar

+SHA1-Digest: sUjnJ2scpExnqFt7w3wTrxPBzMw=

+

+Name: etc/changelog.xsl

+SHA1-Digest: qhlQEgDDZI8YGnD/Lo/OLLdpwE4=

+

+Name: etc/jdepend-frames.xsl

+SHA1-Digest: ziSyDJrI6CYzulVP7xbFuMAk62w=

+

+Name: lib/ant-starteam.jar

+SHA1-Digest: /E3ouEPkRPL3WBvefzGRsck5lmc=

+

+Name: about.html

+SHA1-Digest: N0elfKP7uYuYLATOh5XaE1P3nXI=

+

+Name: lib/ant-jai.jar

+SHA1-Digest: MamtbKiOfCYyaKLBsNuL7HdasTA=

+

+Name: lib/ant-junit.jar

+SHA1-Digest: vKM3lSYbY8hlxKv/eh48EzoMr4s=

+

+Name: lib/ant-swing.jar

+SHA1-Digest: h89jil3YSxk/sLy8HZubQDaqZZA=

+

+Name: lib/ant-apache-log4j.jar

+SHA1-Digest: yo4BWxFzGJvFGlwAa9+lqooG+iE=

+

+Name: bin/ant

+SHA1-Digest: 1hZ7I8ryxuQA8ffu95k409JSpxM=

+

+Name: bin/ant.cmd

+SHA1-Digest: YDWS/zHHaPn0kEZm/Az4+vJLzKI=

+

+Name: lib/ant-commons-net.jar

+SHA1-Digest: cW0crWNYgqgbNuezMwOUzY9ysfY=

+

+Name: lib/ant-jsch.jar

+SHA1-Digest: 2cWHrQfYXqJ6Ox5ESC+vnLUmKTQ=

+

+Name: lib/ant-netrexx.jar

+SHA1-Digest: L+voULB0JY9SHKXVQJ1LDHn7bUI=

+

+Name: etc/checkstyle/checkstyle-text.xsl

+SHA1-Digest: v7HDzjT8VIMoo9nbczMpQ4R89OA=

+

+Name: lib/ant-jdepend.jar

+SHA1-Digest: l8MtENBefa2/Xp24qA+J9a93YIM=

+

+Name: lib/ant-stylebook.jar

+SHA1-Digest: uQZ41IjyE1tK965YSxsqP+jqK0c=

+

+Name: about_files/NOTICE

+SHA1-Digest: Mu3gQHJl963VZJ+BCE906ZAhmXY=

+

+Name: etc/coverage-frames.xsl

+SHA1-Digest: CuWmV380G7/H3FRwPp+feAg9d7E=

+

+Name: lib/ant-nodeps.jar

+SHA1-Digest: o5euDnSx3TKUufdhqOcdd85RM20=

+

+Name: bin/complete-ant-cmd.pl

+SHA1-Digest: u8SyqqLh5SyqEPe8brM/glCglQo=

+

+Name: about_files/LICENSE.dom.html

+SHA1-Digest: 9F8cZaCgriCte0T6Mt5hAFumadk=

+

+Name: etc/tagdiff.xsl

+SHA1-Digest: QvXTkg9jgfgCMbm/Idqk/uNf4dI=

+

+Name: etc/junit-frames.xsl

+SHA1-Digest: wSBQFHcXT1XjHPWfk41j8XH1qeQ=

+

+Name: lib/ant-weblogic.jar

+SHA1-Digest: J6F+0H7fONfNWUCwSqb+7IK3Rkc=

+

+Name: lib/ant-jmf.jar

+SHA1-Digest: NGPXYqQRsREHJe8qsEyPAg2RUAM=

+

+Name: bin/ant.bat

+SHA1-Digest: p0LkZEyD/pMRF8Uo9Hxte58B9dI=

+

+Name: plugin.properties

+SHA1-Digest: iQO3hlGZf45g3Y7ajtCmCUjMq30=

+

+Name: etc/checkstyle/checkstyle-xdoc.xsl

+SHA1-Digest: Zkz4ykfgxadN8RCiCtVrI46bzu4=

+

+Name: lib/ant.jar

+SHA1-Digest: AyMypsce7YssTu3t0qKPuArssCw=

+

+Name: lib/ant-javamail.jar

+SHA1-Digest: EYOAc6WEA+Pj8MPPoa1W8neE1DQ=

+

+Name: lib/ant-apache-resolver.jar

+SHA1-Digest: /bhh3PxZKpcm4EmiQRsOw81aHlI=

+

+Name: bin/antRun

+SHA1-Digest: HXlDrtLiLYQs4XkPbksH6PzmiQ4=

+

+Name: bin/envset.cmd

+SHA1-Digest: nJW9gBVUQczlMJmAog4nH2yNp98=

+

+Name: bin/antRun.pl

+SHA1-Digest: 1ZjEo56V249cfnPSBpzjYNRTLys=

+

+Name: etc/mmetrics-frames.xsl

+SHA1-Digest: +ueQIFM6aBe6Ifc8PrZ7F4Migyk=

+

+Name: etc/checkstyle/checkstyle-frames.xsl

+SHA1-Digest: aeITXtUk9Yia5TTVXOd6qfMmPTM=

+

+Name: lib/ant-apache-oro.jar

+SHA1-Digest: WJ++owyMbcVbY3kBJgq2oNNGsCU=

+

+Name: bin/antRun.bat

+SHA1-Digest: d765puLLhb82dE5NC5YNCn6DpeA=

+

+Name: etc/junit-noframes.xsl

+SHA1-Digest: 8O4YCYnt5a6gbrMsIigvW/4GV4g=

+

+Name: bin/runant.pl

+SHA1-Digest: RPsWXDGHzbNBGD/i6pTGtQFJ6oY=

+

+Name: about_files/asl-v20.txt

+SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=

+

+Name: etc/junit-frames-xalan1.xsl

+SHA1-Digest: blbb8jE6V2zTzRGjvVaXL5fPicM=

+

+Name: etc/log.xsl

+SHA1-Digest: ulVeGl+WSkbjGbHF7LGA8Csuh/0=

+

+Name: lib/ant-commons-logging.jar

+SHA1-Digest: Vvp4W/tusjWem5gN4Y1cMVAJGck=

+

+Name: lib/ant-apache-regexp.jar

+SHA1-Digest: HQscc3xTxU2HKsoh8YlyUPpsr/Q=

+

+Name: bin/runant.py

+SHA1-Digest: ptbC0mx7ZARrg/FG64aqqikvS2A=

+

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/eclipse.inf b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/eclipse.inf
new file mode 100644
index 0000000..68d6fa9
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/eclipse.inf
@@ -0,0 +1,4 @@
+#Processed using Jarprocessor
+jarprocessor.exclude.children.sign = true
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about.html b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about.html
new file mode 100644
index 0000000..29d484e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 7, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for 
+terms and conditions of use.</p>
+
+<h4>Ant 1.7.0</h4>
+<p>The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.</p>
+
+<p>Your use of the Ant code subject to the terms and conditions of the Apache License, Version 2.0.  A copy of the license is contained
+in the file <a href="about_files/asl-v20.txt" target="_blank">asl-v20.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Ant includes the following software:</p>
+
+<blockquote>
+	<h4>DOM</h4>
+	<p>DOM is developed by the World Wide Web Consortium.  Your use of DOM is subject to the terms and conditions of the license found in the
+	file <a href="about_files/LICENSE.dom.html" target="_blank">LICENSE.dom.html</a> which is included with this plug-in and can also be found at
+	<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720" target="_blank">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>.</p>
+	
+	<h4>SAX</h4>
+	
+	<p>SAX is developed by the SAX project (<a href="http://www.saxproject.org" target="_blank">http://www.saxproject.org</a>).  Your use of SAX is subject to the
+	terms and conditions of the license found in the file <a href="about_files/LICENSE.sax.txt" target="_blank">LICENSE.sax.txt</a> which is included with this plug-in.</p>
+</blockquote>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.dom.html b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.dom.html
new file mode 100644
index 0000000..97e7898
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.dom.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>License</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<p>This license came from:<br>
+<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a></p>
+
+<p>
+W3C® SOFTWARE NOTICE AND LICENSE<br>
+Copyright © 1994-2001 <a href="http://www.w3.org/">World Wide Web Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts Institute of Technology</a>, 
+<a href="http://www.inria.fr/">Institut National de Recherche en Informatique et en Automatique</a>, <a href="http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved.<br>
+<a href="http://www.w3.org/Consortium/Legal/">http://www.w3.org/Consortium/Legal/</a></p>
+
+<p>
+This W3C work (including software, documents, or other related<br>
+items) is being provided by the copyright holders under the<br>
+following license. By obtaining, using and/or copying this work,<br>
+you (the licensee) agree that you have read, understood, and will<br>
+comply with the following terms and conditions:<br>
+Permission to use, copy, modify, and distribute this software<br>
+and its documentation, with or without modification, for any<br>
+purpose and without fee or royalty is hereby granted, provided that<br>
+you include the following on ALL copies of the software and<br>
+documentation or portions thereof, including modifications, that<br>
+you make:</p>
+
+<p>
+The full text of this NOTICE in a location viewable to users of<br>
+the redistributed or derivative work.</p>
+
+<p>
+Any pre-existing intellectual property disclaimers, notices, or<br>
+terms and conditions. If none exist, a short notice of the<br>
+following form (hypertext is preferred, text is permitted) should<br>
+be used within the body of any redistributed or derivative code:<br>
+"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of<br>
+Technology, Institut National de<br>
+Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.<br>
+http://www.w3.org/Consortium/Legal/"</p>
+
+<p>
+Notice of any changes or modifications to the W3C files,<br>
+including the date changes were made. (We recommend you provide <br>
+URIs to the location from which the code is derived.)</p>
+
+<p>
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND<br>
+COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR<br>
+IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF<br>
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE<br>
+USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD<br>
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.<br>
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,<br>
+SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE<br>
+SOFTWARE OR DOCUMENTATION.</p>
+
+<p>
+The name and trademarks of copyright holders may NOT be used in<br>
+advertising or publicity pertaining to the software without<br>
+specific, written prior permission. Title to copyright in this<br>
+software and any associated documentation will at all times remain<br>
+with copyright holders.</p>
+
+<p>
+____________________________________<br>
+This formulation of W3C's notice and license became active on<br>
+August 14 1998 so as to improve compatibility with GPL. This<br>
+version ensures that W3C software licensing terms are no more<br>
+restrictive than GPL and consequently W3C software may be<br>
+distributed in GPL packages. See the older formulation for the<br>
+policy prior to this date. Please see our Copyright FAQ for common <br>
+questions about using materials from<br>
+our site, including specific terms and conditions for packages like<br>
+libwww, Amaya, and Jigsaw. <br>
+Other questions about this notice can be<br>
+directed to site-policy@w3.org.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.sax.txt b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.sax.txt
new file mode 100644
index 0000000..d46b3dc
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.sax.txt
@@ -0,0 +1,20 @@
+This license came from: http://www.megginson.com/SAX/copying.html
+  However please note future versions of SAX may be covered 
+  under http://saxproject.org/?selected=pd
+
+
+This page is now out of date -- see the new SAX site at 
+http://www.saxproject.org/ for more up-to-date
+releases and other information. Please change your bookmarks.
+
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/NOTICE b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/NOTICE
new file mode 100644
index 0000000..1fb6dde
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/NOTICE
@@ -0,0 +1,15 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Ant distribution.                      ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   This product includes also software developed by :
+     - the W3C consortium (http://www.w3c.org) ,
+     - the SAX project (http://www.saxproject.org)
+
+   Please read the different LICENSE files present in the root directory of
+   this distribution.
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/asl-v20.txt b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/asl-v20.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/asl-v20.txt
@@ -0,0 +1,202 @@
+
+                                 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/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant
new file mode 100644
index 0000000..cf336db
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant
@@ -0,0 +1,299 @@
+#! /bin/sh
+
+#   Copyright 2001-2005 The Apache Software Foundation
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+
+# Extract launch and ant arguments, (see details below).
+ant_exec_args=
+no_config=false
+use_jikes_default=false
+ant_exec_debug=false
+show_help=false
+for arg in "$@" ; do
+  if [ "$arg" = "--noconfig" ] ; then
+    no_config=true
+  elif [ "$arg" = "--usejikes" ] ; then
+    use_jikes_default=true
+  elif [ "$arg" = "--execdebug" ] ; then
+    ant_exec_debug=true
+  elif [ my"$arg" = my"--h"  -o my"$arg" = my"--help"  ] ; then
+    show_help=true
+    ant_exec_args="$ant_exec_args -h"
+  else
+    if [  my"$arg" = my"-h"  -o  my"$arg" = my"-help" ] ; then
+      show_help=true
+    fi
+    ant_exec_args="$ant_exec_args \"$arg\""
+  fi
+done
+
+# Source/default ant configuration
+if $no_config ; then
+  rpm_mode=false
+  usejikes=$use_jikes_default
+else
+  # load system-wide ant configuration
+  if [ -f "/etc/ant.conf" ] ; then
+    . /etc/ant.conf
+  fi
+
+  # load user ant configuration
+  if [ -f "$HOME/.ant/ant.conf" ] ; then
+    . $HOME/.ant/ant.conf
+  fi
+  if [ -f "$HOME/.antrc" ] ; then
+    . "$HOME/.antrc"
+  fi
+
+  # provide default configuration values
+  if [ -z "$rpm_mode" ] ; then
+    rpm_mode=false
+  fi
+  if [ -z "$usejikes" ] ; then
+    usejikes=$use_jikes_default
+  fi
+fi
+
+# Setup Java environment in rpm mode
+if $rpm_mode ; then
+  if [ -f /usr/share/java-utils/java-functions ] ; then
+    . /usr/share/java-utils/java-functions
+    set_jvm
+    set_javacmd
+  fi
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  Darwin*) darwin=true
+           if [ -z "$JAVA_HOME" ] ; then
+             JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
+           fi
+           ;;
+esac
+
+if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
+  ## resolve links - $0 may be a link to ant's home
+  PRG="$0"
+  progname=`basename "$0"`
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+    PRG="$link"
+    else
+    PRG=`dirname "$PRG"`"/$link"
+    fi
+  done
+
+  ANT_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  ANT_HOME=`cd "$ANT_HOME" && pwd`
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$ANT_HOME" ] &&
+    ANT_HOME=`cygpath --unix "$ANT_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# set ANT_LIB location
+ANT_LIB="${ANT_HOME}/lib"
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD=`which java 2> /dev/null `
+    if [ -z "$JAVACMD" ] ; then
+        JAVACMD=java
+    fi
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly."
+  echo "  We cannot execute $JAVACMD"
+  exit 1
+fi
+
+# Build local classpath using just the launcher in non-rpm mode or
+# use the Jpackage helper in rpm mode with basic and default jars
+# specified in the ant.conf configuration. Because the launcher is
+# used, libraries linked in ANT_HOME will also be include, but this
+# is discouraged as it is not java-version safe. A user should
+# request optional jars and their dependencies via the OPT_JAR_LIST
+# variable
+if $rpm_mode && [ -f /usr/bin/build-classpath ] ; then
+  LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
+  # If the user requested to try to add some other jars to the classpath
+  if [ -n "$OPT_JAR_LIST" ] ; then
+    _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
+    if [ -n "$_OPTCLASSPATH" ] ; then 
+      LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
+    fi
+  fi
+
+  # Explicitly add javac path to classpath, assume JAVA_HOME set
+  # properly in rpm mode
+  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
+    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
+  fi
+  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
+    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
+  fi
+
+  # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
+  # user CLASSPATH first and ant-found jars after.
+  # In that case, the user CLASSPATH will override ant-found jars
+  #
+  # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
+  # with ant-found jars first and user CLASSPATH after
+  if [ -n "$CLASSPATH" ] ; then
+    # merge local and specified classpath 
+    if [ -z "$LOCALCLASSPATH" ] ; then 
+      LOCALCLASSPATH="$CLASSPATH"
+    elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
+      LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
+    else
+      LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
+    fi
+
+    # remove class path from launcher -cp option
+    CLASSPATH=""
+  fi
+else
+  # not using rpm_mode; use launcher to determine classpaths
+  if [ -z "$LOCALCLASSPATH" ] ; then
+      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
+  else
+      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
+  fi
+fi
+
+if [ -n "$JAVA_HOME" ] ; then
+  # OSX hack to make Ant work with jikes
+  if $darwin ; then
+    OSXHACK="${JAVA_HOME}/../Classes"
+    if [ -d "${OSXHACK}" ] ; then
+      for i in "${OSXHACK}"/*.jar
+      do
+        JIKESPATH="$JIKESPATH:$i"
+      done
+    fi
+  fi
+fi
+
+# Allow Jikes support (off by default)
+if $usejikes; then
+  ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
+fi
+
+# For Cygwin, switch paths to appropriate format before running java
+# For PATHs convert to unix format first, then to windows format to ensure
+# both formats are supported. Probably this will fail on directories with ;
+# in the name in the path. Let's assume that paths containing ; are more
+# rare than windows style paths on cygwin.
+if $cygwin; then
+  if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
+    format=mixed
+  else
+    format=windows
+  fi
+  ANT_HOME=`cygpath --$format "$ANT_HOME"`
+  ANT_LIB=`cygpath --$format "$ANT_LIB"`
+  JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
+  LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
+  LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
+  if [ -n "$CLASSPATH" ] ; then
+    CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
+    CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
+  fi
+  CYGHOME=`cygpath --$format "$HOME"`
+fi
+
+# Show script help if requested
+if $show_help ; then
+  echo $0 '[script options] [options] [target [target2 [target3] ..]]'
+  echo 'Script Options:'
+  echo '  --help, --h            print this message and ant help'
+  echo '  --noconfig             suppress sourcing of /etc/ant.conf,'
+  echo '                         $HOME/.ant/ant.conf, and $HOME/.antrc'
+  echo '                         configuration files'
+  echo '  --usejikes             enable use of jikes by default, unless'
+  echo '                         set explicitly in configuration files'
+  echo '  --execdebug            print ant exec line generated by this'
+  echo '                         launch script'
+  echo '  '
+fi
+# add a second backslash to variables terminated by a backslash under cygwin
+if $cygwin; then
+  case "$ANT_HOME" in
+    *\\ )
+    ANT_HOME="$ANT_HOME\\"
+    ;;
+  esac
+  case "$CYGHOME" in
+    *\\ )
+    CYGHOME="$CYGHOME\\"
+    ;;
+  esac
+  case "$JIKESPATH" in
+    *\\ )
+    JIKESPATH="$JIKESPATH\\"
+    ;;
+  esac
+  case "$LOCALCLASSPATH" in
+    *\\ )
+    LOCALCLASSPATH="$LOCALCLASSPATH\\"
+    ;;
+  esac
+  case "$CLASSPATH" in
+    *\\ )
+    CLASSPATH="$CLASSPATH\\"
+    ;;
+  esac
+fi
+# Execute ant using eval/exec to preserve spaces in paths,
+# java options, and ant args
+ant_sys_opts=
+if [ -n "$CYGHOME" ]; then
+  if [ -n "$JIKESPATH" ]; then
+    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
+  else
+    ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
+  fi
+else
+  if [ -n "$JIKESPATH" ]; then
+    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
+  fi
+fi
+ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\" $ant_exec_args"
+if $ant_exec_debug ; then
+    echo $ant_exec_command
+fi
+eval $ant_exec_command
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.bat b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.bat
new file mode 100644
index 0000000..e2dafab
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.bat
@@ -0,0 +1,126 @@
+@echo off
+
+REM  Copyright 2001,2004-2005 The Apache Software Foundation
+REM
+REM  Licensed under the Apache License, Version 2.0 (the "License");
+REM  you may not use this file except in compliance with the License.
+REM  You may obtain a copy of the License at
+REM
+REM      http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM  Unless required by applicable law or agreed to in writing, software
+REM  distributed under the License is distributed on an "AS IS" BASIS,
+REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM  See the License for the specific language governing permissions and
+REM  limitations under the License.
+
+if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
+
+if "%OS%"=="Windows_NT" @setlocal
+if "%OS%"=="WINNT" @setlocal
+
+rem %~dp0 is expanded pathname of the current script under NT
+set DEFAULT_ANT_HOME=%~dp0..
+
+if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
+set DEFAULT_ANT_HOME=
+
+set _USE_CLASSPATH=yes
+
+rem Slurp the command line arguments. This loop allows for an unlimited number
+rem of arguments (up to the command line limit, anyway).
+set ANT_CMD_LINE_ARGS=%1
+if ""%1""=="""" goto doneStart
+shift
+:setupArgs
+if ""%1""=="""" goto doneStart
+if ""%1""==""-noclasspath"" goto clearclasspath
+set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
+shift
+goto setupArgs
+
+rem here is there is a -noclasspath in the options
+:clearclasspath
+set _USE_CLASSPATH=no
+shift
+goto setupArgs
+
+rem This label provides a place for the argument list loop to break out
+rem and for NT handling to skip to.
+
+:doneStart
+rem find ANT_HOME if it does not exist due to either an invalid value passed
+rem by the user or the %0 problem on Windows 9x
+if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
+
+rem check for ant in Program Files
+if not exist "%ProgramFiles%\ant" goto checkSystemDrive
+set ANT_HOME=%ProgramFiles%\ant
+goto checkJava
+
+:checkSystemDrive
+rem check for ant in root directory of system drive
+if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
+set ANT_HOME=%SystemDrive%\ant
+goto checkJava
+
+:checkCDrive
+rem check for ant in C:\ant for Win9X users
+if not exist C:\ant\lib\ant.jar goto noAntHome
+set ANT_HOME=C:\ant
+goto checkJava
+
+:noAntHome
+echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
+goto end
+
+:checkJava
+set _JAVACMD=%JAVACMD%
+
+if "%JAVA_HOME%" == "" goto noJavaHome
+if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
+if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
+goto checkJikes
+
+:noJavaHome
+if "%_JAVACMD%" == "" set _JAVACMD=java.exe
+
+:checkJikes
+if not "%JIKESPATH%"=="" goto runAntWithJikes
+
+:runAnt
+if "%_USE_CLASSPATH%"=="no" goto runAntNoClasspath
+if not "%CLASSPATH%"=="" goto runAntWithClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntNoClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntWithClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntWithJikes
+if "%_USE_CLASSPATH%"=="no" goto runAntWithJikesNoClasspath
+if not "%CLASSPATH%"=="" goto runAntWithJikesAndClasspath
+
+:runAntWithJikesNoClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntWithJikesAndClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS%  -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
+goto end
+
+:end
+set _JAVACMD=
+set ANT_CMD_LINE_ARGS=
+
+if "%OS%"=="Windows_NT" @endlocal
+if "%OS%"=="WINNT" @endlocal
+
+:mainEnd
+if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.cmd
new file mode 100644
index 0000000..4bb903f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.cmd
@@ -0,0 +1,92 @@
+/* 
+    Copyright 2003-2004 The Apache Software Foundation
+  
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+  
+        http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+ 
+    Run ant
+*/
+
+'@echo off'
+parse arg mode envarg '::' antarg
+
+if mode\='.' & mode\='..' & mode\='/' then do
+  envarg = mode envarg
+  mode = ''
+end
+
+if antarg = '' then do
+  antarg = envarg
+  envarg = ''
+end
+
+x = setlocal()
+
+env="OS2ENVIRONMENT"
+antenv = _getenv_('antenv')
+if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"'
+
+if mode = '' then mode = _getenv_('ANT_MODE' '..')
+if mode \= '/' then do
+  runrc = _getenv_('runrc')
+  antrc = _getenv_('antrc' 'antrc.cmd')
+  if mode = '..' then mode = '-r'
+  else mode = ''
+  interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
+end
+
+if _testenv_() = 0 then do
+  say 'Ant environment is not set properly'
+  x = endlocal()
+  exit 16
+end
+
+settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME
+
+java = _getenv_('javacmd' 'java')
+opts = value('ANT_OPTS',,env)
+args = value('ANT_ARGS',,env)
+lcp = value('LOCALCLASSPATH',,env)
+cp = value('CLASSPATH',,env)
+if value('ANT_USE_CP',,env) \= '' then do
+  if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';'
+  lcp = lcp || cp
+  'SET CLASSPATH='
+end
+if lcp\='' then lcp = '-classpath' lcp
+
+cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg
+launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists')
+if launcher = '' then entry = 'org.apache.tools.ant.Main'
+else entry = 'org.apache.tools.ant.launch.Launcher'
+java opts lcp entry settings args antarg
+
+x = endlocal()
+
+return rc
+
+_testenv_: procedure expose env ANT_HOME JAVA_HOME
+ANT_HOME = value('ANT_HOME',,env)
+if ANT_HOME = '' then return 0
+JAVA_HOME = value('JAVA_HOME',,env)
+if JAVA_HOME = '' then return 0
+cp = translate(value('CLASSPATH',,env))
+if pos(translate(ANT_HOME), cp) = 0 then return 0
+if pos(translate(JAVA_HOME), cp) = 0 then return 0
+return 1
+
+_getenv_: procedure expose env
+parse arg envar default
+if default = '' then default = envar
+var = value(translate(envar),,env)
+if var = '' then var = default
+return var
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun
new file mode 100644
index 0000000..baddd71
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+#
+#  Copyright  2001-2002,2004 The Apache Software Foundation
+# 
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+# 
+#       http://www.apache.org/licenses/LICENSE-2.0
+# 
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+# 
+#
+
+# Args: DIR command
+cd "$1"
+CMD="$2"
+shift
+shift
+
+exec "$CMD" "$@"
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.bat b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.bat
new file mode 100644
index 0000000..289e19b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.bat
@@ -0,0 +1,47 @@
+@echo off
+
+REM
+REM Copyright  2001-2002,2004-2005 The Apache Software Foundation
+REM
+REM  Licensed under the Apache License, Version 2.0 (the "License");
+REM  you may not use this file except in compliance with the License.
+REM  You may obtain a copy of the License at
+REM
+REM      http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM  Unless required by applicable law or agreed to in writing, software
+REM  distributed under the License is distributed on an "AS IS" BASIS,
+REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM  See the License for the specific language governing permissions and
+REM  limitations under the License.
+REM
+REM
+
+if "%OS%"=="Windows_NT" @setlocal
+if "%OS%"=="WINNT" @setlocal
+
+if ""%1""=="""" goto runCommand
+
+rem Change drive and directory to %1
+if "%OS%"=="Windows_NT" cd /d ""%1""
+if not "%OS%"=="Windows_NT" cd ""%1""
+shift
+
+rem Slurp the command line arguments. This loop allows for an unlimited number
+rem of agruments (up to the command line limit, anyway).
+set ANT_RUN_CMD=%1
+if ""%1""=="""" goto runCommand
+shift
+:loop
+if ""%1""=="""" goto runCommand
+set ANT_RUN_CMD=%ANT_RUN_CMD% %1
+shift
+goto loop
+
+:runCommand
+rem echo %ANT_RUN_CMD%
+%ANT_RUN_CMD%
+
+if "%OS%"=="Windows_NT" @endlocal
+if "%OS%"=="WINNT" @endlocal
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.pl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.pl
new file mode 100644
index 0000000..7cdd868
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.pl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+#
+# Copyright 2001,2003-2004 The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#######################################################################
+#
+# antRun.pl
+#
+# wrapper script for invoking commands on a platform with Perl installed
+# this is akin to antRun.bat, and antRun the SH script 
+#
+# created:         2001-10-18
+# author:          Jeff Tulley jtulley@novell.com 
+#######################################################################
+#be fussy about variables
+use strict;
+
+#turn warnings on during dev; generates a few spurious uninitialised var access warnings
+#use warnings;
+
+#and set $debug to 1 to turn on trace info (currently unused)
+my $debug=1;
+
+#######################################################################
+# change drive and directory to "%1"
+my $ANT_RUN_CMD = @ARGV[0];
+
+# assign current run command to "%2"
+chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
+if ($^O eq "NetWare") {
+    # There is a bug in Perl 5 on NetWare, where chdir does not
+    # do anything.  On NetWare, the following path-prefixed form should 
+    # always work. (afaict)
+    $ANT_RUN_CMD .= "/".@ARGV[1];
+}
+else {
+    $ANT_RUN_CMD = @ARGV[1];
+}
+
+# dispose of the first two arguments, leaving only the command's args.
+shift;
+shift;
+
+# run the command
+my $returnValue = system $ANT_RUN_CMD, @ARGV;
+if ($returnValue eq 0) {
+    exit 0;
+}
+else {
+    # only 0 and 1 are widely recognized as exit values
+    # so change the exit value to 1
+    exit 1;
+}
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antenv.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antenv.cmd
new file mode 100644
index 0000000..b9b0db4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antenv.cmd
@@ -0,0 +1,99 @@
+/* 
+    Copyright 2003-2004 The Apache Software Foundation
+  
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+  
+        http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+    Ant environment
+*/
+
+'@echo off'
+call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
+call SysLoadFuncs
+
+/* Prepare the parameters for later use */
+parse arg argv
+mode = ''
+args = ''
+opts = ''
+cp = ''
+lcp = ''
+
+do i = 1 to words(argv)
+  param = word(argv, i)
+  select
+    when param='-lcp' then mode = 'l'
+    when param='-cp' | param='-classpath' then mode = 'c'
+    when abbrev('-opts', param, 4) then mode = 'o'
+    when abbrev('-args', param, 4) then mode = 'a'
+  otherwise
+    select
+      when mode = 'a' then args = space(args param, 1)
+      when mode = 'c' then cp = space(cp param, 1)
+      when mode = 'l' then lcp = space(lcp param, 1)
+      when mode = 'o' then opts = space(opts param, 1)
+    otherwise
+      say 'Option' param 'ignored'
+    end
+  end
+end
+
+env="OS2ENVIRONMENT"
+antconf = _getenv_('antconf' 'antconf.cmd')
+runrc = _getenv_('runrc')
+interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
+ANT_HOME = value('ANT_HOME',,env)
+JAVA_HOME = value('JAVA_HOME',,env)
+classpath = value('CLASSPATH',,env)
+classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
+if classes \= '' then classpath = prepend(classpath classes)
+classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
+if classes \= '' then classpath = prepend(classpath classes)
+
+classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar')
+'SET CLASSPATH=' || classpath
+
+/* Setting classpathes, options and arguments */
+envset = _getenv_('envset')
+if cp\=''   then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
+if lcp\=''  then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
+if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
+if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'
+
+exit 0
+
+addpath: procedure
+parse arg path elem
+if elem = '' then do
+  if path\='' & right(path, 1)\=';' then path = path || ';'
+  return path
+end
+if substr(path, length(path)) = ';' then glue = ''
+else glue = ';'
+if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
+return path
+
+prepend: procedure
+parse arg path elem
+if elem = '' then do
+  if path\='' & right(path, 1)\=';' then path = path || ';'
+  return path
+end
+if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
+return path
+
+_getenv_: procedure expose env
+parse arg envar default
+if default = '' then default = envar
+var = value(translate(envar),,env)
+if var = '' then var = default
+return var
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/complete-ant-cmd.pl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/complete-ant-cmd.pl
new file mode 100644
index 0000000..20dd476
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/complete-ant-cmd.pl
@@ -0,0 +1,113 @@
+#!/usr/bin/perl
+#
+# Copyright 2001,2004 The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# A script to allow Bash or Z-Shell to complete an Ant command-line.  
+#
+# To install for Bash 2.0 or better, add the following to ~/.bashrc:
+# 
+#     $ complete -C complete-ant-cmd ant build.sh
+#
+# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
+#
+#     function ant_complete () {
+#         local args_line args
+#         read -l args_line
+#         set -A args $args_line
+#         set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
+#     }
+#     compctl -K ant_complete ant build.sh
+#     
+# @author Mike Williams <mikew@cortexebusiness.com.au>
+
+my $cmdLine = $ENV{'COMP_LINE'};
+my $antCmd = $ARGV[0];
+my $word = $ARGV[1];
+
+my @completions;
+if ($word =~ /^-/) {
+    list( restrict( $word, getArguments() ));
+} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
+    list( getBuildFiles($word) );
+} else {
+    list( restrict( $word, getTargets() ));
+}
+
+exit(0);
+
+sub list {
+    for (@_) {
+        print "$_\n";
+    }
+}
+
+sub restrict {
+    my ($word, @completions) = @_;
+    grep( /^\Q$word\E/, @completions );
+}
+
+sub getArguments {
+    qw(-buildfile -debug -emacs -f -find -help -listener -logfile 
+       -logger -projecthelp -quiet -verbose -version); 
+}
+
+
+sub getBuildFiles {
+    my ($word) = @_;
+    grep( /\.xml$/, glob( "$word*" ));
+}
+
+sub getTargets {
+
+    # Look for build-file
+    my $buildFile = 'build.xml';
+    if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
+        $buildFile = $2;
+    }
+    return () unless (-f $buildFile);
+
+    # Run "ant -projecthelp" to list targets.  Keep a cache of results in a
+    # cache-file.
+    my $cacheFile = $buildFile;
+    $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
+    if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
+        open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
+        open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return(); 
+        my %targets;
+        while( <HELP> ) {
+            if (/^\s+(\S+)/) {
+                $targets{$1}++;
+            }
+        }
+        my @targets = sort keys %targets;
+        for (@targets) { print CACHE "$_\n"; }
+        return @targets;
+    }
+    
+    # Read the target-cache
+    open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
+    my @targets;
+    while (<CACHE>) {
+        chop;
+        s/\r$//;  # for Cygwin
+        push( @targets, $_ );
+    }
+    close( CACHE );
+    @targets;
+
+}
+
+
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/envset.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/envset.cmd
new file mode 100644
index 0000000..cb91d87
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/envset.cmd
@@ -0,0 +1,130 @@
+/*
+
+    Copyright 2003-2004 The Apache Software Foundation
+  
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+  
+        http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+SET environment variables
+First optional parameter:
+   ;     parameters are considered parts of a path variable, semicolons are
+         appended to each element if not already present
+   -D    parameters are properties for Java or Makefile etc., -D will be
+         prepended and the parameters will be separated by a space
+   =D    the same as above but equal sign is not required
+   ,     parameters should be comma separated in the environment variable
+   -     parameters should be separated by the next parameter
+   Other values mean that the first parameter is missing and the environment
+   variable will be set to the space separated parameters
+
+Second parameter: name of the environment variable
+
+Next parameters: values
+; implies that the equal sign is considered a part of the parameter and is
+not interpreted
+
+-D requires parameters in the form name=value. If the equal sign is not found,
+the parameters are changed to name=expanded_name
+
+Other options have optional equal sign. If it is found, only the part after
+the equal sign will be oprionally expanded.
+
+If the parameter is the minus sign, the next parameter will not be expanded.
+If the parameter is a single dot, it will be replaced with the value of the
+environment variable as it existed before envset was invoked.
+
+For other parameters the batch looks for the environment variable with the
+same name (in uppercase). If it is found, it forms the expanded_name. If
+the environment variable with such a name does not exist, the expanded_name
+will hold the parameter name without case conversion.
+*/
+
+parse arg mode envar args
+
+equal = 0
+sep = ' '
+
+/* Parse command line parameters */
+select
+  when mode='-' then do
+    sep = envar
+    parse var args envar args
+  end
+  when mode=';' then do
+    sep = ''
+    equal = -1
+  end
+  when mode='-D' then equal = 1
+  when mode='=D' then mode = '-D'
+  when mode=',' then sep = ','
+otherwise
+  args = envar args
+  envar = mode
+  mode = ''
+end
+
+env = 'OS2ENVIRONMENT'
+envar = translate(envar)
+orig = value(envar,,env)
+newval = ''
+expand = 1
+
+/* for each parameter... */
+do i = 1 to words(args)
+  if expand > 0 & word(args, i) = '-' then expand = 0
+  else call addval word(args, i)
+end
+
+/* Optionally enclose path variable by quotes */
+if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'
+
+/* Set the new value, 'SET' cannot be used since it does not allow '=' */
+x = value(envar, newval, env)
+exit 0
+
+addval: procedure expose sep equal orig expand newval mode env
+parse arg var
+
+if var = '.' then expvar = orig
+else do
+  if equal >= 0 then do
+    parse var var name '=' val
+    if val = '' then var = name
+    else var = val
+  end
+  if expand = 0 then expvar = var
+  else expvar = value(translate(var),,env)
+  if expvar = '' then expvar = var
+  if equal >= 0 then do
+    if val = '' then do
+      parse var expvar key '=' val
+      if val <> '' then name = key
+      else do
+        if equal > 0 then val = key
+        else name = key
+      end
+    end
+    else val = expvar
+    if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
+    if val = '' then expvar = name
+    else expvar = name || '=' || val
+  end
+  if mode = '-D' then expvar = '-D' || expvar
+  if mode = ';' then do
+    if right(expvar, 1) <> ';' then expvar = expvar || ';'
+  end
+end
+
+if newval = '' then newval = expvar
+else newval = newval || sep || expvar
+expand = 1
+return
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/lcp.bat b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/lcp.bat
new file mode 100644
index 0000000..eed6a82
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/lcp.bat
@@ -0,0 +1,30 @@
+REM
+REM Copyright  2001-2004 The Apache Software Foundation
+REM
+REM  Licensed under the Apache License, Version 2.0 (the "License");
+REM  you may not use this file except in compliance with the License.
+REM  You may obtain a copy of the License at
+REM
+REM      http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM  Unless required by applicable law or agreed to in writing, software
+REM  distributed under the License is distributed on an "AS IS" BASIS,
+REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM  See the License for the specific language governing permissions and
+REM  limitations under the License.
+REM
+REM
+
+set _CLASSPATHCOMPONENT=%1
+if ""%1""=="""" goto gotAllArgs
+shift
+
+:argCheck
+if ""%1""=="""" goto gotAllArgs
+set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
+shift
+goto argCheck
+
+:gotAllArgs
+set LOCALCLASSPATH=%_CLASSPATHCOMPONENT%;%LOCALCLASSPATH%
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.pl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.pl
new file mode 100644
index 0000000..eca4708
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.pl
@@ -0,0 +1,152 @@
+#!/usr/bin/perl
+#
+# Copyright 2000-2004 The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#######################################################################
+#
+# runant.pl
+#
+# wrapper script for invoking ant in a platform with Perl installed
+# this may include cgi-bin invocation, which is considered somewhat daft.
+# (slo: that should be a separate file which can be derived from this
+# and returns the XML formatted output)
+#
+# the code is not totally portable due to classpath and directory splitting
+# issues. oops. (NB, use File::Spec::Functions  will help and the code is
+# structured for the catfile() call, but because of perl version funnies
+# the code is not included. 
+#
+# created:         2000-8-24
+# author:          Steve Loughran steve_l@sourceforge.net
+#######################################################################
+#
+# Assumptions:
+#
+# - the "java" executable/script is on the command path
+# - ANT_HOME has been set
+# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
+# - target platform uses "/" as directory separator.
+
+#be fussy about variables
+use strict;
+
+#platform specifics (disabled)
+#use File::Spec::Functions;
+
+#turn warnings on during dev; generates a few spurious uninitialised var access warnings
+#use warnings;
+
+#and set $debug to 1 to turn on trace info
+my $debug=1;
+
+#######################################################################
+#
+# check to make sure environment is setup
+#
+
+my $HOME = $ENV{ANT_HOME};
+if ($HOME eq "")
+        {
+    die "\n\nANT_HOME *MUST* be set!\n\n";
+        }
+
+my $JAVACMD = $ENV{JAVACMD};
+$JAVACMD = "java" if $JAVACMD eq "";
+
+my $onnetware = 0;
+if ($^O eq "NetWare")
+{
+  $onnetware = 1;
+}
+
+my $oncygwin = ($^O eq "cygwin");
+
+#ISSUE: what java wants to split up classpath varies from platform to platform 
+#and perl is not too hot at hinting which box it is on.
+#here I assume ":" 'cept on win32, dos, and netware. Add extra tests here as needed.
+my $s=":";
+if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin") ||
+   ($onnetware == 1))
+        {
+        $s=";";
+        }
+
+#build up standard classpath
+my $localpath = "$HOME/lib/ant-launcher.jar";
+#set JVM options and Ant arguments, if any
+my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
+my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
+
+#jikes
+if($ENV{JIKESPATH} ne "")
+        {
+        push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
+        }
+
+#construct arguments to java
+my @ARGS;
+push @ARGS, @ANT_OPTS;
+
+my $CYGHOME = "";
+
+my $classpath=$ENV{CLASSPATH};
+if ($oncygwin == 1) {
+  $localpath = `cygpath --path --windows $localpath`;
+  chomp ($localpath);
+  if (! $classpath eq "")
+  {
+    $classpath = `cygpath --path --windows "$classpath"`;
+    chomp ($classpath);
+  }
+  $HOME = `cygpath --path --windows $HOME`;
+  chomp ($HOME);
+  $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
+  chomp ($CYGHOME);
+}
+push @ARGS, "-classpath", "$localpath";
+push @ARGS, "-Dant.home=$HOME";
+if ( ! $CYGHOME eq "" )
+{
+  push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\""
+}
+push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
+push @ARGS, @ARGV;
+if (! $classpath eq "")
+{
+  if ($onnetware == 1)
+  {
+    # make classpath literally $CLASSPATH
+    # this is to avoid pushing us over the 512 character limit
+    # even skip the ; - that is already in $localpath
+    push @ARGS, "-lib", "\$CLASSPATH";
+  }
+  else
+  {
+    push @ARGS, "-lib", "$classpath";
+  }
+}
+print "\n $JAVACMD @ARGS\n\n" if ($debug);
+
+my $returnValue = system $JAVACMD, @ARGS;
+if ($returnValue eq 0)
+        {
+        exit 0;
+        }
+else
+        {
+        # only 0 and 1 are widely recognized as exit values
+        # so change the exit value to 1
+        exit 1;
+        }
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.py b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.py
new file mode 100644
index 0000000..c7b53b6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+# Copyright 2001,2003-2004 The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+
+"""
+
+ runant.py
+
+    This script is a translation of the runant.pl written by Steve Loughran.
+    It runs ant with/out arguments, it should be quite portable (thanks to
+    the python os library)
+    This script has been tested with Python2.0/Win2K
+
+ created:         2001-04-11
+ author:          Pierre Dittgen pierre.dittgen@criltelecom.com
+
+ Assumptions:
+
+ - the "java" executable/script is on the command path
+"""
+import os, os.path, string, sys
+
+# Change it to 1 to get extra debug information
+debug = 0
+
+#######################################################################
+
+# If ANT_HOME is not set default to script's parent directory
+if os.environ.has_key('ANT_HOME'):
+    ANT_HOME = os.environ['ANT_HOME']
+else:
+    ANT_HOME = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
+
+# set ANT_LIB location
+ANT_LIB = os.path.join(ANT_HOME, 'lib')
+
+# set JAVACMD (check variables JAVACMD and JAVA_HOME)
+JAVACMD = None
+if not os.environ.has_key('JAVACMD'):
+    if os.environ.has_key('JAVA_HOME'):
+        if not os.path.exists(os.environ['JAVA_HOME']):
+            print "Warning: JAVA_HOME is not defined correctly."
+        else:
+            JAVACMD = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
+    else:
+        print "Warning: JAVA_HOME not set."
+else:
+    JAVACMD = os.environ['JAVACMD']
+if not JAVACMD:
+    JAVACMD = 'java'
+
+launcher_jar = os.path.join(ANT_LIB, 'ant-launcher.jar')
+if not os.path.exists(launcher_jar):
+    print 'Unable to locate ant-launcher.jar. Expected to find it in %s' % \
+        ANT_LIB
+
+# Build up standard classpath (LOCALCLASSPATH)
+LOCALCLASSPATH = launcher_jar
+if os.environ.has_key('LOCALCLASSPATH'):
+    LOCALCLASSPATH += os.pathsep + os.environ['LOCALCLASSPATH']
+
+ANT_OPTS = ""
+if os.environ.has_key('ANT_OPTS'):
+    ANT_OPTS = os.environ['ANT_OPTS']
+
+OPTS = ""
+if os.environ.has_key('JIKESPATH'):
+    OPTS = '-Djikes.class.path=\"%s\"' % os.environ['JIKESPATH']
+
+ANT_ARGS = ""
+if os.environ.has_key('ANT_ARGS'):
+    ANT_ARGS = os.environ['ANT_ARGS']
+
+CLASSPATH = ""
+if os.environ.has_key('CLASSPATH'):
+    CLASSPATH = os.environ['CLASSPATH']
+
+# Builds the commandline
+cmdline = ('%s %s -classpath %s -Dant.home=%s %s ' + \
+    'org.apache.tools.ant.launch.Launcher %s -lib %s %s') \
+     % (JAVACMD, ANT_OPTS, LOCALCLASSPATH, ANT_HOME, OPTS, ANT_ARGS, \
+        CLASSPATH, string.join(sys.argv[1:], ' '))
+
+if debug:
+    print '\n%s\n\n' % (cmdline)
+
+# Run the biniou!
+os.system(cmdline)
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runrc.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runrc.cmd
new file mode 100644
index 0000000..0337a80
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runrc.cmd
@@ -0,0 +1,59 @@
+/* 
+    Copyright 2003-2004 The Apache Software Foundation
+  
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+  
+        http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+    Run RC file, name is in the first arg, second arg is either PATH
+    ENV  or -r or nothing 
+*/
+
+parse arg name path rest
+
+if name = '' then do
+  say 'RC file name is missing'
+  exit 1
+end
+
+if rest \= '' then do
+  say 'Too many parameters'
+  exit 1
+end
+
+call runit name path
+exit 0
+
+runit: procedure
+parse arg name path dir
+
+if path \= '' & path \= '-r' then do
+  dir = value(translate(path),,'OS2ENVIRONMENT')
+  if dir = '' then return
+  dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
+end
+
+if dir = '' then dir = directory()
+
+if path = '-r' then do /* recursive call */
+  subdir = filespec('path', dir)
+  if subdir \= '\' then do
+    subdir = left(subdir, length(subdir)-1)
+    call runit name path filespec('drive', dir) || subdir
+  end
+end
+
+/* Look for the file and run it */
+if right(dir, 1) \= '\' then dir = dir || '\'
+rcfile = stream(dir || name, 'c', 'query exists')
+if rcfile \= '' then interpret 'call "' || rcfile || '"'
+
+return
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/changelog.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/changelog.xsl
new file mode 100644
index 0000000..cd0d117
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/changelog.xsl
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xsl:stylesheet
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+    version='1.0'>
+
+<!--
+    Copyright  2002,2004-2005 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+  <xsl:param name="title"/>
+  <xsl:param name="module"/>
+  <xsl:param name="cvsweb"/>
+
+  <xsl:output method="html" indent="yes" encoding="US-ASCII"
+              doctype-public="-//W3C//DTD HTML 4.01//EN"
+              doctype-system="http://www.w3.org/TR/html401/strict.dtd"/>
+
+  <!-- Copy standard document elements.  Elements that
+       should be ignored must be filtered by apply-templates
+       tags. -->
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*[. != '']"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="changelog">
+    <html>
+      <head>
+        <title><xsl:value-of select="$title"/></title>
+        <style type="text/css">
+          body, p {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            font-size: 80%;
+            color: #000000;
+            background-color: #ffffff;
+          }
+          tr, td {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            background: #eeeee0;
+          }
+          td {
+            padding-left: 20px;
+          }
+      .dateAndAuthor {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            font-weight: bold;
+            text-align: left;
+            background: #a6caf0;
+            padding-left: 3px;
+      }
+          a {
+            color: #000000;
+          }
+          pre {
+            font-weight: bold;
+          }
+        </style>
+      </head>
+      <body>
+        <h1>
+          <a name="top"><xsl:value-of select="$title"/></a>
+        </h1>
+        <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p>
+        <hr/>
+        <table border="0" width="100%" cellspacing="1">
+          
+          <xsl:apply-templates select=".//entry">
+            <xsl:sort select="date" data-type="text" order="descending"/>
+            <xsl:sort select="time" data-type="text" order="descending"/>
+          </xsl:apply-templates>
+          
+        </table>
+        
+      </body>
+    </html>
+  </xsl:template>
+  
+  <xsl:template match="entry">
+    <tr>
+      <td class="dateAndAuthor">
+        <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <pre>
+<xsl:apply-templates select="msg"/></pre>
+        <ul>
+          <xsl:apply-templates select="file"/>
+        </ul>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="date">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="time">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="author">
+    <i>
+      <a>
+        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+        <xsl:value-of select="."/></a>
+    </i>
+  </xsl:template>
+
+  <xsl:template match="file">
+    <li>
+      <a>
+        <xsl:choose>
+          <xsl:when test="string-length(prevrevision) = 0 ">
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
+          </xsl:otherwise>
+        </xsl:choose>
+        <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a>
+    </li>
+  </xsl:template>
+
+  <!-- Any elements within a msg are processed,
+       so that we can preserve HTML tags. -->
+  <xsl:template match="msg">
+    <xsl:apply-templates/>
+  </xsl:template>
+  
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-frames.xsl
new file mode 100644
index 0000000..dcaa8b7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-frames.xsl
@@ -0,0 +1,293 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+
+<!--
+    Copyright  2002-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+
+    <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+    <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+    <xsl:param name="output.dir" select="'.'"/>
+    <xsl:param name="basedir" select="'.'"/>
+
+    <xsl:template match="checkstyle">
+        <!-- create the index.html -->
+        <redirect:write file="{$output.dir}/index.html">
+            <xsl:call-template name="index.html"/>
+        </redirect:write>
+
+        <!-- create the stylesheet.css -->
+        <redirect:write file="{$output.dir}/stylesheet.css">
+            <xsl:call-template name="stylesheet.css"/>
+        </redirect:write>
+
+        <!-- create the overview-summary.html at the root -->
+        <redirect:write file="{$output.dir}/overview-frame.html">
+            <xsl:apply-templates select="." mode="overview"/>
+        </redirect:write>
+
+        <!-- create the all-classes.html at the root -->
+        <redirect:write file="{$output.dir}/allclasses-frame.html">
+            <xsl:apply-templates select="." mode="all.classes"/>
+        </redirect:write>
+
+        <!-- process all files -->
+        <xsl:apply-templates select="file[count(error) != 0]"/>
+    </xsl:template>
+
+    <xsl:template name="index.html">
+        <html>
+            <head>
+                <title>CheckStyle Audit</title>
+            </head>
+            <frameset cols="20%,80%">
+                <frame src="allclasses-frame.html" name="fileListFrame"/>
+                <frame src="overview-frame.html" name="fileFrame"/>
+            </frameset>
+            <noframes>
+                <h2>Frame Alert</h2>
+                <p>
+                    This document is designed to be viewed using the frames feature.
+                    If you see this message, you are using a non-frame-capable web client.
+                </p>
+            </noframes>
+        </html>
+    </xsl:template>
+
+    <xsl:template name="pageHeader">
+        <table border="0" cellpadding="0" cellspacing="0" width="100%">
+            <tr>
+                <td class="text-align:right"><h2>CheckStyle Audit</h2></td>
+            </tr>
+            <tr>
+                <td class="text-align:right">Designed for use with
+                  <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and
+                  <a href='http://ant.apache.org/'>Ant</a>.</td>
+            </tr>
+        </table>
+        <hr size="1"/>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="overview">
+        <html>
+            <head>
+                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+            </head>
+            <body>
+                <!-- page header -->
+                <xsl:call-template name="pageHeader"/>
+
+                <!-- Summary part -->
+                <xsl:apply-templates select="." mode="summary"/>
+                <hr size="1" width="100%" align="left"/>
+
+                <!-- File list part -->
+                <xsl:apply-templates select="." mode="filelist"/>
+            </body>
+        </html>
+    </xsl:template>
+
+    <xsl:template name="stylesheet.css">
+        .bannercell {
+        border: 0px;
+        padding: 0px;
+        }
+        body {
+        margin-left: 10;
+        margin-right: 10;
+        font:normal 80% arial,helvetica,sanserif;
+        background-color:#FFFFFF;
+        color:#000000;
+        }
+        .oddrow td {
+        background: #efefef;
+        }
+        .evenrow td {
+        background: #fff;
+        }
+        th, td {
+        text-align: left;
+        vertical-align: top;
+        }
+        th {
+        font-weight:bold;
+        background: #ccc;
+        color: black;
+        }
+        table, th, td {
+        font-size:100%;
+        border: none
+        }
+        table.log tr td, tr th {
+
+        }
+        h2 {
+        font-weight:bold;
+        font-size:140%;
+        margin-bottom: 5;
+        }
+        h3 {
+        font-size:100%;
+        font-weight:bold;
+        background: #525D76;
+        color: white;
+        text-decoration: none;
+        padding: 5px;
+        margin-right: 2px;
+        margin-left: 2px;
+        margin-bottom: 0;
+        }
+    </xsl:template>
+
+    <!--
+    Creates an all-classes.html file that contains a link to all files.
+    -->
+    <xsl:template match="checkstyle" mode="all.classes">
+        <html>
+            <head>
+                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+            </head>
+            <body>
+                <h2>Files</h2>
+                <p>
+                    <table width="100%">
+                        <!-- For each file create its part -->
+                        <xsl:apply-templates select="file[count(error) != 0]" mode="all.classes">
+                            <xsl:sort select="substring-after(@name, $basedir)"/>
+                        </xsl:apply-templates>
+                    </table>
+                </p>
+            </body>
+        </html>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="filelist">
+        <h3>Files</h3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+            <tr>
+                <th>Name</th>
+                <th>Errors</th>
+            </tr>
+            <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+                <xsl:sort select="count(error)" order="descending" data-type="number"/>
+            </xsl:apply-templates>
+        </table>
+    </xsl:template>
+
+    <xsl:template match="file" mode="filelist">
+        <tr>
+            <xsl:call-template name="alternated-row"/>
+            <td nowrap="nowrap">
+                <a>
+                    <xsl:attribute name="href">
+                        <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+                    </xsl:attribute>
+                    <xsl:value-of select="substring-after(@name, $basedir)"/>
+                </a>
+            </td>
+            <td><xsl:value-of select="count(error)"/></td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template match="file" mode="all.classes">
+        <tr>
+            <td nowrap="nowrap">
+                <a target="fileFrame">
+                    <xsl:attribute name="href">
+                        <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+                    </xsl:attribute>
+                    <xsl:value-of select="substring-after(@name, $basedir)"/>
+                </a>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <!--
+    transform string like a/b/c to ../../../
+    @param path the path to transform into a descending directory path
+    -->
+    <xsl:template name="path">
+        <xsl:param name="path"/>
+        <xsl:if test="contains($path,'/')">
+            <xsl:text>../</xsl:text>
+            <xsl:call-template name="path">
+                <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'/')"/></xsl:with-param>
+            </xsl:call-template>
+        </xsl:if>
+        <xsl:if test="not(contains($path,'/')) and not($path = '')">
+            <xsl:text>../</xsl:text>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template match="file">
+        <redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html">
+            <html>
+                <head>
+                    <link rel="stylesheet" type="text/css">
+                        <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute>
+                    </link>
+                </head>
+                <body>
+                    <xsl:call-template name="pageHeader"/>
+                    <h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3>
+                    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                        <tr>
+                            <th>Error Description</th>
+                            <th>Line:Column</th>
+                        </tr>
+                        <xsl:for-each select="error">
+                            <tr>
+                                <xsl:call-template name="alternated-row"/>
+                                <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+                                <td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td>
+                            </tr>
+                        </xsl:for-each>
+                    </table>
+                </body>
+            </html>
+        </redirect:write>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="summary">
+        <h3>Summary</h3>
+        <xsl:variable name="fileCount" select="count(file)"/>
+        <xsl:variable name="errorCount" select="count(file/error)"/>
+        <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+            <tr>
+                <th>Total Files</th>
+                <th>Files With Errors</th>
+                <th>Errors</th>
+            </tr>
+            <tr>
+                <xsl:call-template name="alternated-row"/>
+                <td><xsl:value-of select="$fileCount"/></td>
+                <td><xsl:value-of select="$fileErrorCount"/></td>
+                <td><xsl:value-of select="$errorCount"/></td>
+            </tr>
+        </table>
+    </xsl:template>
+
+    <xsl:template name="alternated-row">
+        <xsl:attribute name="class">
+            <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+            <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+        </xsl:attribute>
+    </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-text.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-text.xsl
new file mode 100644
index 0000000..91d496c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-text.xsl
@@ -0,0 +1,33 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+    Copyright  2003-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+
+    <xsl:strip-space elements="checkstyle"/>
+    <xsl:preserve-space elements="file"/>
+    <xsl:output method="text"/>
+    <xsl:template match="checkstyle/file/error">
+        <xsl:value-of select="../@name"/>
+        <xsl:text>:</xsl:text>
+        <xsl:value-of select="@line"/>
+        <xsl:text>:</xsl:text>
+        <xsl:value-of select="@column"/>
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="@message"/>
+    </xsl:template>
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-xdoc.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-xdoc.xsl
new file mode 100644
index 0000000..d23ac0e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-xdoc.xsl
@@ -0,0 +1,129 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+
+<!--
+    Copyright  2003-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+
+    <xsl:output method="xml" indent="yes"/>
+    <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+    <xsl:param name="output.dir" select="'.'"/>
+    <xsl:param name="basedir" select="'.'"/>
+
+    <xsl:template match="checkstyle">
+      <document>
+        <properties>
+          <title>Checkstyle Audit</title>
+        </properties>
+
+        <body>
+          <xsl:apply-templates select="." mode="summary"/>
+          <!-- File list part -->
+          <xsl:apply-templates select="." mode="filelist"/>
+          <xsl:apply-templates select="file[count(error) != 0]"/>
+        </body>
+      </document>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="filelist">
+      <section name="Files">
+        <table>
+            <tr>
+                <th>Name</th>
+                <th>Errors</th>
+            </tr>
+            <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+                <xsl:sort select="count(error)" order="descending" data-type="number"/>
+            </xsl:apply-templates>
+        </table>
+      </section>
+    </xsl:template>
+
+    <xsl:template match="file" mode="filelist">
+        <tr>
+            <xsl:call-template name="alternated-row"/>
+            <td nowrap="nowrap">
+                <a>
+                    <xsl:attribute name="href">
+                        <xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+                    </xsl:attribute>
+                    <xsl:value-of select="substring-after(@name, $basedir)"/>
+                </a>
+            </td>
+            <td><xsl:value-of select="count(error)"/></td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template match="file">
+      <redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml">
+        <document>
+          <properties>
+            <title>Checkstyle Audit</title>
+          </properties>
+
+          <body>
+            <section name="Details for {substring-after(@name, $basedir)}">
+              <table>
+                  <tr>
+                      <th>Error Description</th>
+                      <th>Line</th>
+                  </tr>
+                  <xsl:for-each select="error">
+                      <tr>
+                          <xsl:call-template name="alternated-row"/>
+                          <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+                          <td><xsl:value-of select="@line"/></td>
+                      </tr>
+                  </xsl:for-each>
+              </table>
+            </section>
+          </body>
+        </document>
+      </redirect:write>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="summary">
+      <section name="Summary">
+        <xsl:variable name="fileCount" select="count(file)"/>
+        <xsl:variable name="errorCount" select="count(file/error)"/>
+        <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+        <table>
+            <tr>
+                <th>Files</th>
+                <th>Files With Errors</th>
+                <th>Errors</th>
+            </tr>
+            <tr>
+                <xsl:call-template name="alternated-row"/>
+                <td><xsl:value-of select="$fileCount"/></td>
+                <td><xsl:value-of select="$fileErrorCount"/></td>
+                <td><xsl:value-of select="$errorCount"/></td>
+            </tr>
+        </table>
+      </section>
+    </xsl:template>
+
+    <xsl:template name="alternated-row">
+        <xsl:attribute name="class">
+            <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+            <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+        </xsl:attribute>
+    </xsl:template>
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/coverage-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/coverage-frames.xsl
new file mode 100644
index 0000000..f808908
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/coverage-frames.xsl
@@ -0,0 +1,496 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+    Copyright  2001-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+
+<!--
+
+ Sample stylesheet to be used with JProbe 3.0 XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ It is best used with JProbe Coverage Ant task that gives you the benefit
+ of a reference classpath so that you have the list of classes/methods
+ that are not used at all in a given classpath.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+
+-->
+
+<!-- default output directory is current directory -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- ======================================================================
+    Root element
+    ======================================================================= -->
+<xsl:template match="/snapshot">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:apply-templates select="./package" mode="write"/>
+</xsl:template>
+
+<!-- =======================================================================
+    Frameset definition. Entry point for the report.
+    3 frames: packageListFrame, classListFrame, classFrame
+    ======================================================================= -->
+<xsl:template name="index.html">
+<html>
+    <head><title>Coverage Results.</title></head>
+    <frameset cols="20%,80%">
+        <frameset rows="30%,70%">
+            <frame src="overview-frame.html" name="packageListFrame"/>
+            <frame src="allclasses-frame.html" name="classListFrame"/>
+        </frameset>
+        <frame src="overview-summary.html" name="classFrame"/>
+    </frameset>
+    <noframes>
+        <h2>Frame Alert</h2>
+        <p>
+        This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+        </p>
+    </noframes>
+</html>
+</xsl:template>
+
+<!-- =======================================================================
+    Stylesheet CSS used
+    ======================================================================= -->
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin-left: 10;
+      margin-right: 10;
+      font:normal 80% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    .a td {
+      background: #efefef;
+    }
+    .b td {
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      font-weight:bold;
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      font-size:100%;
+      border: none
+    }
+    table.log tr td, tr th {
+
+    }
+    h2 {
+      font-weight:bold;
+      font-size:140%;
+      margin-bottom: 5;
+    }
+    h3 {
+      font-size:100%;
+      font-weight:bold;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+</xsl:template>
+
+<!-- =======================================================================
+    List of all classes in all packages
+    This will be the first page in the classListFrame
+    ======================================================================= -->
+<xsl:template match="snapshot" mode="all.classes">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link"/>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:for-each select="package/class">
+                    <xsl:sort select="@name"/>
+                    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+                    <xsl:variable name="link">
+                        <xsl:if test="not($package.name='')">
+                            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                        </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                    </xsl:variable>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<!-- list of all packages -->
+<xsl:template match="snapshot" mode="all.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link"/>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+            <table width="100%">
+                <xsl:for-each select="package">
+                    <xsl:sort select="@name" order="ascending"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+                                <xsl:value-of select="@name"/>
+                            </a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<!-- overview of statistics in packages -->
+<xsl:template match="snapshot" mode="overview.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link"/>
+        </head>
+        <body onload="open('allclasses-frame.html','classListFrame')">
+        <xsl:call-template name="pageHeader"/>
+        <h3>Summary</h3>
+        <table class="log" cellpadding="5" cellspacing="2" width="100%">
+            <tr>
+                <!--th width="10%" nowrap="nowrap">Date</th>
+                <th width="10%" nowrap="nowrap">Elapsed time</th-->
+                <th width="10%" nowrap="nowrap">Reported Classes</th>
+                <th width="10%" nowrap="nowrap">Methods Hit</th>
+                <th width="10%" nowrap="nowrap">Lines Hit</th>
+            </tr>
+            <tr class="a">
+                <!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td>
+                <td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td-->
+                <td><xsl:value-of select="count(package/class)"/></td>
+                <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+                <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+            </tr>
+        </table>
+        <table border="0" width="100%">
+        <tr>
+        <td style="text-align: justify;">
+        To ensure accurate test runs on Java applications, developers need to know how much of
+        the code has been tested, and where to find any untested code. Coverage helps you
+        locate untested code, and measure precisely how much code has been exercised.
+        The result is a higher quality application in a shorter period of time.
+        <p/>
+        </td>
+        </tr>
+        </table>
+
+        <h3>Packages</h3>
+        <table class="log" cellpadding="5" cellspacing="2" width="100%">
+            <xsl:apply-templates select="package[1]" mode="stats.header"/>
+            <!-- display packages and sort them via their coverage rate -->
+            <xsl:for-each select="package">
+                <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+                <tr>
+                  <xsl:call-template name="alternate-row"/>
+                    <td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td>
+                    <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+                    <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        <xsl:call-template name="pageFooter"/>
+        </body>
+        </html>
+</xsl:template>
+
+<!--
+ detailed info for a package. It will output the list of classes
+, the summary page, and the info for each class
+-->
+<xsl:template match="package" mode="write">
+    <xsl:variable name="package.dir">
+        <xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if>
+        <xsl:if test="@name = ''">.</xsl:if>
+    </xsl:variable>
+
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:apply-templates select="." mode="classes.list"/>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:apply-templates select="." mode="package.summary"/>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <xsl:for-each select="class">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+    </xsl:for-each>
+</xsl:template>
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+    <html>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="@name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+                    </td>
+                </tr>
+            </table>
+
+            <H2>Classes</H2>
+            <TABLE WIDTH="100%">
+                <xsl:for-each select="class">
+                    <xsl:sort select="@name"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </TABLE>
+        </BODY>
+    </html>
+</xsl:template>
+
+<!-- summary of a package -->
+<xsl:template match="package" mode="package.summary">
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="@name"/>
+            </xsl:call-template>
+        </HEAD>
+        <!-- when loading this package, it will open the classes into the frame -->
+        <BODY onload="open('package-frame.html','classListFrame')">
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="@name"/></h3>
+            <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:apply-templates select="." mode="stats.header"/>
+                <xsl:apply-templates select="." mode="stats"/>
+            </table>
+
+            <xsl:if test="count(class) &gt; 0">
+                <H3>Classes</H3>
+                <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                    <xsl:apply-templates select="." mode="stats.header"/>
+                    <xsl:apply-templates select="class" mode="stats">
+                        <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+                    </xsl:apply-templates>
+                </table>
+            </xsl:if>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+</xsl:template>
+
+<!-- details of a class -->
+<xsl:template match="class" mode="class.details">
+    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <xsl:call-template name="pageHeader"/>
+            <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+            <!-- class summary -->
+            <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:apply-templates select="." mode="stats.header"/>
+                <xsl:apply-templates select="." mode="stats"/>
+            </table>
+
+            <!-- details of methods -->
+            <H3>Methods</H3>
+            <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:apply-templates select="method[1]" mode="stats.header"/>
+                <xsl:apply-templates select="method" mode="stats">
+                    <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+                </xsl:apply-templates>
+            </table>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+
+</xsl:template>
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+  <!-- jakarta logo -->
+  <table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="bannercell" rowspan="2">
+      <a href="http://jakarta.apache.org/">
+      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+      </a>
+    </td>
+        <td style="text-align:right"><h2>Source Code Coverage</h2></td>
+        </tr>
+        <tr>
+        <td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+        </tr>
+  </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+    <table width="100%">
+      <tr><td><hr noshade="yes" size="1"/></td></tr>
+      <tr><td>
+      <div align="center"><font color="#525D76" size="-1"><em>
+      Copyright &#169; 1999-2001, Apache Software Foundation
+      </em></font></div>
+      </td></tr>
+    </table>
+</xsl:template>
+
+
+<xsl:template name="table.header">
+    <tr>
+        <th width="80%">Name</th>
+        <th width="10%" nowrap="nowrap">Methods Hit</th>
+        <th width="10%" nowrap="nowrap">Lines Hit</th>
+    </tr>
+</xsl:template>
+
+<xsl:template match="method" mode="stats.header">
+    <tr>
+        <th width="90%">Name</th>
+        <th width="10%" nowrap="nowrap">Lines Hit</th>
+    </tr>
+</xsl:template>
+<xsl:template match="method" mode="stats">
+    <tr>
+      <xsl:call-template name="alternate-row"/>
+        <td><xsl:value-of select="@name"/></td>
+        <td>
+        <xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/>
+        </td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="package|class" mode="stats.header">
+    <tr>
+        <th width="80%">Name</th>
+        <th width="10%" nowrap="nowrap">Methods Hit</th>
+        <th width="10%" nowrap="nowrap">Lines Hit</th>
+    </tr>
+</xsl:template>
+<xsl:template match="package|class" mode="stats">
+    <tr>
+      <xsl:call-template name="alternate-row"/>
+        <td><xsl:value-of select="@name"/></td>
+        <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+        <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+    </tr>
+</xsl:template>
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+  <xsl:if test="position() mod 2 = 1">a</xsl:if>
+  <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend-frames.xsl
new file mode 100644
index 0000000..7a2a8ae
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend-frames.xsl
@@ -0,0 +1,485 @@
+<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+  xmlns:lxslt="http://xml.apache.org/xslt"
+  xmlns:redirect="org.apache.xalan.lib.Redirect"
+  extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+    Copyright  2002-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+<!--
+
+ Sample stylesheet to be used with JDepend XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a>
+
+  -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<xsl:template match="JDepend">
+   <!-- create the index.html -->
+   <redirect:write file="{$output.dir}/index.html">
+      <xsl:call-template name="index.html"/>
+   </redirect:write>
+
+  <!-- create the stylesheet.css -->
+  <redirect:write file="{$output.dir}/stylesheet.css">
+    <xsl:call-template name="stylesheet.css"/>
+   </redirect:write>
+
+   <!-- create the overview-packages.html at the root -->
+  <redirect:write file="{$output.dir}/overview-summary.html">
+    <xsl:apply-templates select="." mode="overview.packages"/>
+  </redirect:write>
+
+   <!-- create the overview-packages.html at the root -->
+   <redirect:write file="{$output.dir}/overview-packages.html">
+    <xsl:apply-templates select="." mode="packages.details"/>
+  </redirect:write>
+
+   <!-- create the overview-cycles.html at the root -->
+   <redirect:write file="{$output.dir}/overview-cycles.html">
+    <xsl:apply-templates select="." mode="cycles.details"/>
+  </redirect:write>
+
+   <!-- create the overview-cycles.html at the root -->
+   <redirect:write file="{$output.dir}/overview-explanations.html">
+    <xsl:apply-templates select="." mode="explanations"/>
+  </redirect:write>
+
+  <!-- create the all-packages.html at the root -->
+   <redirect:write file="{$output.dir}/all-packages.html">
+    <xsl:apply-templates select="Packages" mode="all.packages"/>
+  </redirect:write>
+
+  <!-- create the all-cycles.html at the root -->
+  <redirect:write file="{$output.dir}/all-cycles.html">
+    <xsl:apply-templates select="Cycles" mode="all.cycles"/>
+  </redirect:write>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<html>
+   <head>
+      <title>JDepend Analysis</title>
+   </head>
+      <frameset cols="20%,80%">
+         <frameset rows="30%,70%">
+            <frame src="all-packages.html" name="packageListFrame"/>
+            <frame src="all-cycles.html" name="classListFrame"/>
+         </frameset>
+         <frame src="overview-summary.html" name="classFrame"/>
+      </frameset>
+      <noframes>
+         <h2>Frame Alert</h2>
+         <p>
+            This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+         </p>
+      </noframes>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+   <style type="text/css">
+    body {
+    font:normal 68% verdana,arial,helvetica;
+    color:#000000;
+    }
+    table tr td, tr th {
+      font-size: 68%;
+    }
+    table.details tr th{
+    font-weight: bold;
+    text-align:left;
+    background:#a6caf0;
+    }
+    table.details tr td{
+    background:#eeeee0;
+    }
+
+    p {
+    line-height:1.5em;
+    margin-top:0.5em; margin-bottom:1.0em;
+    margin-left:2em;
+    margin-right:2em;
+    }
+    h1 {
+    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+    }
+    h2 {
+    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+    }
+    h3 {
+    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+    }
+    h4 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+    }
+    h5 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+    }
+    h6 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+    }
+    .Error {
+    font-weight:bold; color:red;
+    }
+    .Failure {
+    font-weight:bold; color:purple;
+    }
+    .Properties {
+    text-align:right;
+    }
+  </style>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="overview.packages">
+   <html>
+      <head>
+         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+  <table width="100%"><tr align="left"><h2>Summary</h2><td>
+  </td><td align="right">
+  [summary]
+  [<a href="overview-packages.html">packages</a>]
+  [<a href="overview-cycles.html">cycles</a>]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+         <table width="100%" class="details">
+            <tr>
+               <th>Package</th>
+               <th>Total Classes</th>
+               <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th>
+               <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th>
+               <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th>
+               <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th>
+               <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th>
+               <th><a href="overview-explanations.html#EXinstability">Instability</a></th>
+               <th><a href="overview-explanations.html#EXdistance">Distance</a></th>
+
+            </tr>
+            <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) = 0">
+                  <tr>
+                     <td align="left">
+                        <a>
+                           <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/>
+                           </xsl:attribute>
+                           <xsl:value-of select="@name"/>
+                        </a>
+                     </td>
+                     <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+                     <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+                     <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+                     <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+                     <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+                     <td align="right"><xsl:value-of select="Stats/A"/></td>
+                     <td align="right"><xsl:value-of select="Stats/I"/></td>
+                     <td align="right"><xsl:value-of select="Stats/D"/></td>
+                  </tr>
+               </xsl:if>
+            </xsl:for-each>
+            <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) &gt; 0">
+                  <tr>
+                     <td align="left">
+                        <xsl:value-of select="@name"/>
+                     </td>
+                     <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+                  </tr>
+               </xsl:if>
+            </xsl:for-each>
+         </table>
+      </body>
+   </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="packages.details">
+   <html>
+      <head>
+          <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+  <table width="100%"><tr align="left"><h2>Packages</h2><td>
+  </td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [packages]
+  [<a href="overview-cycles.html">cycles</a>]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+
+  <xsl:for-each select="./Packages/Package">
+    <xsl:if test="count(error) = 0">
+      <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+      <xsl:value-of select="@name"/></a></h3>
+
+      <table width="100%"><tr>
+        <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+        <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+        <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+        <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+        <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+      </tr></table>
+
+      <table width="100%" class="details">
+        <tr>
+          <th>Abstract Classes</th>
+          <th>Concrete Classes</th>
+          <th>Used by Packages</th>
+          <th>Uses Packages</th>
+        </tr>
+        <tr>
+          <td valign="top" width="25%">
+          <xsl:if test="count(AbstractClasses/Class)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="AbstractClasses/Class">
+              <xsl:value-of select="node()"/><br/>
+            </xsl:for-each>
+          </td>
+          <td valign="top" width="25%">
+            <xsl:if test="count(ConcreteClasses/Class)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="ConcreteClasses/Class">
+              <xsl:value-of select="node()"/><br/>
+            </xsl:for-each>
+          </td>
+          <td valign="top" width="25%">
+            <xsl:if test="count(UsedBy/Package)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="UsedBy/Package">
+              <a>
+                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+                <xsl:value-of select="node()"/>
+              </a><br/>
+            </xsl:for-each>
+          </td>
+          <td valign="top" width="25%">
+            <xsl:if test="count(DependsUpon/Package)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="DependsUpon/Package">
+              <a>
+                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+                <xsl:value-of select="node()"/>
+              </a><br/>
+            </xsl:for-each>
+          </td>
+        </tr>
+      </table>
+    </xsl:if>
+  </xsl:for-each>
+  <!-- this is often a long listing; provide a lower navigation table also -->
+  <table width="100%"><tr align="left"><td></td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [packages]
+  [<a href="overview-cycles.html">cycles</a>]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+      </body>
+   </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="cycles.details">
+   <html>
+      <head>
+         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+  <table width="100%"><tr align="left"><h2>Cycles</h2><td>
+  </td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [<a href="overview-packages.html">packages</a>]
+  [cycles]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+  <!--<table width="100%"><tr><td>
+  </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+  [<a href="#NVpackages">packages</a>]
+  [<a href="#NVcycles">cycles</a>]
+   [<a href="#NVexplanations">explanations</a>]
+  </td></tr></table> -->
+
+  <xsl:if test="count(Cycles/Package) = 0">
+    <p>There are no cyclic dependancies.</p>
+  </xsl:if>
+  <xsl:for-each select="Cycles/Package">
+     <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p>
+    <xsl:for-each select="Package">
+      <xsl:value-of select="."/><br/>
+    </xsl:for-each></p>
+  </xsl:for-each>
+  <!-- this is often a long listing; provide a lower navigation table also -->
+  <table width="100%"><tr align="left"><td></td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [<a href="overview-packages.html">packages</a>]
+  [cycles]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+  </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="explanations">
+   <html>
+      <head>
+         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+
+  <table width="100%"><tr align="left"><h2>Explanations</h2><td>
+  </td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [<a href="overview-packages.html">packages</a>]
+  [<a href="overview-cycles.html">cycles</a>]
+  [explanations]
+   </td></tr></table>
+
+  <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+
+  <h3><a name="EXnumber">Number of Classes</a></h3>
+    <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+  <h3><a name="EXafferent">Afferent Couplings</a></h3>
+    <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+  <h3><a name="EXefferent">Efferent Couplings</a></h3>
+    <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+  <h3><a name="EXabstractness">Abstractness</a></h3>
+    <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+    <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+  <h3><a name="EXinstability">Instability</a></h3>
+    <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+    <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+  <h3><a name="EXdistance">Distance</a></h3>
+    <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+    <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+    <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+
+      </body>
+   </html>
+</xsl:template>
+
+
+<!--
+Creates an html file that contains a link to all package links in overview-packages.html.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages" mode="all.packages">
+  <html>
+    <head>
+      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+    </head>
+    <body>
+  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+  [<a href="overview-summary.html" target="classFrame">summary</a>]
+  [<a href="overview-packages.html" target="classFrame">packages</a>]
+  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+   </td></tr></table>
+      <h2>Packages</h2>
+        <table width="100%">
+          <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link">
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+          <xsl:apply-templates select="Package[count(error) &gt; 0]" mode="all.packages.nolink">
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+        </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.link">
+  <tr>
+    <td nowrap="nowrap">
+         <a href="overview-packages.html#PK{@name}" target="classFrame">
+        <xsl:value-of select="@name"/>
+      </a>
+    </td>
+  </tr>
+</xsl:template>
+
+<!--
+I do not know JDepend enough to know if every error results in a non-analyzed package,
+but that is how I am presenting it to the viewer.  This may need to change.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink">
+  <tr>
+    <td nowrap="nowrap">
+       Not Analyzed: <xsl:value-of select="@name"/>
+    </td>
+  </tr>
+</xsl:template>
+
+<!--
+Creates an html file that contains a link to all package links in overview-cycles.html.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Cycles" mode="all.cycles">
+  <html>
+    <head>
+      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+    </head>
+    <body>
+  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+  [<a href="overview-summary.html" target="classFrame">summary</a>]
+  [<a href="overview-packages.html" target="classFrame">packages</a>]
+  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+   </td></tr></table>
+      <h2>Cycles</h2>
+        <table width="100%">
+           <xsl:apply-templates select="Package" mode="all.cycles">
+            <xsl:sort select="@Name"/>
+          </xsl:apply-templates>
+        </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Cycles/Package" mode="all.cycles">
+  <tr>
+    <td nowrap="nowrap">
+         <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a>
+    </td>
+  </tr>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+   <h1>JDepend Analysis</h1>
+  <table width="100%">
+  <tr>
+    <td align="left"></td>
+      <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td>
+  </tr>
+  </table>
+  <hr size="1"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend.xsl
new file mode 100644
index 0000000..e1e5e2d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend.xsl
@@ -0,0 +1,275 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+    Copyright  2002,2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+
+<xsl:output method="html" indent="yes"  encoding="US-ASCII"/>
+
+<xsl:template match="JDepend">
+    <html>
+    <head>
+        <title>JDepend Analysis</title>
+        
+    <style type="text/css">
+      body {
+        font:normal 68% verdana,arial,helvetica;
+        color:#000000;
+      }
+      table tr td, tr th {
+          font-size: 68%;
+      }
+      table.details tr th{
+        font-weight: bold;
+        text-align:left;
+        background:#a6caf0;
+      }
+      table.details tr td{
+        background:#eeeee0;
+      }
+      
+      p {
+        line-height:1.5em;
+        margin-top:0.5em; margin-bottom:1.0em;
+        margin-left:2em;
+        margin-right:2em;
+      }
+      h1 {
+        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+      }
+      h2 {
+        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+      }
+      h3 {
+        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+      }
+      h4 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h5 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h6 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      .Error {
+        font-weight:bold; color:red;
+      }
+      .Failure {
+        font-weight:bold; color:purple;
+      }
+      .Properties {
+        text-align:right;
+      }
+      </style>
+        
+        
+    </head>
+    <body>
+    <!--h1>JDepend Report</h1>
+    <ul>
+    <xsl:for-each select="./Packages/Package">
+                <xsl:sort select="@name"/>
+        <li><xsl:value-of select="@name"/></li>
+    </xsl:for-each>
+    </ul-->
+    
+    <h1><a name="top">JDepend Analysis</a></h1>
+    <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
+    <hr size="2" />
+    
+    <table width="100%"><tr><td>
+    <a name="NVsummary"><h2>Summary</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <table width="100%" class="details">
+        <tr>
+            <th>Package</th>
+            <th>Total Classes</th>
+            <th><a href="#EXnumber">Abstract Classes</a></th>
+            <th><a href="#EXnumber">Concrete Classes</a></th>
+            <th><a href="#EXafferent">Afferent Couplings</a></th>
+            <th><a href="#EXefferent">Efferent Couplings</a></th>
+            <th><a href="#EXabstractness">Abstractness</a></th>
+            <th><a href="#EXinstability">Instability</a></th>
+            <th><a href="#EXdistance">Distance</a></th>
+            
+        </tr>
+    <xsl:for-each select="./Packages/Package">
+        <xsl:if test="count(error) = 0">
+            <tr>
+                <td align="left">
+                    <a>
+                    <xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
+                    </xsl:attribute>
+                    <xsl:value-of select="@name"/>
+                    </a>
+                </td>
+                <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+                <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+                <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+                <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+                <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+                <td align="right"><xsl:value-of select="Stats/A"/></td>
+                <td align="right"><xsl:value-of select="Stats/I"/></td>
+                <td align="right"><xsl:value-of select="Stats/D"/></td>
+                
+
+            </tr>
+        </xsl:if>
+    </xsl:for-each>
+    <xsl:for-each select="./Packages/Package">
+        <xsl:if test="count(error) &gt; 0">
+            <tr>
+                <td align="left">
+                    <xsl:value-of select="@name"/>
+                </td>
+                <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+            </tr>
+        </xsl:if>
+    </xsl:for-each>
+    </table>
+    
+    <table width="100%"><tr><td>
+    <a name="NVpackages"><h2>Packages</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <xsl:for-each select="./Packages/Package">
+        <xsl:if test="count(error) = 0">
+            <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+            <xsl:value-of select="@name"/></a></h3>
+            
+            <table width="100%"><tr>
+                <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+                <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+                <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+                <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+                <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+            </tr></table>
+            
+            <table width="100%" class="details">
+                <tr>
+                    <th>Abstract Classes</th>
+                    <th>Concrete Classes</th>
+                    <th>Used by Packages</th>
+                    <th>Uses Packages</th>
+                </tr>
+                <tr>
+                    <td valign="top" width="25%">
+                    <xsl:if test="count(AbstractClasses/Class)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="AbstractClasses/Class">
+                            <xsl:value-of select="node()"/><br/>
+                        </xsl:for-each>
+                    </td>
+                    <td valign="top" width="25%">
+                        <xsl:if test="count(ConcreteClasses/Class)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="ConcreteClasses/Class">
+                            <xsl:value-of select="node()"/><br/>
+                        </xsl:for-each>
+                    </td>
+                    <td valign="top" width="25%">
+                        <xsl:if test="count(UsedBy/Package)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="UsedBy/Package">
+                            <a>
+                                <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+                                <xsl:value-of select="node()"/>
+                            </a><br/>
+                        </xsl:for-each>
+                    </td>
+                    <td valign="top" width="25%">
+                        <xsl:if test="count(DependsUpon/Package)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="DependsUpon/Package">
+                            <a>
+                                <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+                                <xsl:value-of select="node()"/>
+                            </a><br/>
+                        </xsl:for-each>
+                    </td>
+                </tr>
+            </table>
+        </xsl:if>
+    </xsl:for-each>
+    
+    <table width="100%"><tr><td>
+    <a name="NVcycles"><h2>Cycles</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <xsl:if test="count(Cycles/Package) = 0">
+        <p>There are no cyclic dependancies.</p>
+    </xsl:if>
+    <xsl:for-each select="Cycles/Package">
+        <h3><xsl:value-of select="@Name"/></h3><p>
+        <xsl:for-each select="Package">
+            <xsl:value-of select="."/><br/>
+        </xsl:for-each></p>
+    </xsl:for-each>
+    
+    <table width="100%"><tr><td>
+    <a name="NVexplanations"><h2>Explanations</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+    
+    <h3><a name="EXnumber">Number of Classes</a></h3>
+        <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+    <h3><a name="EXafferent">Afferent Couplings</a></h3>
+        <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+    <h3><a name="EXefferent">Efferent Couplings</a></h3>
+        <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+    <h3><a name="EXabstractness">Abstractness</a></h3> 
+        <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+        <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+    <h3><a name="EXinstability">Instability</a></h3>
+        <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+        <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+    <h3><a name="EXdistance">Distance</a></h3>
+        <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+        <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+        <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+    
+    </body>
+    </html>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames-xalan1.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames-xalan1.xsl
new file mode 100644
index 0000000..114e459
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames-xalan1.xsl
@@ -0,0 +1,716 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+   Copyright 2001-2004 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="testsuites">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+        <xsl:call-template name="package">
+            <xsl:with-param name="name" select="@package"/>
+        </xsl:call-template>
+    </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+    <xsl:param name="name"/>
+    <xsl:variable name="package.dir">
+        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+        <xsl:if test="$name = ''">.</xsl:if>
+    </xsl:variable>
+    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:call-template name="classes.list">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:call-template name="package.summary">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+    <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+        <xsl:if test="string-length(./system-out)!=0">
+            <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt">
+                <xsl:value-of select="./system-out" />
+            </redirect:write>
+        </xsl:if>
+        <xsl:if test="string-length(./system-err)!=0">
+            <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt">
+                <xsl:value-of select="./system-err" />
+            </redirect:write>
+        </xsl:if>
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+    <head>
+        <title>Unit Test Results.</title>
+    </head>
+    <frameset cols="20%,80%">
+        <frameset rows="30%,70%">
+            <frame src="overview-frame.html" name="packageListFrame"/>
+            <frame src="allclasses-frame.html" name="classListFrame"/>
+        </frameset>
+        <frame src="overview-summary.html" name="classFrame"/>
+        <noframes>
+            <h2>Frame Alert</h2>
+            <p>
+                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+            </p>
+        </noframes>
+    </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+    font:normal 68% verdana,arial,helvetica;
+    color:#000000;
+}
+table tr td, table tr th {
+    font-size: 68%;
+}
+table.details tr th{
+    font-weight: bold;
+    text-align:left;
+    background:#a6caf0;
+}
+table.details tr td{
+    background:#eeeee0;
+}
+
+p {
+    line-height:1.5em;
+    margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+    font-weight:bold; color:red;
+}
+.Failure {
+    font-weight:bold; color:purple;
+}
+.Properties {
+  text-align:right;
+}
+</xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every testsuite class.
+    It prints a summary of the testsuite and detailed information about
+    testcase methods.
+     ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+    <xsl:variable name="package.name" select="@package"/>
+    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+    <html>
+        <head>
+          <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+       <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:apply-templates select="properties"/>
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style type=\"text/css\">");
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>
+      </script>
+        </head>
+        <body>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="testsuite.test.header"/>
+                <xsl:apply-templates select="." mode="print.test"/>
+            </table>
+
+            <h2>Tests</h2>
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties &#187;
+                </a>
+            </div>
+            <xsl:if test="string-length(./system-out)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
+                        System.out &#187;
+                    </a>
+                </div>
+            </xsl:if>
+            <xsl:if test="string-length(./system-err)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
+                        System.err &#187;
+                    </a>
+                </div>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every package.
+    It prints the name of all classes that belongs to this package.
+    @param name the package name to print classes.
+     ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <h2><a href="package-summary.html" target="classFrame">
+                            <xsl:value-of select="$name"/>
+                            <xsl:if test="$name = ''">&lt;none&gt;</xsl:if>
+                        </a></h2>
+                    </td>
+                </tr>
+            </table>
+
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+                    <xsl:sort select="@name"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    Creates an all-classes.html file that contains a link to all package-summary.html
+    on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+    <html>
+        <head>
+            <title>All Unit Test Classes</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite" mode="all.classes">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+    <xsl:variable name="package.name" select="@package"/>
+    <tr>
+        <td nowrap="nowrap">
+            <a target="classFrame">
+                <xsl:attribute name="href">
+                    <xsl:if test="not($package.name='')">
+                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an html file that contains a link to all package-summary.html files on
+    each package existing on testsuites.
+    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+    <html>
+        <head>
+            <title>All Unit Test Packages</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+                    <xsl:sort select="@package"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+    <tr>
+        <td nowrap="nowrap">
+            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+                <xsl:value-of select="@package"/>
+                <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+    <html>
+        <head>
+            <title>Unit Test Results: Summary</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+        <xsl:call-template name="pageHeader"/>
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                    <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                    <xsl:otherwise>Pass</xsl:otherwise>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><xsl:value-of select="$testCount"/></td>
+            <td><xsl:value-of select="$failureCount"/></td>
+            <td><xsl:value-of select="$errorCount"/></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+        </td>
+        </tr>
+        </table>
+
+        <h2>Packages</h2>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package" order="ascending"/>
+                <!-- get the node set containing all testsuites that have the same package -->
+                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <tr valign="top">
+                    <!-- display a failure if there is any failure/error in the package -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="sum($insamepackage/@errors) &gt; 0">Error</xsl:when>
+                            <xsl:when test="sum($insamepackage/@failures) &gt; 0">Failure</xsl:when>
+                            <xsl:otherwise>Pass</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+                        <xsl:value-of select="@package"/>
+                        <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+                    </a></td>
+                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+                    </xsl:call-template>
+                    </td>
+                    <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
+                    <td><xsl:value-of select="$insamepackage/@hostname"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        </body>
+        </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="$name"/></h3>
+
+            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="class.metrics.header"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+            </table-->
+
+            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+            <xsl:if test="count($insamepackage) &gt; 0">
+                <h2>Classes</h2>
+                <p>
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+                    <xsl:apply-templates select="$insamepackage" mode="print.test">
+                        <xsl:sort select="@name"/>
+                    </xsl:apply-templates>
+                </table>
+                </p>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1>Unit Test Results</h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+        <th nowrap="nowrap">Time Stamp</th>
+        <th>Host</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <tr valign="top">
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+                <xsl:otherwise>Pass</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:apply-templates select="@tests"/></td>
+        <td><xsl:apply-templates select="@errors"/></td>
+        <td><xsl:apply-templates select="@failures"/></td>
+        <td><xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+        <td><xsl:apply-templates select="@timestamp"/></td>
+        <td><xsl:apply-templates select="@hostname"/></td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="error">Error</xsl:when>
+                <xsl:when test="failure">Failure</xsl:when>
+                <xsl:otherwise>TableRowColor</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><xsl:value-of select="@name"/></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+            so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <br/><br/>
+    <code>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the latter is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:param name="br"><br/></xsl:param>
+    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames.xsl
new file mode 100644
index 0000000..229e8dd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames.xsl
@@ -0,0 +1,712 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="http://xml.apache.org/xalan/redirect"
+    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+   Copyright 2001-2005 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="testsuites">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+        <xsl:call-template name="package">
+            <xsl:with-param name="name" select="@package"/>
+        </xsl:call-template>
+    </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+    <xsl:param name="name"/>
+    <xsl:variable name="package.dir">
+        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+        <xsl:if test="$name = ''">.</xsl:if>
+    </xsl:variable>
+    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:call-template name="classes.list">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:call-template name="package.summary">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+    <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+        <xsl:if test="string-length(./system-out)!=0">
+            <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt">
+                <xsl:value-of select="./system-out" />
+            </redirect:write>
+        </xsl:if>
+        <xsl:if test="string-length(./system-err)!=0">
+            <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt">
+                <xsl:value-of select="./system-err" />
+            </redirect:write>
+        </xsl:if>
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+    <head>
+        <title>Unit Test Results.</title>
+    </head>
+    <frameset cols="20%,80%">
+        <frameset rows="30%,70%">
+            <frame src="overview-frame.html" name="packageListFrame"/>
+            <frame src="allclasses-frame.html" name="classListFrame"/>
+        </frameset>
+        <frame src="overview-summary.html" name="classFrame"/>
+        <noframes>
+            <h2>Frame Alert</h2>
+            <p>
+                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+            </p>
+        </noframes>
+    </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+    font:normal 68% verdana,arial,helvetica;
+    color:#000000;
+}
+table tr td, table tr th {
+    font-size: 68%;
+}
+table.details tr th{
+    font-weight: bold;
+    text-align:left;
+    background:#a6caf0;
+}
+table.details tr td{
+    background:#eeeee0;
+}
+
+p {
+    line-height:1.5em;
+    margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+    font-weight:bold; color:red;
+}
+.Failure {
+    font-weight:bold; color:purple;
+}
+.Properties {
+  text-align:right;
+}
+</xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every testsuite class.
+    It prints a summary of the testsuite and detailed information about
+    testcase methods.
+     ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+    <xsl:variable name="package.name" select="@package"/>
+    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+    <html>
+        <head>
+          <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+       <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:apply-templates select="properties"/>
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style type=\"text/css\">");
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>
+      </script>
+        </head>
+        <body>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="testsuite.test.header"/>
+                <xsl:apply-templates select="." mode="print.test"/>
+            </table>
+
+            <h2>Tests</h2>
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties &#187;
+                </a>
+            </div>
+            <xsl:if test="string-length(./system-out)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
+                        System.out &#187;
+                    </a>
+                </div>
+            </xsl:if>
+            <xsl:if test="string-length(./system-err)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
+                        System.err &#187;
+                    </a>
+                </div>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every package.
+    It prints the name of all classes that belongs to this package.
+    @param name the package name to print classes.
+     ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <h2><a href="package-summary.html" target="classFrame">
+                            <xsl:value-of select="$name"/>
+                            <xsl:if test="$name = ''">&lt;none&gt;</xsl:if>
+                        </a></h2>
+                    </td>
+                </tr>
+            </table>
+
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+                    <xsl:sort select="@name"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    Creates an all-classes.html file that contains a link to all package-summary.html
+    on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+    <html>
+        <head>
+            <title>All Unit Test Classes</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite" mode="all.classes">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+    <xsl:variable name="package.name" select="@package"/>
+    <tr>
+        <td nowrap="nowrap">
+            <a target="classFrame">
+                <xsl:attribute name="href">
+                    <xsl:if test="not($package.name='')">
+                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                    </xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an html file that contains a link to all package-summary.html files on
+    each package existing on testsuites.
+    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+    <html>
+        <head>
+            <title>All Unit Test Packages</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+                    <xsl:sort select="@package"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+    <tr>
+        <td nowrap="nowrap">
+            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+                <xsl:value-of select="@package"/>
+                <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+    <html>
+        <head>
+            <title>Unit Test Results: Summary</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+        <xsl:call-template name="pageHeader"/>
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                    <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                    <xsl:otherwise>Pass</xsl:otherwise>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><xsl:value-of select="$testCount"/></td>
+            <td><xsl:value-of select="$failureCount"/></td>
+            <td><xsl:value-of select="$errorCount"/></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+        </td>
+        </tr>
+        </table>
+
+        <h2>Packages</h2>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package" order="ascending"/>
+                <!-- get the node set containing all testsuites that have the same package -->
+                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <tr valign="top">
+                    <!-- display a failure if there is any failure/error in the package -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="sum($insamepackage/@errors) &gt; 0">Error</xsl:when>
+                            <xsl:when test="sum($insamepackage/@failures) &gt; 0">Failure</xsl:when>
+                            <xsl:otherwise>Pass</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+                        <xsl:value-of select="@package"/>
+                        <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
+                    </a></td>
+                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+                    </xsl:call-template>
+                    </td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        </body>
+        </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="$name"/></h3>
+
+            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="class.metrics.header"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+            </table-->
+
+            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+            <xsl:if test="count($insamepackage) &gt; 0">
+                <h2>Classes</h2>
+                <p>
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+                    <xsl:apply-templates select="$insamepackage" mode="print.test">
+                        <xsl:sort select="@name"/>
+                    </xsl:apply-templates>
+                </table>
+                </p>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1>Unit Test Results</h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <tr valign="top">
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+                <xsl:otherwise>Pass</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><a href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:apply-templates select="@tests"/></td>
+        <td><xsl:apply-templates select="@errors"/></td>
+        <td><xsl:apply-templates select="@failures"/></td>
+        <td><xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="error">Error</xsl:when>
+                <xsl:when test="failure">Failure</xsl:when>
+                <xsl:otherwise>TableRowColor</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><xsl:value-of select="@name"/></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+            so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <br/><br/>
+    <code>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the latter is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:param name="br"><br/></xsl:param>
+    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-noframes.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-noframes.xsl
new file mode 100644
index 0000000..25487f8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-noframes.xsl
@@ -0,0 +1,461 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+	xmlns:lxslt="http://xml.apache.org/xslt"
+	xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"
+  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Copyright 2001-2004 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+ 
+<!--
+ 
+ Sample stylesheet to be used with Ant JUnitReport output.
+ 
+ It creates a non-framed report that can be useful to send via
+ e-mail or such.
+ 
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+ @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
+ 
+-->
+<xsl:template match="testsuites">
+    <html>
+        <head>
+            <title>Unit Test Results</title>
+    <style type="text/css">
+      body {
+        font:normal 68% verdana,arial,helvetica;
+        color:#000000;
+      }
+      table tr td, table tr th {
+          font-size: 68%;
+      }
+      table.details tr th{
+        font-weight: bold;
+        text-align:left;
+        background:#a6caf0;
+      }
+      table.details tr td{
+        background:#eeeee0;
+      }
+      
+      p {
+        line-height:1.5em;
+        margin-top:0.5em; margin-bottom:1.0em;
+      }
+      h1 {
+        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+      }
+      h2 {
+        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+      }
+      h3 {
+        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+      }
+      h4 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h5 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h6 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      .Error {
+        font-weight:bold; color:red;
+      }
+      .Failure {
+        font-weight:bold; color:purple;
+      }
+      .Properties {
+        text-align:right;
+      }
+      </style>
+      <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:for-each select="./testsuite">      
+            <xsl:apply-templates select="properties"/>
+        </xsl:for-each>
+
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style>")
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>  
+      </script>
+        </head>
+        <body>
+            <a name="top"></a>
+            <xsl:call-template name="pageHeader"/>  
+            
+            <!-- Summary part -->
+            <xsl:call-template name="summary"/>
+            <hr size="1" width="95%" align="left"/>
+            
+            <!-- Package List part -->
+            <xsl:call-template name="packagelist"/>
+            <hr size="1" width="95%" align="left"/>
+            
+            <!-- For each package create its part -->
+            <xsl:call-template name="packages"/>
+            <hr size="1" width="95%" align="left"/>
+            
+            <!-- For each class create the  part -->
+            <xsl:call-template name="classes"/>
+            
+        </body>
+    </html>
+</xsl:template>
+    
+    
+    
+    <!-- ================================================================== -->
+    <!-- Write a list of all packages with an hyperlink to the anchor of    -->
+    <!-- of the package name.                                               -->
+    <!-- ================================================================== -->
+    <xsl:template name="packagelist">   
+        <h2>Packages</h2>
+        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <!-- list all packages recursively -->
+            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package"/>
+                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+                
+                <!-- write a summary for the package -->
+                <tr valign="top">
+                    <!-- set a nice color depending if there is an error/failure -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                            <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
+                    <td><xsl:value-of select="$testCount"/></td>
+                    <td><xsl:value-of select="$errorCount"/></td>
+                    <td><xsl:value-of select="$failureCount"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="$timeCount"/>
+                    </xsl:call-template>
+                    </td>
+                </tr>
+            </xsl:for-each>
+        </table>        
+    </xsl:template>
+    
+    
+    <!-- ================================================================== -->
+    <!-- Write a package level report                                       -->
+    <!-- It creates a table with values from the document:                  -->
+    <!-- Name | Tests | Errors | Failures | Time                            -->
+    <!-- ================================================================== -->
+    <xsl:template name="packages">
+        <!-- create an anchor to this package name -->
+        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+            <xsl:sort select="@package"/>
+                <a name="{@package}"></a>
+                <h3>Package <xsl:value-of select="@package"/></h3>
+                
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+            
+                    <!-- match the testsuites of this package -->
+                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+                </table>
+                <a href="#top">Back to top</a>
+                <p/>
+                <p/>
+        </xsl:for-each>
+    </xsl:template>
+    
+    <xsl:template name="classes">
+        <xsl:for-each select="testsuite">
+            <xsl:sort select="@name"/>
+            <!-- create an anchor to this class name -->
+            <a name="{@name}"></a>
+            <h3>TestCase <xsl:value-of select="@name"/></h3>
+            
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+              <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties &#187;
+                </a>
+            </div>
+            <p/>
+            
+            <a href="#top">Back to top</a>
+        </xsl:for-each>
+    </xsl:template>
+    
+    <xsl:template name="summary">
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                    <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><xsl:value-of select="$testCount"/></td>
+            <td><xsl:value-of select="$failureCount"/></td>
+            <td><xsl:value-of select="$errorCount"/></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+        </td>
+        </tr>
+        </table>
+    </xsl:template>
+    
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+    
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1>Unit Test Results</h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org/ant'>Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <tr valign="top">
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <!-- set a nice color depending if there is an error/failure -->
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+    
+        <!-- print testsuite information -->
+        <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="failure | error">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><xsl:value-of select="@name"/></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <code>
+        <br/><br/>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the later is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:param name="br"><br/></xsl:param>
+    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/log.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/log.xsl
new file mode 100644
index 0000000..2272790
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/log.xsl
@@ -0,0 +1,210 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+    Copyright  2000-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+ 
+<!--
+
+  The purpose have this XSL is to provide a nice way to look at the output
+  from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
+  
+  @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
+  
+-->
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+<xsl:template match="/">
+<html>
+  <head>
+    <style type="text/css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin: 0;
+      font:normal 100% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    table.status {
+      font:bold 80% arial,helvetica,sanserif;
+      background-color:#525D76;
+      color:#ffffff;
+    }
+    table.log tr td, tr th {
+      font-size: 80%;
+    }
+    .error {
+      color:red;
+    }
+    .warn {
+      color:brown;
+    }
+    .info {
+      color:gray;
+    }
+    .debug{
+      color:gray;
+    }
+    .failed {
+      font-size:80%;
+      background-color: red;
+      color:#FFFFFF;
+      font-weight: bold
+    }
+    .complete {
+      font-size:80%;
+      background-color: #525D76;
+      color:#FFFFFF;
+      font-weight: bold
+    }
+    .a td { 
+      background: #efefef;
+    }
+    .b td { 
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      border: none
+    }
+    h3 {
+      font:bold 80% arial,helvetica,sanserif;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+    </style>
+  </head>
+  <body>
+    <!-- jakarta logo -->
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+    <tr>
+      <td valign="top" class="bannercell">
+        <a href="http://jakarta.apache.org/">
+        <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+        </a>
+      </td>
+      <td style="text-align:right;vertical-align:bottom">
+        <a href="http://jakarta.apache.org/ant">Apache Ant</a>
+      </td>
+    </tr>
+    </table>
+      
+    <table border="0" width="100%">
+    <tr><td><hr noshade="yes" size="1"/></td></tr>
+    </table>
+
+    <xsl:apply-templates select="build"/>
+
+    <!-- FOOTER -->
+    <table width="100%">
+      <tr><td><hr noshade="yes" size="1"/></td></tr>
+      <tr><td>
+      <div align="center"><font color="#525D76" size="-1"><em>
+      Copyright &#169; 2000-2002, Apache Software Foundation
+      </em></font></div>
+      </td></tr>
+    </table>
+  </body>
+</html>
+</xsl:template>
+
+<xsl:template match="build">
+  <!-- build status -->
+  <table width="100%">
+    <xsl:attribute name="class">
+      <xsl:if test="@error">failed</xsl:if>
+      <xsl:if test="not(@error)">complete</xsl:if>
+    </xsl:attribute>
+    <tr>
+      <xsl:if test="@error">
+        <td nowrap="yes">Build Failed</td> 
+      </xsl:if>
+      <xsl:if test="not(@error)">
+        <td nowrap="yes">Build Complete</td>
+      </xsl:if>
+        <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
+    </tr>
+    <tr>
+      <td colspan="2">
+        <xsl:if test="@error">
+          <tt><xsl:value-of select="@error"/></tt><br/>
+          <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
+        </xsl:if>
+      </td>
+    </tr>
+  </table>
+  <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
+    <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr>
+    <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr>
+    <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr>
+    <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr>
+  </table>
+  <!-- build information -->
+  <h3>Build events</h3>
+  <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
+  <tr>
+    <th nowrap="yes" align="left" width="1%">target</th>
+    <th nowrap="yes" align="left" width="1%">task</th>
+    <th nowrap="yes" align="left">message</th>
+  </tr>
+  <xsl:apply-templates select=".//message[@priority != 'debug']"/>
+  </table>
+  <p>
+  <!-- stacktrace -->
+  <xsl:if test="stacktrace">
+  <a name="stacktrace"/>
+  <h3>Error details</h3>
+  <table width="100%">
+    <tr><td>
+      <pre><xsl:value-of select="stacktrace"/></pre>
+    </td></tr>
+  </table>
+  </xsl:if>
+  </p>
+</xsl:template>
+
+<!-- report every message but those with debug priority -->
+<xsl:template match="message[@priority!='debug']">
+  <tr valign="top">
+    <!-- alternated row style -->
+    <xsl:attribute name="class">
+      <xsl:if test="position() mod 2 = 1">a</xsl:if>
+      <xsl:if test="position() mod 2 = 0">b</xsl:if>
+    </xsl:attribute>
+    <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
+    <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
+    <td class="{@priority}" nowrap="yes">
+            <xsl:value-of select="text()"/>
+    </td>
+  </tr>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/maudit-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/maudit-frames.xsl
new file mode 100644
index 0000000..eaaf180
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/maudit-frames.xsl
@@ -0,0 +1,510 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+    Copyright  2001-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+<!--
+
+    Stylesheet to transform an XML file generated by the Ant MAudit task into
+    a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
+
+    It use the Xalan redirect extension to write to multiple output files.
+
+    @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+-->
+
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="classes">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]">
+        <xsl:call-template name="package">
+            <xsl:with-param name="name" select="@package"/>
+        </xsl:call-template>
+    </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+    <xsl:param name="name"/>
+    <xsl:variable name="package.dir">
+        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+        <xsl:if test="$name = ''">.</xsl:if>
+    </xsl:variable>
+    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:call-template name="classes.list">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:call-template name="package.summary">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+    <xsl:for-each select="/classes/class[@package = $name]">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<HTML>
+    <HEAD><TITLE>Audit Results.</TITLE></HEAD>
+    <FRAMESET cols="20%,80%">
+        <FRAMESET rows="30%,70%">
+            <FRAME src="overview-frame.html" name="packageListFrame"/>
+            <FRAME src="allclasses-frame.html" name="classListFrame"/>
+        </FRAMESET>
+        <FRAME src="overview-summary.html" name="classFrame"/>
+    </FRAMESET>
+    <noframes>
+        <H2>Frame Alert</H2>
+        <P>
+        This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+        </P>
+    </noframes>
+</HTML>
+</xsl:template>
+
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin-left: 10;
+      margin-right: 10;
+      font:normal 80% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    .a td {
+      background: #efefef;
+    }
+    .b td {
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      font-weight:bold;
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      font-size:100%;
+      border: none
+    }
+    table.log tr td, tr th {
+
+    }
+    h2 {
+      font-weight:bold;
+      font-size:140%;
+      margin-bottom: 5;
+    }
+    h3 {
+      font-size:100%;
+      font-weight:bold;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+</xsl:template>
+
+
+<!-- print the violations of the class -->
+<xsl:template match="class" mode="class.details">
+    <xsl:variable name="package.name" select="@package"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <xsl:call-template name="pageHeader"/>
+            <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+            <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:call-template name="class.audit.header"/>
+                <xsl:apply-templates select="." mode="print.audit"/>
+            </table>
+
+            <H3>Violations</H3>
+            <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:call-template name="violation.audit.header"/>
+                <xsl:apply-templates select="./violation" mode="print.audit">
+                    <xsl:sort data-type="number" select="@line"/>
+                </xsl:apply-templates>
+            </table>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+    <xsl:param name="name"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2>
+                    </td>
+                </tr>
+            </table>
+
+            <h2>Classes</h2>
+            <TABLE WIDTH="100%">
+                <xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </TABLE>
+        </BODY>
+    </HTML>
+</xsl:template>
+<!-- the class to list -->
+<xsl:template match="class" mode="classes.list">
+    <tr>
+        <td nowrap="nowrap">
+            <!-- @bug naming to fix for inner classes -->
+            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an all-classes.html file that contains a link to all package-summary.html
+    on each class.
+-->
+<xsl:template match="classes" mode="all.classes">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:apply-templates select=".//class" mode="all.classes">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+    <!-- (ancestor::package)[last()] is buggy in MSXML3 ? -->
+    <xsl:variable name="package.name" select="@package"/>
+    <tr>
+        <td nowrap="nowrap">
+            <a target="classFrame">
+                <xsl:attribute name="href">
+                    <xsl:if test="not($package.name='')">
+                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an html file that contains a link to all package-summary.html files on
+    each package existing on testsuites.
+    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="classes" mode="all.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+                <table width="100%">
+                    <xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages">
+                        <xsl:sort select="@package" order="ascending"/>
+                    </xsl:apply-templates>
+                </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.packages">
+    <tr>
+        <td nowrap="nowrap">
+            <a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+                <xsl:value-of select="@package"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="classes" mode="overview.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body onload="open('allclasses-frame.html','classListFrame')">
+        <xsl:call-template name="pageHeader"/>
+        <h3>Summary</h3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <tr>
+            <th>Audited classes</th>
+            <th>Reported classes</th>
+            <th>Violations</th>
+        </tr>
+        <tr class="a">
+            <td><xsl:value-of select="@audited"/></td>
+            <td><xsl:value-of select="@reported"/></td>
+            <td><xsl:value-of select="@violations"/></td>
+        </tr>
+        </table>
+        <table border="0" width="100%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: Rules checked have originated from style guidelines suggested by the language designers,
+        experience from the Java development community and insite experience. Violations are generally
+        reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x)
+        and Metamata Audit rules (x.x).
+        Please consult these documents for additional information about violations.
+        <p/>
+        Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta.
+        <p/>
+        One should note that these violations do not necessary underline errors but should be used
+        as an indication for <i>possible</i> errors. As always, use your best judgment and review
+        them carefully, it might save you hours of debugging.
+        </td>
+        </tr>
+        </table>
+
+        <h3>Packages</h3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+            <xsl:call-template name="class.audit.header"/>
+            <xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]">
+                <xsl:sort select="@package" order="ascending"/>
+                <tr>
+          <xsl:call-template name="alternate-row"/>
+                    <td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
+                    <td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        <xsl:call-template name="pageFooter"/>
+        </body>
+        </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+    <xsl:param name="name"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="$name"/></h3>
+
+            <!--table border="0" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:call-template name="class.metrics.header"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+            </table-->
+
+            <xsl:if test="count(/classes/class[./@package = $name]) &gt; 0">
+                <H3>Classes</H3>
+                <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                    <xsl:call-template name="class.audit.header"/>
+                    <xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit">
+                        <xsl:sort select="@name"/>
+                    </xsl:apply-templates>
+                </table>
+            </xsl:if>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+
+  <!-- jakarta logo -->
+  <table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="bannercell" rowspan="2">
+      <a href="http://jakarta.apache.org/">
+      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+      </a>
+    </td>
+        <td style="text-align:right"><h2>Source Code Audit</h2></td>
+        </tr>
+        <tr>
+        <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+        </tr>
+  </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageFooter">
+    <table width="100%">
+      <tr><td><hr noshade="yes" size="1"/></td></tr>
+      <tr><td>
+      <div align="center"><font color="#525D76" size="-1"><em>
+      Copyright &#169; 1999-2001, Apache Software Foundation
+      </em></font></div>
+      </td></tr>
+    </table>
+</xsl:template>
+
+
+<!-- class header -->
+<xsl:template name="class.audit.header">
+    <tr>
+        <th width="80%">Name</th>
+        <th>Violations</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="violation.audit.header">
+    <tr>
+        <th>Line</th>
+        <th>Message</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="class" mode="print.audit">
+    <tr>
+    <xsl:call-template name="alternate-row"/>
+        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:apply-templates select="@violations"/></td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="violation" mode="print.audit">
+    <tr>
+    <xsl:call-template name="alternate-row"/>
+        <td><xsl:value-of select="@line"/></td>
+        <td><xsl:apply-templates select="@message"/></td>
+    </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+  <xsl:if test="position() mod 2 = 1">a</xsl:if>
+  <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/mmetrics-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/mmetrics-frames.xsl
new file mode 100644
index 0000000..f105ea8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/mmetrics-frames.xsl
@@ -0,0 +1,1033 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+  xmlns:lxslt="http://xml.apache.org/xslt"
+  xmlns:xalan="http://xml.apache.org/xalan"
+  xmlns:redirect="org.apache.xalan.lib.Redirect"
+  exclude-result-prefixes="xalan"
+  extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+    Copyright  2001-2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+<!--
+  @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+  -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- default max value for the metrics -->
+<xsl:param name="vg.max" select="10"/>
+<xsl:param name="loc.max" select="1000"/>
+<xsl:param name="dit.max" select="10"/>
+<xsl:param name="noa.max" select="250"/>
+<xsl:param name="nrm.max" select="50"/>
+<xsl:param name="nlm.max" select="250"/>
+<xsl:param name="wmc.max" select="250"/>
+<xsl:param name="rfc.max" select="50"/>
+<xsl:param name="dac.max" select="10"/>
+<xsl:param name="fanout.max" select="10"/>
+<xsl:param name="cbo.max" select="15"/>
+<xsl:param name="lcom.max" select="10"/>
+<xsl:param name="nocl.max" select="10"/>
+
+
+<!-- create a tree fragment to speed up processing -->
+<xsl:variable name="doctree.var">
+  <xsl:element name="classes">
+    <xsl:for-each select=".//class">
+      <xsl:element name="class">
+        <xsl:attribute name="package">
+          <xsl:value-of select="(ancestor::package)[last()]/@name"/>
+        </xsl:attribute>
+        <xsl:copy-of select="@*"/>
+        <xsl:attribute name="name">
+          <xsl:apply-templates select="." mode="class.name"/>
+        </xsl:attribute>
+        <xsl:copy-of select="method"/>
+      </xsl:element>
+    </xsl:for-each>
+  </xsl:element>
+</xsl:variable>
+
+<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/>
+
+<xsl:template match="metrics">
+
+  <!-- create the index.html -->
+  <redirect:write file="{$output.dir}/index.html">
+    <xsl:call-template name="index.html"/>
+  </redirect:write>
+
+  <!-- create the stylesheet.css -->
+  <redirect:write file="{$output.dir}/stylesheet.css">
+    <xsl:call-template name="stylesheet.css"/>
+  </redirect:write>
+
+  <redirect:write file="{$output.dir}/metrics-reference.html">
+    <xsl:call-template name="metrics-reference.html"/>
+  </redirect:write>
+
+  <!-- create the overview-packages.html at the root -->
+  <redirect:write file="{$output.dir}/overview-summary.html">
+    <xsl:apply-templates select="." mode="overview.packages"/>
+  </redirect:write>
+
+  <!-- create the all-packages.html at the root -->
+  <redirect:write file="{$output.dir}/overview-frame.html">
+    <xsl:apply-templates select="." mode="all.packages"/>
+  </redirect:write>
+
+  <!-- create the all-classes.html at the root -->
+  <redirect:write file="{$output.dir}/allclasses-frame.html">
+    <xsl:apply-templates select="." mode="all.classes"/>
+  </redirect:write>
+
+  <!-- process all packages -->
+  <xsl:apply-templates select=".//package"/>
+</xsl:template>
+
+
+<xsl:template match="package">
+  <xsl:variable name="package.name" select="@name"/>
+  <xsl:variable name="package.dir">
+    <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if>
+    <xsl:if test="$package.name = 'unnamed package'">.</xsl:if>
+  </xsl:variable>
+  <!-- create a classes-list.html in the package directory -->
+  <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+    <xsl:apply-templates select="." mode="classes.list"/>
+  </redirect:write>
+
+  <!-- create a package-summary.html in the package directory -->
+  <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+    <xsl:apply-templates select="." mode="package.summary"/>
+  </redirect:write>
+
+  <!-- for each class, creates a @name.html -->
+  <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+  <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+      <!--Processing <xsl:value-of select="$class.name"/><xsl:text>&#10;</xsl:text> -->
+    <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+      <xsl:apply-templates select="." mode="class.details"/>
+    </redirect:write>
+  </xsl:for-each>
+</xsl:template>
+
+<!-- little trick to compute the classname for inner and non inner classes -->
+<!-- this is all in one line to avoid CRLF in the name -->
+<xsl:template match="class" mode="class.name">
+    <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<HTML>
+  <HEAD><TITLE>Metrics Results.</TITLE></HEAD>
+  <FRAMESET cols="20%,80%">
+    <FRAMESET rows="30%,70%">
+      <FRAME src="overview-frame.html" name="packageListFrame"/>
+      <FRAME src="allclasses-frame.html" name="classListFrame"/>
+    </FRAMESET>
+    <FRAME src="overview-summary.html" name="classFrame"/>
+  </FRAMESET>
+  <noframes>
+    <H2>Frame Alert</H2>
+    <P>
+    This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+    </P>
+  </noframes>
+</HTML>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="metrics-reference.html">
+<html>
+<head>
+<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/>
+</head>
+<body style="text-align:justify;">
+<h2>Metrics Reference</h2>
+<a href="#V(G)">V(G)</a> |
+<a href="#LOC">LOC</a> |
+<a href="#DIT">DIT</a> |
+<a href="#NOA">NOA</a> |
+<a href="#NRM">NRM</a> |
+<a href="#NLM">NLM</a> |
+<a href="#WMC">WMC</a> |
+<a href="#RFC">RFC</a> |
+<a href="#DAC">DAC</a> |
+<a href="#FANOUT">FANOUT</a> |
+<a href="#CBO">CBO</a> |
+<a href="#LCOM">LCOM</a> |
+<a href="#NOC">NOC</a>
+
+<a name="V(G)"/>
+<h3>Cyclomatic Complexity - V(G)</h3>
+This metric was introduced in the 1970s to measure the amount of control
+flow complexity or branching complexity in a module such as a
+subroutine. It gives the number of paths that may be taken through the
+code, and was initially developed to give some measure of the cost of
+producing a test case for the module by executing each path.
+<p/>
+Methods with a high cyclomatic complexity tend to be more difficult to
+understand and maintain. In general the more complex the methods of an
+application, the more difficult it will be to test it, and this will adversely
+affect its reliability.
+<p/>
+V(G) is a measure of the control flow complexity of a method or
+constructor.  It counts the number of branches in the body of the method,
+defined as:
+<ul>
+<li>while statements;</li>
+<li>if statements;</li>
+<li>for statements.</li>
+</ul>
+
+The metric can also be configured to count each case of a switch
+statement as well.
+
+<a name="LOC"/>
+<h3>Lines of Code - LOC</h3>
+
+This is perhaps the simplest of all the metrics to define and compute.
+Counting lines has a long history as a software metric dating from before
+the rise of structured programming, and it is still in widespread use today.
+The size of a method affects the ease with which it can be understood, its
+reusability and its maintainability. There are a variety of ways that the size
+can be calculated. These include counting all the lines of code, the number
+of statements, the blank lines of code, the lines of commentary, and the
+lines consisting only of syntax such as block delimiters.
+<p/>
+This metric can also be used for sizing other constructs as well, for
+example, the overall size of a Java class or package can be measured by
+counting the number of source lines it consists of.
+<p/>
+LOC can be used to determine the size of a compilation unit (source file),
+class or interface, method, constructor, or field.  It can be configured to
+ignore:
+<ul>
+<li>blank lines;</li>
+<li>lines consisting only of comments;</li>
+<li>lines consisting only of opening and closing braces.</li>
+</ul>
+
+<a name="DIT"/>
+<h3>Depth of Inheritance Hierarchy - DIT</h3>
+
+This metric calculates how far down the inheritance hierarchy a class is
+declared. In Java all classes have java.lang.Object as their ultimate
+superclass, which is defined to have a depth of 1. So a class that
+immediately extends java.lang.Object has a metric value of 2; any of its
+subclasses will have a value of 3, and so on.
+<p/>
+A class that is deep within the tree inherits more methods and state
+variables, thereby increasing its complexity and making it difficult to
+predict its behavior. It can be harder to understand a system with many
+inheritance layers.
+<p/>
+DIT is defined for classes and interfaces:
+<ul>
+<li>all interface types have a depth of 1;</li>
+<li>the class java.lang.Object has a depth of 1;</li>
+<li>all other classes have a depth of 1 + the depth of their super class.</li>
+</ul>
+
+<a name="NOA"/>
+<h3>Number of Attributes - NOA</h3>
+
+The number of distinct state variables in a class serves as one measure of
+its complexity. The more state a class represents the more difficult it is to
+maintain invariants for it. It also hinders comprehensibility and reuse.
+<p/>
+In Java, state can be exposed to subclasses through protected fields, which
+entails that the subclass also be aware of and maintain any invariants. This
+interference with the class's data encapsulation can be a source of defects
+and hidden dependencies between the state variables.
+<p/>
+NOA is defined for classes and interfaces.  It counts the number of fields
+declared in the class or interface.
+
+<a name="NRM"/>
+<h3>Number of Remote Methods - NRM</h3>
+
+NRM is defined for classes.  A remote method call is defined as an
+invocation of a method that is not declared in any of:
+<ul>
+<li>the class itself;</li>
+<li>a class or interface that the class extends or implements;</li>
+<li>a class or method that extends the class.</li>
+</ul>
+
+The value is the count of all the remote method calls in all of the methods
+and constructors of the class.
+
+<a name="NLM"/>
+<h3>Number of Local Methods - NLM</h3>
+
+NLM is defined for classes and interfaces.  A local method is defined as a
+method that is declared in the class or interface. NLM can be configured to
+include the local methods of all of the class's superclasses.  Methods with
+public, protected, package and private visibility can be independently
+counted by setting configuration parameters.
+
+<a name="WMC"/>
+<h3>Weighted Methods per Class - WMC</h3>
+
+If the number of methods in a class can be determined during the design
+and modeling phase of a project, it can be used as a predictor of how
+much time and effort is needed to develop, debug and maintain it. This
+metric can be further refined by incorporating a weighting for the
+complexity of each method. The usual weighting is given by the cyclomatic
+complexity of the method.
+<p/>
+The subclasses of a class inherit all of its public and protected methods,
+and possibly its package methods as well, so the number of methods a
+class has directly impacts the complexity of its subclasses. Classes with
+large numbers of methods are often specific to a particular application,
+reducing the ability to reuse them.
+<p/>
+The definition of WMC is based upon NLM, and it provides the same
+configuration parameters for counting inherited methods and of varying
+visibility. The main difference is that NLM always counts each method as 1,
+whereas WMC will weight each method. There are two weighting schemes:
+<ul>
+<li>V(G) the cyclomatic complexity of the method is used as its weight.
+   Methods from class files are given a V(G) of 1.</li>
+<li>the arity, or the number of parameters of the method are used to
+   determine the weight.</li>
+</ul>
+
+<a name="RFC"/>
+<h3>Response For Class - RFC</h3>
+
+The response set of a class is the set of all methods that can be invoked as
+a result of a message sent to an object of the class. This includes methods
+in the class's inheritance hierarchy and methods that can be invoked on
+other objects. The Response For Class metric is defined to be size of the
+response set for the class. A class which provides a larger response set is
+considered to be more complex than one with a smaller response set.
+<p/>
+One reason for this is that if a method call on a class can result in a large
+number of different method calls on the target and other classes, then it
+can be harder to test the behavior of the class and debug problems. It will
+typically require a deeper understanding of the potential interactions that
+objects of the class can have with the rest of the system.
+<p/>
+RFC is defined as the sum of NLM and NRM for the class.  The local methods
+include all of the public, protected, package and private methods, but not
+methods declared only in a superclass.
+
+<a name="DAC"/>
+<h3>Data Abstraction Coupling - DAC</h3>
+
+DAC is defined for classes and interfaces.  It counts the number of reference
+types that are used in the field declarations of the class or interface.  The
+component types of arrays are also counted.  Any field with a type that is
+either a supertype or a subtype of the class is not counted.
+
+<a name="FANOUT"/>
+<h3>Fan Out - FANOUT</h3>
+
+FANOUT is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations;</li>
+<li>formal parameters and return types;</li>
+<li>throws declarations;</li>
+<li>local variables.</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="CBO"/>
+<h3>Coupling Between Objects - CBO</h3>
+
+When one object or class uses another object or class they are said to be
+coupled. One major source of coupling is that between a superclass and a
+subclass. A coupling is also introduced when a method or field in another
+class is accessed, or when an object of another class is passed into or out
+of a method invocation. Coupling Between Objects is a measure of the
+non-inheritance coupling between two objects.
+<p/>
+A high value of coupling reduces the modularity of the class and makes
+reuse more difficult. The more independent a class is the more likely it is
+that it will be possible to reuse it in another part of the system. When a
+class is coupled to another class it becomes sensitive to changes in that
+class, thereby making maintenance for difficult. In addition, a class that is
+overly dependent on other classes can be difficult to understand and test in
+isolation.
+<p/>
+CBO is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations</li>
+<li>formal parameters and return types</li>
+<li>throws declarations</li>
+<li>local variables</li>
+</ul>
+
+It also counts:
+<ul>
+<li>types from which field and method selections are made</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="LCOM"/>
+<h3>Lack of Cohesion Of Methods - LCOM</h3>
+
+The cohesion of a class is the degree to which its methods are related to
+each other. It is determined by examining the pattern of state variable
+accesses within the set of methods. If all the methods access the same state
+variables then they have high cohesion; if they access disjoint sets of
+variables then the cohesion is low. An extreme example of low cohesion
+would be if none of the methods accessed any of the state variables.
+
+If a class exhibits low method cohesion it indicates that the design of the
+class has probably been partitioned incorrectly, and could benefit by being
+split into more classes with individually higher cohesion. On the other
+hand, a high value of cohesion (a low lack of cohesion) implies that the
+class is well designed. A cohesive class will tend to provide a high degree
+of encapsulation, whereas a lack of cohesion decreases encapsulation and
+increases complexity.
+<p/>
+Another form of cohesion that is useful for Java programs is cohesion
+between nested and enclosing classes. A nested class that has very low
+cohesion with its enclosing class would probably better designed as a peer
+class rather than a nested class.
+<p/>
+LCOM is defined for classes. Operationally, LCOM takes each pair of
+methods in the class and determines the set of fields they each access. If
+they have disjoint sets of field accesses increase the count P by one. If they
+share at least one field access then increase Q by one. After considering
+each pair of methods,
+LCOM = (P > Q) ? (P - Q) : 0
+<p/>
+Indirect access to fields via local methods can be considered by setting a
+metric configuration parameter.
+
+<a name="NOC"/>
+<h3>Number Of Classes - NOC</h3>
+
+The overall size of the system can be estimated by calculating the number
+of classes it contains. A large system with more classes is more complex
+than a smaller one because the number of potential interactions between
+objects is higher. This reduces the comprehensibility of the system which
+in turn makes it harder to test, debug and maintain.
+<p/>
+If the number of classes in the system can be projected during the initial
+design phase of the project it can serve as a base for estimating the total
+effort and cost of developing, debugging and maintaining the system.
+<p/>
+The NOC metric can also usefully be applied at the package and class level
+as well as the total system.
+<p/>
+NOCL is defined for class and interfaces. It counts the number of classes or
+interfaces that are declared. This is usually 1, but nested class declarations
+will increase this number.
+</body>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin-left: 10;
+      margin-right: 10;
+      font:normal 80% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    .a td {
+      background: #efefef;
+    }
+    .b td {
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      font-weight:bold;
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      font-size:100%;
+      border: none
+    }
+    table.log tr td, tr th {
+
+    }
+    h2 {
+      font-weight:bold;
+      font-size:140%;
+      margin-bottom: 5;
+    }
+    h3 {
+      font-size:100%;
+      font-weight:bold;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+    .Error {
+      font-weight:bold; color:red;
+    }
+
+</xsl:template>
+
+<!-- print the metrics of the class -->
+<xsl:template match="class" mode="class.details">
+  <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/-->
+  <xsl:variable name="package.name" select="@package"/>
+  <HTML>
+    <HEAD>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="$package.name"/>
+      </xsl:call-template>
+    </HEAD>
+    <BODY>
+      <xsl:call-template name="pageHeader"/>
+
+      <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <xsl:call-template name="all.metrics.header"/>
+        <xsl:apply-templates select="." mode="print.metrics"/>
+      </table>
+
+      <H3>Methods</H3>
+      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <xsl:call-template name="method.metrics.header"/>
+        <xsl:apply-templates select="method" mode="print.metrics"/>
+      </table>
+
+      <xsl:call-template name="pageFooter"/>
+    </BODY>
+  </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+  <HTML>
+    <HEAD>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="@name"/>
+      </xsl:call-template>
+    </HEAD>
+    <BODY>
+      <table width="100%">
+        <tr>
+          <td nowrap="nowrap">
+            <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+          </td>
+        </tr>
+      </table>
+
+      <H2>Classes</H2>
+      <TABLE WIDTH="100%">
+        <!-- xalan-nodeset:nodeset for Xalan 1.2.2 -->
+            <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+                <xsl:sort select="@name"/>
+          <tr>
+            <td nowrap="nowrap">
+              <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+            </td>
+          </tr>
+            </xsl:for-each>
+      </TABLE>
+    </BODY>
+  </HTML>
+</xsl:template>
+
+
+<!--
+  Creates an all-classes.html file that contains a link to all package-summary.html
+  on each class.
+-->
+<xsl:template match="metrics" mode="all.classes">
+  <html>
+    <head>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="''"/>
+      </xsl:call-template>
+    </head>
+    <body>
+      <h2>Classes</h2>
+      <table width="100%">
+          <xsl:for-each select="$doctree/classes/class">
+              <xsl:sort select="@name"/>
+              <xsl:apply-templates select="." mode="all.classes"/>
+          </xsl:for-each>
+      </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+    <xsl:variable name="package.name" select="@package"/>
+    <xsl:variable name="class.name" select="@name"/>
+  <tr>
+    <td nowrap="nowrap">
+      <a target="classFrame">
+        <xsl:attribute name="href">
+          <xsl:if test="not($package.name='unnamed package')">
+            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+          </xsl:if>
+          <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text>
+        </xsl:attribute>
+        <xsl:value-of select="$class.name"/>
+      </a>
+    </td>
+  </tr>
+</xsl:template>
+
+<!--
+  Creates an html file that contains a link to all package-summary.html files on
+  each package existing on testsuites.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="metrics" mode="all.packages">
+  <html>
+    <head>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="./package/@name"/>
+      </xsl:call-template>
+    </head>
+    <body>
+      <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+      <h2>Packages</h2>
+        <table width="100%">
+          <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages">
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+        </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="package" mode="all.packages">
+  <tr>
+    <td nowrap="nowrap">
+      <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+        <xsl:value-of select="@name"/>
+      </a>
+    </td>
+  </tr>
+</xsl:template>
+
+
+<xsl:template match="metrics" mode="overview.packages">
+  <html>
+    <head>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="''"/>
+      </xsl:call-template>
+    </head>
+    <body onload="open('allclasses-frame.html','classListFrame')">
+    <xsl:call-template name="pageHeader"/>
+    <h3>Summary</h3>
+    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tr>
+      <th><a href="metrics-reference.html#V(G)">V(G)</a></th>
+      <th><a href="metrics-reference.html#LOC">LOC</a></th>
+      <th><a href="metrics-reference.html#DIT">DIT</a></th>
+      <th><a href="metrics-reference.html#NOA">NOA</a></th>
+      <th><a href="metrics-reference.html#NRM">NRM</a></th>
+      <th><a href="metrics-reference.html#NLM">NLM</a></th>
+      <th><a href="metrics-reference.html#WMC">WMC</a></th>
+      <th><a href="metrics-reference.html#RFC">RFC</a></th>
+      <th><a href="metrics-reference.html#DAC">DAC</a></th>
+      <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th>
+      <th><a href="metrics-reference.html#CBO">CBO</a></th>
+      <th><a href="metrics-reference.html#LCOM">LCOM</a></th>
+      <th><a href="metrics-reference.html#NOCL">NOCL</a></th>
+    </tr>
+    <xsl:apply-templates select="." mode="print.metrics"/>
+    </table>
+    <table border="0" width="100%">
+    <tr>
+    <td style="text-align: justify;">
+    Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+    various kind of complexity. Complexity is a common source of problems and defects in software.
+    High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+    a program.
+    <p/>
+    The primary use of metrics is to focus your attention on those parts of code that potentially are
+    complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+    actions.
+    For additional information about metrics and their meaning, please consult
+    Metamata Metrics manual.
+    </td>
+    </tr>
+    </table>
+
+    <h3>Packages</h3>
+    <table border="0" cellpadding="5" cellspacing="2" width="100%">
+      <xsl:call-template name="all.metrics.header"/>
+      <xsl:for-each select=".//package[not(@name = 'unnamed package')]">
+        <xsl:sort select="@name" order="ascending"/>
+        <xsl:apply-templates select="." mode="print.metrics"/>
+      </xsl:for-each>
+    </table>
+    <!-- @bug there could some classes at this level (classes in unnamed package) -->
+    <xsl:call-template name="pageFooter"/>
+    </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="package" mode="package.summary">
+  <HTML>
+    <HEAD>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="@name"/>
+      </xsl:call-template>
+    </HEAD>
+    <body onload="open('package-frame.html','classListFrame')">
+      <xsl:call-template name="pageHeader"/>
+      <!-- create an anchor to this package name -->
+      <h3>Package <xsl:value-of select="@name"/></h3>
+
+      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <xsl:call-template name="all.metrics.header"/>
+        <xsl:apply-templates select="." mode="print.metrics"/>
+      </table>
+
+      <table border="0" width="100%">
+      <tr>
+      <td style="text-align: justify;">
+      Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+      various kind of complexity. Complexity is a common source of problems and defects in software.
+      High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+      a program.
+      <p/>
+      The primary use of metrics is to focus your attention on those parts of code that potentially are
+      complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+      actions.
+      For additional information about metrics and their meaning, please consult
+      Metamata Metrics manual.
+      </td>
+      </tr>
+      </table>
+
+      <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/>
+      <xsl:if test="count($classes-in-package) &gt; 0">
+        <H3>Classes</H3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+          <xsl:call-template name="all.metrics.header"/>
+          <xsl:for-each select="$classes-in-package">
+                <xsl:sort select="@name"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+          </xsl:for-each>
+        </table>
+      </xsl:if>
+
+      <xsl:call-template name="pageFooter"/>
+    </body>
+  </HTML>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+  <xsl:param name="path"/>
+  <xsl:if test="contains($path,'.')">
+    <xsl:text>../</xsl:text>
+    <xsl:call-template name="path">
+      <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+    </xsl:call-template>
+  </xsl:if>
+  <xsl:if test="not(contains($path,'.')) and not($path = '')">
+    <xsl:text>../</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+  <xsl:param name="package.name"/>
+  <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+
+  <!-- jakarta logo -->
+  <table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="bannercell" rowspan="2">
+      <a href="http://jakarta.apache.org/">
+      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+      </a>
+    </td>
+    <td style="text-align:right"><h2>Source Code Metrics</h2></td>
+    </tr>
+    <tr>
+    <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+    </tr>
+  </table>
+  <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+    <table width="100%">
+      <tr><td><hr noshade="yes" size="1"/></td></tr>
+      <tr><td>
+      <div align="center"><font color="#525D76" size="-1"><em>
+      Copyright &#169; 1999-2001, Apache Software Foundation
+      </em></font></div>
+      </td></tr>
+    </table>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="all.metrics.header">
+  <tr>
+    <th width="80%">Name</th>
+    <th nowrap="nowrap">V(G)</th>
+    <th>LOC</th>
+    <th>DIT</th>
+    <th>NOA</th>
+    <th>NRM</th>
+    <th>NLM</th>
+    <th>WMC</th>
+    <th>RFC</th>
+    <th>DAC</th>
+    <th>FANOUT</th>
+    <th>CBO</th>
+    <th>LCOM</th>
+    <th>NOCL</th>
+  </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="method.metrics.header">
+  <tr>
+    <th width="80%">Name</th>
+    <th nowrap="nowrap">V(G)</th>
+    <th>LOC</th>
+    <th>FANOUT</th>
+    <th>CBO</th>
+  </tr>
+</xsl:template>
+
+<!-- method information -->
+<xsl:template match="method" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+    <td><xsl:apply-templates select="@name"/></td>
+    <td><xsl:apply-templates select="@vg"/></td>
+    <td><xsl:apply-templates select="@loc"/></td>
+    <td><xsl:apply-templates select="@fanout"/></td>
+    <td><xsl:apply-templates select="@cbo"/></td>
+  </tr>
+</xsl:template>
+
+<!-- class information -->
+<xsl:template match="class" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+    <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+    <td><xsl:apply-templates select="@vg"/></td>
+    <td><xsl:apply-templates select="@loc"/></td>
+    <td><xsl:apply-templates select="@dit"/></td>
+    <td><xsl:apply-templates select="@noa"/></td>
+    <td><xsl:apply-templates select="@nrm"/></td>
+    <td><xsl:apply-templates select="@nlm"/></td>
+    <td><xsl:apply-templates select="@wmc"/></td>
+    <td><xsl:apply-templates select="@rfc"/></td>
+    <td><xsl:apply-templates select="@dac"/></td>
+    <td><xsl:apply-templates select="@fanout"/></td>
+    <td><xsl:apply-templates select="@cbo"/></td>
+    <td><xsl:apply-templates select="@lcom"/></td>
+    <td><xsl:apply-templates select="@nocl"/></td>
+  </tr>
+</xsl:template>
+
+<xsl:template match="file|package" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+    <td>
+    <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+    <xsl:value-of select="@name"/>
+    </a>
+    </td>
+    <td><xsl:apply-templates select="@vg"/></td>
+    <td><xsl:apply-templates select="@loc"/></td>
+    <td><xsl:apply-templates select="@dit"/></td>
+    <td><xsl:apply-templates select="@noa"/></td>
+    <td><xsl:apply-templates select="@nrm"/></td>
+    <td><xsl:apply-templates select="@nlm"/></td>
+    <td><xsl:apply-templates select="@wmc"/></td>
+    <td><xsl:apply-templates select="@rfc"/></td>
+    <td><xsl:apply-templates select="@dac"/></td>
+    <td><xsl:apply-templates select="@fanout"/></td>
+    <td><xsl:apply-templates select="@cbo"/></td>
+    <td><xsl:apply-templates select="@lcom"/></td>
+    <td><xsl:apply-templates select="@nocl"/></td>
+  </tr>
+</xsl:template>
+
+<xsl:template match="metrics" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+      <!-- the global metrics is the top package metrics -->
+    <td><xsl:apply-templates select="./package/@vg"/></td>
+    <td><xsl:apply-templates select="./package/@loc"/></td>
+    <td><xsl:apply-templates select="./package/@dit"/></td>
+    <td><xsl:apply-templates select="./package/@noa"/></td>
+    <td><xsl:apply-templates select="./package/@nrm"/></td>
+    <td><xsl:apply-templates select="./package/@nlm"/></td>
+    <td><xsl:apply-templates select="./package/@wmc"/></td>
+    <td><xsl:apply-templates select="./package/@rfc"/></td>
+    <td><xsl:apply-templates select="./package/@dac"/></td>
+    <td><xsl:apply-templates select="./package/@fanout"/></td>
+    <td><xsl:apply-templates select="./package/@cbo"/></td>
+    <td><xsl:apply-templates select="./package/@lcom"/></td>
+    <td><xsl:apply-templates select="./package/@nocl"/></td>
+  </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+  <xsl:if test="position() mod 2 = 1">a</xsl:if>
+  <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+
+<!-- how to display the metrics with their max value -->
+<!-- @todo the max values must be external to the xsl -->
+
+  <xsl:template match="@vg">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$vg.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@loc">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$loc.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@dit">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$dit.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@noa">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$noa.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@nrm">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$nrm.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@nlm">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$nlm.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@wmc">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$wmc.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@rfc">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$rfc.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@dac">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$dac.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@fanout">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$fanout.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@cbo">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$cbo.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@lcom">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$lcom.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@nocl">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$nocl.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="display-value">
+    <xsl:param name="value"/>
+    <xsl:param name="max"/>
+    <xsl:if test="$value > $max">
+      <xsl:attribute name="class">Error</xsl:attribute>
+    </xsl:if>
+    <xsl:value-of select="$value"/>
+  </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/tagdiff.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/tagdiff.xsl
new file mode 100644
index 0000000..12a1e6f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/tagdiff.xsl
@@ -0,0 +1,177 @@
+<!--
+    Copyright  2004 The Apache Software Foundation
+   
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+   
+         http://www.apache.org/licenses/LICENSE-2.0
+   
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+   
+-->
+<!-- a stylesheet to display changelogs ala netbeans -->
+<xsl:stylesheet
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    version="1.0">
+  <xsl:param name="title"/>
+  <xsl:param name="module"/>
+  <xsl:param name="cvsweb"/>
+
+  <xsl:output method="html" indent="yes"/>
+
+  <!-- Copy standard document elements.  Elements that
+       should be ignored must be filtered by apply-templates
+       tags. -->
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*[. != '']"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="tagdiff">
+    <HTML>
+      <HEAD>
+        <TITLE><xsl:value-of select="$title"/></TITLE>
+      </HEAD>
+      <BODY link="#000000" alink="#000000" vlink="#000000" text="#000000">
+        <style type="text/css">
+          body, p {
+          font-family: verdana,arial,helvetica;
+          font-size: 80%;
+          color:#000000;
+          }
+	  .dateAndAuthor {
+          font-family: verdana,arial,helvetica;
+          font-size: 80%;
+          font-weight: bold;
+          text-align:left;
+          background:#a6caf0;
+	  }
+          tr, td{
+          font-family: verdana,arial,helvetica;
+          font-size: 80%;
+          background:#eeeee0;
+          }	  
+	  </style>        
+          <h1>
+            <a name="top"><xsl:value-of select="$title"/></a>
+          </h1>
+          Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and
+			<xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/>
+          <p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p>
+          <hr size="2"/>
+	<a name="TOP"/>
+	<table width="100%">
+		<tr>
+			<td align="right">
+				<a href="#New">New Files</a> |
+				<a href="#Modified">Modified Files</a> |
+				<a href="#Removed">Removed Files</a>
+			</td>
+		</tr>
+	</table>
+        <TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1">
+		<xsl:call-template name="show-entries">
+			<xsl:with-param name="title">New Files</xsl:with-param>
+			<xsl:with-param name="anchor">New</xsl:with-param>
+			<xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/>
+		</xsl:call-template>
+
+		<xsl:call-template name="show-entries">
+			<xsl:with-param name="title">Modified Files</xsl:with-param>
+			<xsl:with-param name="anchor">Modified</xsl:with-param>
+			<xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/>
+		</xsl:call-template>
+
+		<xsl:call-template name="show-entries">
+			<xsl:with-param name="title">Removed Files</xsl:with-param>
+			<xsl:with-param name="anchor">Removed</xsl:with-param>
+			<xsl:with-param name="entries" select=".//entry[not(file/revision)][not(file/prevrevision)]"/>
+		</xsl:call-template>
+        </TABLE>
+        
+      </BODY>
+    </HTML>
+  </xsl:template>
+
+  <xsl:template name="show-entries">
+	<xsl:param name="title"/>
+	<xsl:param name="anchor"/>
+	<xsl:param name="entries"/>
+	<TR>
+		<TD colspan="2" class="dateAndAuthor">
+			<a>
+				<xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute>
+				<xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries
+			</a>
+			<a href="#TOP">(back to top)</a>
+		</TD>
+	</TR>
+	<TR>
+		<TD width="20">
+			<xsl:text>    </xsl:text>
+		</TD>
+		<TD>
+		        <ul>
+				<xsl:apply-templates select="$entries"/>
+			</ul>
+		</TD>
+	</TR>
+  </xsl:template>  
+
+  <xsl:template match="entry">
+	<xsl:apply-templates select="file"/>
+  </xsl:template>
+
+  <xsl:template match="date">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="time">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="author">
+    <i>
+      <a>
+        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+        <xsl:value-of select="."/>
+      </a>
+    </i>
+  </xsl:template>
+
+  <xsl:template match="file">
+    <li>
+      <a target="_new">
+        <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute>
+        <xsl:value-of select="name" />
+      </a>
+      <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0">
+      <xsl:text> </xsl:text>
+      <a target="_new">
+        <xsl:choose>
+          <xsl:when test="string-length(prevrevision) = 0 ">
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/>&amp;diff_format=h</xsl:attribute>
+          </xsl:otherwise>
+        </xsl:choose> (<xsl:value-of select="revision"/>)
+      </a>
+      </xsl:if>
+    </li>
+  </xsl:template>
+
+  <!-- Any elements within a msg are processed,
+       so that we can preserve HTML tags. -->
+  <xsl:template match="msg">
+    <b><xsl:apply-templates/></b>
+  </xsl:template>
+  
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-antlr.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-antlr.jar
new file mode 100644
index 0000000..6e192a6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-antlr.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bcel.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bcel.jar
new file mode 100644
index 0000000..7d237b8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bcel.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bsf.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bsf.jar
new file mode 100644
index 0000000..050b8c5
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bsf.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-log4j.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-log4j.jar
new file mode 100644
index 0000000..9b5edaa
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-log4j.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-oro.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-oro.jar
new file mode 100644
index 0000000..1e99f78
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-oro.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-regexp.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-regexp.jar
new file mode 100644
index 0000000..a24e33c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-regexp.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-resolver.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-resolver.jar
new file mode 100644
index 0000000..ce26e6a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-resolver.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-logging.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-logging.jar
new file mode 100644
index 0000000..c409113
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-logging.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-net.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-net.jar
new file mode 100644
index 0000000..ba49b97
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-net.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jai.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jai.jar
new file mode 100644
index 0000000..b78bca4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jai.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-javamail.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-javamail.jar
new file mode 100644
index 0000000..07cf40e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-javamail.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jdepend.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jdepend.jar
new file mode 100644
index 0000000..33c4f4b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jdepend.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jmf.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jmf.jar
new file mode 100644
index 0000000..623909c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jmf.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jsch.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jsch.jar
new file mode 100644
index 0000000..775ee9a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jsch.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar
new file mode 100644
index 0000000..a759112
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-launcher.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-launcher.jar
new file mode 100644
index 0000000..e7c8fff
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-launcher.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-netrexx.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-netrexx.jar
new file mode 100644
index 0000000..c33a3da
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-netrexx.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-nodeps.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-nodeps.jar
new file mode 100644
index 0000000..8f213a9
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-nodeps.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-starteam.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-starteam.jar
new file mode 100644
index 0000000..8531e56
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-starteam.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-stylebook.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-stylebook.jar
new file mode 100644
index 0000000..5d9cff6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-stylebook.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-swing.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-swing.jar
new file mode 100644
index 0000000..2e9e472
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-swing.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-trax.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-trax.jar
new file mode 100644
index 0000000..1179097
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-trax.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-weblogic.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-weblogic.jar
new file mode 100644
index 0000000..c7567bc
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-weblogic.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant.jar
new file mode 100644
index 0000000..99114bd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/plugin.properties b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/plugin.properties
new file mode 100644
index 0000000..0b5f8a0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Apache Ant
+providerName = Eclipse.org
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.commons.logging_1.0.4.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.commons.logging_1.0.4.200809191530.jar
new file mode 100644
index 0000000..e5f0c2b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.commons.logging_1.0.4.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.log4j_1.2.13.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.log4j_1.2.13.200809191530.jar
new file mode 100644
index 0000000..dbafb23
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.log4j_1.2.13.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar
new file mode 100644
index 0000000..83f50ff
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
new file mode 100644
index 0000000..9d4c506
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar
new file mode 100644
index 0000000..3bab13b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar
new file mode 100644
index 0000000..12afcaa
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar
new file mode 100644
index 0000000..a28874c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar
new file mode 100644
index 0000000..49bbc18
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.filetransfer_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.filetransfer_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..5d5dae0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.filetransfer_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.identity_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.identity_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..ad67e75
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.identity_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.provider.filetransfer_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.provider.filetransfer_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..511d0c7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.provider.filetransfer_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..d439258
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.installerbuilder_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.installerbuilder_1.0.0.200809191530.jar
new file mode 100644
index 0000000..840cc3c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.installerbuilder_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.kickstarter_1.0.0.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.kickstarter_1.0.0.jar
new file mode 100644
index 0000000..04b0585
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.kickstarter_1.0.0.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2e09e0f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0

+Require-Bundle: org.jdom,org.eclipse.equinox.p2.metadata.repository,or

+ g.eclipse.equinox.p2.metadata,org.junit;bundle-version="3.8.2";resolu

+ tion:=optional

+Export-Package: org.eclipse.epp.wizard.model

+Bundle-ClassPath: jdom.jar, eppmodel.jar

+Bundle-Version: 0.0.1.200809191530

+Bundle-Name: EPP download wizard model

+Bundle-ManifestVersion: 2

+Bundle-SymbolicName: org.eclipse.epp.wizard.model

+Import-Package: org.apache.log4j,org.eclipse.core.runtime;version="3.4

+ .0",org.eclipse.equinox.internal.p2.metadata.repository,org.eclipse.e

+ quinox.internal.provisional.p2.core,org.eclipse.equinox.internal.prov

+ isional.p2.metadata.query,org.eclipse.equinox.internal.provisional.p2

+ .query

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/eppmodel.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/eppmodel.jar
new file mode 100644
index 0000000..d1c34f7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/eppmodel.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/jdom.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/jdom.jar
new file mode 100644
index 0000000..f883a26
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/jdom.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard_1.0.0.200809191530.jar
new file mode 100644
index 0000000..31bf8d1
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
new file mode 100644
index 0000000..4639bb5
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
new file mode 100644
index 0000000..ecac7a8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.200809191530.jar
new file mode 100644
index 0000000..471ca8e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.200809191530.jar
new file mode 100644
index 0000000..ab35c38
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200809191530.jar
new file mode 100644
index 0000000..d0dd7db
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.core_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.core_1.0.0.200809191530.jar
new file mode 100644
index 0000000..9e9f33f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.core_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository_1.0.0.v20080604.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository_1.0.0.v20080604.jar
new file mode 100644
index 0000000..8f93825
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository_1.0.0.v20080604.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata_1.0.0.v20080514-1900.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata_1.0.0.v20080514-1900.jar
new file mode 100644
index 0000000..c42994c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata_1.0.0.v20080514-1900.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar
new file mode 100644
index 0000000..bae2270
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
new file mode 100644
index 0000000..6c45bb9
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.security_1.0.0.v20080512-1800.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.security_1.0.0.v20080512-1800.jar
new file mode 100644
index 0000000..57737ef
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.security_1.0.0.v20080512-1800.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..050268e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0

+Export-Package: org.eclipse.equinox.servletbridge;version="1.0.0"

+Bundle-Vendor: %bundleProvider

+Bundle-ClassPath: servletbridge.jar

+Bundle-Version: 1.0.100.200809191530

+Bundle-Name: %bundleName

+Bundle-Localization: plugin

+Bundle-ManifestVersion: 2

+Bundle-SymbolicName: org.eclipse.equinox.servletbridge

+Import-Package: javax.servlet;version="2.3.0",javax.servlet.http;versi

+ on="2.3.0"

+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3

+

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/about.html b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/about.html
new file mode 100644
index 0000000..d7e1cdf
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>January 30, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/scripts/webappBuilder.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/scripts/webappBuilder.xml
new file mode 100644
index 0000000..e0601b8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/scripts/webappBuilder.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<project name="project" default="default">	
+	<description>
+            Webapp Builder
+    </description>
+
+	<!-- ================================= 
+          target: default              
+         ================================= -->
+	<target name="init">
+    	<property name="proj.dir" value="${basedir}/.."/>
+		<!-- 
+		On windows be cautious about long file names for ${build.dir}
+		These long path problems were resolved in JRE 1.5.0_08
+		-->
+    	<property name="build.dir" value="${proj.dir}/build"/>
+    	<property name="templates.dir" value="${proj.dir}/templates"/>
+		<property name="webapp.name" value="bridge"/>
+		<!-- 
+		the servletbridge feature can be found in the eclipse depot 
+		Repository Path: /cvsroot/eclipse
+		Module: equinox-incubator/org.eclipse.equinox.servletbridge.feature
+		--> 
+		<property name="features" value="org.eclipse.equinox.servletbridge.feature"/>
+		<available file="${proj.dir}/servletbridge.jar" property="servletbridge.jar-present"/>
+		<!--
+		If you are using this script in a head-less build define the following properties:
+		"ignore.pdeExportFeatures" (available only in the IDE - do the feature export with PDE Build)
+		"ignore.servletbridge.jar" (if you're compiling or extracting the jar yourself)
+		-->
+	</target>
+
+	<!-- ================================= 
+          target: prepare              
+         ================================= -->	
+	<target name="prepare" depends="init">
+		<delete dir="${build.dir}/${webapp.name}"/>
+		<mkdir dir="${build.dir}/${webapp.name}/WEB-INF/lib"/>
+	</target>
+	<!-- ================================= 
+          target: default              
+         ================================= -->
+	<target name="default" depends="copyResources, servletbridge.jar, pdeExportFeatures"/>
+	
+	<!-- ================================= 
+          target: copyResources              
+         ================================= -->	
+	<target name="copyResources" depends="prepare">
+		<copy todir="${build.dir}/${webapp.name}">
+			<fileset dir="${templates.dir}"/>
+		</copy>
+	</target>
+	
+	<!-- ================================= 
+          target: servletbridge.jar              
+         ================================= -->	
+	<target name="servletbridge.jar" depends="prepare" unless="ignore.servletbridge.jar">
+		<antcall target="jar-servletbridge.jar" />
+		<antcall target="copy-servletbridge.jar"/>
+	</target>
+
+	<!-- ================================= 
+          target: copy-servletbridge.jar              
+         ================================= -->	
+	<target name="copy-servletbridge.jar" if="servletbridge.jar-present">
+		<copy todir="${build.dir}/${webapp.name}/WEB-INF/lib">
+			<fileset file="${proj.dir}/servletbridge.jar"/>
+		</copy>
+	</target>
+	
+	<!-- ================================= 
+          target: jar-servletbridge.jar              
+         ================================= -->	
+	<target name="jar-servletbridge.jar" unless="servletbridge.jar-present">
+		<jar destfile="${build.dir}/${webapp.name}/WEB-INF/lib/servletbridge.jar">
+			<fileset dir="${proj.dir}/bin">
+				<include name="**/*.class"/>
+			</fileset>
+		</jar>
+	</target>
+	
+	<!-- ================================= 
+          target: pdeExportFeatures              
+         ================================= -->		
+	<target name="pdeExportFeatures" depends="prepare" unless="ignore.pdeExportFeatures">
+		<!-- 
+		Features get built asynchronously but this approach is sometimes convenient.
+		So that the pde.exportFeatures task is available in the IDE select 
+		"Run in the same JRE as the workspace" from the JRE tab from "Run Ant.."
+		--> 
+		<pde.exportFeatures
+			features="${features}"
+			destination="${build.dir}/${webapp.name}/WEB-INF/eclipse"
+			exportType="directory" 
+			useJARFormat="false"
+			exportSource="false"
+		/>
+	</target>
+</project>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/servletbridge.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/servletbridge.jar
new file mode 100644
index 0000000..21ceb9a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/servletbridge.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/.eclipseproduct b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/.eclipseproduct
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/.eclipseproduct
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/configuration/config.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/configuration/config.ini
new file mode 100644
index 0000000..e7061ba
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/configuration/config.ini
@@ -0,0 +1,3 @@
+#Eclipse Runtime Configuration File
+osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@start
+osgi.bundles.defaultStartLevel=4
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/launch.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/launch.ini
new file mode 100644
index 0000000..a96f99e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/launch.ini
@@ -0,0 +1,11 @@
+# Eclipse Runtime Configuration Overrides
+# These properties are loaded prior to starting the framework and can also be used to override System Properties
+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework
+# "*" can be used together with @null to clear System Properties that match a prefix name. 
+
+osgi.*=@null
+org.osgi.*=@null
+eclipse.*=@null
+
+osgi.parentClassloader=app
+osgi.contextClassLoaderParent=app
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/web.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/web.xml
new file mode 100644
index 0000000..3f4c3d4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/web.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+<web-app id="WebApp">
+	<servlet id="bridge">
+		<servlet-name>equinoxbridgeservlet</servlet-name>
+		<display-name>Equinox Bridge Servlet</display-name>
+		<description>Equinox Bridge Servlet</description>
+		<servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>
+		<init-param>
+			<param-name>commandline</param-name>
+			<param-value>-console</param-value>			
+		</init-param>		
+		<init-param>
+			<param-name>enableFrameworkControls</param-name>
+			<param-value>true</param-value>			
+		</init-param>
+		<!--
+		  org.eclipse.equinox.servletbridge and the Servlet API are exported automatically to the underlying OSGi framework.
+		  The extendedFrameworkExports parameter allows the specification of additional java package exports.
+		  The format is a comma separated list of exports as specified by the "Export-Package" bundle manifest header.
+		  For example: com.mycompany.exports; version=1.0.0, com.mycompany.otherexports; version=1.0.0
+		  -->
+		<init-param>
+			<param-name>extendedFrameworkExports</param-name>
+			<param-value></param-value>			
+		</init-param>
+
+		<!-- 
+		  You can specify your own framework launcher here.
+		  The default is: org.eclipse.equinox.servletbridge.FrameworkLauncher
+		<init-param>
+			<param-name>frameworkLauncherClass</param-name>
+			<param-value>org.eclipse.equinox.servletbridge.FrameworkLauncher</param-value>
+		</init-param>	
+		-->		
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>equinoxbridgeservlet</servlet-name>
+		<url-pattern>/*</url-pattern>
+	</servlet-mapping>
+	<!--
+	  This is required if your application bundles expose JSPs. 
+	-->	
+	<servlet-mapping>
+		<servlet-name>equinoxbridgeservlet</servlet-name>
+		<url-pattern>*.jsp</url-pattern>
+	</servlet-mapping>	
+</web-app>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar
new file mode 100644
index 0000000..fc24c62
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar
new file mode 100644
index 0000000..402c02d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.jface_1.1.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.jface_1.1.0.200809191530.jar
new file mode 100644
index 0000000..131a441
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.jface_1.1.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt.q07_1.1.1.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt.q07_1.1.1.200809191530.jar
new file mode 100644
index 0000000..4debe63
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt.q07_1.1.1.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt_1.1.1.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt_1.1.1.200809191530.jar
new file mode 100644
index 0000000..c7833bd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt_1.1.1.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui.workbench_1.1.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui.workbench_1.1.0.200809191530.jar
new file mode 100644
index 0000000..ce60df0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui.workbench_1.1.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui_1.1.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui_1.1.0.200809191530.jar
new file mode 100644
index 0000000..ca2c075
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui_1.1.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.update.configurator_3.2.200.v20080417.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.update.configurator_3.2.200.v20080417.jar
new file mode 100644
index 0000000..a4cff46
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.update.configurator_3.2.200.v20080417.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.jdom_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.jdom_1.0.0.200809191530.jar
new file mode 100644
index 0000000..22b5a03
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.jdom_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.sat4j.core_2.0.0.v20080602.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.sat4j.core_2.0.0.v20080602.jar
new file mode 100644
index 0000000..84cd3cb
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.sat4j.core_2.0.0.v20080602.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/lib/servletbridge.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/lib/servletbridge.jar
new file mode 100644
index 0000000..22eb6c1
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/lib/servletbridge.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/web.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/web.xml
new file mode 100644
index 0000000..eb2f849
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/web.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

+<web-app id="WebApp">

+	<servlet id="bridge">

+		<servlet-name>equinoxbridgeservlet</servlet-name>

+		<display-name>Equinox Bridge Servlet</display-name>

+		<description>Equinox Bridge Servlet</description>

+		<servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>

+    

+    <!-- the OSGi console is useful for trouble shooting but will fill up your 

+             appserver log quickly, so deactivate on production use -->

+      <context-param>

+    <param-name>commandline</param-name>

+    <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>

+  </context-param>

+    

+		<init-param>

+			<param-name>commandline</param-name>

+			<param-value>-console -consoleLog</param-value>			

+		</init-param>		

+		

+    

+    <!-- Framework Controls could be useful for testing purpose, but

+         we disable it in RAP environment per default -->

+		<init-param>

+			<param-name>enableFrameworkControls</param-name>

+			<param-value>false</param-value>			

+		</init-param>

+		

+		<!--

+		  org.eclipse.equinox.servletbridge and the Servlet API are exported automatically to the underlying OSGi framework.

+		  The extendedFrameworkExports parameter allows the specification of additional java package exports.

+		  The format is a comma separated list of exports as specified by the "Export-Package" bundle manifest header.

+		  For example: com.mycompany.exports; version=1.0.0, com.mycompany.otherexports; version=1.0.0

+		  -->

+		<init-param>

+			<param-name>extendedFrameworkExports</param-name>

+			<param-value></param-value>			

+		</init-param>

+

+<resource-env-ref>

+<description>Test read resource environment variable</description>

+<resource-env-ref-name>simpleValue</resource-env-ref-name>

+<resource-env-ref-type>java.lang.Integer</resource-env-ref-type>

+</resource-env-ref>    

+

+		<!-- 

+		  You can specify your own framework launcher here.

+		  The default is: org.eclipse.equinox.servletbridge.FrameworkLauncher

+		<init-param>

+			<param-name>frameworkLauncherClass</param-name>

+			<param-value>org.eclipse.equinox.servletbridge.FrameworkLauncher</param-value>

+		</init-param>	

+		-->		

+		<load-on-startup>1</load-on-startup>

+	</servlet>

+	<servlet-mapping>

+		<servlet-name>equinoxbridgeservlet</servlet-name>

+		<url-pattern>/*</url-pattern>

+	</servlet-mapping>

+	<!--

+	  This is required if your application bundles expose JSPs. 

+	-->	

+	<servlet-mapping>

+		<servlet-name>equinoxbridgeservlet</servlet-name>

+		<url-pattern>*.jsp</url-pattern>

+	</servlet-mapping>	

+</web-app>

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/feature.xml b/plugins/org.eclipse.epp.wizard.war.feature/feature.xml
new file mode 100644
index 0000000..7864a8a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/feature.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.epp.wizard.war.feature"
+      label="RAP Demo Deployment Feature"
+      version="1.1.0.qualifier"
+      provider-name="eclipse.org">
+
+   <description url="http://www.example.com/description">
+      [Enter Feature Description here.]
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <plugin
+         id="org.eclipse.core.commands"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.contenttype"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.jobs"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.runtime"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.http.registry"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.http.servlet"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.http.servletbridge"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.preferences"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.registry"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi.services"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.jface"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.rwt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.ui.workbench"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.expressions"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.app"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.rap.rwt.q07"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.databinding"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.ibm.icu"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.metadata"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.metadata.repository"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.filetransfer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.identity"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.provider.filetransfer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.sat4j.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard.model"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.jdom"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard.installerbuilder"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.ant"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.epp.wizard.kickstarter"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.update.configurator"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.servletbridge"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.apache.commons.logging"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.log4j"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/script/webappBuilder.xml b/plugins/org.eclipse.epp.wizard.war.feature/script/webappBuilder.xml
new file mode 100644
index 0000000..3c3f0c6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/script/webappBuilder.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>

+<project name="project" default="default">

+  <description>

+    Example of a webapplication build script for RAP applications that use

+    the equinox servlet bridge to run in a servlet container.

+  </description>

+

+  <!-- ================================= 

+          target: init              

+         ================================= -->

+  <target name="init">

+    <property name="proj.dir" value="${basedir}/.." />

+    <!--

+        This script assumes that the servlet bridge project is available

+        in the current workspace. Note: The location is hardcoded and must be

+        adjusted to your needs.

+        -->

+    <property name="servletbridge.dir"

+              value="${proj.dir}/../org.eclipse.equinox.servletbridge" />

+    <!-- 

+		On windows be cautious about long file names for ${build.dir}

+		These long path problems were resolved in JRE 1.5.0_08

+		-->

+    <property name="build.dir" value="${proj.dir}/build" />

+    <property name="templates.dir" value="${proj.dir}/templates" />

+    <property name="webapp.name" value="eppwizard" />

+    <property name="features" value="org.eclipse.epp.wizard.war.feature" />

+    <!--

+		If you are using this script in a head-less build define the following properties:

+		"ignore.pdeExportFeatures" (available only in the IDE - do the feature export with PDE Build)

+		"ignore.servletbridge.jar" (if you're compiling or extracting the jar yourself)

+		-->

+  </target>

+

+  <!-- ================================= 

+          target: prepare              

+         ================================= -->

+  <target name="prepare" depends="init">

+    <delete dir="${build.dir}/${webapp.name}" />

+    <mkdir dir="${build.dir}/${webapp.name}/WEB-INF/lib" />

+  </target>

+

+  <!-- ================================= 

+          target: default              

+         ================================= -->

+  <target name="default"

+          depends="copyResources, servletbridge.jar, pdeExportFeatures" />

+

+  <!-- ================================= 

+          target: copyResources              

+         ================================= -->

+  <target name="copyResources" depends="prepare">

+    <copy todir="${build.dir}/${webapp.name}">

+      <fileset dir="${templates.dir}" />

+    </copy>

+  </target>

+

+  <!-- ================================= 

+          target: servletbridge.jar              

+         ================================= -->

+  <target name="servletbridge.jar"

+          depends="prepare"

+          unless="ignore.servletbridge.jar">

+    <antcall target="jar-servletbridge.jar" />

+    <antcall target="copy-servletbridge.jar" />

+  </target>

+

+  <!-- ================================= 

+          target: copy-servletbridge.jar              

+         ================================= -->

+  <target name="copy-servletbridge.jar" if="servletbridge.jar-present">

+    <copy todir="${build.dir}/${webapp.name}/WEB-INF/lib">

+      <fileset file="${servletbridge.dir}/servletbridge.jar" />

+    </copy>

+  </target>

+

+  <!-- ================================= 

+          target: jar-servletbridge.jar              

+         ================================= -->

+  <target name="jar-servletbridge.jar" unless="servletbridge.jar-present">

+    <jar destfile="${build.dir}/${webapp.name}/WEB-INF/lib/servletbridge.jar">

+      <fileset dir="${servletbridge.dir}/bin">

+        <include name="**/*.class" />

+      </fileset>

+    </jar>

+  </target>

+

+  <!-- ================================= 

+          target: pdeExportFeatures              

+         ================================= -->

+  <target name="pdeExportFeatures"

+          depends="prepare"

+          unless="ignore.pdeExportFeatures">

+    <!-- 

+		Features get built asynchronously but this approach is sometimes convenient.

+		So that the pde.exportFeatures task is available in the IDE select 

+		"Run in the same JRE as the workspace" from the JRE tab from "Run Ant.."

+		-->

+    <pde.exportFeatures features="${features}"

+                        destination="${build.dir}/${webapp.name}/WEB-INF/eclipse"

+                        exportType="directory"

+                        useJARFormat="false"

+                        exportSource="false" />

+  </target>

+</project>

+

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/src/org/eclipse/rap/tools/ConfigIniCreator.java b/plugins/org.eclipse.epp.wizard.war.feature/src/org/eclipse/rap/tools/ConfigIniCreator.java
new file mode 100644
index 0000000..de7b598
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/src/org/eclipse/rap/tools/ConfigIniCreator.java
@@ -0,0 +1,68 @@
+/*******************************************************************************

+ * Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     Innoopract Informationssysteme GmbH - initial API and implementation

+ ******************************************************************************/

+

+package org.eclipse.rap.tools;

+

+import java.io.File;

+

+

+/**

+ * <p>This tool creates the content of a simple config.ini file.

+ * Run this after the ANT build scripts (webappBuilder.xml and the 

+ * pde.exportFeatures) have finished. After that replace the content

+ * of the config.ini file in the build.</p> 

+ * 

+ * <p>Note: this is not meant to be a high end deployment tool or the only

+ * possibility of how the content of your config.ini should look like if you

+ * are creating a RAP WAR. This should simplify the task to get

+ * a minimalistic runtime configuration that works...</p>

+ */

+public class ConfigIniCreator {

+  

+  public static void main( final String[] arx ) {

+    ////////////////////////////////////////////////////////////////////////////

+    // replace this with the absolute path to the plugin directory of

+    // the deployment build for example

+    // File file = new File( "C:\\projects\\org.eclipse.rap\\org.eclipse.rap.demo.feature\\build\\rapdemo\\WEB-INF\\eclipse\\plugins" );

+		File file = new File("build\\eppwizard\\WEB-INF\\eclipse\\plugins");

+    ////////////////////////////////////////////////////////////////////////////

+    

+    String[] list = file.list();

+    StringBuffer buffer = new StringBuffer();

+    buffer.append( "#Eclipse Runtime Configuration File\n" );

+    

+    buffer.append( "osgi.bundles=" );

+    for( int i = 0; i < list.length; i++ ) {

+      if(    list[ i ].endsWith( ".jar" )

+          && !list[ i ].startsWith( "org.eclipse.osgi_" ) )

+      {

+        buffer.append( list[ i ] );

+        if( !list[ i ].startsWith( "org.eclipse.rap.rwt.q07_" ) ) {

+          if( list[ i ].startsWith( "org.eclipse.equinox.common_" ) ) {

+            buffer.append( "@2:start" );

+          } else {

+            buffer.append( "@start" );

+          }

+        }

+        if( i + 1 < list.length ) {

+          buffer.append( "," );

+        } else {

+          buffer.append( ",org.eclipse.equinox.servletbridge.extensionbundle" );          

+        }

+      }

+    }

+    buffer.append( "\n" );

+    buffer.append( "osgi.bundles.defaultStartLevel=4\n" );

+    

+    // write the content to the console

+    System.out.print( buffer );

+  }

+}

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/.eclipseproduct b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/.eclipseproduct
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/.eclipseproduct
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/configuration/config.ini b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/configuration/config.ini
new file mode 100644
index 0000000..7874020
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/configuration/config.ini
@@ -0,0 +1,3 @@
+#Eclipse Runtime Configuration File

+osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.rap.ui@4:start, org.eclipse.epp.wizard.kickstarter@5:start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@startosgi.bundles.default

+StartLevel=4

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/launch.ini b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/launch.ini
new file mode 100644
index 0000000..17af11d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/launch.ini
@@ -0,0 +1,11 @@
+# Eclipse Runtime Configuration Overrides

+# These properties are loaded prior to starting the framework and can also be used to override System Properties

+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework

+# "*" can be used together with @null to clear System Properties that match a prefix name. 

+

+osgi.*=@null

+org.osgi.*=@null

+eclipse.*=@null

+

+osgi.parentClassloader=app

+osgi.contextClassLoaderParent=app

diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/web.xml b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/web.xml
new file mode 100644
index 0000000..eb2f849
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/web.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

+<web-app id="WebApp">

+	<servlet id="bridge">

+		<servlet-name>equinoxbridgeservlet</servlet-name>

+		<display-name>Equinox Bridge Servlet</display-name>

+		<description>Equinox Bridge Servlet</description>

+		<servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>

+    

+    <!-- the OSGi console is useful for trouble shooting but will fill up your 

+             appserver log quickly, so deactivate on production use -->

+      <context-param>

+    <param-name>commandline</param-name>

+    <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>

+  </context-param>

+    

+		<init-param>

+			<param-name>commandline</param-name>

+			<param-value>-console -consoleLog</param-value>			

+		</init-param>		

+		

+    

+    <!-- Framework Controls could be useful for testing purpose, but

+         we disable it in RAP environment per default -->

+		<init-param>

+			<param-name>enableFrameworkControls</param-name>

+			<param-value>false</param-value>			

+		</init-param>

+		

+		<!--

+		  org.eclipse.equinox.servletbridge and the Servlet API are exported automatically to the underlying OSGi framework.

+		  The extendedFrameworkExports parameter allows the specification of additional java package exports.

+		  The format is a comma separated list of exports as specified by the "Export-Package" bundle manifest header.

+		  For example: com.mycompany.exports; version=1.0.0, com.mycompany.otherexports; version=1.0.0

+		  -->

+		<init-param>

+			<param-name>extendedFrameworkExports</param-name>

+			<param-value></param-value>			

+		</init-param>

+

+<resource-env-ref>

+<description>Test read resource environment variable</description>

+<resource-env-ref-name>simpleValue</resource-env-ref-name>

+<resource-env-ref-type>java.lang.Integer</resource-env-ref-type>

+</resource-env-ref>    

+

+		<!-- 

+		  You can specify your own framework launcher here.

+		  The default is: org.eclipse.equinox.servletbridge.FrameworkLauncher

+		<init-param>

+			<param-name>frameworkLauncherClass</param-name>

+			<param-value>org.eclipse.equinox.servletbridge.FrameworkLauncher</param-value>

+		</init-param>	

+		-->		

+		<load-on-startup>1</load-on-startup>

+	</servlet>

+	<servlet-mapping>

+		<servlet-name>equinoxbridgeservlet</servlet-name>

+		<url-pattern>/*</url-pattern>

+	</servlet-mapping>

+	<!--

+	  This is required if your application bundles expose JSPs. 

+	-->	

+	<servlet-mapping>

+		<servlet-name>equinoxbridgeservlet</servlet-name>

+		<url-pattern>*.jsp</url-pattern>

+	</servlet-mapping>	

+</web-app>

diff --git a/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch b/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch
index e650726..43c6c10 100644
--- a/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch
+++ b/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch
@@ -13,12 +13,12 @@
 <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consoleLog"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8008 -Dorg.eclipse.equinox.http.jetty.context.sessioninactiveinterval=30000 -Xms128m -Xmx512m"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8888 -Dorg.eclipse.equinox.http.jetty.context.sessioninactiveinterval=120 -Xms128m -Xmx512m -Dlog4j.configuration=file:log4j.properties"/>
 <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:org.eclipse.epp.wizard}"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="org.eclipse.equinox.security.win32.x86@default:false,org.apache.commons.logging@default:default,org.apache.xml.resolver@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ecf.filetransfer@default:default,org.apache.xerces@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.databinding@default:default,org.eclipse.jface@default:default,javax.servlet@default:default,org.eclipse.core.net.win32.x86@default:false,javax.xml@default:default,org.eclipse.equinox.app@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.core.runtime@default:default,com.ibm.icu@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.security@default:default,org.eclipse.core.commands@default:default,org.eclipse.ecf@default:default,org.eclipse.swt@22:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.core.net@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.contenttype@default:default,org.apache.xml.serializer@default:default,org.eclipse.core.jobs@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.ant@default:default,org.eclipse.osgi@:,org.eclipse.osgi.services@default:default"/>
+<stringAttribute key="target_bundles" value="org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.commons.logging@default:default,org.apache.commons.logging@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.apache.xerces*2.9.0.v200805270400@default:default,com.ibm.icu@default:default,org.eclipse.jface@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ecf@default:default,org.eclipse.core.databinding@default:default,org.apache.xml.resolver*1.2.0.v200806030312@default:default,javax.servlet@default:default,org.eclipse.core.net@default:default,org.eclipse.core.jobs@default:default,org.apache.xml.resolver*1.1.0.20080508-1430PRD@default:default,org.eclipse.ecf.identity@default:default,org.apache.ant@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.osgi@:,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.security@default:default,org.eclipse.swt@22:default,org.eclipse.osgi.services@default:default,org.eclipse.core.runtime@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.apache.xml.serializer@default:default,org.apache.xerces*2.8.0.20080508-1430PRD@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.common@default:default,javax.xml@default:default"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.jdom@default:default,org.eclipse.epp.wizard.model@default:default,org.mortbay.jetty@default:default,org.eclipse.rap.ui@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.rap.ui.workbench@default:default,org.apache.commons.logging@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,org.eclipse.rap.rwt.q07@default:false,javax.servlet@default:default,org.eclipse.rap.jface@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.epp.wizard.kickstarter@default:default,org.eclipse.epp.wizard@default:default"/>
+<stringAttribute key="workspace_bundles" value="org.mortbay.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.epp.wizard.kickstarter@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.servletbridge@default:default,org.eclipse.rap.rwt.q07@default:false,org.eclipse.equinox.http.servlet@default:default,org.eclipse.rap.jface@default:default,org.eclipse.epp.wizard@default:default,org.eclipse.rap.ui@default:default,org.apache.log4j@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,javax.servlet@default:default,org.jdom@default:default,org.eclipse.rap.rwt@default:default,org.apache.commons.logging@default:default,org.eclipse.epp.wizard.model@default:default"/>
 </launchConfiguration>
diff --git a/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF
index 428b48a..d420a4c 100644
--- a/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF
@@ -13,6 +13,7 @@
 Bundle-ActivationPolicy: lazy
 Import-Package: javax.servlet;version="2.4.0",
  javax.servlet.http;version="2.4.0",
+ org.apache.log4j,
  org.eclipse.equinox.internal.p2.core.helpers,
  org.eclipse.equinox.internal.p2.metadata,
  org.eclipse.equinox.internal.p2.metadata.repository,
diff --git a/plugins/org.eclipse.epp.wizard/build.properties b/plugins/org.eclipse.epp.wizard/build.properties
index 7556ac8..a65972b 100644
--- a/plugins/org.eclipse.epp.wizard/build.properties
+++ b/plugins/org.eclipse.epp.wizard/build.properties
@@ -3,6 +3,7 @@
 bin.includes = META-INF/,\
                plugin.xml,\
                .,\
-               icons/
+               icons/,\
 
-src.includes = icons/
+src.includes = icons/,\
+               plugin.xml
diff --git a/plugins/org.eclipse.epp.wizard/epp-wizard.product b/plugins/org.eclipse.epp.wizard/epp-wizard.product
index 8cee77c..028b096 100644
--- a/plugins/org.eclipse.epp.wizard/epp-wizard.product
+++ b/plugins/org.eclipse.epp.wizard/epp-wizard.product
@@ -3,8 +3,8 @@
 
 <product name="EPP Wizard" id="org.eclipse.epp.wizard.product" application="org.eclipse.epp.wizard.application" useFeatures="false">
 
-
    <configIni use="default">
+      <linux>/org.eclipse.epp.wizard/config.ini</linux>
       <win32>/org.eclipse.epp.wizard/config.ini</win32>
    </configIni>
 
@@ -14,7 +14,6 @@
 
    <windowImages/>
 
-
    <launcher>
       <solaris/>
       <win useIco="false">
@@ -22,7 +21,6 @@
       </win>
    </launcher>
 
-
    <vm>
    </vm>
 
@@ -57,7 +55,6 @@
       <plugin id="org.eclipse.equinox.preferences"/>
       <plugin id="org.eclipse.equinox.registry"/>
       <plugin id="org.eclipse.equinox.security"/>
-      <plugin id="org.eclipse.equinox.security.win32.x86" fragment="true"/>
       <plugin id="org.eclipse.equinox.servletbridge"/>
       <plugin id="org.eclipse.osgi"/>
       <plugin id="org.eclipse.osgi.services"/>
diff --git a/plugins/org.eclipse.epp.wizard/eppwizard.properties b/plugins/org.eclipse.epp.wizard/eppwizard.properties
index 1fbc8eb..29d0176 100644
--- a/plugins/org.eclipse.epp.wizard/eppwizard.properties
+++ b/plugins/org.eclipse.epp.wizard/eppwizard.properties
@@ -1,7 +1,7 @@
 # model description directory containing "eppmodel.xml" and group images
 model=data/model
 # outgoing service providers configuration directory, containing "outgoing.properties" and images
-outgoing=data/outgoing
+externalServiceProviders=data/externalServiceProviders
 # EPP P2 Metadata repository, used for resolving IU references in "eppmodel.xml"
 epp.metadata=file:data/metadata/
 #epp.metadata=http://localhost/epp/
@@ -15,4 +15,12 @@
 
 # P2 installer artifact repositories
 eclipse.p2.artifacts=http://192.168.6.155/p2g/,http://192.168.6.155/p2u/
-#eclipse.p2.artifacts=http://download.eclipse.org/eclipse/updates/3.4/,http://download.eclipse.org/releases/ganymede/
\ No newline at end of file
+#eclipse.p2.artifacts=http://download.eclipse.org/eclipse/updates/3.4/,http://download.eclipse.org/releases/ganymede/
+
+# URL to Terms of Use
+termsofuse.url=http://www.eclipse.org/legal/termsofuse.php
+# URL to Privacy Policy
+privacy.url=http://www.eclipse.org/legal/privacy.php
+
+# Download/external service provider statistics
+stats.logging.file=statistics.log
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/installerbuilder.properties b/plugins/org.eclipse.epp.wizard/installerbuilder.properties
index c90c6b1..2d25d24 100644
--- a/plugins/org.eclipse.epp.wizard/installerbuilder.properties
+++ b/plugins/org.eclipse.epp.wizard/installerbuilder.properties
@@ -2,3 +2,5 @@
 downloads=../org.eclipse.epp.wizard.installerbuilder/opt/epp
 # directory used for creating temporary download files 
 tmpdir=../org.eclipse.epp.wizard.installerbuilder/opt/epp/tmp
+# Number of entries in the installer cache (each entry uses about 5 MB disk space in the tmpdir)
+installer.cache.size=200
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/log4j.properties b/plugins/org.eclipse.epp.wizard/log4j.properties
new file mode 100644
index 0000000..d6a11cf
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/log4j.properties
@@ -0,0 +1,17 @@
+log4j.rootLogger=debug, stdout, R
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %5p [%t] (%F:%L) - %m%n
+
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.File=example.log
+
+log4j.appender.R.MaxFileSize=100KB
+# Keep one backup file
+log4j.appender.R.MaxBackupIndex=1
+
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %p %t %c - %m%n
diff --git a/plugins/org.eclipse.epp.wizard/plugin.xml b/plugins/org.eclipse.epp.wizard/plugin.xml
index 1e5fb89..7af20b2 100644
--- a/plugins/org.eclipse.epp.wizard/plugin.xml
+++ b/plugins/org.eclipse.epp.wizard/plugin.xml
@@ -34,4 +34,14 @@
         </run>
      </application>
   </extension>
+  <extension
+        point="org.eclipse.rap.ui.branding">
+     <branding
+           defaultEntrypointId="org.eclipse.epp.wizard"
+           favicon="icons/classic.png"
+           id="org.eclipse.epp.wizard.branding.eppwizard"
+           servletName="go"
+           title="Eclipse Wizard">
+     </branding>
+  </extension>
 </plugin>
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java
index bccc718..ee47fdf 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java
@@ -18,24 +18,23 @@
 @SuppressWarnings("restriction")
 public class Application implements IApplication {
 
-	public Object start(IApplicationContext context) throws Exception {
-		for (Bundle bundle : context.getBrandingBundle().getBundleContext()
-				.getBundles()) {
-			try {
-				if (!(bundle instanceof BundleFragment))
-				{
-					bundle.start();
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-		return null;
-	}	
+  public Object start( IApplicationContext context ) throws Exception {
+    for( Bundle bundle : context.getBrandingBundle()
+      .getBundleContext()
+      .getBundles() )
+    {
+      try {
+        if( !( bundle instanceof BundleFragment ) ) {
+          bundle.start();
+        }
+      } catch( Exception e ) {
+        e.printStackTrace();
+      }
+    }
+    return null;
+  }
 
-	public void stop() {
-		// TODO Auto-generated method stub
-
-	}
-
+  public void stop() {
+    // TODO Auto-generated method stub
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java
index e5165bc..f7dbe17 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java
@@ -16,8 +16,8 @@
 import java.io.IOException;
 import java.util.Properties;
 
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
+import org.apache.log4j.Logger;
+import org.eclipse.epp.wizard.model.EPPModel;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -26,85 +26,98 @@
  */
 public class Activator extends AbstractUIPlugin {
 
-	public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.configuration";
-	public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "eppwizard.properties";
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.epp.wizard";
-	// The shared instance
-	private static Activator plugin;
+  static Logger logger = Logger.getLogger( Activator.class );
+  public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.configuration";
+  public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "eppwizard.properties";
+  // The plug-in ID
+  public static final String PLUGIN_ID = "org.eclipse.epp.wizard";
+  // The shared instance
+  private static Activator plugin;
 
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-	}
+  /**
+   * The constructor
+   */
+  public Activator() {
+  }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-	}
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+   * )
+   */
+  public void start( BundleContext context ) throws Exception {
+    super.start( context );
+    // PropertyConfigurator.configure("log4j.properties");
+    plugin = this;
+    modelCache = new ModelCache( getConfiguration() );
+    statsLogger = new StatsLogger( configuration.getStatsLoggingFile() );
+  }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
+  /*
+   * (non-Javadoc)
+   * @see
+   * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+   * )
+   */
+  public void stop( BundleContext context ) throws Exception {
+    plugin = null;
+    super.stop( context );
+  }
 
-	/**
-	 * Returns the shared instance
-	 * 
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
+  /**
+   * Returns the shared instance
+   * 
+   * @return the shared instance
+   */
+  public static Activator getDefault() {
+    return plugin;
+  }
+  /*
+   * public static void log(final Exception exc) { IStatus status = new
+   * Status(IStatus.ERROR, PLUGIN_ID, exc.getMessage(), exc);
+   * getDefault().getLog().log(status); } public static void log(final IStatus
+   * status) { System.err.println(status.getMessage() + "\n" +
+   * status.getException()); getDefault().getLog().log(status); }
+   */
+  private Configuration configuration = null;
+  private ModelCache modelCache;
+  private StatsLogger statsLogger;
 
-	public static void log(final Exception exc) {
-		IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, exc.getMessage(),
-				exc);
-		getDefault().getLog().log(status);
-	}
+  public synchronized Configuration getConfiguration() {
+    if( configuration == null ) {
+      String configurationFile = System.getProperty( PROPERTY_CONFIGURATION,
+                                                     PROPERTY_CONFIGURATION_DEFAULT_VALUE );
+      logger.info( "Loading configuration from file: "
+                   + new File( configurationFile ).getAbsolutePath() );
+      Properties properties = new Properties();
+      FileInputStream inStream = null;
+      try {
+        inStream = new FileInputStream( configurationFile );
+        properties.load( inStream );
+        configuration = new Configuration( properties );
+      } catch( FileNotFoundException exc ) {
+        logger.error( "Unable to load configuration", exc );
+      } catch( IOException exc ) {
+        logger.error( "Unable to load configuration", exc );
+      } finally {
+        if( inStream != null ) {
+          try {
+            inStream.close();
+          } catch( IOException e ) {
+            logger.warn( "Could not close file '" + configurationFile, e );
+          }
+        }
+      }
+    }
+    return configuration;
+  }
 
-	public static void log(final IStatus status) {
-		System.err.println(status.getMessage() + "\n" + status.getException());
-		getDefault().getLog().log(status);
-	}
+  public EPPModel getModel() throws Exception {
+    return modelCache.getModel();
+  }
 
-	private Configuration configuration = null;
-
-	public synchronized Configuration getConfiguration() {
-		if (configuration == null) {
-			String configurationFile = System.getProperty(
-					PROPERTY_CONFIGURATION,
-					PROPERTY_CONFIGURATION_DEFAULT_VALUE);
-			System.out.println("Loading configuration from file: "
-					+ new File(configurationFile).getAbsolutePath());
-			Properties properties = new Properties();
-			try {				
-				properties.load(new FileInputStream(configurationFile));
-				configuration = new Configuration(properties);
-			} catch (FileNotFoundException exc) {
-				// TODO Auto-generated catch block
-				System.err.println();
-				exc.printStackTrace();
-			} catch (IOException exc) {
-				// TODO Auto-generated catch block
-				exc.printStackTrace();
-			}
-		}
-		return configuration;
-	}
+  public StatsLogger getStatsLogger() {
+    return statsLogger;
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java
index af2441a..4807785 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java
@@ -11,98 +11,159 @@
 package org.eclipse.epp.wizard.internal;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
 
 public class Configuration {
+
+  static Logger logger = Logger.getLogger( Configuration.class );
   final static String MODEL = "model";
   final static String EXTERNAL_SERVICE_PROVIDERS = "externalServiceProviders";
   final static String EPP_METADATA_REPOSITORY = "epp.metadata";
   final static String INSTALLER_URL = "installer.url";
   final static String BASE_IUS = "baseIUs";
+  final static String TERMS_OF_USE_URL = "termsofuse.url";
+  final static String TERMS_OF_USE_URL_DEFAULT = "http://www.eclipse.org/legal/termsofuse.php";
+  final static String PRIVACY_URL = "privacy.url";
+  final static String PRIVACY_URL_DEFAULT = "http://www.eclipse.org/legal/privacy.php";
+  final static String STATS_LOGGING_FILE = "stats.logging.file";
+  final static String STATS_LOGGING_FILE_DEFAULT = "stats.txt";
   final public static String P2_METADATA_REPOSITORIES = "eclipse.p2.metadata";
   final public static String P2_ARTIFACT_REPOSITORIES = "eclipse.p2.artifacts";
   final public static String P2_ROOTS = "eclipse.p2.roots";
-  
   protected File modelDirectory;
   protected File externalServiceProviderDirectory;
   protected String eppMetadataRepository;
   protected String installerURL;
   protected String baseIUs;
+  protected String termsOfUseURL;
 
-	public String getBaseIUs() {
-	return baseIUs;
-}
-
-	public String getInstallerURL() {
-		return installerURL;
-	}
-
-	public String getEppMetadataRepository() {
-		return eppMetadataRepository;
-	}
-
-	protected String metadataRepositories;
-  protected String artifactRepositories;
-  public String getMetadataRepositories() {
-		return metadataRepositories;
-	}
-
-	public String getArtifactRepositories() {
-		return artifactRepositories;
-	}
-
-	protected ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
-  
-  public ExternalServiceProviderConfiguration getExternalServiceProviderConfiguration() {
-    return externalServiceProviderConfiguration;
+  public String getTermsOfUseURL() {
+    return termsOfUseURL;
   }
 
+  public void setTermsOfUseURL( String termsOfUseURL ) {
+    this.termsOfUseURL = termsOfUseURL;
+  }
+
+  public File getStatsLoggingFile() {
+    return statsLoggingFile;
+  }
+
+  public void setStatsLoggingFile( File statsLoggingFile ) {
+    this.statsLoggingFile = statsLoggingFile;
+  }
+  protected File statsLoggingFile;
+
+  public String getBaseIUs() {
+    return baseIUs;
+  }
+
+  public String getInstallerURL() {
+    return installerURL;
+  }
+
+  public String getEppMetadataRepository() {
+    return eppMetadataRepository;
+  }
+  protected String metadataRepositories;
+  protected String artifactRepositories;
+
+  public String getMetadataRepositories() {
+    return metadataRepositories;
+  }
+
+  public String getArtifactRepositories() {
+    return artifactRepositories;
+  }
+  protected ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
+
+  public ExternalServiceProviderConfiguration getExternalServiceProviderConfiguration()
+  {
+    return externalServiceProviderConfiguration;
+  }
   private Properties properties;
-  
+  private String privacyURL;
+
+  public String getPrivacyURL() {
+    return privacyURL;
+  }
+
   public File getModelDirectory() {
     return modelDirectory;
   }
-  
+
   public File getExternalServiceProviderDirectory() {
     return externalServiceProviderDirectory;
   }
-  
 
-  public Configuration(Properties properties)
-  {
+  public Configuration( Properties properties ) {
     this.properties = properties;
-    modelDirectory = createDirectoryObject(MODEL);
-    externalServiceProviderDirectory = createDirectoryObject(EXTERNAL_SERVICE_PROVIDERS);
+    modelDirectory = createDirectoryObject( MODEL );
+    externalServiceProviderDirectory = createDirectoryObject( EXTERNAL_SERVICE_PROVIDERS );
     loadExternalServiceProviderConfiguration();
-    
-    installerURL = properties.getProperty(INSTALLER_URL);
-
-    metadataRepositories = properties.getProperty(P2_METADATA_REPOSITORIES);
-    artifactRepositories = properties.getProperty(P2_ARTIFACT_REPOSITORIES);
-    eppMetadataRepository = properties.getProperty(EPP_METADATA_REPOSITORY);
-    baseIUs = properties.getProperty(BASE_IUS,"");
+    installerURL = properties.getProperty( INSTALLER_URL );
+    metadataRepositories = properties.getProperty( P2_METADATA_REPOSITORIES );
+    artifactRepositories = properties.getProperty( P2_ARTIFACT_REPOSITORIES );
+    eppMetadataRepository = properties.getProperty( EPP_METADATA_REPOSITORY );
+    baseIUs = properties.getProperty( BASE_IUS, "" );
+    termsOfUseURL = properties.getProperty( TERMS_OF_USE_URL,
+                                            TERMS_OF_USE_URL_DEFAULT );
+    privacyURL = properties.getProperty( PRIVACY_URL, PRIVACY_URL_DEFAULT );
+    statsLoggingFile = new File( properties.getProperty( STATS_LOGGING_FILE,
+                                                         STATS_LOGGING_FILE_DEFAULT ) );
+    try {
+      statsLoggingFile.createNewFile();
+    } catch( IOException e ) {
+      throw new RuntimeException( "Unable to create stats logging file", e );
+    }
+    if( !statsLoggingFile.canWrite() ) {
+      throw new RuntimeException( "Cannot write to stats logging file '"
+                                  + statsLoggingFile.getAbsolutePath()
+                                  + "'" );
+    }
+    if( logger.isInfoEnabled() ) {
+      StringBuilder sb = new StringBuilder();
+      sb.append( "EPP Wizard configuration:" );
+      sb.append( "\n\t modelDirectory:                   "
+                 + modelDirectory.getAbsolutePath() );
+      sb.append( "\n\t externalServiceProviderDirectory: "
+                 + externalServiceProviderDirectory.getAbsolutePath() );
+      sb.append( "\n\t metadataRepositories:             "
+                 + metadataRepositories );
+      sb.append( "\n\t artifactRepositories:             "
+                 + artifactRepositories );
+      sb.append( "\n\t baseIUs:                          " + baseIUs );
+      sb.append( "\n\t installerURL:                     " + installerURL );
+      sb.append( "\n\t statsLoggingFile:                 " + statsLoggingFile );
+      sb.append( "\n\t termsOfUseURL:                    " + termsOfUseURL );
+      logger.info( sb );
+    }
   }
 
   private void loadExternalServiceProviderConfiguration() {
-    externalServiceProviderConfiguration = new ExternalServiceProviderConfiguration(externalServiceProviderDirectory);
-    
+    externalServiceProviderConfiguration = new ExternalServiceProviderConfiguration( externalServiceProviderDirectory );
   }
 
   private File createDirectoryObject( String key ) {
-    String value = properties.getProperty(  key );
-    if(value == null)
-    {
-      throw new RuntimeException("Configuration value for '"+key +"' not defined in configuration properties");
+    String value = properties.getProperty( key );
+    if( value == null ) {
+      throw new RuntimeException( "Configuration value for '"
+                                  + key
+                                  + "' not defined in configuration properties" );
     }
-    File file =  new File(value);
-    if(!file.canRead())
-    {
-      throw new RuntimeException("Cannot read from file '"+file.getAbsolutePath()+"'");      
+    File file = new File( value );
+    if( !file.isDirectory() ) {
+      throw new RuntimeException( "'"
+                                  + file.getAbsolutePath()
+                                  + "' is not a directory" );
     }
-    if(!file.isDirectory())
-    {
-      throw new RuntimeException("'"+file.getAbsolutePath()+"' is not a directory");      
+    if( !file.canRead() ) {
+      throw new RuntimeException( "Cannot read from directory '"
+                                  + file.getAbsolutePath()
+                                  + "'" );
     }
     return file;
   }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java
index 892d0e4..ac74597 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java
@@ -12,87 +12,106 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
+
 public class ExternalServiceProviderConfiguration {
-	private static final String URL = "url";
-	private static final String ICON = "icon";
-	private static final String DESCRIPTION = "description";
-	private static final String LABEL = "label";
-	private static final String PROPERTIES_EXTENSION = ".properties";
 
-	public static class Entry {
-		public String label;
-		public String description;
-		public File icon;
+  static Logger logger = Logger.getLogger( ExternalServiceProviderConfiguration.class );
+  private static final String URL = "url";
+  private static final String ICON = "icon";
+  private static final String DESCRIPTION = "description";
+  private static final String LABEL = "label";
+  private static final String PROPERTIES_EXTENSION = ".properties";
+  public static class Entry {
 
-		public String getLabel() {
-			return label;
-		}
+    public String label;
+    public String description;
+    public File icon;
 
-		public String getDescription() {
-			return description;
-		}
+    public String getLabel() {
+      return label;
+    }
 
-		public File getIcon() {
-			return icon;
-		}
+    public String getDescription() {
+      return description;
+    }
 
-		public String getUrlTemplate() {
-			return urlTemplate;
-		}
+    public File getIcon() {
+      return icon;
+    }
 
-		public Entry(String label, File icon, String description,
-				String urlTemplate) {
-			super();
-			this.description = description;
-			this.icon = icon;
-			this.label = label;
-			this.urlTemplate = urlTemplate;
-		}
+    public String getUrlTemplate() {
+      return urlTemplate;
+    }
 
-		public String urlTemplate;
-	}
+    public Entry( String label,
+                  File icon,
+                  String description,
+                  String urlTemplate )
+    {
+      super();
+      this.description = description;
+      this.icon = icon;
+      this.label = label;
+      this.urlTemplate = urlTemplate;
+    }
+    public String urlTemplate;
+  }
+  private List<Entry> entries = new ArrayList<Entry>();
 
-	private List<Entry> entries = new ArrayList<Entry>();
+  public ExternalServiceProviderConfiguration( File externalServiceProviderDirectory )
+  {
+    for( File propertiesFile : externalServiceProviderDirectory.listFiles() ) {
+      if( propertiesFile.getName().endsWith( PROPERTIES_EXTENSION ) ) {
+        FileInputStream inStream = null;
+        try {
+          Properties properties = new Properties();
+          inStream = new FileInputStream( propertiesFile );
+          properties.load( inStream );
+          String label = getMandatoryProperty( properties, LABEL );
+          String description = getMandatoryProperty( properties, DESCRIPTION );
+          String icon = getMandatoryProperty( properties, ICON );
+          String url = getMandatoryProperty( properties, URL );
+          Entry entry = new Entry( label,
+                                   new File( externalServiceProviderDirectory,
+                                             icon ),
+                                   description,
+                                   url );
+          entries.add( entry );
+        } catch( Exception exc ) {
+          throw new RuntimeException( "Could not load external service provider configuration file'"
+                                          + propertiesFile.getAbsolutePath()
+                                          + "'",
+                                      exc );
+        } finally {
+          if( inStream != null ) {
+            try {
+              inStream.close();
+            } catch( IOException e ) {
+              logger.warn( "Could not close file '" + propertiesFile, e );
+            }
+          }
+        }
+      }
+    }
+  }
 
-	public ExternalServiceProviderConfiguration(File externalServiceProviderDirectory) {
-		for (File propertiesFile : externalServiceProviderDirectory.listFiles()) {
-			if (propertiesFile.getName().endsWith(PROPERTIES_EXTENSION)) {
-				try {
-					Properties properties = new Properties();
-					properties.load(new FileInputStream(propertiesFile));
+  private String getMandatoryProperty( Properties properties, String string ) {
+    String result = properties.getProperty( string );
+    if( result == null ) {
+      throw new RuntimeException( "External service provider key '"
+                                  + string
+                                  + "' not found in properties" );
+    }
+    return result;
+  }
 
-					String label = getMandatoryProperty(properties, LABEL);
-					String description = getMandatoryProperty(properties,
-							DESCRIPTION);
-					String icon = getMandatoryProperty(properties, ICON);
-					String url = getMandatoryProperty(properties, URL);
-					Entry entry = new Entry(label, new File(externalServiceProviderDirectory,
-							icon), description, url);
-					entries.add(entry);
-				} catch (Exception exc) {
-					throw new RuntimeException(
-							"Could not load external service provider configuration file'"
-									+ propertiesFile.getAbsolutePath() + "'",
-							exc);
-				}
-			}
-		}
-	}
-
-	private String getMandatoryProperty(Properties properties, String string) {
-		String result = properties.getProperty(string);
-		if (result == null) {
-			throw new RuntimeException("External service provider key '"
-					+ string + "' not found in properties");
-		}
-		return result;
-	}
-
-	public List<Entry> getEntries() {
-		return entries;
-	}
+  public List<Entry> getEntries() {
+    return entries;
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java
index b2ad375..dac626a 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
 package org.eclipse.epp.wizard.internal;
 
 import org.eclipse.rwt.graphics.Graphics;
@@ -6,13 +16,14 @@
 import org.eclipse.swt.widgets.Control;
 
 public class LinkUtil {
-	static Cursor handCursor = Graphics.getCursor(SWT.CURSOR_HAND); 
-	public static void setHandCursor(Control control)
-	{
-		control.setCursor(handCursor);
-	}
-	public static void resetCursor(Control control)
-	{
-		control.setCursor(null);
-	}
+
+  static Cursor handCursor = Graphics.getCursor( SWT.CURSOR_HAND );
+
+  public static void setHandCursor( Control control ) {
+    control.setCursor( handCursor );
+  }
+
+  public static void resetCursor( Control control ) {
+    control.setCursor( null );
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ModelCache.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ModelCache.java
new file mode 100644
index 0000000..09ca544
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ModelCache.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.internal;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.log4j.Logger;
+import org.eclipse.epp.wizard.model.EPPModel;
+
+/**
+ * Cache for model data, so it does not have to be parsed for each session, but
+ * still is up to date.
+ * 
+ * @author mwoelker
+ */
+public class ModelCache {
+
+  private static final String EPPMODEL_XML_FILENAME = "eppmodel.xml";
+  static Logger logger = Logger.getLogger( ModelCache.class );
+  private Object LOCK = new Object();
+  private Configuration configuration;
+  private EPPModel model;
+  private long UPDATE_CHECK_IN_SEC = 10;
+  private long UPDATE_INTERVAL_IN_SEC = 60 * 60; // hourly
+  private long ERROR_UPDATE_INTERVAL_IN_SEC = 1;
+  private long lastUpdate = 0;
+  /**
+   * This updater Thread runs in the background to keep model information
+   * up-to-date during the lifetime of the application Three intervals are used:
+   * UPDATE_CHECK_IN_SEC - used for checking the modification date on the
+   * eppmodel.xml file, model is reload if changed UPDATE_INTERVAL_IN_SEC -
+   * model is reloaded in this interval, regardless of modification timestamps,
+   * picks up changes in the upstream P2 Metadata repositories
+   * ERROR_UPDATE_INTERVAL_IN_SEC - This interval kicks in if the update fails,
+   * e.g. when the network is down
+   * 
+   * @author mwoelker
+   */
+  protected class ModelUpdater implements Runnable {
+
+    public void run() {
+      File modelDirectory = configuration.getModelDirectory();
+      File modelXML = new File( modelDirectory, EPPMODEL_XML_FILENAME );
+      long lastModified = 0;
+      while( true ) {
+        try {
+          long newLastModified = modelXML.lastModified();
+          if( lastModified != newLastModified ) {
+            reload();
+            lastModified = newLastModified;
+          }
+          if( lastUpdate + ( UPDATE_INTERVAL_IN_SEC * 1000 ) < System.currentTimeMillis() )
+          {
+            reload();
+          }
+          sleep( UPDATE_CHECK_IN_SEC );
+        } catch( Throwable t ) {
+          logger.error( "Error updating model", t );
+          sleep( ERROR_UPDATE_INTERVAL_IN_SEC );
+        }
+      }
+    }
+
+    /**
+     * reloads the model and updates the internal member variable
+     * 
+     * @throws Exception
+     */
+    private void reload() throws Exception {
+      EPPModel tempModel = loadModel();
+      synchronized( LOCK ) {
+        model = tempModel;
+        lastUpdate = System.currentTimeMillis();
+      }
+      logger.info( "Updated model" );
+    }
+
+    private void sleep( long timeInSec ) {
+      try {
+        Thread.sleep( timeInSec * 1000 );
+      } catch( InterruptedException e ) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  public ModelCache( Configuration configuration ) {
+    super();
+    this.configuration = configuration;
+    Thread updateThread = new Thread( new ModelUpdater() );
+    updateThread.setName( "EPP Model updater" );
+    updateThread.setDaemon( true );
+    updateThread.start();
+  }
+
+  public EPPModel getModel() throws Exception {
+    long start = System.nanoTime();
+    synchronized( LOCK ) {
+      if( model == null ) {
+        model = loadModel();
+      }
+      long end = System.nanoTime();
+      if( logger.isDebugEnabled() ) {
+        logger.debug( "Cache time: " + ( end - start ) / 1000 );
+      }
+      return model;
+    }
+  }
+
+  protected EPPModel loadModel() throws Exception {
+    File modelDirectory = configuration.getModelDirectory();
+    File modelXML = new File( modelDirectory, EPPMODEL_XML_FILENAME );
+    EPPModel model = null;
+    model = EPPModel.read( modelXML.toURI().toURL(),
+                           new URL( configuration.getEppMetadataRepository() ) );
+    return model;
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java
index 5c3f3e3..f918a85 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java
@@ -10,33 +10,24 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.internal;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public class OsUtil {
 
-  private static final String[] PLATFORMS
-    = new String[] { "win32", "linux",
-			"macosx" };
-  private static final Map<String, String> EXTS = new HashMap<String, String>();
-
-  static {
-    EXTS.put( "win32", "zip" );
-    EXTS.put( "linux", "tar.gz" );
-    EXTS.put("macosx", "tar.gz");
+  public static Platform getDefaultOs( String userAgent ) {
+    Platform result = Platform.WIN32;
+    for( Platform platform : Platform.values() ) {
+      String platformHeader = platform.getId().substring( 0, 3 );
+      if( userAgent.indexOf( platformHeader ) > -1
+          || userAgent.indexOf( platformHeader.toUpperCase() ) > -1
+          || userAgent.indexOf( platformHeader.substring( 0, 1 ).toUpperCase()
+                                + platformHeader.substring( 1,
+                                                            platformHeader.length() ) ) > -1 )
+      {
+        result = platform;
+      }
+    }
+    return result;
   }
-  
-  public static String[] getPlatforms() {
-    return PLATFORMS;
-  }
-  
-  public static String getArchiveExtension( final String os ) {
-    return EXTS.get( os );
-  }
-  
-  
-  
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataConstants.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataConstants.java
deleted file mode 100644
index 1785a15..0000000
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * 		Henrik Lindberg
- ******************************************************************************/
-
-package org.eclipse.epp.wizard.internal;
-
-/**
- * @author Henrik Lindberg
- * 
- */
-public interface P2MetadataConstants
-{
-
-	static final String IU_METADATA_FORMAT = "InstallableUnit"; //$NON-NLS-1$
-
-	static final String INSTALLABLE_ELEMENT = "installable"; //$NON-NLS-1$
-
-	static final String INSTALLABLE_VERSION = "1.0.0"; //$NON-NLS-1$
-
-	static final String IU_METADATA_FORMAT_VERSION = "1.0.0"; //$NON-NLS-1$
-
-	static final String DEFAULT_IU_VERSION_STRING = "1.0.0"; //$NON-NLS-1$
-
-	static final String DEFAULT_IU_LICENSE_TEMPLATE = "The code, documentation and other materials contained herein have been"
-			+ " licensed under the NAMEOFLICENSE - VERSION by the copyright holder(s)"
-			+ " listed in the Copyright section.";
-
-	static final String DEFAULT_IU_COPYRIGHT_TEMPLATE = "Annotation to copyright URL, or the actual copyright text.";
-
-}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataReader.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataReader.java
deleted file mode 100644
index 228da5a..0000000
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataReader.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * 		Henrik Lindberg
- ******************************************************************************/
-
-package org.eclipse.epp.wizard.internal;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
-import org.eclipse.equinox.internal.p2.metadata.repository.Activator;
-import org.eclipse.equinox.internal.p2.metadata.repository.Messages;
-import org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser;
-import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
-import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
-import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.osgi.service.resolver.VersionRange;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Version;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * P2 Metadata Reader used to centralize reading of P2 metadata as API is likely to change.
- * The InstallableUnit reader reuses the MetadataRepository handler for InstallableUnit but in an 
- * ugly way.
- * 
- * TODO: The format, parser and writer should either be private, and use its own impl of
- * the IInstallableUnit interface for the sole purpose of editing, or the Metadata API should
- * allow creation of mutable instances.
- * 
- * @author Henrik Lindberg
- */
-@SuppressWarnings("restriction")
-public class P2MetadataReader implements P2MetadataConstants
-{
-
-	/**
-	 * Reads metadata from the given stream, and returns the contained array
-	 * of abstract metadata repositories.
-	 * This method performs buffering, and closes the stream when finished.
-	 */
-	public static InstallableUnit readInstallableUnit(URL location, InputStream input, IProgressMonitor monitor) throws ProvisionException {
-		BufferedInputStream bufferedInput = null;
-		try {
-			try {
-				bufferedInput = new BufferedInputStream(input);
-
-				Parser repositoryParser = new Parser(Activator.getContext(), Activator.ID);
-				repositoryParser.parse(input, monitor);
-				IStatus result = repositoryParser.getStatus();
-				switch (result.getSeverity()) {
-					case IStatus.CANCEL :
-						throw new OperationCanceledException();
-					case IStatus.ERROR :
-						throw new ProvisionException(result);
-					case IStatus.WARNING :
-					case IStatus.INFO :
-						LogHelper.log(result);
-				}
-				return repositoryParser.getInstallableUnit();
-			} 
-			catch(Exception e)
-			{
-				e.printStackTrace(); // REMOVE ENTIRE CATCH
-				return null;
-			}
-			finally {
-				if (bufferedInput != null)
-					bufferedInput.close();
-			}
-		} catch (IOException ioe) {
-			String msg = NLS.bind(Messages.io_failedRead, location);
-			throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, ioe));
-		}
-	}
-
-	private interface XMLConstants extends org.eclipse.equinox.internal.p2.metadata.repository.io.XMLConstants {
-
-		// Constants defining the structure of the XML for a MetadataRepository
-
-		// A format version number for metadata repository XML.
-		public static final String XML_VERSION = "1.0.0"; //$NON-NLS-1$
-		public static final Version CURRENT_VERSION = new Version(XML_VERSION);
-		public static final VersionRange XML_TOLERANCE = new VersionRange(CURRENT_VERSION, true, new Version(2, 0, 0), false);
-
-		// Constants for processing Instructions
-		public static final String PI_IU_TARGET = "InstallableUnit"; //$NON-NLS-1$
-
-		// Constants for metadata IU elements
-		public static final String IU_ELEMENT = "installable"; //$NON-NLS-1$
-
-	}
-
-	@SuppressWarnings("unchecked")
-	protected XMLWriter.ProcessingInstruction[] createPI(Class iuClass) {
-		//TODO We should remove this processing instruction, but currently old clients rely on this. See bug 210450.
-		return new XMLWriter.ProcessingInstruction[] {XMLWriter.ProcessingInstruction.makeClassVersionInstruction(XMLConstants.PI_IU_TARGET, iuClass, XMLConstants.CURRENT_VERSION)};
-	}
-
-
-	/*
-	 * 	Parser for the contents of a installable unit,
-	 * 	as written by the Writer class.
-	 */
-	private static class Parser extends MetadataParser implements XMLConstants {
-
-		private InstallableUnit theInstallableUnit = null;
-
-		public Parser(BundleContext context, String bundleId) {
-			super(context, bundleId);
-		}
-
-		public synchronized void parse(InputStream stream, IProgressMonitor monitor) throws IOException {
-			this.status = null;
-			setProgressMonitor(monitor);
-			monitor.beginTask("Loading installable unit", IProgressMonitor.UNKNOWN);
-			try {
-				// TODO: currently not caching the parser since we make no assumptions
-				//		 or restrictions on concurrent parsing
-				getParser();
-				IUHandler iuHandler = new IUHandler();
-				xmlReader.setContentHandler(new IUDocHandler(IU_ELEMENT, iuHandler));
-				xmlReader.parse(new InputSource(stream));
-				if (isValidXML()) {
-					theInstallableUnit = iuHandler.getInstallableUnit();
-				}
-			} catch (SAXException e) {
-				throw new IOException(e.getMessage());
-			} catch (ParserConfigurationException e) {
-				throw new IOException(e.getMessage());
-			} finally {
-				monitor.done();
-				stream.close();
-			}
-		}
-
-		public InstallableUnit getInstallableUnit() {
-			return theInstallableUnit;
-		}
-
-		@Override
-		protected Object getRootObject() {
-			return getInstallableUnit();
-		}
-
-		private final class IUDocHandler extends DocHandler {
-
-			public IUDocHandler(String rootName, RootHandler rootHandler) {
-				super(rootName, rootHandler);
-			}
-
-			@Override
-			public void processingInstruction(String target, String data) throws SAXException {
-				if (PI_IU_TARGET.equals(target)) {
-					Version repositoryVersion = extractPIVersion(target, data);
-					if (!P2MetadataReader.XMLConstants.XML_TOLERANCE.isIncluded(repositoryVersion)) {
-						throw new SAXException(NLS.bind(Messages.io_IncompatibleVersion, repositoryVersion, P2MetadataReader.XMLConstants.XML_TOLERANCE));
-					}
-				}
-			}
-
-		}
-
-		private final class IUHandler extends RootHandler {
-			private InstallableUnitHandler unitHandler = null;
-			ArrayList<InstallableUnitDescription> units = null;
-
-			private InstallableUnit installableUnit = null;
-
-			public IUHandler() {
-				super();
-			}
-
-			public InstallableUnit getInstallableUnit() {
-				return this.installableUnit;
-			}
-
-			@Override
-			protected void handleRootAttributes(Attributes attributes) {
-				// root element *is* the Installable Unit - the default parser is from
-				// the meta data repository parser, and it expects to parse a number of
-				// units, returning InstallableUnitDescription instances in a List.
-			}
-
-			@Override
-			public void startElement(String name, Attributes attributes) {
-				checkCancel();
-				if (name.equals(INSTALLABLE_UNIT_ELEMENT)) {
-					this.units = new ArrayList<InstallableUnitDescription>(1);
-					this.unitHandler = new InstallableUnitHandler(this, attributes, units);	
-				} else {
-					invalidElement(name, attributes);
-				}
-			}
-
-			@Override
-			protected void finished() {
-				if (isValidXML()) {
-					// TODO: This is an Ugly cast because the unit handler returns an interface rather than the mutable instance.
-					//
-					 this.installableUnit = (InstallableUnit) this.unitHandler.getInstallableUnit();
-				}
-			}
-		}
-
-		@Override
-		protected String getErrorMessage() {
-			return Messages.io_parseError;
-		}
-
-		@Override
-		public String toString() {
-			// TODO:
-			return null;
-		}
-	}
-}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Platform.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Platform.java
new file mode 100644
index 0000000..dd1f6fd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Platform.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.internal;
+
+/**
+ * enumeration of all supported platforms
+ * 
+ * @author mwoelker
+ */
+public enum Platform {
+  WIN32("win32", "Windows", "zip"), LINUX("linux", "Linux", "tar.gz"), MACOSX(
+      "macosx", "Mac OS X", "tar.gz");
+
+  private final String id;
+  private final String label;
+  private final String extension;
+
+  private Platform( String id, String label, String extension ) {
+    this.id = id;
+    this.extension = extension;
+    this.label = label;
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public String getLabel() {
+    return label;
+  }
+
+  public String getExtension() {
+    return extension;
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StatsLogger.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StatsLogger.java
new file mode 100644
index 0000000..d357948
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StatsLogger.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.internal;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Class for logging statistics about outgoing clicks Logged items: * current
+ * timestamp * user agent * selected IU roots * destination URL
+ * 
+ * @author mwoelker
+ */
+public class StatsLogger implements Runnable {
+
+  private static final String TABLE_HEADER = "'Timestamp	rootIUs	destination	user-agent";
+  static Logger logger = Logger.getLogger( StatsLogger.class );
+  /**
+   * Class encapsulating data for one outgoing click
+   * 
+   * @author mwoelker
+   */
+  public static class Statistic {
+
+    private static final String ISO8601_DATEFORMAT = "yyyy-MM-dd'T'HH:mm:ss\t";
+    static DateFormat dateFormat = new SimpleDateFormat( ISO8601_DATEFORMAT );
+    Date timestamp = new Date();
+    String userAgent;
+    String roots;
+    String destination;
+
+    public Statistic( String destination, String userAgent, String roots ) {
+      super();
+      this.destination = destination;
+      this.userAgent = userAgent;
+      this.roots = roots;
+    }
+
+    @Override
+    public String toString() {
+      StringBuilder builder = new StringBuilder();
+      builder.append( dateFormat.format( timestamp ) );
+      builder.append( roots );
+      builder.append( "\t" );
+      builder.append( destination );
+      builder.append( "\t" );
+      builder.append( userAgent );
+      builder.append( "\t" );
+      return builder.toString();
+    }
+  }
+  // Blocking queue for asynchronous producer/consumer processing
+  protected BlockingQueue<Statistic> queue = new LinkedBlockingQueue<Statistic>();
+  protected Thread thread;
+  private PrintWriter writer;
+
+  public StatsLogger( File file ) {
+    try {
+      writer = new PrintWriter( new BufferedWriter( new FileWriter( file, true ) ) );
+      writer.println( TABLE_HEADER );
+      thread = new Thread( this );
+      thread.setName( "Download Statistics Logger" );
+      thread.setDaemon( true );
+      thread.start();
+    } catch( Throwable t ) {
+      logger.error( "Could not initialize StatsLogger", t );
+    }
+  }
+
+  public void log( Statistic statistic ) {
+    queue.add( statistic );
+  }
+
+  public void run() {
+    try {
+      while( true ) {
+        Statistic statistic;
+        statistic = queue.take();
+        internalLog( statistic );
+      }
+    } catch( InterruptedException e ) {
+      Thread.currentThread().interrupt();
+    }
+  }
+
+  private void internalLog( Statistic statistic ) {
+    writer.println( statistic );
+    writer.flush();
+  }
+}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java
index eb0af7f..a8abf57 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java
@@ -10,14 +10,13 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.internal;
 
-
-
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public class StringUtil {
 
-  public static String toCommaList( final String[] items, final boolean space ) {
+  public static String toCommaList( final String[] items, final boolean space )
+  {
     StringBuilder result = new StringBuilder();
     for( int i = 0; i < items.length; i++ ) {
       if( i > 0 ) {
@@ -30,5 +29,4 @@
     }
     return result.toString();
   }
-
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java
index e268828..214a91f 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java
@@ -38,6 +38,15 @@
   private List<IWishlistListener> listeners = new ArrayList<IWishlistListener>();
   private EPPModel model = null;
   private HashMap<String, IURef> iuRefMap;
+  private Platform platform;
+
+  public Platform getPlatform() {
+    return platform;
+  }
+
+  public void setPlatform( Platform platform ) {
+    this.platform = platform;
+  }
 
   Wishlist() {
     // prevent instantiation
@@ -63,35 +72,38 @@
   }
 
   public void add( final Group group ) {
-    groups.add( group );
-    for (IURef iuRef : group.getIURefs()) {
-			iuRefs.remove(iuRef);
+    // groups.add(group);
+    for( IURef iuRef : group.getIURefs() ) {
+      add( iuRef );
     }
     fireChange();
   }
 
   public void remove( final Group group ) {
-    groups.remove( group );
+    // groups.remove(group);
     for( IURef iuRef : group.getIURefs() ) {
-      iuRefs.remove( iuRef );
+      remove( iuRef );
     }
     fireChange();
   }
 
-  public void add( final IURef iuRef ) {
-    if( !groups.contains( iuRef.getParent() ) ) {
-      iuRefs.add( iuRef );
-      List<IURef> includedSiblings = includedIURefsInGroup( iuRef.getParent() );
-      IURef[] siblingIURefs = iuRef.getParent().getIURefs();
-      if( includedSiblings.size() == siblingIURefs.length ) {
-        // all included
-        groups.add( iuRef.getParent() );
-        for( IURef siblingIURef : siblingIURefs ) {
-          iuRefs.remove( siblingIURef );
+  public void add( final IURef toAdd ) {
+    List<IURef> list = model.getAllRefs( toAdd );
+    for( IURef iuRef : list ) {
+      if( !groups.contains( iuRef.getParent() ) ) {
+        iuRefs.add( iuRef );
+        List<IURef> includedSiblings = includedIURefsInGroup( iuRef.getParent() );
+        IURef[] siblingIURefs = iuRef.getParent().getIURefs();
+        if( includedSiblings.size() == siblingIURefs.length ) {
+          // all included
+          groups.add( iuRef.getParent() );
+          for( IURef siblingIURef : siblingIURefs ) {
+            iuRefs.remove( siblingIURef );
+          }
         }
       }
-      fireChange();
     }
+    fireChange();
   }
 
   private List<IURef> includedIURefsInGroup( Group group ) {
@@ -104,16 +116,17 @@
     return result;
   }
 
-  public void remove( final IURef iuRef ) {
-    if( groups.contains( iuRef.getParent() ) ) {
-      groups.remove( iuRef.getParent() );
-      for( IURef siblingIURef : iuRef.getParent()
-        .getIURefs() )
-      {
-        iuRefs.add( siblingIURef );
+  public void remove( final IURef toRemove ) {
+    List<IURef> list = model.getAllRefs( toRemove );
+    for( IURef iuRef : list ) {
+      if( groups.contains( iuRef.getParent() ) ) {
+        groups.remove( iuRef.getParent() );
+        for( IURef siblingIURef : iuRef.getParent().getIURefs() ) {
+          iuRefs.add( siblingIURef );
+        }
       }
+      iuRefs.remove( iuRef );
     }
-    iuRefs.remove( iuRef );
     fireChange();
   }
 
@@ -157,20 +170,19 @@
     }
     return result.toArray( new String[ result.size() ] );
   }
-  
+
   public String getSelectedIuIds() {
     ArrayList<String> iuIds = new ArrayList<String>();
-    for(Group group: groups)
-    {
-      for(IURef iuRef: group.getIURefs()){
-        iuIds.add(iuRef.getRefId());
+    for( Group group : groups ) {
+      for( IURef iuRef : group.getIURefs() ) {
+        iuIds.add( iuRef.getRefId() );
       }
-      
     }
-    for(IURef iuRef: iuRefs){
-      iuIds.add(iuRef.getRefId());
+    for( IURef iuRef : iuRefs ) {
+      iuIds.add( iuRef.getRefId() );
     }
-    return StringUtil.toCommaList( iuIds.toArray(new String[iuIds.size()]), false );
+    return StringUtil.toCommaList( iuIds.toArray( new String[ iuIds.size() ] ),
+                                   false );
   }
 
   // ////////////////
@@ -225,19 +237,19 @@
     }
   }
 
-  public String[] addIURefs(String[] strings) {
+  public String[] addIURefs( String[] strings ) {
     if( model == null ) {
       throw new IllegalStateException( "EPP model is not set" );
     }
     List<String> unresolvedIURefs = new ArrayList<String>();
-		for (String iuRefId : strings) {
-			IURef iuRef = iuRefMap.get(iuRefId);
-			if (iuRef != null) {
-				add(iuRef);
+    for( String iuRefId : strings ) {
+      IURef iuRef = iuRefMap.get( iuRefId );
+      if( iuRef != null ) {
+        add( iuRef );
       } else {
-        unresolvedIURefs.add(iuRefId);
+        unresolvedIURefs.add( iuRefId );
       }
     }
-    return unresolvedIURefs.toArray(new String[0]);
+    return unresolvedIURefs.toArray( new String[ 0 ] );
   }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java
index 9623a16..76c50ed 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java
@@ -11,7 +11,6 @@
 package org.eclipse.epp.wizard.internal.ui;
 
 import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
@@ -23,10 +22,10 @@
 
   boolean selected = false;
   boolean grayed = false;
-  
+
   public Checkbox( final Composite parent ) {
     super( parent, SWT.NONE );
-    LinkUtil.setHandCursor(this);    
+    LinkUtil.setHandCursor( this );
     updateImage();
   }
 
@@ -42,12 +41,12 @@
   public boolean isGrayed() {
     return grayed;
   }
-  
+
   public void setGrayed( boolean grayed ) {
     this.grayed = grayed;
     updateImage();
   }
- 
+
   public void pressed() {
     if( isGrayed() ) {
       setGrayed( false );
@@ -60,8 +59,7 @@
   }
 
   // helping methods
-  //////////////////
-  
+  // ////////////////
   private void updateImage() {
     if( isGrayed() ) {
       setImage( Images.CHECKBOX_GRAYED.get() );
@@ -71,5 +69,4 @@
       setImage( Images.CHECKBOX_UNCHECKED.get() );
     }
   }
-
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java
index c4be2ad..5c7207c 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java
@@ -15,10 +15,8 @@
 import org.eclipse.swt.graphics.RGB;
 
 public enum Colors {
-  WHITE(255,255,255),
-  ECLIPSE_BLUE(51,51,102),
-  ECLIPSE_VIOLET(102,51,102),
-  SASH(180,180,180),;
+  WHITE(255, 255, 255), ECLIPSE_BLUE(51, 51, 102), ECLIPSE_VIOLET(102, 51, 102), SASH(
+      180, 180, 180), ;
 
   private final RGB rgb;
 
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java
index f03d4f9..2e9e627 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java
@@ -15,29 +15,20 @@
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.FontData;
 
-
 public enum Fonts {
-  TEXT("sans-serif", 14, SWT.NONE),
-  TITLE("sans-serif", 18, SWT.BOLD),
-  H2("sans-serif", 15, SWT.BOLD),
-  DESCRIPTION("sans-serif", 14, SWT.NONE),
-  GROUP("Georgia,Times,serif", 18, SWT.NONE),
-  FEATURE("sans-serif", 14, SWT.NONE),
-  BUTTON("sans-serif", 14, SWT.BOLD),
-  WISHLIST_ITEM("sans-serif", 16, SWT.NONE),
-  BETA("sans-serif", 28,
-			SWT.ITALIC),
-  ;
-  
+  TEXT("sans-serif", 14, SWT.NONE), TITLE("sans-serif", 18, SWT.BOLD), HEADER(
+      "sans-serif", 24, SWT.BOLD), H2("sans-serif", 15, SWT.BOLD), DESCRIPTION(
+      "sans-serif", 14, SWT.NONE), GROUP("Georgia,Times,serif", 18, SWT.NONE), FEATURE(
+      "sans-serif", 14, SWT.NONE), BUTTON("sans-serif", 14, SWT.BOLD), WISHLIST_ITEM(
+      "sans-serif", 16, SWT.NONE), BETA("sans-serif", 28, SWT.ITALIC), ;
+
   private final FontData fontData;
-  private Fonts(String name, int height, int style )
-  {
-    fontData = new FontData(name, height, style);
+
+  private Fonts( String name, int height, int style ) {
+    fontData = new FontData( name, height, style );
   }
-  
-  public Font get()
-  {
+
+  public Font get() {
     return Graphics.getFont( fontData );
   }
-
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java
index c3e9b41..6f26e9d 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java
@@ -20,7 +20,6 @@
 import org.eclipse.epp.wizard.model.Group;
 import org.eclipse.epp.wizard.model.IURef;
 import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
@@ -123,8 +122,10 @@
     groupIconLayout.marginHeight = 1;
     groupIconLayout.marginWidth = 1;
     groupIcon.setLayout( groupIconLayout );
-    File modelDirectory = Activator.getDefault().getConfiguration().getModelDirectory();
-    File file = new File( modelDirectory,group.getIcon() );
+    File modelDirectory = Activator.getDefault()
+      .getConfiguration()
+      .getModelDirectory();
+    File file = new File( modelDirectory, group.getIcon() );
     Image image = Images.load( file );
     if( image == null ) {
       image = Images.ICON_GROUP_FALLBACK.get();
@@ -168,7 +169,7 @@
     expBtnGD.verticalSpan = 3;
     expandButton.setLayoutData( expBtnGD );
     expandButton.setImage( Images.ICON_COLLAPSED.get() );
-    LinkUtil.setHandCursor(expandButton);
+    LinkUtil.setHandCursor( expandButton );
     expandButton.addMouseListener( new MouseAdapter() {
 
       @Override
@@ -186,24 +187,26 @@
                                                      true,
                                                      true ) );
     expandableComposite.setLayout( new GridLayout( 1, false ) );
-    IURef[] featureRefs = group.getIURefs();
-    for( int j = 0; j < featureRefs.length; j++ ) {
-      final IURef featureRef = featureRefs[ j ];
+    IURef[] iuRefs = group.getIURefs();
+    for( int j = 0; j < iuRefs.length; j++ ) {
+      final IURef iuRef = iuRefs[ j ];
       final Button featureCheckBox = new Button( expandableComposite, SWT.CHECK );
       featureCheckBox.setLayoutData( new GridData() );
-      featureCheckBox.setText( featureRef.getIU().getProperty(IInstallableUnit.PROP_NAME) );
+      featureCheckBox.setText( iuRef.getIU()
+        .getProperty( IInstallableUnit.PROP_NAME ) );
       featureCheckBox.setFont( Fonts.FEATURE.get() );
-      LinkUtil.setHandCursor(featureCheckBox);
-      featureCheckBox.setToolTipText(featureRef.getIU().getProperty(IInstallableUnit.PROP_DESCRIPTION));
+      LinkUtil.setHandCursor( featureCheckBox );
+      featureCheckBox.setToolTipText( iuRef.getIU()
+        .getProperty( IInstallableUnit.PROP_DESCRIPTION ) );
       featureCheckBox.addSelectionListener( new SelectionAdapter() {
 
         @Override
         public void widgetSelected( SelectionEvent e ) {
           boolean isSelected = featureCheckBox.getSelection();
           if( isSelected ) {
-            Wishlist.getDefault().add( featureRef );
+            Wishlist.getDefault().add( iuRef );
           } else {
-            Wishlist.getDefault().remove( featureRef );
+            Wishlist.getDefault().remove( iuRef );
           }
         }
       } );
@@ -211,7 +214,7 @@
 
         public void wishlistChanged() {
           Wishlist wishlist = Wishlist.getDefault();
-          Inclusion inclusion = wishlist.isIncluded( featureRef );
+          Inclusion inclusion = wishlist.isIncluded( iuRef );
           featureCheckBox.setSelection( inclusion == Inclusion.FULL );
         }
       } );
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java
index 8b7ba33..7bb6e54 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java
@@ -16,7 +16,10 @@
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public interface IWizardScreen {
+
   public String getLabel();
 
   public Control getControl();
+
+  public void update();
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java
index 5736713..4cbd8da 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java
@@ -13,62 +13,60 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 
-import org.eclipse.epp.wizard.internal.Activator;
-import org.eclipse.jface.resource.ImageDescriptor;
+import org.apache.log4j.Logger;
 import org.eclipse.rwt.graphics.Graphics;
 import org.eclipse.swt.graphics.Image;
 
-
 public enum Images {
-  DOWNLOAD("download.png"),
-  WEBSTART("webstart.png"),
-  ITEM_GROUP("group16.png"),
-  ITEM_FEATURE("feature16.png"),
-  ICON_COLLAPSED("expand0.png"),
-  ICON_EXPANDED("expand1.png"),
-  ICON_GROUP("group48.png"),
-  ICON_GROUP_FALLBACK("group_fallback.png"),
-  CHECKBOX_CHECKED("cb_selected.png"),
-  CHECKBOX_UNCHECKED("cb_notselected.png"),
-  CHECKBOX_GRAYED("cb_grayed.png"),
-  MAP_CONNECTION("map_connection.png"),
-  MAP_LEFT("map_left.png"),
-  MAP_RIGHT("map_right.png"),
-  MAP_CENTER("map_center.png"),
-  MAP_LEFT_FOCUS("map_left-focus.png"),
-  MAP_RIGHT_FOCUS("map_right-focus.png"),
-  MAP_CENTER_FOCUS("map_center-focus.png"),
-  MAP_NEXT("map_next.png"),
-  MAP_PREV("map_prev.png"),
-  MAP_NEXT_OFF("map_next_off.png"),
-  MAP_PREV_OFF("map_prev_off.png"),
-  MAP_SPACING("map_spacing.png"),  
-  MY_SELECTION("my_selection.png"),
-  ;
-  
+  DOWNLOAD("download.png"), WEBSTART("webstart.png"), ITEM_GROUP("group16.png"), ITEM_FEATURE(
+      "feature16.png"), ICON_COLLAPSED("expand0.png"), ICON_EXPANDED(
+      "expand1.png"), ICON_GROUP("group48.png"), ICON_GROUP_FALLBACK(
+      "group_fallback.png"), CHECKBOX_CHECKED("cb_selected.png"), CHECKBOX_UNCHECKED(
+      "cb_notselected.png"), CHECKBOX_GRAYED("cb_grayed.png"), MAP_CONNECTION(
+      "map_connection.png"), MAP_LEFT("map_left.png"), MAP_RIGHT(
+      "map_right.png"), MAP_CENTER("map_center.png"), MAP_LEFT_FOCUS(
+      "map_left-focus.png"), MAP_RIGHT_FOCUS("map_right-focus.png"), MAP_CENTER_FOCUS(
+      "map_center-focus.png"), MAP_NEXT("map_next.png"), MAP_PREV(
+      "map_prev.png"), MAP_NEXT_OFF("map_next_off.png"), MAP_PREV_OFF(
+      "map_prev_off.png"), MAP_SPACING("map_spacing.png"), MY_SELECTION(
+      "my_selection.png"), HEADER_LOGO("eclipse_home_header.jpg"), HEADER_BACKGROUND(
+      "header_bg.jpg"), ;
+
+  static Logger logger = Logger.getLogger( Images.class );
   private final String location;
   private final static String imageFolder = "icons/";
 
   private Images( String location ) {
-    this.location = imageFolder+location;
+    this.location = imageFolder + location;
   }
-  
-  public Image get()
-  {
-    ImageDescriptor imgDescr
-    = Activator.imageDescriptorFromPlugin( Activator.PLUGIN_ID, location );
-    return imgDescr.createImage();
+
+  public Image get() {
+    /*
+     * ImageDescriptor imgDescr = Activator.imageDescriptorFromPlugin(
+     * Activator.PLUGIN_ID, location ); return imgDescr.createImage();
+     */
+    return Graphics.getImage( location, getClass().getClassLoader() );
   }
-  
-  public static Image load(File file)
-  {
+
+  public static Image load( File file ) {
     Image image = null;
+    FileInputStream inputStream = null;
     try {
-      image =  Graphics.getImage( file.getName(), new FileInputStream(file));
+      inputStream = new FileInputStream( file );
+      image = Graphics.getImage( file.getName(), inputStream );
     } catch( FileNotFoundException exc ) {
-      System.err.println("Image file '"+file.getAbsolutePath()+ "' not found.");
-    } 
+      logger.warn( "Image file '" + file.getAbsolutePath() + "' not found." );
+    } finally {
+      if( inputStream != null ) {
+        try {
+          inputStream.close();
+        } catch( IOException e ) {
+          logger.warn( "Could not close file '" + file.getAbsolutePath(), e );
+        }
+      }
+    }
     return image;
   }
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java
index 41b4ba7..25f2da3 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java
@@ -15,7 +15,6 @@
 import java.util.Map;
 
 import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.events.MouseAdapter;
@@ -30,15 +29,14 @@
  */
 public class Roadmap extends Composite {
 
-  public interface IRoadmapListener
-  {
-    void screenActivated( final IWizardScreen activeScreen ); 
+  public interface IRoadmapListener {
+
+    void screenActivated( final IWizardScreen activeScreen );
   }
   private final IWizardScreen[] screens;
   private final StackLayout stackLayout;
   private IWizardScreen activeScreen;
-  Map<IWizardScreen, RoadmapItem> items
-    = new HashMap<IWizardScreen, RoadmapItem>();
+  Map<IWizardScreen, RoadmapItem> items = new HashMap<IWizardScreen, RoadmapItem>();
   protected HashSet<IRoadmapListener> listeners = new HashSet<IRoadmapListener>();
   private Label navPrev;
   private Label navNext;
@@ -53,15 +51,14 @@
     createContents();
   }
 
-  public void addListener(final IRoadmapListener listener)
-  {
+  public void addListener( final IRoadmapListener listener ) {
     listeners.add( listener );
   }
-  
-  public void removeListener(final IRoadmapListener listener)
-  {
+
+  public void removeListener( final IRoadmapListener listener ) {
     listeners.remove( listener );
   }
+
   private void createContents() {
     setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
     RowLayout layout = new RowLayout();
@@ -82,10 +79,10 @@
   private void createNavNext() {
     new Label( this, SWT.NONE ).setImage( Images.MAP_SPACING.get() );
     navNext = new Label( this, SWT.NONE );
-    LinkUtil.setHandCursor(navNext);
+    LinkUtil.setHandCursor( navNext );
     navNext.setImage( Images.MAP_NEXT.get() );
-
     MouseAdapter mouseListener = new MouseAdapter() {
+
       @Override
       public void mouseDown( final MouseEvent e ) {
         IWizardScreen nextScreen = getNextScreen();
@@ -100,10 +97,10 @@
   private void createNavPrev() {
     navPrev = new Label( this, SWT.NONE );
     navPrev.setImage( Images.MAP_PREV_OFF.get() );
-    LinkUtil.setHandCursor(navPrev);
+    LinkUtil.setHandCursor( navPrev );
     new Label( this, SWT.NONE ).setImage( Images.MAP_SPACING.get() );
-
     MouseAdapter mouseListener = new MouseAdapter() {
+
       @Override
       public void mouseDown( final MouseEvent e ) {
         IWizardScreen prevScreen = getPrevScreen();
@@ -122,34 +119,33 @@
     for( IWizardScreen screen : this.screens ) {
       boolean isActive = ( screen.equals( activeScreen ) );
       items.get( screen ).setActive( isActive );
-      if( isActive) {
+      if( isActive ) {
         updateNav();
       }
     }
-    for(IRoadmapListener listener: listeners)
-    {
+    for( IRoadmapListener listener : listeners ) {
       listener.screenActivated( activeScreen );
     }
-    
+    activeScreen.update();
   }
 
   private void updateNav() {
     if( getPrevScreen() == null ) {
       navPrev.setImage( Images.MAP_PREV_OFF.get() );
-      LinkUtil.resetCursor(navPrev);
+      LinkUtil.resetCursor( navPrev );
     } else {
       navPrev.setImage( Images.MAP_PREV.get() );
-      LinkUtil.setHandCursor(navPrev);
+      LinkUtil.setHandCursor( navPrev );
     }
     if( getNextScreen() != null ) {
       navNext.setImage( Images.MAP_NEXT.get() );
-      LinkUtil.setHandCursor(navNext);
+      LinkUtil.setHandCursor( navNext );
     } else {
       navNext.setImage( Images.MAP_NEXT_OFF.get() );
-      LinkUtil.resetCursor(navNext);
+      LinkUtil.resetCursor( navNext );
     }
   }
-  
+
   private IWizardScreen getNextScreen() {
     IWizardScreen result = null;
     for( int i = 0; result == null && i < screens.length; i++ ) {
@@ -179,11 +175,11 @@
     }
     return result;
   }
-  
+
   private boolean hasNext( final int i, final Object[] array ) {
     return i + 1 < array.length;
   }
-  
+
   private IWizardScreen getActiveScreen() {
     return activeScreen;
   }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java
index 7171ff7..a5f3b06 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java
@@ -11,7 +11,6 @@
 package org.eclipse.epp.wizard.internal.ui;
 
 import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
@@ -21,7 +20,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 
-
 public class RoadmapItem {
 
   private boolean active;
@@ -59,7 +57,7 @@
     label.setLayoutData( new GridData( SWT.CENTER, SWT.CENTER, true, true ) );
     label.setText( screen.getLabel() );
     label.setForeground( Colors.WHITE.get() );
-    label.setFont(Fonts.BUTTON.get());
+    label.setFont( Fonts.BUTTON.get() );
     right = new Label( roadmap, SWT.NONE );
     right.setImage( Images.MAP_RIGHT.get() );
     right.setToolTipText( screen.getLabel() );
@@ -70,11 +68,11 @@
     } else {
       nextConnection.setImage( Images.MAP_SPACING.get() );
     }
-    LinkUtil.setHandCursor(left);
-    LinkUtil.setHandCursor(right);
-    LinkUtil.setHandCursor(label);
-
+    LinkUtil.setHandCursor( left );
+    LinkUtil.setHandCursor( right );
+    LinkUtil.setHandCursor( label );
     MouseAdapter mouseListener = new MouseAdapter() {
+
       @Override
       public void mouseDown( final MouseEvent e ) {
         roadmap.setActiveScreen( screen );
@@ -85,15 +83,14 @@
     right.addMouseListener( mouseListener );
     label.addMouseListener( mouseListener );
   }
-  
+
   public void setActive( final boolean active ) {
     this.active = active;
     updateImages();
   }
-  
-  // helping methods
-  //////////////////
 
+  // helping methods
+  // ////////////////
   private void updateImages() {
     if( active ) {
       prevConnection.setVisible( false );
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java
index 1f32aa9..933bc1e 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java
@@ -48,17 +48,16 @@
     titleLabel.setText( "My Selection" );
     titleLabel.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
     titleLabel.setFont( Fonts.TITLE.get() );
-    titleLabel.setForeground( Colors.ECLIPSE_BLUE.get() ); 
-    Label labelSeparator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
+    titleLabel.setForeground( Colors.ECLIPSE_BLUE.get() );
+    Label labelSeparator = new Label( this, SWT.SEPARATOR | SWT.HORIZONTAL );
     GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
     gridData.horizontalSpan = 2;
     labelSeparator.setLayoutData( gridData );
-    
     scrolledComposite = new ScrolledComposite( this, SWT.H_SCROLL
                                                      | SWT.V_SCROLL );
     GridData gridDataScrolled = new GridData( GridData.FILL_BOTH );
     gridDataScrolled.horizontalSpan = 2;
-    scrolledComposite.setLayoutData( gridDataScrolled) ;
+    scrolledComposite.setLayoutData( gridDataScrolled );
     listComposite = new Composite( scrolledComposite, SWT.NONE );
     listComposite.setLayout( new GridLayout( 2, false ) );
     // listComposite.setSize( 400, 400 );
@@ -104,7 +103,6 @@
     label.setText( string );
     label.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
     label.setFont( Fonts.WISHLIST_ITEM.get() );
-
     return label;
   }
 
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java
index 3e2c115..fc3d0c3 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java
@@ -10,24 +10,26 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.internal.ui;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.eclipse.epp.wizard.internal.Activator;
 import org.eclipse.epp.wizard.internal.Configuration;
 import org.eclipse.epp.wizard.internal.ExternalServiceProviderConfiguration;
+import org.eclipse.epp.wizard.internal.OsUtil;
+import org.eclipse.epp.wizard.internal.Platform;
 import org.eclipse.epp.wizard.internal.Wishlist;
 import org.eclipse.epp.wizard.internal.ui.Roadmap.IRoadmapListener;
 import org.eclipse.epp.wizard.model.EPPModel;
 import org.eclipse.epp.wizard.model.Screen;
 import org.eclipse.epp.wizard.model.Structure;
 import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.rwt.RWT;
 import org.eclipse.rwt.lifecycle.IEntryPoint;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.custom.SashForm;
 import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.events.ControlAdapter;
@@ -39,13 +41,13 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.jdom.JDOMException;
 
 /**
  * @author Jordi Boehme Lopez <jboehme@innoopract.com>
  */
 public class Wizard implements IEntryPoint, IRoadmapListener {
 
+  static Logger logger = Logger.getLogger( Wizard.class );
   private List<IWizardScreen> screens = new ArrayList<IWizardScreen>();
   private StackLayout stackLayout = new StackLayout();
   @SuppressWarnings("unused")
@@ -61,33 +63,42 @@
 
   public int createUI() {
     try {
-      loadModel();      
+      if( logger.isDebugEnabled() ) {
+        logger.debug( "Creating new session" );
+      }
+      loadModel();
+      Wishlist wishlist = Wishlist.getDefault();
+      wishlist.setModel( model );
+      String userAgent = RWT.getRequest().getHeader( "user-agent" );
+      // RWT.getRequest().getSession().getServletContext().getIni
+      Platform defaultOs = OsUtil.getDefaultOs( userAgent );
+      wishlist.setPlatform( defaultOs );
+      setInputFeatureIds( wishlist );
       Display display = new Display();
       final Shell shell = new Shell( display, SWT.NO_TRIM );
       shell.setMaximized( true );
       shell.setText( "EPP Download Wizard" );
-      shell.setLayout( new FillLayout() );
+      FillLayout layout = new FillLayout();
+      layout.marginHeight = -5;
+      layout.marginWidth = -5;
+      shell.setLayout( layout );
       Composite parent = new Composite( shell, SWT.NONE );
-      parent.setLayout(new GridLayout());
-
-            
+      parent.setLayout( new GridLayout() );
+      createHeader( parent );
       SashForm sashForm = new SashForm( parent, SWT.HORIZONTAL );
       sashForm.setBackground( Colors.SASH.get() );
-      sashForm.setLayoutData( new GridData( GridData.FILL_BOTH ) );
+      GridData layoutData = new GridData( GridData.FILL_BOTH );
+      sashForm.setLayoutData( layoutData );
+      layoutData.horizontalIndent = 20;
+      layoutData.verticalIndent = 20;
       Composite screenArea = createScreenArea( sashForm );
-      
-      
-      Wishlist wishlist = Wishlist.getDefault();
-      wishlist.setModel( model );
-      wishlistComposite = new WishlistComposite( sashForm,
-                                                                    wishlist);
+      wishlistComposite = new WishlistComposite( sashForm, wishlist );
       sashForm.setWeights( new int[]{
         2, 1
       } );
-      ExternalServiceProviderConfiguration externalServiceProviderConfiguration = Activator.getDefault().getConfiguration().getExternalServiceProviderConfiguration();
-
-
-      
+      ExternalServiceProviderConfiguration externalServiceProviderConfiguration = Activator.getDefault()
+        .getConfiguration()
+        .getExternalServiceProviderConfiguration();
       if( model != null ) {
         Structure structure = model.getStructure();
         Screen[] structScreens = structure.getScreens();
@@ -97,16 +108,15 @@
                                                                           screenArea );
           addWizardScreen( wizardScreen );
         }
-        downloadScreen = new WizardDownloadScreen(
-						screenArea, externalServiceProviderConfiguration);
-				addWizardScreen(downloadScreen);
+        downloadScreen = new WizardDownloadScreen( screenArea,
+                                                   externalServiceProviderConfiguration );
+        addWizardScreen( downloadScreen );
         screenArea.layout();
         Roadmap roadmap = createRoadmap( parent );
         roadmap.addListener( this );
         roadmap.setActiveScreen( this.screens.get( 0 ) );
       }
       setInputFeatureIds( wishlist );
-      
       shell.layout();
       shell.addControlListener( new ControlAdapter() {
 
@@ -122,34 +132,49 @@
       }
       return 0;
     } catch( Exception exc ) {
-      exc.printStackTrace();
+      logger.error( "Error in createUI", exc );
       return 0;
     }
   }
 
-  private void loadModel() {
-    Configuration configuration = Activator.getDefault().getConfiguration();
-		File modelDirectory = configuration.getModelDirectory();
-    File modelXML = new File(modelDirectory, "eppmodel.xml");
-    model = null;
-    try {
-      model = EPPModel.read(modelXML.toURI().toURL(), new URL(
-					configuration.getEppMetadataRepository()));
-    } catch( IOException exc ) {
-			// Activator.log( exc );
-    } catch( JDOMException exc ) {
-			// Activator.log( exc );
-    }
+  private void createHeader( Composite parent ) {
+    Composite header = new Composite( parent, SWT.NONE );
+    GridDataFactory.fillDefaults().grab( true, false ).applyTo( header );
+    GridLayoutFactory.fillDefaults().numColumns( 4 ).applyTo( header );
+    Label headerLabel = new Label( header, SWT.NONE );
+    headerLabel.setImage( Images.HEADER_LOGO.get() );
+    Label titleLabel = new Label( header, SWT.NONE );
+    header.setBackgroundMode( SWT.INHERIT_DEFAULT );
+    GridDataFactory.swtDefaults().indent( 30, 0 ).applyTo( titleLabel );
+    titleLabel.setText( "Eclipse Dynamic Download" );
+    titleLabel.setFont( Fonts.HEADER.get() );
+    titleLabel.setForeground( Colors.WHITE.get() );
+    header.setBackgroundImage( Images.HEADER_BACKGROUND.get() );
+    Label betaLabel = new Label( header, SWT.None );
+    betaLabel.setText( "beta" );
+    betaLabel.setFont( Fonts.BETA.get() );
+    betaLabel.setForeground( Colors.WHITE.get() );
+    GridDataFactory.fillDefaults()
+      .align( SWT.RIGHT, SWT.CENTER )
+      .grab( true, false )
+      .applyTo( betaLabel );
+    Label dummyLabel = new Label( header, SWT.None );
+    GridDataFactory.fillDefaults()
+      .align( SWT.RIGHT, SWT.CENTER )
+      .hint( 10, SWT.DEFAULT )
+      .applyTo( dummyLabel );
+  }
+
+  private void loadModel() throws Exception {
+    model = Activator.getDefault().getModel();
   }
 
   private void setInputFeatureIds( Wishlist wishlist ) {
-    String featureIdString = RWT.getRequest().getParameter(
-				Configuration.P2_ROOTS);
-    if(featureIdString != null)
-    {
+    String featureIdString = RWT.getRequest()
+      .getParameter( Configuration.P2_ROOTS );
+    if( featureIdString != null ) {
       String[] featureIds = featureIdString.split( "," );
-      wishlist.addIURefs(featureIds);
-      
+      wishlist.addIURefs( featureIds );
     }
   }
 
@@ -159,14 +184,16 @@
   private Composite createScreenArea( final Composite parent ) {
     Composite leftSide = new Composite( parent, SWT.NONE );
     leftSide.setLayout( new GridLayout() );
-    screenTitle = new Label(leftSide, SWT.NONE);
+    screenTitle = new Label( leftSide, SWT.NONE );
     screenTitle.setText( "Title" );
     screenTitle.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
     screenTitle.setFont( Fonts.TITLE.get() );
-    screenTitle.setForeground( Colors.ECLIPSE_BLUE.get() ); 
-    Label labelSeparator = new Label(leftSide, SWT.None /*SWT.SEPARATOR | SWT.HORIZONTAL*/);
+    screenTitle.setForeground( Colors.ECLIPSE_BLUE.get() );
+    Label labelSeparator = new Label( leftSide, SWT.None /*
+                                                          * SWT.SEPARATOR |
+                                                          * SWT.HORIZONTAL
+                                                          */);
     labelSeparator.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
-
     Composite result = new Composite( leftSide, SWT.NONE );
     result.setLayoutData( new GridData( GridData.FILL_BOTH ) );
     result.setLayout( this.stackLayout );
@@ -175,21 +202,49 @@
 
   private Roadmap createRoadmap( final Composite parent ) {
     IWizardScreen[] screensArray = screens.toArray( new IWizardScreen[ screens.size() ] );
-    
-    Composite bottom = new Composite(parent, SWT.None);
-    GridDataFactory.fillDefaults().grab(true, false).applyTo(bottom);
-    GridLayout layout = new GridLayout(2, false);
+    Composite bottom = new Composite( parent, SWT.None );
+    GridDataFactory.fillDefaults().grab( true, false ).applyTo( bottom );
+    GridLayout layout = new GridLayout( 2, false );
     layout.marginRight = 10;
-	bottom.setLayout(layout);
+    bottom.setLayout( layout );
     Roadmap roadmap = new Roadmap( bottom, screensArray, stackLayout );
-    GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER,
-				SWT.CENTER).applyTo(roadmap);
-    Label betaLabel = new Label(bottom, SWT.None);
-    betaLabel.setText("beta");
-    betaLabel.setFont(Fonts.BETA.get());
-    betaLabel.setForeground(Colors.SASH.get());
-    GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(
-				betaLabel);
+    GridDataFactory.fillDefaults()
+      .grab( true, false )
+      .align( SWT.CENTER, SWT.CENTER )
+      .span( 2, 1 )
+      .applyTo( roadmap );
+    Composite touBox = new Composite( bottom, SWT.None );
+    touBox.setLayout( new GridLayout() );
+    GridDataFactory.fillDefaults()
+      .align( SWT.LEFT, SWT.CENTER )
+      .applyTo( touBox );
+    Browser touBrowser = new Browser( touBox, SWT.None );
+    touBrowser.setText( "<body style='background-color:#f8f8ff;'><div style='font-family:sans-serif;font-size:10pt;text-align:left;'><a href='"
+                        + Activator.getDefault()
+                          .getConfiguration()
+                          .getPrivacyURL()
+                        + "' target='_blank'>Privacy Policy</a> | <a href='"
+                        + Activator.getDefault()
+                          .getConfiguration()
+                          .getTermsOfUseURL()
+                        + "' target='_blank'>Terms of Use</a></div></body>" );
+    GridDataFactory.fillDefaults()
+      .align( SWT.LEFT, SWT.CENTER )
+      .grab( true, false )
+      .hint( 250, 25 )
+      .applyTo( touBrowser );
+    Composite infoBox = new Composite( bottom, SWT.None );
+    infoBox.setLayout( new GridLayout() );
+    GridDataFactory.fillDefaults()
+      .align( SWT.RIGHT, SWT.CENTER )
+      .applyTo( infoBox );
+    Browser browser = new Browser( infoBox, SWT.None );
+    browser.setText( "<body style='background-color:#f8f8ff;'><div style='font-family:sans-serif;font-size:10pt;text-align:right;'>powered by <a href='http://www.eclipse.org/rap/' target='_blank'>Eclipse RAP</a> and <a href='http://wiki.eclipse.org/Equinox_p2' target='_blank'>Equinox P2</a></div></body>" );
+    GridDataFactory.fillDefaults()
+      .align( SWT.RIGHT, SWT.CENTER )
+      .grab( true, false )
+      .hint( 400, 25 )
+      .applyTo( browser );
     return roadmap;
   }
 
@@ -198,8 +253,6 @@
   }
 
   public void screenActivated( IWizardScreen activeScreen ) {
-		screenTitle.setText(activeScreen.getLabel());
-    
+    screenTitle.setText( activeScreen.getLabel() );
   }
-
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java
index 1407ade..85b6537 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java
@@ -10,15 +10,20 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.internal.ui;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Random;
 
+import org.apache.log4j.Logger;
 import org.eclipse.epp.wizard.internal.Activator;
 import org.eclipse.epp.wizard.internal.Configuration;
 import org.eclipse.epp.wizard.internal.ExternalServiceProviderConfiguration;
 import org.eclipse.epp.wizard.internal.IWishlistListener;
-import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.epp.wizard.internal.OsUtil;
+import org.eclipse.epp.wizard.internal.Platform;
+import org.eclipse.epp.wizard.internal.StatsLogger;
 import org.eclipse.epp.wizard.internal.Wishlist;
+import org.eclipse.epp.wizard.internal.ExternalServiceProviderConfiguration.Entry;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.rwt.RWT;
@@ -31,7 +36,7 @@
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
@@ -41,295 +46,436 @@
  */
 public class WizardDownloadScreen extends Composite implements IWizardScreen {
 
-	private Browser browser;
-	private Wishlist wishlist;
-	private ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
-	private Label notificationLabel;
-	private String noItemsText;
-	private String gotItemsText;
+  protected class LinkInfo {
 
-	public WizardDownloadScreen(final Composite parent,
-			ExternalServiceProviderConfiguration externalServiceProviderConfiguration
-			) {
-		super(parent, SWT.NONE);
-		this.externalServiceProviderConfiguration = externalServiceProviderConfiguration;
-		createContent(this);
-	}
+    Browser browser;
+    final String title;
+    final String url;
 
-	public void createContent(final Composite parent) {
-		wishlist = Wishlist.getDefault();
-		GridLayout layout = new GridLayout(1, false);
-		layout.verticalSpacing = 1;
-		layout.horizontalSpacing = 1;
-		layout.marginHeight = 1;
-		layout.marginWidth = 1;
-		parent.setLayout(layout);
-		createHiddenBrowser(parent);
-		createNotification(parent);
-		Composite downloadArea = new Composite(parent, SWT.NONE);
+    private LinkInfo( String title, String url ) {
+      super();
+      this.title = title;
+      this.url = url;
+    }
 
-		downloadArea.setLayout(new GridLayout(1, false));
-		createDownloadButton(downloadArea);
-		createWebstartButton(downloadArea);
-		createSpacing(parent);
-		createExternalServiceProviderComposite(parent);
-	}
+    public String getTitle() {
+      return title;
+    }
 
-	private void createSpacing(Composite parent) {
-		new Label(parent, SWT.NONE);
+    public String getUrl() {
+      return url;
+    }
 
-	}
+    public Browser getBrowser() {
+      return browser;
+    }
 
-	private void createHiddenBrowser(final Composite parent) {
-		browser = new Browser(parent, SWT.NONE);
-		browser.setSize(1, 1);
-		browser.setVisible(false);
-		// don't show
-		browser.setLayoutData(GridDataFactory.fillDefaults().exclude(true)
-				.create());
-	}
+    public void setBrowser( Browser browser ) {
+      this.browser = browser;
+    }
+  }
+  private List<LinkInfo> links = new ArrayList<LinkInfo>();
+  static Logger logger = Logger.getLogger( WizardDownloadScreen.class );
+  private Browser browser;
+  private Wishlist wishlist;
+  private ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
+  private Label notificationLabel;
+  private String noItemsText;
+  private String gotItemsText;
+  private Browser downloadButtonBrowser;
+  private Configuration configuration;
 
-	private void createExternalServiceProviderComposite(final Composite parent) {
-		final ScrolledComposite scrolledComposite = new ScrolledComposite(
-				parent, SWT.H_SCROLL | SWT.V_SCROLL);
-		scrolledComposite.setLayoutData(GridDataFactory.fillDefaults().grab(
-				true, true).indent(20, 40).create());
-		scrolledComposite.setExpandVertical(true);
-		scrolledComposite.setExpandHorizontal(true);
-		final Composite composite = new Composite(scrolledComposite, SWT.NONE);
-		scrolledComposite
-				.addControlListener(new org.eclipse.swt.events.ControlAdapter() {
+  public WizardDownloadScreen( final Composite parent,
+                               ExternalServiceProviderConfiguration externalServiceProviderConfiguration )
+  {
+    super( parent, SWT.NONE );
+    this.externalServiceProviderConfiguration = externalServiceProviderConfiguration;
+    configuration = Activator.getDefault().getConfiguration();
+    createContent( this );
+  }
 
-					@Override
-					public void controlResized(ControlEvent e) {
-						super.controlResized(e);
-						scrolledComposite.setMinSize(composite.computeSize(
-								SWT.DEFAULT, SWT.DEFAULT));
-					}
-				});
+  public void createContent( final Composite parent ) {
+    wishlist = Wishlist.getDefault();
+    GridLayout layout = new GridLayout( 1, false );
+    layout.verticalSpacing = 1;
+    layout.horizontalSpacing = 1;
+    layout.marginHeight = 1;
+    layout.marginWidth = 1;
+    parent.setLayout( layout );
+    createHiddenBrowser( parent );
+    createNotification( parent );
+    Composite downloadArea = new Composite( parent, SWT.NONE );
+    GridLayout layout2 = new GridLayout( 2, false );
+    layout2.horizontalSpacing = 0;
+    layout2.verticalSpacing = 0;
+    downloadArea.setLayout( layout2 );
+    createOsSelection( downloadArea );
+    createDownloadButton( downloadArea );
+    createWebstartButton( downloadArea );
+    createSpacing( parent );
+    createExternalServiceProviderComposite( parent );
+  }
 
-		scrolledComposite.setContent(composite);
-		composite.setLayout(new GridLayout(2, false));
-		Label title = new Label(composite, SWT.NONE);
-		title.setText("Add additional software to your current selection");
-		title.setFont(Fonts.TITLE.get());
-		title.setForeground(Colors.ECLIPSE_BLUE.get());
-		title.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).grab(
-				true, false).create());
-		Label separator = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
-		separator.setLayoutData(GridDataFactory.fillDefaults().span(2, 1)
-				.minSize(10, 10).create());
-		separator.setForeground(Colors.ECLIPSE_BLUE.get());
-		for (final ExternalServiceProviderConfiguration.Entry entry : externalServiceProviderConfiguration
-				.getEntries()) {
-			Label icon = new Label(composite, SWT.NONE);
-			icon.setImage(Images.load(entry.getIcon()));
-			icon.setLayoutData(GridDataFactory.fillDefaults().span(1, 2)
-					.create());
-			Label link = new Label(composite, SWT.NONE);
-			link.setFont(Fonts.H2.get());
-			title.setForeground(Colors.ECLIPSE_VIOLET.get());
-			link.setText(entry.getLabel());
-			LinkUtil.setHandCursor(link);
-			LinkUtil.setHandCursor(icon);
-			link.addMouseListener(new MouseAdapter() {
+  private void createOsSelection( Composite downloadArea ) {
+    Composite composite = new Composite( downloadArea, SWT.NONE );
+    GridDataFactory.swtDefaults().span( 2, 1 ).applyTo( composite );
+    composite.setLayout( new GridLayout( 2, false ) );
+    Label label = new Label( composite, SWT.NONE );
+    label.setText( "Operating System:   " );
+    final Combo combo = new Combo( composite, SWT.NONE );
+    for( Platform platform : Platform.values() ) {
+      combo.add( platform.getLabel(), platform.ordinal() );
+    }
+    combo.select( wishlist.getPlatform().ordinal() );
+    combo.addSelectionListener( new SelectionAdapter() {
 
-				@Override
-				public void mouseDown(MouseEvent e) {
-					try {
-						boolean shouldOpen = true;
-						if (wishlist.isEmpty()) {
-							MessageDialog messageDialog = new MessageDialog(
-									getShell(),
-									"External Service Provider",
-									null,
-									"No components have been selected. Do you wish to continue anyway?",
-									0, new String[] { "Yes", "No" }, 1);
-							int result = messageDialog.open();
-							if (result == 1) {
-								shouldOpen = false;
-							}
-						}
-						if (shouldOpen) {
-							openURL(entry.getUrlTemplate(), true);
-						}
-					} catch (Throwable e2) {
-						e2.printStackTrace();
-					}
-				}
-			});
-			Label description = new Label(composite, SWT.NONE);
-			description.setFont(Fonts.TEXT.get());
-			description.setText(entry.getDescription());
-		}
-		composite.pack();
-	}
+      public void widgetSelected( SelectionEvent e ) {
+        wishlist.setPlatform( Platform.values()[ combo.getSelectionIndex() ] );
+      }
+    } );
+  }
 
-	private void createNotification(final Composite parent) {
-		notificationLabel = new Label(parent, SWT.WRAP);
-		noItemsText = "If the download button is disabled, please go back to the previous pages and select your desired items, then return to this page to complete your installation.";
-		gotItemsText = "Your configuration is now ready to be downloaded";
-		notificationLabel.setText(wishlist.isEmpty() ? noItemsText
-				: gotItemsText);
-		notificationLabel.setFont(Fonts.TEXT.get());
-		notificationLabel.setLayoutData(GridDataFactory.swtDefaults().grab(
-				true, false).hint(600, SWT.DEFAULT).create());
-		wishlist.addListener(new IWishlistListener() {
+  private void createSpacing( Composite parent ) {
+    new Label( parent, SWT.NONE );
+  }
 
-			public void wishlistChanged() {
-				updateNotification();
-			}
-		});
-	}
+  private void createHiddenBrowser( final Composite parent ) {
+    browser = new Browser( parent, SWT.NONE );
+    browser.setSize( 1, 1 );
+    browser.setVisible( false );
+    // don't show
+    browser.setLayoutData( GridDataFactory.fillDefaults()
+      .exclude( true )
+      .create() );
+  }
 
-	private void createDownloadButton(final Composite parent) {
-		final Button button = new Button(parent, SWT.NONE);
-		button.setText("  Download Eclipse P2 Installer");
-		button.setImage(Images.DOWNLOAD.get());
-		button.setFont(Fonts.BUTTON.get());
-		button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
-				SWT.CENTER).create());
+  private void createExternalServiceProviderComposite( final Composite parent )
+  {
+    final ScrolledComposite scrolledComposite = new ScrolledComposite( parent,
+                                                                       SWT.H_SCROLL
+                                                                           | SWT.V_SCROLL );
+    scrolledComposite.setLayoutData( GridDataFactory.fillDefaults()
+      .grab( true, true )
+      .indent( 0, 20 )
+      .create() );
+    scrolledComposite.setExpandVertical( true );
+    scrolledComposite.setExpandHorizontal( true );
+    final Composite composite = new Composite( scrolledComposite, SWT.NONE );
+    scrolledComposite.addControlListener( new org.eclipse.swt.events.ControlAdapter()
+    {
 
-		button.addSelectionListener(new SelectionAdapter() {
+      @Override
+      public void controlResized( ControlEvent e ) {
+        super.controlResized( e );
+        scrolledComposite.setMinSize( composite.computeSize( SWT.DEFAULT,
+                                                             SWT.DEFAULT ) );
+      }
+    } );
+    scrolledComposite.setContent( composite );
+    composite.setLayout( new GridLayout( 2, false ) );
+    Label title = new Label( composite, SWT.NONE );
+    title.setText( "Add additional software to your current selection" );
+    title.setFont( Fonts.TITLE.get() );
+    title.setForeground( Colors.ECLIPSE_BLUE.get() );
+    title.setLayoutData( GridDataFactory.fillDefaults()
+      .span( 2, 1 )
+      .grab( true, false )
+      .create() );
+    Label separator = new Label( composite, SWT.SEPARATOR | SWT.HORIZONTAL );
+    separator.setLayoutData( GridDataFactory.fillDefaults()
+      .span( 2, 1 )
+      .minSize( 10, 10 )
+      .create() );
+    separator.setForeground( Colors.ECLIPSE_BLUE.get() );
+    List<Entry> entries = new ArrayList<Entry>( externalServiceProviderConfiguration.getEntries() );
+    Collections.shuffle( entries );
+    for( final ExternalServiceProviderConfiguration.Entry entry : entries ) {
+      Label icon = new Label( composite, SWT.NONE );
+      icon.setImage( Images.load( entry.getIcon() ) );
+      icon.setLayoutData( GridDataFactory.fillDefaults()
+        .span( 1, 2 )
+        .indent( 10, 0 )
+        .create() );
+      /*
+       * Label link = new Label(composite, SWT.NONE);
+       * link.setFont(Fonts.H2.get()); link.setText(entry.getLabel());
+       * LinkUtil.setHandCursor(link);
+       */
+      Browser link = createLink( composite,
+                                 new LinkInfo( entry.getLabel(),
+                                               entry.getUrlTemplate() ) );
+      GridDataFactory.swtDefaults().hint( 600, 40 ).applyTo( link );
+      composite.setBackgroundMode( SWT.INHERIT_DEFAULT );
+      // LinkUtil.setHandCursor(icon);
+      link.addMouseListener( new MouseAdapter() {
 
-			@Override
-			public void widgetSelected(final SelectionEvent se) {
-				Configuration configuration = Activator.getDefault()
-						.getConfiguration();
-				openURL(configuration.getInstallerURL(), false);
-			}
-		});
-		addButtonEnabler(button);
-	}
+        @Override
+        public void mouseDown( MouseEvent e ) {
+          try {
+            boolean shouldOpen = true;
+            if( wishlist.isEmpty() ) {
+              MessageDialog messageDialog = new MessageDialog( getShell(),
+                                                               "External Service Provider",
+                                                               null,
+                                                               "No components have been selected. Do you wish to continue anyway?",
+                                                               0,
+                                                               new String[]{
+                                                                 "Yes", "No"
+                                                               },
+                                                               1 );
+              int result = messageDialog.open();
+              if( result == 1 ) {
+                shouldOpen = false;
+              }
+            }
+            if( shouldOpen ) {
+              openURL( entry.getUrlTemplate(), true );
+            }
+          } catch( Throwable e2 ) {
+            logger.error( "Error opening link", e2 );
+          }
+        }
+      } );
+      Label description = new Label( composite, SWT.NONE );
+      description.setFont( Fonts.TEXT.get() );
+      description.setText( entry.getDescription() );
+    }
+    composite.pack();
+  }
 
-	private void addButtonEnabler(final Button button) {
-		button.setEnabled(false);
-		wishlist.addListener(new IWishlistListener() {
+  private void createNotification( final Composite parent ) {
+    notificationLabel = new Label( parent, SWT.WRAP );
+    noItemsText = "If the download button is disabled, please go back to the previous pages and select your desired items, then return to this page to complete your installation.";
+    gotItemsText = "Your configuration is now ready to be downloaded";
+    notificationLabel.setText( wishlist.isEmpty()
+                                                 ? noItemsText
+                                                 : gotItemsText );
+    notificationLabel.setFont( Fonts.TEXT.get() );
+    notificationLabel.setLayoutData( GridDataFactory.swtDefaults()
+      .grab( true, false )
+      .create() );
+    wishlist.addListener( new IWishlistListener() {
 
-			public void wishlistChanged() {
-				button.setEnabled(!wishlist.isEmpty());
-				if(wishlist.isEmpty())
-				{
-					LinkUtil.resetCursor(button);
-				}
-				else
-				{
-					LinkUtil.setHandCursor(button);
-				}
-			}
-		});
-	}
+      public void wishlistChanged() {
+        updateNotification();
+      }
+    } );
+  }
 
-	private void createWebstartButton(final Composite parent) {
-		Button button = new Button(parent, SWT.NONE);
-		button.setText("  Start Eclipse P2 Installer");
-		button.setFont(Fonts.BUTTON.get());
-		button.setImage(Images.WEBSTART.get());
-		button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
-				SWT.CENTER).create());
+  private void createDownloadButton( final Composite parent ) {
+    Label icon = new Label( parent, SWT.NONE );
+    icon.setImage( Images.DOWNLOAD.get() );
+    String url = configuration.getInstallerURL();
+    downloadButtonBrowser = createLink( parent,
+                                        new LinkInfo( "Download Eclipse P2 Installer",
+                                                      url ) );
+    GridDataFactory.swtDefaults()
+      .hint( 350, SWT.DEFAULT )
+      .indent( 0, 10 )
+      .applyTo( downloadButtonBrowser );
+    updateDownloadButton();
+    parent.setBackgroundMode( SWT.INHERIT_DEFAULT );
+    /*
+     * final Button button = new Button(parent, SWT.NONE);
+     * button.setText("Download Eclipse P2 Installer");
+     * button.setImage(Images.DOWNLOAD.get());
+     * button.setFont(Fonts.BUTTON.get());
+     * button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
+     * SWT.CENTER).create()); button.addSelectionListener(new SelectionAdapter()
+     * {
+     * @Override public void widgetSelected(final SelectionEvent se) {
+     * Configuration configuration = Activator.getDefault() .getConfiguration();
+     * openURL(configuration.getInstallerURL(), false); } });
+     * addButtonEnabler(button);
+     */
+  }
 
-		// addButtonEnabler(button);
-		button.setEnabled(false);
-		Label label = new Label(parent, SWT.NONE);
-		label
-				.setText("Note: Webstart support is currently unavailable due to Eclipse Bug 240500.");
-		label.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
-				SWT.CENTER).create());
-		button.addSelectionListener(new SelectionAdapter() {
+  private Browser createLink( Composite parent, LinkInfo linkInfo ) {
+    Browser browser = new Browser( parent, SWT.NONE );
+    linkInfo.setBrowser( browser );
+    links.add( linkInfo );
+    browser.setBackgroundMode( SWT.INHERIT_DEFAULT );
+    updateLink( linkInfo );
+    return browser;
+  }
 
-			@Override
-			public void widgetSelected(final SelectionEvent se) {
-				/*
-				 * String[] ids = Wishlist.getDefault().getInstallerIDs();
-				 * String fileName = CustomJnlp.getFileName(ids); try { /
-				 * CustomJnlp.execute("http://localhost:8008/download",
-				 * StringUtil.toCommaList(ids, false), fileName);
-				 * browser.setText("<html></html>");
-				 * browser.setUrl("../download/" + fileName);
-				 * 
-				 * } catch (IOException exc) { // should never happen, but log
-				 * anyway exc.printStackTrace(); }
-				 */
-			}
-		});
-	}
+  private void updateLink( LinkInfo linkInfo ) {
+    String cmd = wishlist.isEmpty()
+                                   ? "alert(\"No components have been selected.\\n\\nPlease go back to the previous pages and select your desired items, then return to this page to complete your installation.\")"
+                                   : "document.myform.submit()";
+    StringBuilder sb = new StringBuilder();
+    String url = linkInfo.getUrl();
+    String ius = configuration.getBaseIUs() + "," + wishlist.getSelectedIuIds();
+    sb.append( "<body style='background-color: transparent;'><a style='position:absolute; top:20%; vertical-align: middle; font-family:sans-serif;' href='javascript:"
+               + cmd
+               + "'>"
+               + linkInfo.getTitle()
+               + "</a><form name='myform' method='post' target='_top' action='"
+               + url
+               + "' "
+               + " style='display: none;'>" );
+    addParameter( sb, "os", wishlist.getPlatform().getId() );
+    addParameter( sb, Configuration.P2_ROOTS, ius );
+    addParameter( sb,
+                  Configuration.P2_METADATA_REPOSITORIES,
+                  configuration.getMetadataRepositories() );
+    addParameter( sb,
+                  Configuration.P2_ARTIFACT_REPOSITORIES,
+                  configuration.getArtifactRepositories() );
+    // sb.append(
+    // "<button type='submit' value='Download Eclipse P2 Installer'><img src=''><b>Download Eclipse P2 Installer</b></Button>"
+    // );
+    sb.append( "</form> </body>" );
+    linkInfo.getBrowser().setText( sb.toString() );
+  }
 
-	public String getLabel() {
-		return "Finish";
-	}
+  private void updateDownloadButton() {
+    /*
+     * StringBuilder sb = new StringBuilder(); Configuration configuration =
+     * Activator.getDefault().getConfiguration(); String url =
+     * configuration.getInstallerURL(); String ius =
+     * configuration.getBaseIUs()+","+ wishlist.getSelectedIuIds();sb.append(
+     * "<body style='background-color:transparent;'><form name='myform' method='post' action='"
+     * + url + "' " + ">"); addParameter(sb, "os",
+     * wishlist.getPlatform().getId()); addParameter(sb, Configuration.P2_ROOTS,
+     * ius); addParameter(sb, Configuration.P2_METADATA_REPOSITORIES,
+     * configuration .getMetadataRepositories()); addParameter(sb,
+     * Configuration.P2_ARTIFACT_REPOSITORIES, configuration
+     * .getArtifactRepositories());sb.append(
+     * "<button type='submit' value='Download Eclipse P2 Installer'><img src=''><b>Download Eclipse P2 Installer</b></Button>"
+     * );sb.append(
+     * "</form><a href='javascript:document.myform.submit()'>Free Support</a> </body>"
+     * ); downloadButtonBrowser.setText(sb.toString());
+     */
+  }
 
-	public Control getControl() {
-		return this;
-	}
+  /*
+   * private void addButtonEnabler(final Button button) {
+   * button.setEnabled(false); wishlist.addListener(new IWishlistListener() {
+   * public void wishlistChanged() { button.setEnabled(!wishlist.isEmpty());
+   * if(wishlist.isEmpty()) { LinkUtil.resetCursor(button); } else {
+   * LinkUtil.setHandCursor(button); } } }); }
+   */
+  private void createWebstartButton( final Composite parent ) {
+    Label icon = new Label( parent, SWT.NONE );
+    icon.setImage( Images.WEBSTART.get() );
+    String url = configuration.getInstallerURL();
+    downloadButtonBrowser = createLink( parent,
+                                        new LinkInfo( "Start Eclipse P2 Installer",
+                                                      url ) );
+    GridDataFactory.fillDefaults()
+      .hint( 350, SWT.DEFAULT )
+      .applyTo( downloadButtonBrowser );
+    updateDownloadButton();
+    parent.setBackgroundMode( SWT.INHERIT_DEFAULT );
+    Label dummyLabel = new Label( parent, SWT.NONE );
+    GridDataFactory.swtDefaults().span( 1, 1 ).applyTo( dummyLabel );
+    Label label = new Label( parent, SWT.WRAP );
+    label.setText( "Note: Webstart support is currently\nunavailable due to Eclipse Bug 240500." );
+    label.setLayoutData( GridDataFactory.swtDefaults()
+      .align( SWT.LEFT, SWT.CENTER )
+      .create() );
+    /*
+     * Button button = new Button(parent, SWT.NONE);
+     * button.setText("Start Eclipse P2 Installer");
+     * button.setFont(Fonts.BUTTON.get());
+     * button.setImage(Images.WEBSTART.get());
+     * button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
+     * SWT.CENTER).create()); // addButtonEnabler(button);
+     * button.setEnabled(false);
+     * @SuppressWarnings("unused") Label dummyLabel = new Label(parent,
+     * SWT.NONE); Label label = new Label(parent, SWT.WRAP); label.setText(
+     * "Note: Webstart support is currently\nunavailable due to Eclipse Bug 240500."
+     * ); label.setLayoutData(GridDataFactory.swtDefaults().align(SWT.LEFT,
+     * SWT.CENTER).create()); button.addSelectionListener(new SelectionAdapter()
+     * {
+     * @Override public void widgetSelected(final SelectionEvent se) { /
+     * String[] ids = Wishlist.getDefault().getInstallerIDs(); String fileName =
+     * CustomJnlp.getFileName(ids); try { /
+     * CustomJnlp.execute("http://localhost:8008/download",
+     * StringUtil.toCommaList(ids, false), fileName);
+     * browser.setText("<html></html>"); browser.setUrl("../download/" +
+     * fileName); } catch (IOException exc) { // should never happen, but log
+     * anyway exc.printStackTrace(); } / } });
+     */
+  }
 
-	// ///////////////
-	// helping methods
-	// ///////////////
-	private String getDefaultOs() {
-		String header = RWT.getRequest().getHeader("User-Agent"); //$NON-NLS-1$
-		String[] platformNames = OsUtil.getPlatforms();
-		int platform = 0;
-		// Check if we can autodetect the platform
-		for (int i = 0; i < platformNames.length; i++) {
-			String platformHeader = platformNames[i].substring(0, 3);
-			if (header.indexOf(platformHeader) > -1
-					|| header.indexOf(platformHeader.toUpperCase()) > -1
-					|| header.indexOf(platformHeader.substring(0, 1)
-							.toUpperCase()
-							+ platformHeader.substring(1, platformHeader
-									.length())) > -1) {
-				platform = i;
-			}
-		}
-		return platformNames[platform];
-	}
+  public String getLabel() {
+    return "Finish";
+  }
 
-	/**
-	 * Open a URL, by using the RAP browser widget, passing the p2 metadata
-	 * information as POST parameters
-	 * 
-	 * @param url
-	 *            URL of the location to open
-	 * @param top
-	 *            true -> complete page redirect, false -> inside widget, useful
-	 *            for downloads
-	 */
-	private void openURL(String url, boolean top) {
-		Configuration configuration = Activator.getDefault().getConfiguration();
-		String ius = configuration.getBaseIUs()+","+ wishlist.getSelectedIuIds();
-		browser.setText("<html></html>");
-		StringBuilder sb = new StringBuilder();
-		sb.append("<form name='myform' method='post' action='" + url + "' "
-				+ (top ? "target='_top'" : "") + ">");
-		addParameter(sb, "os", getDefaultOs());		
-		addParameter(sb, Configuration.P2_ROOTS, ius);
-		addParameter(sb, Configuration.P2_METADATA_REPOSITORIES, configuration
-				.getMetadataRepositories());
-		addParameter(sb, Configuration.P2_ARTIFACT_REPOSITORIES, configuration
-				.getArtifactRepositories());
-		sb.append("</form>");
+  public Control getControl() {
+    return this;
+  }
 
-		// This bit is needed to prevent some caching behavior in the browser
-		// component; crude but works
-		sb.append(new Random().nextLong());
+  /**
+   * Open a URL, by using the RAP browser widget, passing the p2 metadata
+   * information as POST parameters
+   * 
+   * @param url URL of the location to open
+   * @param top true -> complete page redirect, false -> inside widget, useful
+   *          for downloads
+   */
+  private void openURL( String url, boolean top ) {
+    Configuration configuration = Activator.getDefault().getConfiguration();
+    String ius = configuration.getBaseIUs() + "," + wishlist.getSelectedIuIds();
+    browser.setText( "<html></html>" );
+    StringBuilder sb = new StringBuilder();
+    String target = "";
+    if( top ) {
+      target = "target='_top'";
+    }
+    // IE 7 has some weird issues with RAP and the iframe-autoform-download, and
+    // IE security "features",
+    // making this ugly workaround necessary
+    if( RWT.getRequest().getHeader( "user-agent" ).contains( " MSIE 7." ) ) {
+      target = "target='_blank'";
+    }
+    sb.append( "<form name='myform' method='post' action='"
+               + url
+               + "' "
+               + target
+               + ">" );
+    addParameter( sb, "os", wishlist.getPlatform().getId() );
+    addParameter( sb, Configuration.P2_ROOTS, ius );
+    addParameter( sb,
+                  Configuration.P2_METADATA_REPOSITORIES,
+                  configuration.getMetadataRepositories() );
+    addParameter( sb,
+                  Configuration.P2_ARTIFACT_REPOSITORIES,
+                  configuration.getArtifactRepositories() );
+    sb.append( "</form>" );
+    // This bit is needed to prevent some caching behavior in the browser
+    // component; crude but works
+    sb.append( new Random().nextLong() );
+    // Timeout is required to work around problems with the connection to
+    // the RAP server being forcefully disconnected
+    sb.append( "<SCRIPT language='JavaScript'>" );
+    sb.append( " setTimeout('document.myform.submit();',1000)" );
+    sb.append( "</SCRIPT> " );
+    // browser.setText(sb.toString());
+    browser.setUrl( "http://wmwoelker/x.zip" );
+    Activator.getDefault()
+      .getStatsLogger()
+      .log( new StatsLogger.Statistic( url, RWT.getRequest()
+        .getHeader( "user-agent" ), ius ) );
+  }
 
-		// Timeout is required to work around problems with the connection to
-		// the RAP server being forcefully disconnected
-		sb.append("<SCRIPT language='JavaScript'>");
-		sb.append(" setTimeout('document.myform.submit();',1000)");
-		sb.append("</SCRIPT> ");
-		browser.setText(sb.toString());
-	}
+  private void addParameter( StringBuilder sb, String key, String value ) {
+    sb.append( "<input type='hidden' name='" + key + "' value='" + value + "'>" );
+  }
 
-	private void addParameter(StringBuilder sb, String key, String value) {
-		sb.append("<input type='hidden' name='" + key + "' value='" + value
-				+ "'>");
-	}
+  protected void updateNotification() {
+    notificationLabel.setText( wishlist.isEmpty()
+                                                 ? noItemsText
+                                                 : gotItemsText );
+    notificationLabel.setVisible( wishlist.isEmpty() );
+    notificationLabel.getParent().layout();
+  }
 
-	protected void updateNotification() {
-		notificationLabel.setText(wishlist.isEmpty() ? noItemsText
-				: gotItemsText);
-		notificationLabel.getParent().layout();
-	}
-
+  public void update() {
+    for( LinkInfo linkInfo : links ) {
+      updateLink( linkInfo );
+    }
+  }
 }
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java
index ebbdd4a..4b67599 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java
@@ -10,6 +10,8 @@
  ******************************************************************************/
 package org.eclipse.epp.wizard.internal.ui;
 
+import org.eclipse.epp.wizard.internal.Wishlist;
+import org.eclipse.epp.wizard.internal.Wishlist.Inclusion;
 import org.eclipse.epp.wizard.model.Group;
 import org.eclipse.epp.wizard.model.Screen;
 import org.eclipse.swt.SWT;
@@ -78,10 +80,13 @@
   }
 
   private void createSelectionArea( final Composite parent ) {
+    Wishlist wishlist = Wishlist.getDefault();
     Group[] groups = getScreen().getGroups();
     for( int i = 0; i < groups.length; i++ ) {
       final Group group = groups[ i ];
-      new GroupSelection(parent, group);
+      GroupSelection groupSelection = new GroupSelection( parent, group );
+      groupSelection.setExpanded( wishlist.isIncluded( group ) != Inclusion.NONE );
+      // groupSelection.setExpanded(true);
     }
   }
 
@@ -99,4 +104,8 @@
   private Screen getScreen() {
     return screen;
   }
+
+  public void update() {
+    // Nothing to do here
+  }
 }