<?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 To Do</title>
 </properties>

<body>

<section name="Work to do for the current release">
<p>
This file is intended to collect ideas, problems and work
to do with the current Turbine code. 
</p>

<subsection name="Work to do for the current release">
<p>
No current items. 
</p>
</subsection>

<subsection name="Stuff that needs to be looked into (current release or next release)">
<p>
  <ul>
    <li>Googlezation of URLs (<a href="http://marc.theaimsgroup.com/?l=turbine-user&amp;m=103008672127247&amp;w=2">See here</a>)</li>
    <li>Make sure that pull tools get refreshed correctly under all circumstances</li>
    <li>Check lifetimes of authorized and session tools if the application is not the standard login-logout application</li>
    <li>Move AvalonComponentService to the Fortress container (suggested by the avalon-dev list)</li>
  </ul>
</p>
</subsection>

<subsection name="Blue Skying for future Turbine releases">
<p>
  <ul>
    <li>Move forward to a component based architecture (avalonization)  (partly done!)</li>
    <li>"Steal" the pipeline from the Turbine 3 code base  (done!  epugh)</li>
    <li>Decouple the code base into core, components and toolbox</li>
  </ul>
</p>
</subsection>

</section>
</body>
</document>
