<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * 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.
-->
<!-- $Id$ -->
 

<s1 title="Contact us">
<ul>
<li><link anchor="contact">Getting in touch</link></li>
<li><link anchor="reporting-bugs">Reporting bugs</link></li>
<li><link anchor="user-mailing-list">User mailing list</link></li>
<li><link anchor="dev-maling-list">Developer mailing list</link></li>
<li><link anchor="subscribe">Subscribe to a mailing list</link></li>
</ul>

<anchor name="contact"/>
<s2 title="Getting in touch">
  <p>
    Your feedback is more than welcome. Offers of help are even more so! 
    Perhaps you would like to 
    take on an active role in the ongoing development, 
    testing, and documentation of &xslt4j;?
  </p> 
  <p>
    Please email your comments, questions, suggestions, 
    and offers to join the Xalan team to <human-resource-ref idref="xalandev"/>
    (dev@xalan.apache.org).</p>
 </s2>
<anchor name="reporting-bugs"/>
<s2 title="Reporting bugs">
  <p>
    If you need to contact the Xalan team to report a bug please see
    this <link idref="bugreporting">bug reporting page</link>.
  </p>
</s2>

<anchor name="user-mailing-list"/>
<s2 title="User mailing list">
  <p>
    If you think you have encountered a bug, but you aren't sure because 
    it might be a usage problem, or if you have other questions about Xalan 
    post a note to
    <jump href="mailto:j-users@xalan.apache.org">j-users&#64;xalan.apache.org</jump>
    This mailing list pertains to only to the Java version of Xalan.
  </p>
  <p>
    To view a history of posts to xalan-j-users you can go to
    <jump href="http://mail-archives.apache.org/mod_mbox/xml-xalan-j-users/">
    xalan-j-users mail archives at Apache</jump> or
    <jump href="http://marc.theaimsgroup.com/?l=xalan-j-users">xalan-j-users mail archives at MARC</jump>.
   </p>
</s2>

<anchor name="dev-mailing-list"/>
<s2 title="Developer mailing list">
  <p>
    The participating developers of the Xalan meet and discuss issues, 
    code changes/additions, etc. at 
    <jump href="mailto:dev@xalan.apache.org">dev@xalan.apache.org</jump>.
    This mailing list pertains to both the Java and C++ versions of Xalan.
  </p>
  <p>
    To view a history of posts to xalan-dev you can go to
    <jump href="http://mail-archives.apache.org/mod_mbox/xml-xalan-dev/">
    xalan-dev mail archives at Apache</jump> or
    <jump href="http://marc.theaimsgroup.com/?l=xalan-dev">xalan-dev mail archives at MARC</jump>.
   </p> 
</s2>
<anchor name='subscribe'/>
<s2 title="Subscribe to a mailing list">
 <p>
    You may want to subscribe to a mailing list before posting a note, so that if 
    others post a response to the mailing list you will get copied.
  </p>
  <p>
    To subscribe an email account to the Xalan user mailing list send a note to 
    j-users-subscribe&#64;xalan.apache.org from that account. To unsubscribe
    do the same, except replace <em>subscribe</em> with <em>unsubscribe</em>.
  </p>
  <p>
    To subscribe to the Xalan developer mailing list send a note to 
    dev-subscribe&#64;xalan.apache.org. To unsubscribe
    do the same, except replace <em>subscribe</em> with <em>unsubscribe</em>.
  </p> 
</s2>
</s1> 
