<?xml version="1.0"?>
<!-- 
/*
 * 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.
 */
 -->

<document>

 <properties>
  <title>Turbine Services</title>
 </properties>

<body>

<section name="Proposals">

<p>
These are the proposals that are up on the table:
</p>

<ul>
<li><a href="proposals/application-service.html">Application Service</a></li>
<li><a href="proposals/browser-bound-app-context.html">Browser Bound Application Context</a></li>
<li><a href="proposals/i18n.html">i18n</a></li>
<li><a href="proposals/naming-service.html">Naming Service</a></li>
<li><a href="proposals/pp.html">PP and Related Classes</a></li>
<li><a href="proposals/reusable-components.html">Reusable Components</a></li>
<li><a href="proposals/security-service.html">Security Service</a></li>
<li><a href="proposals/services-repository.html">Services Repository</a></li>
<li><a href="proposals/xslt-service.html">XSLT Service</a></li>
<li><a href="proposals/unified-templating.html">Unified Templating Service</a></li>
</ul>

</section>

</body>
</document>
