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

<document>

 <properties>
  <title>Commons Lang - Tasks outstanding</title>
  <author email="commons-dev@jakarta.apache.org">Commons Documentation Team</author>
 </properties>

 <body>

<section name="Tasks outstanding">

<p>
The following tasks are on the TODO list:
</p>

<ul>
<li>Improve maven script to generate previous version javadoc as per collections</li>
<li>CloneUtils - utility class to enable cloning via various different mechanisms</li>
<li>CharUtils - Utilities to work on a char[] in the same way as a String</li>
<li>Code examples - Document as many static methods as possible with example usage</li>
</ul>

<p>
Would you like to Volunteer? If so, contact the <a href="mail-lists.html">mailing lists</a>.
</p>
</section>

</body>
</document>






