diff --git a/tomcat-uidm/webapps/docs/BUILDING.txt b/tomcat-uidm/webapps/docs/BUILDING.txt
new file mode 100644
index 0000000..45ee689
--- /dev/null
+++ b/tomcat-uidm/webapps/docs/BUILDING.txt
@@ -0,0 +1,168 @@
+================================================================================
+  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.
+================================================================================
+
+            ====================================================
+            Building The Apache Tomcat 6.0 Servlet/JSP Container
+            ====================================================
+
+This subproject contains the source code for Tomcat 6.0, a container that
+implements the Servlet 2.5 and JSP 2.1 specifications from the Java
+Community Process <http://www.jcp.org/>.
+
+Note: If you just need to run Apache Tomcat, it is not necessary to build
+it. You may simply download a binary distribution. It is cross-platform.
+Read RUNNING.txt for the instruction on how to run it.
+
+In order to build a binary distribution version of Apache Tomcat from a
+source distribution, do the following:
+
+
+(0) Download and Install a Java Development Kit
+
+* If the JDK is already installed, skip to (1).
+
+* Download a Java Development Kit (JDK) of Java SE version 5 from
+
+    http://www.oracle.com/technetwork/java/javase/downloads/index.html
+    or from another JDK vendor.
+
+  Note regarding versions of Java later than Java SE 5:
+
+    As documented elsewhere, one of components in Apache Tomcat includes
+    a private copy of the Apache Commons DBCP library. The source code
+    for this library is downloaded, processed by the build script
+    (renaming the packages) and compiled.
+
+    Due to changes in JDBC interfaces implemented by the library between
+    versions of Java SE specification, the library has to target specific
+    version of Java and can be compiled only with the JDK version
+    implementing this version of specification.
+
+    See Apache Commons DBCP project web site for more details on
+    available versions of the library and its requirements,
+
+      http://commons.apache.org/dbcp/
+
+  It is possible to use later versions of JDK to build Tomcat 6.0, but the
+  building of that component (tomcat-dbcp.jar) will be skipped and a
+  warning will be printed.
+
+* Install the JDK according to the instructions included with the release.
+
+* Set an environment variable JAVA_HOME to the pathname of the directory
+  into which you installed the JDK release.
+
+
+(1) Install Apache Ant 1.6.x on your computer
+
+* If Apache Ant 1.6.x is already installed on your computer, skip to (2).
+
+* Download a binary distribution of Ant 1.6.x from:
+
+    http://ant.apache.org/bindownload.cgi
+
+* Unpack the binary distribution into a convenient location so that the
+  Ant release resides in its own directory (conventionally named
+  "apache-ant-[version]").  For the purposes of the remainder of this document,
+  the symbolic name "${ant.home}" is used to refer to the full pathname of
+  the release directory.
+
+* Create an ANT_HOME environment variable to point the directory
+  ${ant.home}.
+
+* Modify the PATH environment variable to include the directory
+  ${ant.home}/bin in its list.  This makes the "ant" command line script
+  available, which will be used to actually perform the build.
+
+
+(2) Building Tomcat 6.0
+
+(2.1) Checkout or obtain the source code for Tomcat 6.0
+
+* Tomcat 6.0 SVN repository URL:
+  http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/
+
+* Download a source package from:
+  http://tomcat.apache.org/download-60.cgi
+
+* Checkout the source using SVN, selecting a tag for released version or
+  trunk for the current development code, or unpack a source package. The
+  location where the source has been placed will be referred as
+  ${tomcat.source}.
+
+(2.2) Building
+
+* Go to that directory, and do:
+
+    cd ${tomcat.source}
+    ant download
+    ant
+
+* WARNING: Running "ant download" command will download libraries required
+  to build Tomcat to the /usr/share/java directory.  On a typical Linux or
+  MacOX system an ordinary user  will not have access to write to this
+  directory, and, even if you do, it may not be appropriate for you to
+  write there.
+
+  On Windows this usually corresponds to the "C:\usr\share\java"
+  directory, unless Cygwin is used. Read below to learn how to customize
+  the directory used to download the binaries.
+
+* NOTE: Users accessing the Internet through a proxy must use a properties
+  file to indicate to Ant the proxy configuration. Read below.
+
+* The build can be controlled by creating a ${tomcat.source}/build.properties
+  file, and adding the following content to it:
+
+    # ----- Proxy setup -----
+    # Uncomment if using a proxy server
+    #proxy.host=proxy.domain
+    #proxy.port=8080
+    #proxy.use=on
+
+    # ----- Default Base Path for Dependent Packages -----
+    # Replace this path with the directory path where dependencies binaries
+    # should be downloaded
+    base.path=/home/me/some-place-to-download-to
+
+
+(3) Updating sources
+
+It is recommended that you regularly update the downloaded Tomcat 6 sources
+using your SVN client.
+
+(4) Rebuilds
+
+For a quick rebuild of only modified code you can use:
+   
+    cd ${tomcat.source}
+    ant
+
+(5) Building the servlet and jsp API documentation
+
+    cd ${tomcat.source}
+    ant -f dist.xml dist-javadoc
+
+(6) Building the extras (commons-logging, webservices etc.).
+
+    cd ${tomcat.source}
+    ant -f extras.xml
+
+(7) Building a release:
+
+    cd ${tomcat.source}
+    ant -f dist.xml release
