diff --git a/bundleplugin/doc/site/team-list.html b/bundleplugin/doc/site/team-list.html
new file mode 100644
index 0000000..115e818
--- /dev/null
+++ b/bundleplugin/doc/site/team-list.html
@@ -0,0 +1,255 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<!-- Generated by Apache Maven Doxia at Jul 5, 2011 -->
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+  <head>
+
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+    <title>Maven Bundle Plugin - Team list</title>
+
+    <style type="text/css" media="all">
+
+      @import url("./css/maven-base.css");
+
+      @import url("./css/maven-theme.css");
+
+      @import url("./css/site.css");
+
+    </style>
+
+    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
+
+    <meta name="Date-Revision-yyyymmdd" content="20110705" />
+
+    <meta http-equiv="Content-Language" content="en" />
+
+        
+
+  </head>
+
+  <body class="composite">
+
+    <div id="banner">
+
+                    <div id="bannerLeft">
+
+                Maven Bundle Plugin
+
+                </div>
+
+                    <div class="clear">
+
+        <hr/>
+
+      </div>
+
+    </div>
+
+    <div id="breadcrumbs">
+
+            
+
+        
+
+                <div class="xleft">
+
+        <span id="publishDate">Last Published: 2011-07-05</span>
+
+                  &nbsp;| <span id="projectVersion">Version: 2.3.5</span>
+
+                      </div>
+
+            <div class="xright">        
+
+        
+
+      </div>
+
+      <div class="clear">
+
+        <hr/>
+
+      </div>
+
+    </div>
+
+    <div id="leftColumn">
+
+      <div id="navcolumn">
+
+             
+
+        
+
+                                <h5>Overview</h5>
+
+                  <ul>
+
+                  <li class="none">
+
+                          <a href="index.html" title="Introduction">Introduction</a>
+
+            </li>
+
+                  <li class="none">
+
+                          <a href="plugin-info.html" title="Goals">Goals</a>
+
+            </li>
+
+                  <li class="none">
+
+                          <a href="https://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+Maven+Bundle+Plugin+%28BND%29" class="externalLink" title="Wiki">Wiki</a>
+
+            </li>
+
+                  <li class="none">
+
+                          <a href="https://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+Bundle+Plugin+FAQ" class="externalLink" title="FAQ">FAQ</a>
+
+            </li>
+
+                  <li class="none">
+
+                          <a href="jira-report.html" title="Release Notes">Release Notes</a>
+
+            </li>
+
+          </ul>
+
+                       <h5>Project Documentation</h5>
+
+                  <ul>
+
+                                                                                                                                                                                          <li class="expanded">
+
+                          <a href="project-info.html" title="Project Information">Project Information</a>
+
+                    <ul>
+
+                      <li class="none">
+
+                          <a href="index.html" title="About">About</a>
+
+            </li>
+
+                      <li class="none">
+
+                          <a href="dependencies.html" title="Dependencies">Dependencies</a>
+
+            </li>
+
+                      <li class="none">
+
+                          <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
+
+            </li>
+
+                      <li class="none">
+
+                          <a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a>
+
+            </li>
+
+                      <li class="none">
+
+                          <a href="license.html" title="Project License">Project License</a>
+
+            </li>
+
+                      <li class="none">
+
+            <strong>Project Team</strong>
+
+          </li>
+
+                      <li class="none">
+
+                          <a href="source-repository.html" title="Source Repository">Source Repository</a>
+
+            </li>
+
+              </ul>
+
+        </li>
+
+                                                                                                                                            <li class="collapsed">
+
+                          <a href="project-reports.html" title="Project Reports">Project Reports</a>
+
+                  </li>
+
+          </ul>
+
+                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+
+        <img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
+
+      </a>
+
+                   
+
+        
+
+            </div>
+
+    </div>
+
+    <div id="bodyColumn">
+
+      <div id="contentBox">
+
+        <div class="section"><h2>The Team<a name="The_Team"></a></h2><a name="The_Team"></a><p>A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.</p><p>The team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.</p><div class="section"><h3>Members<a name="Members"></a></h3><a name="Members"></a><p>There are no developers working on this project.</p></div><div class="section"><h3>Contributors<a name="Contributors"></a></h3><a name="Contributors"></a><p>There are no contributors listed for this project. Please check back again later.</p><script type="text/javascript">
+function offsetDate(id, offset) {
+    var now = new Date();
+    var nowTime = now.getTime();
+    var localOffset = now.getTimezoneOffset();
+    var developerTime = nowTime + ( offset * 60 * 60 * 1000 )+ ( localOffset * 60 * 1000 );
+    var developerDate = new Date(developerTime);
+
+    document.getElementById(id).innerHTML = developerDate;
+}
+
+function init(){
+}
+
+window.onLoad = init();
+</script></div></div>
+
+      </div>
+
+    </div>
+
+    <div class="clear">
+
+      <hr/>
+
+    </div>
+
+    <div id="footer">
+
+      <div class="xright">Copyright &#169;                    2006-2011
+
+                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
+
+            All Rights Reserved.      
+
+        
+
+      </div>
+
+      <div class="clear">
+
+        <hr/>
+
+      </div>
+
+    </div>
+
+  </body>
+
+</html>
+
