Board Resolution Report
---------------------------------------------------------------------------------------------

       WHEREAS, the Board of Directors deems it to be in the best
       interests of the Foundation and consistent with the
       Foundation's purpose to establish a Project Management
       Committee charged with the creation and maintenance of
       open-source software related to JSPWiki, a feature-rich and
       extensible Wiki engine built around the standard 
       Java EE components Java, Servlets, and Java Server Pages,
       for distribution at no charge to the public.

       NOW, THEREFORE, BE IT RESOLVED, that a Project Management
       Committee (PMC), to be known as the "Apache JSPWiki Project",
       be and hereby is established pursuant to Bylaws of the
       Foundation; and be it further

       RESOLVED, that the Apache JSPWiki Project be and hereby is
       responsible for the creation and maintenance of software
       related to JSPWiki, a feature-rich and
       extensible Wiki engine built around the standard 
       Java EE components Java, Servlets, and Java Server Pages;
       and be it further

       RESOLVED, that the office of "Vice President, Apache JSPWiki" be
       and hereby is created, the person holding such office to
       serve at the direction of the Board of Directors as the chair
       of the Apache JSPWiki Project, and to have primary responsibility
       for management of the projects within the scope of
       responsibility of the Apache JSPWiki Project; and be it further

       RESOLVED, that the persons listed immediately below be and
       hereby are appointed to serve as the initial members of the
       Apache JSPWiki Project:

         * Murray Altheim       <altheim@apache.org>
         * Dirk Frederickx      <brushed@apache.org>
         * Florian Holeczek     <florianh@apache.org>
         * Andrew Jaquith       <ajaquith@apache.org>
         * Glen Mazza           <gmazza@apache.org>
         * Harry Metske         <metskem@apache.org>
         * Craig L Russell      <clr@apache.org>
         * Juan Pablo Santos    <juanpablo@apache.org>
         * Christoph Sauer      <csauer@apache.org>

       NOW, THEREFORE, BE IT FURTHER RESOLVED, that Juan Pablo Santos
       be appointed to the office of Vice President, Apache JSPWiki, to
       serve in accordance with and subject to the direction of the
       Board of Directors and the Bylaws of the Foundation until
       death, resignation, retirement, removal or disqualification,
       or until a successor is appointed; and be it further

       RESOLVED, that the Apache JSPWiki Project be and hereby
       is tasked with the migration and rationalization of the Apache
       Incubator JSPWiki podling; and be it further

       RESOLVED, that all responsibilities pertaining to the Apache
       Incubator JSPWiki podling encumbered upon the Apache Incubator
       Project are hereafter discharged.
