diff --git a/libs/functional/function_traits.html b/libs/functional/function_traits.html
new file mode 100644
index 0000000..c0ce510
--- /dev/null
+++ b/libs/functional/function_traits.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+<head>
+  <meta http-equiv="Content-Language" content="en-us">
+  <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+
+  <title>Boost Function Object Adapter Library</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+  <table border="1" bgcolor="#007F7F" cellpadding="2" summary="">
+    <tr>
+      <td bgcolor="#FFFFFF"><img src="../../boost.png" alt=
+      "boost.png (6897 bytes)" width="277" height="86"></td>
+
+      <td><a href="../../index.htm"><font face="Arial" color=
+      "#FFFFFF"><big>Home</big></font></a></td>
+
+      <td><a href="../libraries.htm"><font face="Arial" color=
+      "#FFFFFF"><big>Libraries</big></font></a></td>
+
+      <td><a href="http://www.boost.org/people/people.htm"><font face="Arial" color=
+      "#FFFFFF"><big>People</big></font></a></td>
+
+      <td><a href="http://www.boost.org/more/faq.htm"><font face="Arial" color=
+      "#FFFFFF"><big>FAQ</big></font></a></td>
+
+      <td><a href="../../more/index.htm"><font face="Arial" color=
+      "#FFFFFF"><big>More</big></font></a></td>
+    </tr>
+  </table>
+
+  <h1>Function Object Traits</h1>
+
+  <p>The header <a href="../../boost/functional.hpp">functional.hpp</a>
+  provides two traits class templates for functions and function objects:</p>
+
+  <table border="1" summary="">
+    <tr>
+      <th>Type</th>
+
+      <th>Contents</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td valign="top" rowspan="4">
+      <tt>template&nbsp;&lt;typename&nbsp;T&gt;<br>
+      struct&nbsp;unary_traits</tt></td>
+
+      <td valign="top"><tt>function_type</tt></td>
+
+      <td valign="top">The type of the function or function object itself
+      (i.e., <tt>T</tt>).</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>param_type</tt></td>
+
+      <td valign="top">The type that should be used to pass the function or
+      function object as a parameter.</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>result_type</tt></td>
+
+      <td valign="top">The type returned by the function or function
+      object.</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>argument_type</tt></td>
+
+      <td valign="top">The type of the argument to the function or function
+      object.</td>
+    </tr>
+
+    <tr>
+      <td valign="top" rowspan="5">
+      <tt>template&nbsp;&lt;typename&nbsp;T&gt;<br>
+      struct&nbsp;binary_traits</tt></td>
+
+      <td valign="top"><tt>function_type</tt></td>
+
+      <td valign="top">The type of the function or function object itself
+      (i.e., <tt>T</tt>).</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>param_type</tt></td>
+
+      <td valign="top">The type that should be used to pass the function or
+      function object as a parameter.</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>result_type</tt></td>
+
+      <td valign="top">The type returned by the function or function
+      object.</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>first_argument_type</tt></td>
+
+      <td valign="top">The type of the first argument to the function or
+      function object.</td>
+    </tr>
+
+    <tr>
+      <td valign="top"><tt>second_argument_type</tt></td>
+
+      <td valign="top">The type of the second argument to the function or
+      function object.</td>
+    </tr>
+  </table>
+
+  <h3>Usage</h3>
+
+  <p><tt>unary_traits</tt> should be instantiated with either a function
+  taking a single parameter, or an adaptable unary function object (i.e., a
+  class derived from <tt>std::unary_function</tt> or one which provides the
+  same typedefs). (See &sect;20.3.1 in the C++ Standard.)</p>
+
+  <p><tt>binary_traits</tt> should be instantiated with either a function
+  taking two parameters, or an adaptable binary function object (i.e., a
+  class derived from <tt>std::binary_function</tt> or one which provides the
+  same typedefs). (See &sect;20.3.1 in the C++ Standard.)</p>
+
+  <p>The most common usage of these templates is in function object adapters,
+  thus allowing them to adapt plain functions as well as function objects.
+  You can do this by wherever you would normally write, for example,</p>
+
+  <blockquote>
+    <pre>
+typename Operation::argument_type
+</pre>
+  </blockquote>
+
+  <p>simply writing</p>
+
+  <blockquote>
+    <pre>
+typename boost::unary_traits&lt;Operation&gt;::argument_type
+</pre>
+  </blockquote>
+
+  <p>instead.</p>
+
+  <h3>Additional Types Defined</h3>
+
+  <p>In addition to the standard result and argument typedefs, these traits
+  templates define two additional types.</p>
+
+  <h4><tt>function_type</tt></h4>
+
+  <p>This is the type of the function or function object, and can be used in
+  declarations such as</p>
+
+  <blockquote>
+    <pre>
+template &lt;class Predicate&gt;
+class unary_negate : // ...
+{
+  // ...
+  private:
+    <strong>typename unary_traits&lt;Predicate&gt;::function_type</strong> pred;
+};
+</pre>
+  </blockquote>
+
+  <p>If this typedef were not provided, it would not be possible to declare
+  <tt>pred</tt> in a way that would allow <tt>unary_negate</tt> to be
+  instantiated with a function type (see the C++ Standard &sect;14.3.1
+  &para;3).</p>
+
+  <h4><tt>param_type</tt></h4>
+
+  <p>This is a type suitable for passing the function or function object as a
+  parameter to another function. For example,</p>
+
+  <blockquote>
+    <pre>
+template &lt;class Predicate&gt;
+class unary_negate : // ...
+{
+  public:
+    explicit unary_negate(<strong>typename unary_traits&lt;Predicate&gt;::param_type</strong> x)
+        :
+        pred(x)
+    {}
+    // ...
+};
+</pre>
+  </blockquote>
+
+  <p>Function objects are passed by reference to const; function pointers are
+  passed by value.</p>
+
+  <h3>Limitations</h3>
+
+  <p>This library uses these traits within all function object adapters,
+  theoretically rendering <tt>ptr_fun</tt> obsolete. However, third party
+  adapters probably won't take advantage of this mechanism, and so
+  <tt>ptr_fun</tt> may still be required. Accordingly, this library also
+  provides <a href="ptr_fun.html">improved versions of the standard function
+  pointer adapters</a>.</p>
+
+  <p>These traits templates will also not work with compilers that fail to
+  support partial specialisation of templates. With these compilers, the
+  traits templates can only be instantiated with adaptable function objects,
+  thus requiring <tt>ptr_fun</tt> to be used, even with the function object
+  adapters in this library.</p>
+  <hr>
+
+  <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
+  "../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional"
+  height="31" width="88"></a></p>
+
+  <p>Revised 
+  <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->02
+  December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38510" --></p>
+
+  <p><i>Copyright &copy; 2000 Cadenza New Zealand Ltd.</i></p>
+
+  <p><i>Distributed under the Boost Software License, Version 1.0. (See
+  accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
+  copy at <a href=
+  "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
+</body>
+</html>
