diff --git a/src/site/resources/images/1x1.gif b/src/site/resources/images/1x1.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/site/resources/images/1x1.gif
Binary files differ
diff --git a/src/site/resources/images/logo.jpg b/src/site/resources/images/logo.jpg
new file mode 100644
index 0000000..bcb7422
--- /dev/null
+++ b/src/site/resources/images/logo.jpg
Binary files differ
diff --git a/src/site/resources/images/logo.png b/src/site/resources/images/logo.png
new file mode 100644
index 0000000..7c68933
--- /dev/null
+++ b/src/site/resources/images/logo.png
Binary files differ
diff --git a/src/site/resources/images/options.png b/src/site/resources/images/options.png
new file mode 100644
index 0000000..b0f9d8f
--- /dev/null
+++ b/src/site/resources/images/options.png
Binary files differ
diff --git a/src/site/resources/images/svg/commandlines.svg b/src/site/resources/images/svg/commandlines.svg
new file mode 100644
index 0000000..3ab520c
--- /dev/null
+++ b/src/site/resources/images/svg/commandlines.svg
@@ -0,0 +1,57 @@
+<?xml version="1.0" standalone="no"?>
+<?xml-stylesheet type="text/css" href="diagrams.css" ?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+
+<svg id="root" width="420" height="360" x="0" y="0">
+
+<script type="text/ecmascript" xlink:href="diagrams.js"/>
+<script type="text/ecmascript" xlink:href="diagrams-cli2.js"/>
+<script type="text/ecmascript">
+
+displayAttributes = false;
+displayMethods = false;
+
+</script>
+
+<g 
+	onload="new PackageSymbol('org.apache.commons.cli2',400,340).insert(evt)" 
+	transform="translate(10,10)"><g transform="translate(10,30)">
+	
+	<g transform="translate(  0, 30)" class="option"   onload="CommandLine.insert(evt);" />
+	<g transform="translate(  0,130)" class="group"    onload="WriteableCommandLine.insert(evt);"/>
+	
+	<g 
+		onload="new PackageSymbol('commandline',180,300).insert(evt)" 
+		transform="translate(200,0)"><g transform="translate(10,30)">
+		
+		<g transform="translate(0,  0)" class="option"   onload="Parser.insert(evt);" />
+		<g transform="translate(0, 50)" class="parent"   onload="DefaultingCommandLine.insert(evt);" />
+		<g transform="translate(0,100)" class="parent"   onload="PropertiesCommandLine.insert(evt);" />
+		<g transform="translate(0,190)" class="parent"   onload="PreferencesCommandLine.insert(evt);" />
+	</g></g>
+<!--	
+-->
+
+<polyline class="extends"    points="80,130 80,70"/>
+<polyline class="implements" points="210, 95 180, 95 180,45 170,45"/>
+<polyline class="implements" points="210,145 180,145 180,45 170,45"/>
+<polyline class="implements" points="210,235 180,235 180,45 170,45"/>
+
+</g></g>
+</svg>
\ No newline at end of file
diff --git a/src/site/resources/images/svg/diagrams-cli2.js b/src/site/resources/images/svg/diagrams-cli2.js
new file mode 100644
index 0000000..9f1a9a2
--- /dev/null
+++ b/src/site/resources/images/svg/diagrams-cli2.js
@@ -0,0 +1,291 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+var Option = new Interface("Option");
+Option.addMethod("process(...)");
+Option.addMethod("canProcess(...)");
+Option.addMethod("getTriggers()");
+Option.addMethod("getPrefixes()");
+Option.addMethod("validate(...)");
+Option.addMethod("helpLines(...)");
+Option.addMethod("appendUsage(...)");
+Option.addMethod("getPreferredName()");
+Option.addMethod("getDescription()");
+Option.addMethod("getId()");
+Option.addMethod("findOption(...)");
+
+var Group = new Interface("Group");
+Group.addMethod("appendUsage(...)");
+Group.addNote("-a | -b | -c | -d | -e");
+
+var Parent = new Interface("Parent");
+Parent.addMethod("processParent(...)");
+Parent.addNote("-f <arg1>");
+
+var Argument = new Interface("Argument");
+Argument.addMethod("getInitialSeparator()");
+Argument.addMethod("processValues(...)");
+Argument.addMethod("validate(...)");
+Argument.addNote("<arg1> [<arg2> ...]");
+
+var CommandLine = new Interface("CommandLine");
+CommandLine.addMethod("hasOption(...)");
+CommandLine.addMethod("getOption(...)");
+CommandLine.addMethod("getValue(...)");
+CommandLine.addMethod("getValues(...)");
+CommandLine.addMethod("getSwitch(...)");
+CommandLine.addMethod("getProperty(...)");
+CommandLine.addMethod("getProperties()");
+CommandLine.addMethod("getOptionCount(...)");
+CommandLine.addMethod("getOptions()");
+CommandLine.addMethod("getOptionTriggers()");
+
+var WriteableCommandLine = new Interface("WriteableCommandLine");
+WriteableCommandLine.addMethod("addOption(...)");
+WriteableCommandLine.addMethod("addValue(...)");
+WriteableCommandLine.addMethod("addSwitch(...)");
+WriteableCommandLine.addMethod("addProperty(...)");
+WriteableCommandLine.addMethod("looksLikeOption(...)");
+
+
+
+
+
+var PropertyOption = new Class("PropertyOption");
+PropertyOption.addAttribute("optionString");
+PropertyOption.addAttribute("description");
+PropertyOption.addAttribute("prefixes");
+PropertyOption.addNote("-Dproperty=value");
+
+var DefaultOption = new Class("DefaultOption");
+DefaultOption.addAttribute("optionString");
+DefaultOption.addAttribute("description");
+DefaultOption.addAttribute("prefixes");
+DefaultOption.addNote("-f (--file, --filelist)");
+
+var Command = new Class("Command");
+Command.addAttribute("preferredName");
+Command.addAttribute("aliases");
+Command.addAttribute("required");
+Command.addAttribute("triggers");
+Command.addNote("update (up, upd)");
+
+var Switch = new Class("Switch");
+Switch.addAttribute("enabledPrefix");
+Switch.addAttribute("disabledPrefix");
+Switch.addAttribute("preferredName");
+Switch.addAttribute("aliases");
+Switch.addAttribute("required");
+Switch.addAttribute("triggers");
+Switch.addAttribute("prefixes");
+Switch.addNote("+d|-d (+display|-display)");
+
+var SourceDestArgument = new Class("SourceDestArgument");
+SourceDestArgument.addAttribute("preferredName");
+SourceDestArgument.addAttribute("aliases");
+SourceDestArgument.addAttribute("required");
+SourceDestArgument.addAttribute("triggers");
+SourceDestArgument.addNote("<src1> <src2> ... <dst>");
+
+
+
+
+var Parser = new Class("Parser");
+Parser.addMethod("parse(...)");
+Parser.addMethod("parseAndHelp(...)");
+Parser.addMethod("setGroup(...)");
+Parser.addMethod("setHelpFormatter(...)");
+Parser.addMethod("setHelpOption(...)");
+Parser.addMethod("setHelpTrigger(...)");
+
+var DefaultingCommandLine = new Class("DefaultingCommandLine");
+DefaultingCommandLine.addMethod("appendCommandLine(...)");
+DefaultingCommandLine.addMethod("insertCommandLine(...)");
+DefaultingCommandLine.addMethod("commandLines()");
+
+var PropertiesCommandLine = new Class("PropertiesCommandLine");
+PropertiesCommandLine.addAttribute("properties");
+PropertiesCommandLine.addNote("java.util.Properties");
+
+var PreferencesCommandLine = new Class("PreferencesCommandLine");
+PreferencesCommandLine.addAttribute("preferences");
+PreferencesCommandLine.addNote("java.util.prefs.Preferences");
+
+
+
+
+
+var ArgumentBuilder = new Class("ArgumentBuilder");
+ArgumentBuilder.addMethod("withId(...)");
+ArgumentBuilder.addMethod("withName(...)");
+ArgumentBuilder.addMethod("withDescription(...)");
+ArgumentBuilder.addMethod("withConsumeRemaining(...)");
+ArgumentBuilder.addMethod("withValidator(...)");
+ArgumentBuilder.addMethod("withMinimum(...)");
+ArgumentBuilder.addMethod("withMaximum(...)");
+ArgumentBuilder.addMethod("withDefault(...)");
+ArgumentBuilder.addMethod("withDefaults(...)");
+ArgumentBuilder.addMethod("withInitialSeparator(...)");
+ArgumentBuilder.addMethod("withSubsequentSeparator(...)");
+ArgumentBuilder.addMethod("create()");
+ArgumentBuilder.addMethod("reset()");
+
+var CommandBuilder = new Class("CommandBuilder");
+CommandBuilder.addMethod("withId(...)");
+CommandBuilder.addMethod("withName(...)");
+CommandBuilder.addMethod("withDescription(...)");
+CommandBuilder.addMethod("withArgument(...)");
+CommandBuilder.addMethod("withChildren(...)");
+CommandBuilder.addMethod("withRequired(...)");
+CommandBuilder.addMethod("create()");
+CommandBuilder.addMethod("reset()");
+
+var DefaultOptionBuilder = new Class("DefaultOptionBuilder");
+DefaultOptionBuilder.addMethod("withId(...)");
+DefaultOptionBuilder.addMethod("withShortName(...)");
+DefaultOptionBuilder.addMethod("withLongName(...)");
+DefaultOptionBuilder.addMethod("withDescription(...)");
+DefaultOptionBuilder.addMethod("withArgument(...)");
+DefaultOptionBuilder.addMethod("withChildren(...)");
+DefaultOptionBuilder.addMethod("withRequired(...)");
+DefaultOptionBuilder.addMethod("create()");
+DefaultOptionBuilder.addMethod("reset()");
+DefaultOptionBuilder.addAttribute("shortPrefix");
+DefaultOptionBuilder.addAttribute("longPrefix");
+DefaultOptionBuilder.addAttribute("burstEnabled");
+
+var DefaultOptionBuilder = new Class("DefaultOptionBuilder");
+DefaultOptionBuilder.addMethod("withId(...)");
+DefaultOptionBuilder.addMethod("withShortName(...)");
+DefaultOptionBuilder.addMethod("withLongName(...)");
+DefaultOptionBuilder.addMethod("withDescription(...)");
+DefaultOptionBuilder.addMethod("withArgument(...)");
+DefaultOptionBuilder.addMethod("withChildren(...)");
+DefaultOptionBuilder.addMethod("withRequired(...)");
+DefaultOptionBuilder.addMethod("create()");
+DefaultOptionBuilder.addMethod("reset()");
+
+var GroupBuilder = new Class("GroupBuilder");
+GroupBuilder.addMethod("withName(...)");
+GroupBuilder.addMethod("withDescription(...)");
+GroupBuilder.addMethod("withOption(...)");
+GroupBuilder.addMethod("withMinimum(...)");
+GroupBuilder.addMethod("withMaximum(...)");
+GroupBuilder.addMethod("create()");
+GroupBuilder.addMethod("reset()");
+
+var PatternBuilder = new Class("PatternBuilder");
+PatternBuilder.addMethod("withPattern(...)");
+PatternBuilder.addMethod("create()");
+PatternBuilder.addMethod("reset()");
+PatternBuilder.addAttribute("groupBuilder");
+PatternBuilder.addAttribute("optionBuilder");
+PatternBuilder.addAttribute("argumentBuilder");
+
+var SwitchBuilder = new Class("SwitchBuilder");
+SwitchBuilder.addMethod("withId(...)");
+SwitchBuilder.addMethod("withName(...)");
+SwitchBuilder.addMethod("withDescription(...)");
+SwitchBuilder.addMethod("withArgument(...)");
+SwitchBuilder.addMethod("withChildren(...)");
+SwitchBuilder.addMethod("withRequired(...)");
+SwitchBuilder.addMethod("create()");
+SwitchBuilder.addMethod("reset()");
+SwitchBuilder.addAttribute("enabledPrefix");
+SwitchBuilder.addAttribute("disabledPrefix");
+
+
+
+var Validator = new Class("Validator");
+Validator.addMethod("validate(...)");
+
+var ClassValidator = new Class("ClassValidator");
+ClassValidator.addAttribute("classLoader");
+ClassValidator.addAttribute("instance");
+ClassValidator.addAttribute("loadable");
+
+var DateValidator = new Class("DateValidator");
+DateValidator.addAttribute("formats");
+DateValidator.addAttribute("minimum");
+DateValidator.addAttribute("maximum");
+
+var EnumValidator = new Class("EnumValidator");
+EnumValidator.addAttribute("validValues");
+
+var FileValidator = new Class("FileValidator");
+FileValidator.addAttribute("directory");
+FileValidator.addAttribute("existing");
+FileValidator.addAttribute("file");
+FileValidator.addAttribute("hidden");
+FileValidator.addAttribute("readable");
+FileValidator.addAttribute("writable");
+
+var FileValidator = new Class("FileValidator");
+FileValidator.addAttribute("format");
+FileValidator.addAttribute("minimum");
+FileValidator.addAttribute("maximum");
+
+var UrlValidator = new Class("UrlValidator");
+UrlValidator.addAttribute("format");
+UrlValidator.addAttribute("minimum");
+UrlValidator.addAttribute("maximum");
+
+
+
+
+var Comparators = new Class("Comparators");
+Comparators.addMethod("chain(...)");
+Comparators.addMethod("commandFirst(...)");
+Comparators.addMethod("commandLast(...)");
+Comparators.addMethod("defaultOptionFirst(...)");
+Comparators.addMethod("defaultOptionLast(...)");
+Comparators.addMethod("groupFirst(...)");
+Comparators.addMethod("groupLast(...)");
+Comparators.addMethod("namedFirst(...)");
+Comparators.addMethod("namedLast(...)");
+Comparators.addMethod("preferredNameFirst(...)");
+Comparators.addMethod("preferredNameLast(...)");
+Comparators.addMethod("requiredFirst(...)");
+Comparators.addMethod("requiredLast(...)");
+Comparators.addMethod("switchFirst(...)");
+Comparators.addMethod("switchLast(...)");
+
+var HelpFormatter = new Class("HelpFormatter");
+HelpFormatter.addMethod("print()");
+HelpFormatter.addMethod("printDivider()");
+HelpFormatter.addMethod("printException()");
+HelpFormatter.addMethod("printFooter()");
+HelpFormatter.addMethod("printGutterLeft()");
+HelpFormatter.addMethod("printGutterRight()");
+HelpFormatter.addMethod("printHeader()");
+HelpFormatter.addMethod("printHelp()");
+HelpFormatter.addMethod("printUsage()");
+HelpFormatter.addAttribute("comparator");
+HelpFormatter.addAttribute("displaySettings");
+HelpFormatter.addAttribute("divider");
+HelpFormatter.addAttribute("exception");
+HelpFormatter.addAttribute("footer");
+HelpFormatter.addAttribute("fullUsageSettings");
+HelpFormatter.addAttribute("group");
+HelpFormatter.addAttribute("gutterCenter");
+HelpFormatter.addAttribute("gutterLeft");
+HelpFormatter.addAttribute("gutterRight");
+HelpFormatter.addAttribute("header");
+HelpFormatter.addAttribute("lineUsageSettings");
+HelpFormatter.addAttribute("pageWidth");
+HelpFormatter.addAttribute("printWriter");
+HelpFormatter.addAttribute("shellCommand");
diff --git a/src/site/resources/images/svg/diagrams.css b/src/site/resources/images/svg/diagrams.css
new file mode 100644
index 0000000..d8691da
--- /dev/null
+++ b/src/site/resources/images/svg/diagrams.css
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+.option .outline, .option polygon.note {
+	fill:rgb(191,255,255);
+}
+.group rect.outline, .group polygon.note {
+	fill:rgb(255,191,191);
+}
+
+.parent rect.outline, .parent polygon.note {
+	fill:rgb(191,255,191);
+}
+.argument rect.outline, .argument polygon.note {
+	fill:rgb(191,191,255);
+}
+.property rect.outline, .property polygon.note {
+	fill:rgb(255,191,255);
+}
+
+.package rect {
+	fill:rgb(255,255,191);
+}
+
+.package rect.inner {
+	fill: rgb(255,255,255);
+	stroke: none;
+}
+
+text.title {
+	text-anchor: middle;
+}
+
+.type text {
+	fill: rgb(0,0,0);
+}
+rect, line, polygon, polyline {
+	stroke:rgb(0,0,0);
+	stroke-width:2;
+	stroke-linejoin: bevel;
+	stroke-linecap: round;
+}
+
+.implements, .extends {
+	fill: none;
+	marker-end: url(util.svg#HollowArrow); 
+}
+
+.implements, .note.connect {
+	stroke-dasharray: 5;
+}
diff --git a/src/site/resources/images/svg/diagrams.js b/src/site/resources/images/svg/diagrams.js
new file mode 100644
index 0000000..4e8a5a7
--- /dev/null
+++ b/src/site/resources/images/svg/diagrams.js
@@ -0,0 +1,368 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
+var textHeight = 10;
+var padding = 10;
+var namespace = "http://www.w3.org/2000/svg";
+
+var displayAttributes = true;
+var displayMethods = true;
+var displayNotes = true;
+
+function Type(name){
+	this.width = 160;
+	this.style = "type";
+	
+	this.insert = function(evt){
+		y = 0;
+		y = this.insertOutline(evt,y);
+		y = this.insertName(evt,y);
+		if(displayAttributes==true){
+			y = this.insertAttributes(evt,y);
+		}
+		if(displayMethods==true){
+			y = this.insertMethods(evt,y);
+		}
+		if(displayNotes==true){
+			y = this.insertNotes(evt,y);
+		}
+	}
+	
+	this.height = function(){
+		height = 0;
+		height += this.heightName();
+		if(displayAttributes==true){
+			height += this.heightAttributes();
+		}
+		if(displayMethods==true){
+			height += this.heightMethods();
+		}
+		return height;
+	}
+	
+	
+	
+	
+	
+	
+	this.insertOutline = function(evt,y){
+
+		style = evt.target.getAttributeNS(null, "class");
+		evt.target.setAttributeNS(null,"class",style+" "+this.style);
+
+		e = document.createElementNS(namespace, "rect");
+		e.setAttributeNS(null, "x", 0);
+		e.setAttributeNS(null, "y", 0);
+		e.setAttributeNS(null, "width",  this.width);
+		e.setAttributeNS(null, "height", this.height());
+        	e.setAttributeNS(null, "class", "outline");
+        	evt.target.appendChild(e);
+
+		return y;
+	}
+	
+	
+	
+	
+	
+	
+	
+	this.name = name;
+	
+	this.heightName = function(){
+		return padding * 2 + textHeight;
+	}
+	
+	this.insertName = function(evt,y){
+	
+		y += padding;
+		y += textHeight;
+		
+		e = document.createElementNS(namespace, "text");
+		e.setAttributeNS(null, "x", this.width/2);
+		e.setAttributeNS(null, "y", y);
+		e.setAttributeNS(null, "class", "title");
+		e.appendChild(document.createTextNode(this.name));
+		evt.target.appendChild(e);
+        
+		y += padding;
+	
+		return y;
+	}
+	
+	
+	
+	
+	
+	
+	
+	this.attributeList = new Array();
+	this.attributeCount = 0;
+	
+	this.addAttribute = function(text){
+		this.attributeList[this.attributeCount++]=text;
+	}
+	
+	this.heightAttributes = function(){
+		if(this.attributeCount>0){
+			return padding * 2 + this.attributeCount*textHeight;
+		}
+		else{
+			return padding;
+		}
+	}
+	
+	this.insertAttributes = function(evt,y){
+	
+		e = document.createElementNS(namespace, "line");
+		e.setAttributeNS(null, "x1", 0);
+		e.setAttributeNS(null, "y1", y);
+		e.setAttributeNS(null, "x2", this.width);
+		e.setAttributeNS(null, "y2", y);
+		e.setAttributeNS(null, "class", "divider");
+		evt.target.appendChild(e);
+		
+		y += padding;
+		
+		for(i=0;i<this.attributeCount;++i){
+			y += textHeight;
+			
+			e = document.createElementNS(namespace, "text");
+			e.setAttributeNS(null, "x", padding);
+			e.setAttributeNS(null, "y", y);
+			e.setAttributeNS(null, "class", "attribute");
+			e.appendChild(document.createTextNode(this.attributeList[i]));
+			evt.target.appendChild(e);
+		}
+		
+		if(this.attributeCount>0){
+			y += padding;
+		}
+	
+		return y;
+	}
+	
+	
+	
+	
+	
+	this.methodList = new Array();
+	this.methodCount = 0;
+	
+	this.addMethod = function(text){
+		this.methodList[this.methodCount++]=text;
+	}
+	
+	this.heightMethods = function(){
+		if(this.methodCount>0){
+			return padding * 2 + this.methodCount*textHeight;
+		}
+		else{
+			return padding;
+		}
+	}
+	
+	this.insertMethods = function(evt,y){
+	
+		e = document.createElementNS(namespace, "line");
+		e.setAttributeNS(null, "x1", 0);
+		e.setAttributeNS(null, "y1", y);
+		e.setAttributeNS(null, "x2", this.width);
+		e.setAttributeNS(null, "y2", y);
+		e.setAttributeNS(null, "class", "divider");
+		evt.target.appendChild(e);
+		
+		y += padding;
+		
+		for(i=0;i<this.methodCount;++i){
+			y += textHeight;
+			
+			e = document.createElementNS(namespace, "text");
+			e.setAttributeNS(null, "x", padding);
+			e.setAttributeNS(null, "y", y);
+			e.setAttributeNS(null, "class", "method");
+			e.appendChild(document.createTextNode(this.methodList[i]));
+			evt.target.appendChild(e);
+		}
+		
+		if(this.methodCount>0){
+			y += padding;
+		}
+	
+		return y;
+	}
+	
+	
+	
+	
+	
+	this.noteList = new Array();
+	this.noteCount = 0;
+	
+	this.addNote = function(text){
+		this.noteList[this.noteCount++]=text;
+	}
+	
+	this.insertNotes = function(evt,y){
+		if(this.noteCount>0){
+			joinTop = y;
+		
+			y += padding;
+			
+			e = document.createElementNS(namespace, "line");
+			e.setAttributeNS(null, "x1", this.width/2-padding*2);
+			e.setAttributeNS(null, "y1", y);
+			e.setAttributeNS(null, "x2", this.width/2+padding*2);
+			e.setAttributeNS(null, "y2", joinTop);
+			e.setAttributeNS(null, "class", "note connect");
+			evt.target.appendChild(e);
+			
+			
+			
+			height = this.heightNotes();
+			
+			e = document.createElementNS(namespace, "polygon");
+			e.setAttributeNS(null, "points", "0,"+(y+padding)+" 0,"+(y+height)+" "+this.width+","+(y+height)+" "+this.width+","+y+" "+padding+","+y);
+			e.setAttributeNS(null, "class", "note");
+			evt.target.appendChild(e);
+			
+			e = document.createElementNS(namespace, "polygon");
+			e.setAttributeNS(null, "points", ""+padding+","+y+" 0,"+(y+padding)+" "+padding+","+(y+padding));
+			e.setAttributeNS(null, "class", "note corner");
+			evt.target.appendChild(e);
+			
+			y += padding;
+			
+		
+			for(i=0;i<this.noteCount;++i){
+				y += textHeight;
+
+				e = document.createElementNS(namespace, "text");
+				e.setAttributeNS(null, "x", padding);
+				e.setAttributeNS(null, "y", y);
+				e.setAttributeNS(null, "class", "note");
+				e.appendChild(document.createTextNode(this.noteList[i]));
+				evt.target.appendChild(e);
+			}
+		}
+	}
+	
+	this.heightNotes = function(){
+		if(this.noteCount>0){
+			return padding*2 + this.noteCount*textHeight;
+		}
+	}
+}
+
+function Interface(name){
+	this.superclass = Type;
+	this.superclass(name);
+	delete this.superclass; 
+	this.rounded = true;
+	
+	this.insertOutline = function(evt,y){
+
+		style = evt.target.getAttributeNS(null, "class");
+		evt.target.setAttributeNS(null,"class",style+" "+this.style);
+
+		e = document.createElementNS(namespace, "rect");
+		e.setAttributeNS(null, "x", 0);
+		e.setAttributeNS(null, "y", 0);
+		e.setAttributeNS(null, "width",  this.width);
+		e.setAttributeNS(null, "height", this.height());
+		e.setAttributeNS(null, "rx", padding*1.5);
+		e.setAttributeNS(null, "ry", padding*1.5);
+        	e.setAttributeNS(null, "class", "outline");
+		evt.target.appendChild(e);
+
+		return y;
+	}
+	
+	this.heightAttributes = function(){
+		return 0;
+	}
+	
+	this.insertAttributes = function(evt,y){
+		return y;
+	}
+	
+}
+Interface.prototype = new Type;
+
+function Class(name){
+	this.superclass = Type;
+	this.superclass(name);
+	delete this.superclass; 
+	this.rounded = false;
+}
+Class.prototype = new Type;
+
+
+
+
+function PackageSymbol(name,width,height){
+	this.name = name;
+	this.nameWidth = 150;
+	this.width = width;
+	this.height = height;
+	
+	this.insert = function(evt){
+		
+		style = evt.target.getAttributeNS(null, "class");
+		evt.target.setAttributeNS(null,"class",style+" package");
+		
+		first = evt.target.getFirstChild();
+		
+		e = document.createElementNS(namespace, "rect");
+		e.setAttributeNS(null, "x", 0);
+		e.setAttributeNS(null, "y", 0);
+		e.setAttributeNS(null, "width", this.nameWidth);
+		e.setAttributeNS(null, "height", textHeight+padding);
+		e.setAttributeNS(null, "class", "outline");
+		e.appendChild(document.createTextNode(this.name));
+		evt.target.insertBefore(e,first);
+		
+		e = document.createElementNS(namespace, "text");
+		e.setAttributeNS(null, "x", this.nameWidth/2);
+		e.setAttributeNS(null, "y", textHeight+padding/2);
+		e.setAttributeNS(null, "class", "title");
+		e.appendChild(document.createTextNode(this.name));
+		evt.target.insertBefore(e,first);
+		
+		e = document.createElementNS(namespace, "rect");
+		e.setAttributeNS(null, "x", 0);
+		e.setAttributeNS(null, "y", textHeight+padding);
+		e.setAttributeNS(null, "width", this.width);
+		e.setAttributeNS(null, "height", this.height-textHeight-padding);
+		e.setAttributeNS(null, "class", "outline");
+		e.appendChild(document.createTextNode(this.name));
+		evt.target.insertBefore(e,first);
+		
+		e = document.createElementNS(namespace, "rect");
+		e.setAttributeNS(null, "x", padding);
+		e.setAttributeNS(null, "y", textHeight+padding*2);
+		e.setAttributeNS(null, "width", this.width-padding*2);
+		e.setAttributeNS(null, "height", this.height-textHeight-padding*3);
+		e.setAttributeNS(null, "class", "inner");
+		e.appendChild(document.createTextNode(this.name));
+		evt.target.insertBefore(e,first);
+		
+		
+	}
+}
+
diff --git a/src/site/resources/images/svg/options.svg b/src/site/resources/images/svg/options.svg
new file mode 100644
index 0000000..cdb5160
--- /dev/null
+++ b/src/site/resources/images/svg/options.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" standalone="no"?>
+<?xml-stylesheet type="text/css" href="diagrams.css" ?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg id="root" width="460" height="530" x="0" y="0">
+
+<script type="text/ecmascript" xlink:href="diagrams.js"/>
+<script type="text/ecmascript" xlink:href="diagrams-cli2.js"/>
+<script type="text/ecmascript">
+
+displayAttributes = false;
+displayMethods = false;
+
+</script>
+
+<g 
+	onload="new PackageSymbol('org.apache.commons.cli2',440,510).insert(evt)" 
+	transform="translate(10,10)"><g transform="translate(10,30)">
+	
+	<g transform="translate(  0, 30)" class="option"   onload="Option.insert(evt);" />
+	<g transform="translate( 50,120)" class="group"    onload="Group.insert(evt);"/>
+	<g transform="translate( 50,210)" class="parent"   onload="Parent.insert(evt);"/>
+	<g transform="translate( 50,390)" class="argument" onload="Argument.insert(evt);"/>
+	
+	
+	<g 
+		onload="new PackageSymbol('option',180,470).insert(evt)" 
+		transform="translate(240,0)"><g transform="translate(10,30)">
+		
+		<g transform="translate(0,  0)" class="option"   onload="PropertyOption.insert(evt);" />
+		<g transform="translate(0, 90)" class="parent"   onload="DefaultOption.insert(evt);" />
+		<g transform="translate(0,180)" class="parent"   onload="Command.insert(evt);" />
+		<g transform="translate(0,270)" class="parent"   onload="Switch.insert(evt);" />
+		<g transform="translate(0,360)" class="argument" onload="SourceDestArgument.insert(evt);" />
+	</g></g>
+</g></g>
+
+<polyline class="implements" points="270,85 190,85 "/>
+
+<polyline class="implements" points="270,175 250,175 250,265 240,265"/>
+<polyline class="implements" points="270,265 250,265 250,265 240,265"/>
+<polyline class="implements" points="270,355 250,355 250,265 240,265"/>
+
+<polyline class="implements" points="270,445 240,445 "/>
+
+<polyline class="extends" points="70,445 40,445 40,110"/>
+<polyline class="extends" points="70,265 40,265 40,110"/>
+<polyline class="extends" points="70,175 40,175 40,110"/>
+
+
+</svg>
\ No newline at end of file
diff --git a/src/site/resources/images/svg/util.svg b/src/site/resources/images/svg/util.svg
new file mode 100644
index 0000000..b86d760
--- /dev/null
+++ b/src/site/resources/images/svg/util.svg
@@ -0,0 +1,47 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="1" height="1">
+	<defs>
+        <marker 
+            id="FilledArrow"
+            viewBox="0 0 10 10" refX="0" refY="5" 
+            markerUnits="strokeWidth"
+            markerWidth="5" markerHeight="14"
+            orient="auto"
+            >
+            <path 
+                d="M 10 0 L 0 5 L 10 10 L 10 0 Z" 
+                fill="rgb(0,0,0)"
+                />
+        </marker>
+        <marker 
+            id="HollowArrow"
+            markerUnits="userSpaceOnUse"
+            rexX="10" refY="5"
+            markerWidth="20" markerHeight="20"
+            orient="auto"
+            >
+            <path 
+                d="M 10 5 L 1 0 L 1 10 L 10 5 " 
+                fill="rgb(255,255,255)"
+                stroke="rgb(0,0,0)"
+                />
+        </marker>
+	</defs>	
+</svg>
\ No newline at end of file
diff --git a/src/site/site.xml b/src/site/site.xml
new file mode 100644
index 0000000..74c6826
--- /dev/null
+++ b/src/site/site.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project name="Commons CLI">
+    <bannerRight>
+        <name>Commons CLI</name>
+        <src>/images/logo.png</src>
+        <href>/index.html</href>
+    </bannerRight>
+
+    <body>
+        <menu name="Commons CLI">
+            <item name="Overview"             href="/index.html"/>
+            <item name="Download"             href="http://commons.apache.org/downloads/download_cli.cgi"/>
+            <item name="Changes Report"       href="/changes-report.html"/>
+            <item name="Mailing Lists"        href="/mail-lists.html"/>
+            <item name="Issue Tracking"       href="/issue-tracking.html"/>
+            <item name="Source Repository"    href="/source-repository.html"/>
+        </menu>
+
+        <menu name="CLI 1 User Guide">
+            <item name="Getting started"      href="/introduction.html"/>
+            <item name="Usage scenarios"      href="/usage.html"/>
+            <item name="Option properties"    href="/properties.html"/>
+            <item name="Javadoc (1.2)"        href="api-release/index.html"/>
+        </menu>
+
+        <menu name="CLI 2 User Guide (dev)">
+            <item name="Overview"             href="/manual/index.html"/>
+            <item name="Examples"             href="/examples/index.html"/>
+            <item name="Options"              href="/manual/options.html"/>
+            <item name="Validators"           href="/manual/validators.html"/>
+            <item name="Javadoc (SVN latest)" href="apidocs/index.html"/>
+        </menu>
+
+    </body>
+
+</project>
