<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>doc/release_notes_2.1.0.txt</filename>
    </added>
    <added>
      <filename>src/ejabberd_piefxis.erl</filename>
    </added>
    <added>
      <filename>src/mod_ping.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/mod_pubsub_odbc.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/node_flat_odbc.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/node_hometree_odbc.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/node_pep_odbc.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/nodetree_tree_odbc.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/pubsub_db_odbc.erl</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/pubsub_odbc.patch</filename>
    </added>
    <added>
      <filename>src/mod_pubsub/pubsub_subscription_odbc.erl</filename>
    </added>
    <added>
      <filename>src/stun/Makefile.in</filename>
    </added>
    <added>
      <filename>src/stun/Makefile.win32</filename>
    </added>
    <added>
      <filename>src/stun/ejabberd_stun.erl</filename>
    </added>
    <added>
      <filename>src/stun/stun.hrl</filename>
    </added>
    <added>
      <filename>src/stun/stun_codec.erl</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -27,6 +27,7 @@ To compile ejabberd you need:
    (mod_irc). Optional. Not needed on systems with GNU Libc.
  - erls3 (https://github.com/cstar/erls3/tree) and erlsdb (https://github.com/cstar/erlsdb/tree)
  - ImageMagick&#8217;s Convert program. Optional. For CAPTCHA challenges.
+ - exmpp 0.9.1 or higher. Optional. For import/export XEP-0227 files. 
 
 1. Compile and install on *nix systems
 </diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -84,7 +84,7 @@ Kevin Smith, Current maintainer of the Psi project&lt;/I&gt;&lt;/BLOCKQUOTE&gt;&lt;!--TOC secti
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc15&quot;&gt;8.2&amp;#XA0;&amp;#XA0;Services&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Introduction
-&lt;A NAME=&quot;intro&quot;&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is a free and open source instant messaging server written in &lt;A HREF=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is designed to be a rock-solid and feature rich XMPP server.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.&lt;/P&gt;&lt;!--TOC section Key Features--&gt;
+&lt;A NAME=&quot;intro&quot;&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is a free and open source instant messaging server written in &lt;A HREF=&quot;http://www.erlang.org/&quot;&gt;Erlang/OTP&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is designed to be a rock-solid and feature rich XMPP server.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.&lt;/P&gt;&lt;!--TOC section Key Features--&gt;
 &lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc1&quot;&gt;1&lt;/A&gt;&amp;#XA0;&amp;#XA0;Key Features&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt;
 &lt;A NAME=&quot;keyfeatures&quot;&gt;&lt;/A&gt;
 &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is:</diff>
      <filename>doc/dev.html</filename>
    </modified>
    <modified>
      <diff>@@ -61,7 +61,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}
 &lt;/DIV&gt;&lt;BLOCKQUOTE CLASS=&quot;quotation&quot;&gt;&lt;FONT COLOR=&quot;#921700&quot;&gt;&lt;I&gt;I can thoroughly recommend ejabberd for ease of setup &amp;#X2013;
 Kevin Smith, Current maintainer of the Psi project&lt;/I&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Introduction
 &lt;A NAME=&quot;intro&quot;&gt;&lt;/A&gt;&lt;/P&gt;&lt;BLOCKQUOTE CLASS=&quot;quotation&quot;&gt;&lt;FONT COLOR=&quot;#921700&quot;&gt;&lt;I&gt;I just tried out ejabberd and was impressed both by ejabberd itself and the language it is written in, Erlang. &amp;#X2014;
-Joeri&lt;/I&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is a &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;free and open source&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt; instant messaging server written in &lt;A HREF=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;cross-platform&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;, distributed, fault-tolerant, and based on open standards to achieve real-time communication.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is designed to be a &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;rock-solid and feature rich&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt; XMPP server.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is suitable for small deployments, whether they need to be &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;scalable&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt; or not, as well as extremely big deployments.&lt;/P&gt;&lt;!--TOC section Key Features--&gt;
+Joeri&lt;/I&gt;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is a &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;free and open source&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt; instant messaging server written in &lt;A HREF=&quot;http://www.erlang.org/&quot;&gt;Erlang/OTP&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;cross-platform&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;, distributed, fault-tolerant, and based on open standards to achieve real-time communication.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is designed to be a &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;rock-solid and feature rich&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt; XMPP server.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is suitable for small deployments, whether they need to be &lt;B&gt;&lt;FONT SIZE=4&gt;&lt;FONT COLOR=&quot;#001376&quot;&gt;scalable&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt; or not, as well as extremely big deployments.&lt;/P&gt;&lt;!--TOC section Key Features--&gt;
 &lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc1&quot;&gt;&lt;/A&gt;Key Features&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt;
 &lt;A NAME=&quot;keyfeatures&quot;&gt;&lt;/A&gt;
 &lt;/P&gt;&lt;BLOCKQUOTE CLASS=&quot;quotation&quot;&gt;&lt;FONT COLOR=&quot;#921700&quot;&gt;&lt;I&gt;Erlang seems to be tailor-made for writing stable, robust servers. &amp;#X2014;</diff>
      <filename>doc/features.html</filename>
    </modified>
    <modified>
      <diff>@@ -124,100 +124,102 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc26&quot;&gt;3.1.6&amp;#XA0;&amp;#XA0;Shapers&lt;/A&gt;
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc27&quot;&gt;3.1.7&amp;#XA0;&amp;#XA0;Default Language&lt;/A&gt;
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc28&quot;&gt;3.1.8&amp;#XA0;&amp;#XA0;CAPTCHA&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc29&quot;&gt;3.1.9&amp;#XA0;&amp;#XA0;Include Additional Configuration Files&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc30&quot;&gt;3.1.10&amp;#XA0;&amp;#XA0;Option Macros in Configuration File&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc29&quot;&gt;3.1.9&amp;#XA0;&amp;#XA0;STUN&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc30&quot;&gt;3.1.10&amp;#XA0;&amp;#XA0;Include Additional Configuration Files&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc31&quot;&gt;3.1.11&amp;#XA0;&amp;#XA0;Option Macros in Configuration File&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc31&quot;&gt;3.2&amp;#XA0;&amp;#XA0;Database and LDAP Configuration&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc32&quot;&gt;3.2&amp;#XA0;&amp;#XA0;Database and LDAP Configuration&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc32&quot;&gt;3.2.1&amp;#XA0;&amp;#XA0;MySQL&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc33&quot;&gt;3.2.2&amp;#XA0;&amp;#XA0;Microsoft SQL Server&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc34&quot;&gt;3.2.3&amp;#XA0;&amp;#XA0;PostgreSQL&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc35&quot;&gt;3.2.4&amp;#XA0;&amp;#XA0;ODBC Compatible&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc36&quot;&gt;3.2.5&amp;#XA0;&amp;#XA0;LDAP&lt;/A&gt;
+&lt;A HREF=&quot;#htoc33&quot;&gt;3.2.1&amp;#XA0;&amp;#XA0;MySQL&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc34&quot;&gt;3.2.2&amp;#XA0;&amp;#XA0;Microsoft SQL Server&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc35&quot;&gt;3.2.3&amp;#XA0;&amp;#XA0;PostgreSQL&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc36&quot;&gt;3.2.4&amp;#XA0;&amp;#XA0;ODBC Compatible&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc37&quot;&gt;3.2.5&amp;#XA0;&amp;#XA0;LDAP&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc37&quot;&gt;3.3&amp;#XA0;&amp;#XA0;Modules Configuration&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc38&quot;&gt;3.3&amp;#XA0;&amp;#XA0;Modules Configuration&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc38&quot;&gt;3.3.1&amp;#XA0;&amp;#XA0;Modules Overview&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc39&quot;&gt;3.3.2&amp;#XA0;&amp;#XA0;Common Options&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc40&quot;&gt;3.3.3&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_announce&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc41&quot;&gt;3.3.4&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_disco&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc42&quot;&gt;3.3.5&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_echo&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc43&quot;&gt;3.3.6&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_http_bind&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc44&quot;&gt;3.3.7&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_http_fileserver&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc45&quot;&gt;3.3.8&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_irc&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc46&quot;&gt;3.3.9&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_last&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc47&quot;&gt;3.3.10&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc48&quot;&gt;3.3.11&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_muc_log&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc49&quot;&gt;3.3.12&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_offline&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc50&quot;&gt;3.3.13&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_privacy&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc51&quot;&gt;3.3.14&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_private&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc52&quot;&gt;3.3.15&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_proxy65&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc53&quot;&gt;3.3.16&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_pubsub&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc54&quot;&gt;3.3.17&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_register&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc55&quot;&gt;3.3.18&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_roster&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc56&quot;&gt;3.3.19&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_service_log&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc57&quot;&gt;3.3.20&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_shared_roster&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc58&quot;&gt;3.3.21&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_stats&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc59&quot;&gt;3.3.22&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_time&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc60&quot;&gt;3.3.23&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_vcard&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc61&quot;&gt;3.3.24&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc62&quot;&gt;3.3.25&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_version&lt;/TT&gt;&lt;/A&gt;
+&lt;A HREF=&quot;#htoc39&quot;&gt;3.3.1&amp;#XA0;&amp;#XA0;Modules Overview&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc40&quot;&gt;3.3.2&amp;#XA0;&amp;#XA0;Common Options&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc41&quot;&gt;3.3.3&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_announce&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc42&quot;&gt;3.3.4&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_disco&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc43&quot;&gt;3.3.5&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_echo&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc44&quot;&gt;3.3.6&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_http_bind&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc45&quot;&gt;3.3.7&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_http_fileserver&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc46&quot;&gt;3.3.8&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_irc&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc47&quot;&gt;3.3.9&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_last&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc48&quot;&gt;3.3.10&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc49&quot;&gt;3.3.11&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_muc_log&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc50&quot;&gt;3.3.12&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_offline&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc51&quot;&gt;3.3.13&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_ping&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc52&quot;&gt;3.3.14&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_privacy&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc53&quot;&gt;3.3.15&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_private&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc54&quot;&gt;3.3.16&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_proxy65&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc55&quot;&gt;3.3.17&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_pubsub&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc56&quot;&gt;3.3.18&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_register&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc57&quot;&gt;3.3.19&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_roster&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc58&quot;&gt;3.3.20&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_service_log&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc59&quot;&gt;3.3.21&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_shared_roster&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc60&quot;&gt;3.3.22&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_stats&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc61&quot;&gt;3.3.23&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_time&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc62&quot;&gt;3.3.24&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_vcard&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc63&quot;&gt;3.3.25&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc64&quot;&gt;3.3.26&amp;#XA0;&amp;#XA0;&lt;TT&gt;mod_version&lt;/TT&gt;&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc63&quot;&gt;Chapter&amp;#XA0;4&amp;#XA0;&amp;#XA0;Managing an &lt;TT&gt;ejabberd&lt;/TT&gt; Server&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc65&quot;&gt;Chapter&amp;#XA0;4&amp;#XA0;&amp;#XA0;Managing an &lt;TT&gt;ejabberd&lt;/TT&gt; Server&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc64&quot;&gt;4.1&amp;#XA0;&amp;#XA0;&lt;TT&gt;ejabberdctl&lt;/TT&gt;&lt;/A&gt;
+&lt;A HREF=&quot;#htoc66&quot;&gt;4.1&amp;#XA0;&amp;#XA0;&lt;TT&gt;ejabberdctl&lt;/TT&gt;&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc65&quot;&gt;4.1.1&amp;#XA0;&amp;#XA0;ejabberdctl Commands&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc66&quot;&gt;4.1.2&amp;#XA0;&amp;#XA0;Erlang Runtime System&lt;/A&gt;
+&lt;A HREF=&quot;#htoc67&quot;&gt;4.1.1&amp;#XA0;&amp;#XA0;ejabberdctl Commands&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc68&quot;&gt;4.1.2&amp;#XA0;&amp;#XA0;Erlang Runtime System&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc67&quot;&gt;4.2&amp;#XA0;&amp;#XA0;&lt;TT&gt;ejabberd&lt;/TT&gt; Commands&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc69&quot;&gt;4.2&amp;#XA0;&amp;#XA0;&lt;TT&gt;ejabberd&lt;/TT&gt; Commands&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc68&quot;&gt;4.2.1&amp;#XA0;&amp;#XA0;List of ejabberd Commands&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc69&quot;&gt;4.2.2&amp;#XA0;&amp;#XA0;Restrict Execution with AccessCommands&lt;/A&gt;
+&lt;A HREF=&quot;#htoc70&quot;&gt;4.2.1&amp;#XA0;&amp;#XA0;List of ejabberd Commands&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc71&quot;&gt;4.2.2&amp;#XA0;&amp;#XA0;Restrict Execution with AccessCommands&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc70&quot;&gt;4.3&amp;#XA0;&amp;#XA0;Web Admin&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc71&quot;&gt;4.4&amp;#XA0;&amp;#XA0;Ad-hoc Commands&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc72&quot;&gt;4.5&amp;#XA0;&amp;#XA0;Change Computer Hostname&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc72&quot;&gt;4.3&amp;#XA0;&amp;#XA0;Web Admin&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc73&quot;&gt;4.4&amp;#XA0;&amp;#XA0;Ad-hoc Commands&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc74&quot;&gt;4.5&amp;#XA0;&amp;#XA0;Change Computer Hostname&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc73&quot;&gt;Chapter&amp;#XA0;5&amp;#XA0;&amp;#XA0;Securing &lt;TT&gt;ejabberd&lt;/TT&gt;&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc75&quot;&gt;Chapter&amp;#XA0;5&amp;#XA0;&amp;#XA0;Securing &lt;TT&gt;ejabberd&lt;/TT&gt;&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc74&quot;&gt;5.1&amp;#XA0;&amp;#XA0;Firewall Settings&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc75&quot;&gt;5.2&amp;#XA0;&amp;#XA0;epmd&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc76&quot;&gt;5.3&amp;#XA0;&amp;#XA0;Erlang Cookie&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc77&quot;&gt;5.4&amp;#XA0;&amp;#XA0;Erlang Node Name&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc78&quot;&gt;5.5&amp;#XA0;&amp;#XA0;Securing Sensible Files&lt;/A&gt;
+&lt;A HREF=&quot;#htoc76&quot;&gt;5.1&amp;#XA0;&amp;#XA0;Firewall Settings&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc77&quot;&gt;5.2&amp;#XA0;&amp;#XA0;epmd&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc78&quot;&gt;5.3&amp;#XA0;&amp;#XA0;Erlang Cookie&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc79&quot;&gt;5.4&amp;#XA0;&amp;#XA0;Erlang Node Name&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc80&quot;&gt;5.5&amp;#XA0;&amp;#XA0;Securing Sensible Files&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc79&quot;&gt;Chapter&amp;#XA0;6&amp;#XA0;&amp;#XA0;Clustering&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc81&quot;&gt;Chapter&amp;#XA0;6&amp;#XA0;&amp;#XA0;Clustering&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc80&quot;&gt;6.1&amp;#XA0;&amp;#XA0;How it Works&lt;/A&gt;
+&lt;A HREF=&quot;#htoc82&quot;&gt;6.1&amp;#XA0;&amp;#XA0;How it Works&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc81&quot;&gt;6.1.1&amp;#XA0;&amp;#XA0;Router&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc82&quot;&gt;6.1.2&amp;#XA0;&amp;#XA0;Local Router&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc83&quot;&gt;6.1.3&amp;#XA0;&amp;#XA0;Session Manager&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc84&quot;&gt;6.1.4&amp;#XA0;&amp;#XA0;s2s Manager&lt;/A&gt;
+&lt;A HREF=&quot;#htoc83&quot;&gt;6.1.1&amp;#XA0;&amp;#XA0;Router&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc84&quot;&gt;6.1.2&amp;#XA0;&amp;#XA0;Local Router&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc85&quot;&gt;6.1.3&amp;#XA0;&amp;#XA0;Session Manager&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc86&quot;&gt;6.1.4&amp;#XA0;&amp;#XA0;s2s Manager&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc85&quot;&gt;6.2&amp;#XA0;&amp;#XA0;Clustering Setup&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc86&quot;&gt;6.3&amp;#XA0;&amp;#XA0;Service Load-Balancing&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc87&quot;&gt;6.2&amp;#XA0;&amp;#XA0;Clustering Setup&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc88&quot;&gt;6.3&amp;#XA0;&amp;#XA0;Service Load-Balancing&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc87&quot;&gt;6.3.1&amp;#XA0;&amp;#XA0;Components Load-Balancing&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc88&quot;&gt;6.3.2&amp;#XA0;&amp;#XA0;Domain Load-Balancing Algorithm&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc89&quot;&gt;6.3.3&amp;#XA0;&amp;#XA0;Load-Balancing Buckets&lt;/A&gt;
+&lt;A HREF=&quot;#htoc89&quot;&gt;6.3.1&amp;#XA0;&amp;#XA0;Components Load-Balancing&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc90&quot;&gt;6.3.2&amp;#XA0;&amp;#XA0;Domain Load-Balancing Algorithm&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc91&quot;&gt;6.3.3&amp;#XA0;&amp;#XA0;Load-Balancing Buckets&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc90&quot;&gt;Chapter&amp;#XA0;7&amp;#XA0;&amp;#XA0;Debugging&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc92&quot;&gt;Chapter&amp;#XA0;7&amp;#XA0;&amp;#XA0;Debugging&lt;/A&gt;
 &lt;UL CLASS=&quot;toc&quot;&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;
-&lt;A HREF=&quot;#htoc91&quot;&gt;7.1&amp;#XA0;&amp;#XA0;Log Files&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc92&quot;&gt;7.2&amp;#XA0;&amp;#XA0;Debug Console&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc93&quot;&gt;7.3&amp;#XA0;&amp;#XA0;Watchdog Alerts&lt;/A&gt;
+&lt;A HREF=&quot;#htoc93&quot;&gt;7.1&amp;#XA0;&amp;#XA0;Log Files&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc94&quot;&gt;7.2&amp;#XA0;&amp;#XA0;Debug Console&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc95&quot;&gt;7.3&amp;#XA0;&amp;#XA0;Watchdog Alerts&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc94&quot;&gt;Appendix&amp;#XA0;A&amp;#XA0;&amp;#XA0;Internationalization and Localization&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc95&quot;&gt;Appendix&amp;#XA0;B&amp;#XA0;&amp;#XA0;Release Notes&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc96&quot;&gt;Appendix&amp;#XA0;C&amp;#XA0;&amp;#XA0;Acknowledgements&lt;/A&gt;
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc97&quot;&gt;Appendix&amp;#XA0;D&amp;#XA0;&amp;#XA0;Copyright Information&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc96&quot;&gt;Appendix&amp;#XA0;A&amp;#XA0;&amp;#XA0;Internationalization and Localization&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc97&quot;&gt;Appendix&amp;#XA0;B&amp;#XA0;&amp;#XA0;Release Notes&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc98&quot;&gt;Appendix&amp;#XA0;C&amp;#XA0;&amp;#XA0;Acknowledgements&lt;/A&gt;
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-toc&quot;&gt;&lt;A HREF=&quot;#htoc99&quot;&gt;Appendix&amp;#XA0;D&amp;#XA0;&amp;#XA0;Copyright Information&lt;/A&gt;
 &lt;/LI&gt;&lt;/UL&gt;&lt;!--TOC chapter Introduction--&gt;
 &lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc1&quot;&gt;Chapter&amp;#XA0;1&lt;/A&gt;&amp;#XA0;&amp;#XA0;Introduction&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt;
-&lt;A NAME=&quot;intro&quot;&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is a free and open source instant messaging server written in &lt;A HREF=&quot;http://www.erlang.org/&quot;&gt;Erlang&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is designed to be a rock-solid and feature rich XMPP server.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.&lt;/P&gt;&lt;!--TOC section Key Features--&gt;
+&lt;A NAME=&quot;intro&quot;&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is a free and open source instant messaging server written in &lt;A HREF=&quot;http://www.erlang.org/&quot;&gt;Erlang/OTP&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is designed to be a rock-solid and feature rich XMPP server.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is suitable for small deployments, whether they need to be scalable or not, as well as extremely big deployments.&lt;/P&gt;&lt;!--TOC section Key Features--&gt;
 &lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc2&quot;&gt;1.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;Key Features&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt;
 &lt;A NAME=&quot;keyfeatures&quot;&gt;&lt;/A&gt;
 &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is:
@@ -268,12 +270,12 @@ Internal Authentication.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Others
 &lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Support for virtual hosting.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Compressing XML streams with Stream Compression (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0138.html&quot;&gt;XEP-0138&lt;/A&gt;).
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Statistics via Statistics Gathering (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0039.html&quot;&gt;XEP-0039&lt;/A&gt;).
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Compressing XML streams with Stream Compression (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0138.html&quot;&gt;XEP-0138&lt;/A&gt;).
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Statistics via Statistics Gathering (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0039.html&quot;&gt;XEP-0039&lt;/A&gt;).
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;IPv6 support both for c2s and s2s connections.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0045.html&quot;&gt;Multi-User Chat&lt;/A&gt; module with support for clustering and HTML logging. &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Users Directory based on users vCards.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0060.html&quot;&gt;Publish-Subscribe&lt;/A&gt; component with support for &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0163.html&quot;&gt;Personal Eventing via Pubsub&lt;/A&gt;.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Support for web clients: &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0025.html&quot;&gt;HTTP Polling&lt;/A&gt; and &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0206.html&quot;&gt;HTTP Binding (BOSH)&lt;/A&gt; services.
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0045.html&quot;&gt;Multi-User Chat&lt;/A&gt; module with support for clustering and HTML logging. &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Users Directory based on users vCards.
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0060.html&quot;&gt;Publish-Subscribe&lt;/A&gt; component with support for &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0163.html&quot;&gt;Personal Eventing via Pubsub&lt;/A&gt;.
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Support for web clients: &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0025.html&quot;&gt;HTTP Polling&lt;/A&gt; and &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0206.html&quot;&gt;HTTP Binding (BOSH)&lt;/A&gt; services.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;IRC transport.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Component support: interface with networks such as AIM, ICQ and MSN installing special tranports.
 &lt;/LI&gt;&lt;/UL&gt;
@@ -340,12 +342,13 @@ GNU Make
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Libexpat 1.95 or higher
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Erlang/OTP R10B-9 or higher. The recommended version is R12B-5. Support for R13 is experimental.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;OpenSSL 0.9.6 or higher, for STARTTLS, SASL and SSL encryption. Optional, highly recommended.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Zlib 1.2.3 or higher, for Stream Compression support (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0138.html&quot;&gt;XEP-0138&lt;/A&gt;). Optional.
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Zlib 1.2.3 or higher, for Stream Compression support (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0138.html&quot;&gt;XEP-0138&lt;/A&gt;). Optional.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Erlang mysql library. Optional. For MySQL authentication or storage. See section &lt;A HREF=&quot;#compilemysql&quot;&gt;3.2.1&lt;/A&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Erlang pgsql library. Optional. For PostgreSQL authentication or storage. See section &lt;A HREF=&quot;#compilepgsql&quot;&gt;3.2.3&lt;/A&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;PAM library. Optional. For Pluggable Authentication Modules (PAM). See section &lt;A HREF=&quot;#pam&quot;&gt;3.1.4&lt;/A&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;GNU Iconv 1.8 or higher, for the IRC Transport (mod_irc). Optional. Not needed on systems with GNU Libc. See section &lt;A HREF=&quot;#modirc&quot;&gt;3.3.8&lt;/A&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;ImageMagick&amp;#X2019;s Convert program. Optional. For CAPTCHA challenges. See section &lt;A HREF=&quot;#captcha&quot;&gt;3.1.8&lt;/A&gt;.
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;exmpp 0.9.1 or higher. Optional. For import/export user data with &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0227.html&quot;&gt;XEP-0227&lt;/A&gt; XML files.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;download&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Download Source Code--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc10&quot;&gt;2.4.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#download&quot;&gt;Download Source Code&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;download&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Released versions of &lt;TT&gt;ejabberd&lt;/TT&gt; are available in the ProcessOne &lt;TT&gt;ejabberd&lt;/TT&gt; downloads page:
@@ -501,7 +504,7 @@ There are two ways to register a Jabber account:
 &lt;OL CLASS=&quot;enumerate&quot; type=a&gt;&lt;LI CLASS=&quot;li-enumerate&quot;&gt;
 Using &lt;TT&gt;ejabberdctl&lt;/TT&gt; (see section&amp;#XA0;&lt;A HREF=&quot;#ejabberdctl&quot;&gt;4.1&lt;/A&gt;):
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;ejabberdctl register admin1 example.org FgT5bk3
-&lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-enumerate&quot;&gt;Using a Jabber client and In-Band Registration (see section&amp;#XA0;&lt;A HREF=&quot;#modregister&quot;&gt;3.3.17&lt;/A&gt;).
+&lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-enumerate&quot;&gt;Using a Jabber client and In-Band Registration (see section&amp;#XA0;&lt;A HREF=&quot;#modregister&quot;&gt;3.3.18&lt;/A&gt;).
 &lt;/LI&gt;&lt;/OL&gt;
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-enumerate&quot;&gt;Edit the &lt;TT&gt;ejabberd&lt;/TT&gt; configuration file to give administration rights to the Jabber account you created:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, admins, {user, &quot;admin1&quot;, &quot;example.org&quot;}}.
@@ -535,7 +538,7 @@ edit the configuration file, or remove all its content.&lt;/P&gt;&lt;P&gt;The configuration
 the name of an option, and any further elements are that option&amp;#X2019;s values. If the
 configuration file do not contain for instance the &amp;#X2018;hosts&amp;#X2019; option, the old
 host name(s) stored in the database will be used.&lt;/P&gt;&lt;P&gt;You can override the old values stored in the database by adding next lines to
-the configuration file:
+the beginning of the configuration file:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;override_global.
 override_local.
 override_acls.
@@ -544,22 +547,18 @@ cluster), local options (which are specific for this particular &lt;TT&gt;ejabberd&lt;/TT
 and ACLs will be removed before new ones are added.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;hostnames&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Host Names--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc21&quot;&gt;3.1.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#hostnames&quot;&gt;Host Names&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;hostnames&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;hosts&lt;/TT&gt; defines a list containing one or more domains that
-&lt;TT&gt;ejabberd&lt;/TT&gt; will serve.&lt;/P&gt;&lt;P&gt;Examples:
+&lt;TT&gt;ejabberd&lt;/TT&gt; will serve.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{hosts, [HostName, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Serving one domain:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{hosts, [&quot;example.org&quot;]}.
-&lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Serving one domain, and backwards compatible with older &lt;TT&gt;ejabberd&lt;/TT&gt;
-versions:
-&lt;PRE CLASS=&quot;verbatim&quot;&gt;{host, &quot;example.org&quot;}.
-&lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Serving two domains:
-&lt;PRE CLASS=&quot;verbatim&quot;&gt;{hosts, [&quot;example.net&quot;, &quot;example.com&quot;]}.
+&lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Serving three domains:
+&lt;PRE CLASS=&quot;verbatim&quot;&gt;{hosts, [&quot;example.net&quot;, &quot;example.com&quot;, &quot;jabber.somesite.org&quot;]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;virtualhost&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Virtual Hosting--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc22&quot;&gt;3.1.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#virtualhost&quot;&gt;Virtual Hosting&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;virtualhost&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Options can be defined separately for every virtual host using the
-&lt;TT&gt;host_config&lt;/TT&gt; option. It has the following
-syntax:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{host_config, &amp;lt;hostname&amp;gt;, [&amp;lt;option&amp;gt;, &amp;lt;option&amp;gt;, ...]}.
-&lt;/PRE&gt;&lt;P&gt;Examples:
+&lt;TT&gt;host_config&lt;/TT&gt; option.&lt;/P&gt;&lt;P&gt;The syntax is: 
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{host_config, HostName, [Option, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Domain &lt;TT&gt;example.net&lt;/TT&gt; is using the internal authentication method while
 domain &lt;TT&gt;example.com&lt;/TT&gt; is using the LDAP server running on the
@@ -587,11 +586,10 @@ while domain &lt;TT&gt;example.com&lt;/TT&gt; is using the LDAP servers running on the domai
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;To define specific ejabberd modules in a virtual host,
 you can define the global &lt;TT&gt;modules&lt;/TT&gt; option with the common modules,
 and later add specific modules to certain virtual hosts.
-To accomplish that, instead of defining each option in &lt;TT&gt;host_config&lt;/TT&gt; with the syntax
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{&amp;lt;option-name&amp;gt;, &amp;lt;option-value&amp;gt;}
-&lt;/PRE&gt;&lt;P&gt;use this syntax:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{{add, &amp;lt;option-name&amp;gt;}, &amp;lt;option-value&amp;gt;}
-&lt;/PRE&gt;&lt;P&gt;In this example three virtual hosts have some similar modules, but there are also
+To accomplish that, instead of defining each option in &lt;TT&gt;host_config&lt;/TT&gt; with the general syntax
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{OptionName, OptionValue}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;
+use this syntax:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{{add, OptionName}, OptionValue}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;In this example three virtual hosts have some similar modules, but there are also
 other different modules for some specific virtual hosts:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;%% This ejabberd server has three vhosts:
 {hosts, [&quot;one.example.org&quot;, &quot;two.example.org&quot;, &quot;three.example.org&quot;]}.
@@ -627,31 +625,25 @@ other different modules for some specific virtual hosts:
  ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;listened&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Listening Ports--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc23&quot;&gt;3.1.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#listened&quot;&gt;Listening Ports&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;listened&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;listen&lt;/TT&gt; defines for which addresses and ports &lt;TT&gt;ejabberd&lt;/TT&gt;
+&lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;listen&lt;/TT&gt; defines for which ports, addresses and network protocols &lt;TT&gt;ejabberd&lt;/TT&gt;
 will listen and what services will be run on them. Each element of the list is a
 tuple with the following elements:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
-Port number. Optionally also the IP address.
+Port number. Optionally also the IP address and/or a transport protocol.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Listening module that serves this port.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Options for the TCP socket and for the listening module.
-&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;With the basic syntax the ports will listen on all IPv4 network addresses:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{listen, [
-          {&amp;lt;port-number&amp;gt;, &amp;lt;module&amp;gt;, [&amp;lt;options&amp;gt;]},
-          {&amp;lt;port-number&amp;gt;, &amp;lt;module&amp;gt;, [&amp;lt;options&amp;gt;]},
-          ...
-          {&amp;lt;port-number&amp;gt;, &amp;lt;module&amp;gt;, [&amp;lt;options&amp;gt;]}
-         ]}.
-&lt;/PRE&gt;&lt;P&gt;It is possible to specify the IP address for a port using the full syntax:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;          {{&amp;lt;port-number&amp;gt;, &amp;lt;ip-address&amp;gt;}, &amp;lt;module&amp;gt;, [&amp;lt;options&amp;gt;]}
-&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;listened-port&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Port Number and IP Address--&gt;
-&lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#listened-port&quot;&gt;Port Number and IP Address&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;listened-port&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The port number defines which port to listen for incoming connections.
+&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The option syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{listen, [Listener, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;To define a listener there are several syntax.
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{PortNumber, Module, [Option, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{{PortNumber, IPaddress}, Module, [Option, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{{PortNumber, TransportProtocol}, Module, [Option, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{{PortNumber, IPaddress, TransportProtocol}, Module, [Option, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;listened-port&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Port Number, IP Address and Transport Protocol--&gt;
+&lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#listened-port&quot;&gt;Port Number, IP Address and Transport Protocol&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;listened-port&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The port number defines which port to listen for incoming connections.
 It can be a Jabber/XMPP standard port 
 (see section &lt;A HREF=&quot;#firewall&quot;&gt;5.1&lt;/A&gt;) or any other valid port number.&lt;/P&gt;&lt;P&gt;The IP address can be represented with a string
 or an Erlang tuple with decimal or hexadecimal numbers.
 The socket will listen only in that network interface.
 It is possible to specify a generic address,
 so &lt;TT&gt;ejabberd&lt;/TT&gt; will listen in all addresses.
-Depending in the type of the IP address, IPv4 or IPv6 will be used.&lt;/P&gt;&lt;P&gt;Some example values for IP address:
+Depending in the type of the IP address, IPv4 or IPv6 will be used.
+When not specified the IP address, it will listen on all IPv4 network addresses.&lt;/P&gt;&lt;P&gt;Some example values for IP address:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 &lt;CODE&gt;&quot;0.0.0.0&quot;&lt;/CODE&gt; to listen in all IPv4 network interfaces. This is the default value when no IP is specified.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;CODE&gt;&quot;::&quot;&lt;/CODE&gt; to listen in all IPv6 network interfaces
@@ -660,7 +652,8 @@ Depending in the type of the IP address, IPv4 or IPv6 will be used.&lt;/P&gt;&lt;P&gt;Some e
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;CODE&gt;{10, 11, 12, 13}&lt;/CODE&gt; is the IPv4 address &lt;CODE&gt;10.11.12.13&lt;/CODE&gt;
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;CODE&gt;{0, 0, 0, 0, 0, 65535, 32512, 1}&lt;/CODE&gt; is the IPv6 address &lt;CODE&gt;::FFFF:127.0.0.1/128&lt;/CODE&gt;
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;CODE&gt;{16#fdca, 16#8ab6, 16#a243, 16#75ef, 0, 0, 0, 1}&lt;/CODE&gt; is the IPv6 address &lt;CODE&gt;FDCA:8AB6:A243:75EF::1/128&lt;/CODE&gt;
-&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;listened-module&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Listening Module--&gt;
+&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The transport protocol can be &lt;TT&gt;tcp&lt;/TT&gt; or &lt;TT&gt;udp&lt;/TT&gt;.
+Default is &lt;TT&gt;tcp&lt;/TT&gt;.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;listened-module&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Listening Module--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#listened-module&quot;&gt;Listening Module&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;listened-module&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;
 The available modules, their purpose and the options allowed by each one are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
@@ -675,9 +668,13 @@ Handles incoming s2s connections.&lt;BR&gt;
  Options: &lt;TT&gt;max_stanza_size&lt;/TT&gt;
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ejabberd_service&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Interacts with an &lt;A HREF=&quot;http://www.ejabberd.im/tutorials-transports&quot;&gt;external component&lt;/A&gt;
-(as defined in the Jabber Component Protocol (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0114.html&quot;&gt;XEP-0114&lt;/A&gt;).&lt;BR&gt;
+(as defined in the Jabber Component Protocol (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0114.html&quot;&gt;XEP-0114&lt;/A&gt;).&lt;BR&gt;
  Options: &lt;TT&gt;access&lt;/TT&gt;, &lt;TT&gt;hosts&lt;/TT&gt;,
 &lt;TT&gt;shaper&lt;/TT&gt;, &lt;TT&gt;service_check_from&lt;/TT&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ejabberd_stun&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+Handles STUN Binding requests as defined in
+&lt;A HREF=&quot;http://tools.ietf.org/html/rfc5389&quot;&gt;RFC 5389&lt;/A&gt;.&lt;BR&gt;
+ Options: &lt;TT&gt;certfile&lt;/TT&gt;
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ejabberd_http&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Handles incoming HTTP connections.&lt;BR&gt;
  Options: &lt;TT&gt;captcha&lt;/TT&gt;, &lt;TT&gt;certfile&lt;/TT&gt;, &lt;TT&gt;http_bind&lt;/TT&gt;, &lt;TT&gt;http_poll&lt;/TT&gt;,
@@ -685,19 +682,19 @@ Handles incoming HTTP connections.&lt;BR&gt;
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;listened-options&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Options--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#listened-options&quot;&gt;Options&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;listened-options&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;This is a detailed description of each option allowed by the listening modules:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;{access, &amp;lt;access rule&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option defines
+&lt;B&gt;&lt;TT&gt;{access, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option defines
 access to the port. The default value is &lt;TT&gt;all&lt;/TT&gt;.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{certfile, Path}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Full path to a file containing the default SSL certificate.
 To define a certificate file specific for a given domain, use the global option &lt;TT&gt;domain_certfile&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;service_check_from&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{service_check_from, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This option can be used with &lt;TT&gt;ejabberd_service&lt;/TT&gt; only. It is
 used to disable control on the from field on packets send by an
 external components. The option can be either &lt;TT&gt;true&lt;/TT&gt; or
-&lt;TT&gt;false&lt;/TT&gt;. The default value is &lt;TT&gt;true&lt;/TT&gt; which conforms to &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0114.html&quot;&gt;XEP-0114&lt;/A&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{hosts, [Hostnames], [HostOptions]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;TT&gt;false&lt;/TT&gt;. The default value is &lt;TT&gt;true&lt;/TT&gt; which conforms to &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0114.html&quot;&gt;XEP-0114&lt;/A&gt;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{hosts, [Hostname, ...], [HostOption, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 The external Jabber component that connects to this &lt;TT&gt;ejabberd_service&lt;/TT&gt;
 can serve one or more hostnames.
-In &lt;TT&gt;HostOptions&lt;/TT&gt; you can define options for the component;
+As &lt;TT&gt;HostOption&lt;/TT&gt; you can define options for the component;
 currently the only allowed option is the password required to the component
 when attempt to connect to ejabberd: &lt;TT&gt;{password, Secret}&lt;/TT&gt;.
 Note that you cannot define in a single &lt;TT&gt;ejabberd_service&lt;/TT&gt; components of
@@ -706,7 +703,7 @@ as seen in an example below.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;captcha&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 Simple web page that allows a user to fill a CAPTCHA challenge (see section &lt;A HREF=&quot;#captcha&quot;&gt;3.1.8&lt;/A&gt;).
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;http_bind&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
-This option enables HTTP Binding (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0124.html&quot;&gt;XEP-0124&lt;/A&gt; and &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0206.html&quot;&gt;XEP-0206&lt;/A&gt;) support. HTTP Bind
+This option enables HTTP Binding (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0124.html&quot;&gt;XEP-0124&lt;/A&gt; and &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0206.html&quot;&gt;XEP-0206&lt;/A&gt;) support. HTTP Bind
 enables access via HTTP requests to &lt;TT&gt;ejabberd&lt;/TT&gt; from behind firewalls which
 do not allow outgoing sockets on port 5222.&lt;P&gt;Remember that you must also install and enable the module mod_http_bind.&lt;/P&gt;&lt;P&gt;If HTTP Bind is enabled, it will be available at
 &lt;CODE&gt;http://server:port/http-bind/&lt;/CODE&gt;. Be aware that support for HTTP Bind
@@ -717,7 +714,7 @@ interesting to host a web-based Jabber client such as
 &lt;A HREF=&quot;http://www.ejabberd.im/jwchat-localserver&quot;&gt;embedded local web server&lt;/A&gt;
 or &lt;A HREF=&quot;http://www.ejabberd.im/jwchat-apache&quot;&gt;Apache&lt;/A&gt;).
 &lt;/P&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;http_poll&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
-This option enables HTTP Polling (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0025.html&quot;&gt;XEP-0025&lt;/A&gt;) support. HTTP Polling
+This option enables HTTP Polling (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0025.html&quot;&gt;XEP-0025&lt;/A&gt;) support. HTTP Polling
 enables access via HTTP requests to &lt;TT&gt;ejabberd&lt;/TT&gt; from behind firewalls which
 do not allow outgoing sockets on port 5222.&lt;P&gt;If HTTP Polling is enabled, it will be available at
 &lt;CODE&gt;http://server:port/http-poll/&lt;/CODE&gt;. Be aware that support for HTTP Polling
@@ -736,17 +733,17 @@ value is &lt;TT&gt;infinity&lt;/TT&gt;. Recommended values are 65536 for c2s
 connections and 131072 for s2s connections. s2s max stanza size
 must always much higher than c2s limit. Change this value with
 extreme care as it can cause unwanted disconnect if set too low.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{request_handlers, [{Path, Module}]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; To define one or several handlers that will serve HTTP requests.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{request_handlers, [ {Path, Module}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; To define one or several handlers that will serve HTTP requests.
 The Path is a list of strings; so the URIs that start with that Path will be served by Module.
 For example, if you want &lt;TT&gt;mod_foo&lt;/TT&gt; to serve the URIs that start with &lt;TT&gt;/a/b/&lt;/TT&gt;,
 and you also want &lt;TT&gt;mod_http_bind&lt;/TT&gt; to serve the URIs &lt;TT&gt;/http-bind/&lt;/TT&gt;,
 use this option: &lt;TT&gt;{request_handlers, [{[&quot;a&quot;, &quot;b&quot;], mod_foo}, {[&quot;http-bind&quot;], mod_http_bind}]}&lt;/TT&gt;
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{service_check_from, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 By enabling this option, &lt;TT&gt;ejabberd&lt;/TT&gt; allows the component to send packets with any arbitrary domain in the &amp;#X2019;from&amp;#X2019; attribute.
-Note that &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0114.html&quot;&gt;XEP-0114&lt;/A&gt; requires that the domain must match the hostname of the component.
+Note that &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0114.html&quot;&gt;XEP-0114&lt;/A&gt; requires that the domain must match the hostname of the component.
 Only enable this option if you are completely sure you need to enable it.
 Default value: false.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shaper, &amp;lt;access rule&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option defines a
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shaper, none|ShaperName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option defines a
 shaper for the port (see section&amp;#XA0;&lt;A HREF=&quot;#shapers&quot;&gt;3.1.6&lt;/A&gt;). The default value
 is &lt;TT&gt;none&lt;/TT&gt;.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;starttls&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option
@@ -764,7 +761,7 @@ This was the traditional encryption method in the early Jabber software,
 commonly on port 5223 for client-to-server communications.
 But this method is nowadays deprecated and not recommended.
 The preferable encryption method is STARTTLS on port 5222, as defined 
-&lt;A HREF=&quot;http://www.xmpp.org/specs/rfc3920.html#tls&quot;&gt;RFC 3920: XMPP Core&lt;/A&gt;,
+&lt;A HREF=&quot;http://xmpp.org/specs/rfc3920.html#tls&quot;&gt;RFC 3920: XMPP Core&lt;/A&gt;,
 which can be enabled in &lt;TT&gt;ejabberd&lt;/TT&gt; with the option &lt;TT&gt;starttls&lt;/TT&gt;.
 If this option is set, you should also set the &lt;TT&gt;certfile&lt;/TT&gt; option.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;web_admin&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option
@@ -773,7 +770,7 @@ at &lt;CODE&gt;http://server:port/admin/&lt;/CODE&gt;. Login and password are the username a
 password of one of the registered users who are granted access by the
 &amp;#X2018;configure&amp;#X2019; access rule.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;zlib&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This
-option specifies that Zlib stream compression (as defined in &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0138.html&quot;&gt;XEP-0138&lt;/A&gt;)
+option specifies that Zlib stream compression (as defined in &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0138.html&quot;&gt;XEP-0138&lt;/A&gt;)
 is available on connections to the port. Client connections cannot use
 stream compression and stream encryption simultaneously. Hence, if you
 specify both &lt;TT&gt;starttls&lt;/TT&gt; (or &lt;TT&gt;tls&lt;/TT&gt;) and &lt;TT&gt;zlib&lt;/TT&gt;, the latter
@@ -791,6 +788,10 @@ Full path to the file containing the SSL certificate for a specific domain.
 Specify which address families to try, in what order, and connect timeout in milliseconds.
 By default it first tries connecting with IPv4, if that fails it tries using IPv6,
 with a timeout of 10000 milliseconds.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{s2s_dns_options, [ {Property, Value}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+Define properties to use for DNS resolving.
+Allowed Properties are: &lt;TT&gt;timeout&lt;/TT&gt; in seconds which default value is &lt;TT&gt;10&lt;/TT&gt;
+and &lt;TT&gt;retries&lt;/TT&gt; which default value is &lt;TT&gt;2&lt;/TT&gt;.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{s2s_default_policy, allow|deny}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 The default policy for incoming and outgoing s2s connections to other Jabber servers.
 The default value is &lt;TT&gt;allow&lt;/TT&gt;.
@@ -810,6 +811,7 @@ However, the c2s and s2s connections to the domain &lt;TT&gt;example.com&lt;/TT&gt; use the
 and also allows plain connections for old clients.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Port 5223 listens for c2s connections with the old SSL.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Port 5269 listens for s2s connections with STARTTLS. The socket is set for IPv6 instead of IPv4.
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Port 3478 listens for STUN requests over UDP.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Port 5280 listens for HTTP requests, and serves the HTTP Poll service.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Port 5281 listens for HTTP requests, and serves the Web Admin using HTTPS as explained in
 section&amp;#XA0;&lt;A HREF=&quot;#webadmin&quot;&gt;4.3&lt;/A&gt;. The socket only listens connections to the IP address 127.0.0.1.
@@ -832,6 +834,7 @@ section&amp;#XA0;&lt;A HREF=&quot;#webadmin&quot;&gt;4.3&lt;/A&gt;. The socket only listens connections to
                                    {shaper, s2s_shaper},
                                    {max_stanza_size, 131072}
                                   ]},
+  {{3478, udp}, ejabberd_stun, []},
   {5280, ejabberd_http, [
                          http_poll
                         ]},
@@ -966,10 +969,9 @@ you have to make the transports log and do XDB by themselves:
   &amp;lt;/xdb&amp;gt;
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;auth&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Authentication--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc24&quot;&gt;3.1.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#auth&quot;&gt;Authentication&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;auth&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;auth_method&lt;/TT&gt; defines the authentication method that is used
-for user authentication:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{auth_method, [&amp;lt;method&amp;gt;]}.
-&lt;/PRE&gt;&lt;P&gt;The following authentication methods are supported by &lt;TT&gt;ejabberd&lt;/TT&gt;:
+&lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;auth_method&lt;/TT&gt; defines the authentication methods that are used
+for user authentication. The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{auth_method, [Method, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The following authentication methods are supported by &lt;TT&gt;ejabberd&lt;/TT&gt;:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 internal (default) &amp;#X2014; See section&amp;#XA0;&lt;A HREF=&quot;#internalauth&quot;&gt;3.1.4&lt;/A&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;external &amp;#X2014; There are &lt;A HREF=&quot;http://www.ejabberd.im/extauth&quot;&gt;some
@@ -981,10 +983,8 @@ example authentication scripts&lt;/A&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;pam &amp;#X2014; See section&amp;#XA0;&lt;A HREF=&quot;#pam&quot;&gt;3.1.4&lt;/A&gt;.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Account creation is only supported by internal and odbc methods.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;internalauth&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Internal--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#internalauth&quot;&gt;Internal&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;internalauth&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; uses its internal Mnesia database as the default authentication method.&lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
-&lt;TT&gt;auth_method&lt;/TT&gt;: The value &lt;TT&gt;internal&lt;/TT&gt; will enable the internal
-authentication method.
-&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Examples:
+&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; uses its internal Mnesia database as the default authentication method.
+The value &lt;TT&gt;internal&lt;/TT&gt; will enable the internal authentication method.&lt;/P&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 To use internal authentication on &lt;TT&gt;example.org&lt;/TT&gt; and LDAP
 authentication on &lt;TT&gt;example.net&lt;/TT&gt;:
@@ -994,25 +994,23 @@ authentication on &lt;TT&gt;example.net&lt;/TT&gt;:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{auth_method, internal}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;saslanonymous&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection SASL Anonymous and Anonymous Login--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#saslanonymous&quot;&gt;SASL Anonymous and Anonymous Login&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;saslanonymous&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;The anonymous authentication method can be configured with the following
+&lt;/P&gt;&lt;P&gt;The value &lt;TT&gt;anonymous&lt;/TT&gt; will enable the internal authentication method.&lt;/P&gt;&lt;P&gt;The anonymous authentication method can be configured with the following
 options. Remember that you can use the &lt;TT&gt;host_config&lt;/TT&gt; option to set virtual
 host specific options (see section&amp;#XA0;&lt;A HREF=&quot;#virtualhost&quot;&gt;3.1.2&lt;/A&gt;). Note that there also
 is a detailed tutorial regarding &lt;A HREF=&quot;http://support.process-one.net/doc/display/MESSENGER/Anonymous+users+support&quot;&gt;SASL
-Anonymous and anonymous login configuration&lt;/A&gt;.&lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
-&lt;TT&gt;auth_method&lt;/TT&gt;: The value &lt;TT&gt;anonymous&lt;/TT&gt; will enable the anonymous
-authentication method.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;TT&gt;allow_multiple_connections&lt;/TT&gt;: This value for this option can be
-either &lt;TT&gt;true&lt;/TT&gt; or &lt;TT&gt;false&lt;/TT&gt; and is only used when the anonymous mode is
+Anonymous and anonymous login configuration&lt;/A&gt;.&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
+&lt;B&gt;&lt;TT&gt;{allow_multiple_connections, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option is only used
+when the anonymous mode is
 enabled. Setting it to &lt;TT&gt;true&lt;/TT&gt; means that the same username can be taken
 multiple times in anonymous login mode if different resource are used to
 connect. This option is only useful in very special occasions. The default
 value is &lt;TT&gt;false&lt;/TT&gt;.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;TT&gt;anonymous_protocol&lt;/TT&gt;: This option can take three values:
-&lt;TT&gt;sasl_anon&lt;/TT&gt;, &lt;TT&gt;login_anon&lt;/TT&gt; or &lt;TT&gt;both&lt;/TT&gt;. &lt;TT&gt;sasl_anon&lt;/TT&gt; means
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{anonymous_protocol, sasl_anon | login_anon | both}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;TT&gt;sasl_anon&lt;/TT&gt; means
 that the SASL Anonymous method will be used. &lt;TT&gt;login_anon&lt;/TT&gt; means that the
 anonymous login method will be used. &lt;TT&gt;both&lt;/TT&gt; means that SASL Anonymous and
 login anonymous are both enabled.
-&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Those options are defined for each virtual host with the &lt;TT&gt;host_config&lt;/TT&gt;
+&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Those options are defined for each virtual host with the &lt;TT&gt;host_config&lt;/TT&gt;
 parameter (see section&amp;#XA0;&lt;A HREF=&quot;#virtualhost&quot;&gt;3.1.2&lt;/A&gt;).&lt;/P&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 To enable anonymous login on all virtual hosts:
@@ -1043,7 +1041,7 @@ PAM authentication is disabled by default, so you have to configure and compile
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;./configure --enable-pam &amp;amp;&amp;amp; make install
 &lt;/PRE&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;pam_service&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines the PAM service name.
+&lt;B&gt;&lt;TT&gt;{pam_service, Name}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines the PAM service name.
 Default is &lt;TT&gt;&quot;ejabberd&quot;&lt;/TT&gt;. Refer to the PAM documentation of your operation system
 for more information.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Example:
@@ -1085,48 +1083,47 @@ then &lt;TT&gt;/etc/nssswitch.conf&lt;/TT&gt; must be configured to use &lt;TT&gt;winbind&lt;/TT&gt; as
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#ACLDefinition&quot;&gt;ACL Definition&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ACLDefinition&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Access control in &lt;TT&gt;ejabberd&lt;/TT&gt; is performed via Access Control Lists (ACLs). The
 declarations of ACLs in the configuration file have the following syntax:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, &amp;lt;aclname&amp;gt;, {&amp;lt;acltype&amp;gt;, ...}}.
-&lt;/PRE&gt;&lt;P&gt;&lt;TT&gt;&amp;lt;acltype&amp;gt;&lt;/TT&gt; can be one of the following:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{acl, ACLName, ACLValue}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;&lt;TT&gt;ACLValue&lt;/TT&gt; can be one of the following:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 &lt;B&gt;&lt;TT&gt;all&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches all JIDs. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, all, all}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user, &amp;lt;username&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches the user with the name
-&lt;TT&gt;&amp;lt;username&amp;gt;&lt;/TT&gt; at the first virtual host. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user, Username}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches the user with the name
+&lt;TT&gt;Username&lt;/TT&gt; at the first virtual host. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, admin, {user, &quot;yozhik&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user, &amp;lt;username&amp;gt;, &amp;lt;server&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches the user with the JID
-&lt;TT&gt;&amp;lt;username&amp;gt;@&amp;lt;server&amp;gt;&lt;/TT&gt; and any resource. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user, Username, Server}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches the user with the JID
+&lt;TT&gt;Username@Server&lt;/TT&gt; and any resource. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, admin, {user, &quot;yozhik&quot;, &quot;example.org&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server, &amp;lt;server&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID from server
-&lt;TT&gt;&amp;lt;server&amp;gt;&lt;/TT&gt;. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server, Server}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID from server
+&lt;TT&gt;Server&lt;/TT&gt;. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, exampleorg, {server, &quot;example.org&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{resource, &amp;lt;resource&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID with a resource
-&lt;TT&gt;&amp;lt;resource&amp;gt;&lt;/TT&gt;. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{resource, Resource}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID with a resource
+&lt;TT&gt;Resource&lt;/TT&gt;. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, mucklres, {resource, &quot;muckl&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shared_group, &amp;lt;groupname&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any member of a Shared Roster Group with name &lt;TT&gt;&amp;lt;groupname&amp;gt;&lt;/TT&gt; in the virtual host. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shared_group, Groupname}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any member of a Shared Roster Group with name &lt;TT&gt;Groupname&lt;/TT&gt; in the virtual host. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, techgroupmembers, {shared_group, &quot;techteam&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shared_group, &amp;lt;groupname&amp;gt;, &amp;lt;server&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any member of a Shared Roster Group with name &lt;TT&gt;&amp;lt;groupname&amp;gt;&lt;/TT&gt; in the virtual host &lt;TT&gt;&amp;lt;server&amp;gt;&lt;/TT&gt;. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shared_group, Groupname, Server}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any member of a Shared Roster Group with name &lt;TT&gt;Groupname&lt;/TT&gt; in the virtual host &lt;TT&gt;Server&lt;/TT&gt;. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, techgroupmembers, {shared_group, &quot;techteam&quot;, &quot;example.org&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_regexp, &amp;lt;regexp&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any local user with a name that
-matches &lt;TT&gt;&amp;lt;regexp&amp;gt;&lt;/TT&gt; on local virtual hosts. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_regexp, Regexp}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any local user with a name that
+matches &lt;TT&gt;Regexp&lt;/TT&gt; on local virtual hosts. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, tests, {user_regexp, &quot;^test[0-9]*$&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_regexp, &amp;lt;regexp&amp;gt;, &amp;lt;server&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any user with a name
-that matches &lt;TT&gt;&amp;lt;regexp&amp;gt;&lt;/TT&gt; at server &lt;TT&gt;&amp;lt;server&amp;gt;&lt;/TT&gt;. Example:
-&lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, tests, {user_regexp, &quot;^test&quot;, &quot;example.org&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server_regexp, &amp;lt;regexp&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID from the server that
-matches &lt;TT&gt;&amp;lt;regexp&amp;gt;&lt;/TT&gt;. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_regexp, UserRegexp, Server}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any user with a name
+that matches &lt;TT&gt;Regexp&lt;/TT&gt; at server &lt;TT&gt;Server&lt;/TT&gt;. Example:
+&lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, tests, {user_Userregexp, &quot;^test&quot;, &quot;example.org&quot;}}.
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server_regexp, Regexp}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID from the server that
+matches &lt;TT&gt;Regexp&lt;/TT&gt;. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, icq, {server_regexp, &quot;^icq\\.&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{resource_regexp, &amp;lt;regexp&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID with a resource that
-matches &lt;TT&gt;&amp;lt;regexp&amp;gt;&lt;/TT&gt;. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{resource_regexp, Regexp}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID with a resource that
+matches &lt;TT&gt;Regexp&lt;/TT&gt;. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, icq, {resource_regexp, &quot;^laptop\\.&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{node_regexp, &amp;lt;user_regexp&amp;gt;, &amp;lt;server_regexp&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any user
-with a name that matches &lt;TT&gt;&amp;lt;user_regexp&amp;gt;&lt;/TT&gt; at any server that matches
-&lt;TT&gt;&amp;lt;server_regexp&amp;gt;&lt;/TT&gt;. Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{node_regexp, UserRegexp, ServerRegexp}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any user
+with a name that matches &lt;TT&gt;UserRegexp&lt;/TT&gt; at any server that matches
+&lt;TT&gt;ServerRegexp&lt;/TT&gt;. Example:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, yohzik, {node_regexp, &quot;^yohzik$&quot;, &quot;^example.(com|org)$&quot;}}.
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_glob, &amp;lt;glob&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_glob, &amp;lt;glob&amp;gt;, &amp;lt;server&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server_glob, &amp;lt;glob&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{resource_glob, &amp;lt;glob&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{node_glob, &amp;lt;user_glob&amp;gt;, &amp;lt;server_glob&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This is the same as
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_glob, Glob}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{user_glob, Glob, Server}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server_glob, Glob}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{resource_glob, Glob}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{node_glob, UserGlob, ServerGlob}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This is the same as
 above. However, it uses shell glob patterns instead of regexp. These patterns
 can have the following special characters:
 &lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
@@ -1137,19 +1134,15 @@ ranges are specified by a pair of characters separated by a &lt;TT&gt;&amp;#X2018;-&amp;#X2019
 If the first character after &lt;TT&gt;&amp;#X2018;[&amp;#X2019;&lt;/TT&gt; is a &lt;TT&gt;&amp;#X2018;!&amp;#X2019;&lt;/TT&gt;, any
 character not enclosed is matched.
 &lt;/DD&gt;&lt;/DL&gt;
-&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;The following ACLs are pre-defined:
+&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;The following &lt;TT&gt;ACLName&lt;/TT&gt; are pre-defined:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 &lt;B&gt;&lt;TT&gt;all&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches any JID.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;none&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Matches no JID.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;AccessRights&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Access Rights--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#AccessRights&quot;&gt;Access Rights&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;AccessRights&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;An entry allowing or denying access to different services looks similar to
-this:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, &amp;lt;accessname&amp;gt;, [{allow, &amp;lt;aclname&amp;gt;},
-                        {deny, &amp;lt;aclname&amp;gt;},
-                        ...
-                       ]}.
-&lt;/PRE&gt;&lt;P&gt;When a JID is checked to have access to &lt;TT&gt;&amp;lt;accessname&amp;gt;&lt;/TT&gt;, the server
+&lt;/P&gt;&lt;P&gt;An entry allowing or denying access to different services.
+The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access, AccessName, [ {allow|deny, ACLName}, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;When a JID is checked to have access to &lt;TT&gt;Accessname&lt;/TT&gt;, the server
 sequentially checks if that JID matches any of the ACLs that are named in the
 second elements of the tuples in the list. If it matches, the first element of
 the first matched tuple is returned, otherwise the value &amp;#X2018;&lt;TT&gt;deny&lt;/TT&gt;&amp;#X2019; is
@@ -1157,7 +1150,7 @@ returned.&lt;/P&gt;&lt;P&gt;Example:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, configure, [{allow, admin}]}.
 {access, something, [{deny, badmans},
                      {allow, all}]}.
-&lt;/PRE&gt;&lt;P&gt;The following access rules are pre-defined:
+&lt;/PRE&gt;&lt;P&gt;The following &lt;TT&gt;AccessName&lt;/TT&gt; are pre-defined:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 &lt;B&gt;&lt;TT&gt;all&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Always returns the value &amp;#X2018;&lt;TT&gt;allow&lt;/TT&gt;&amp;#X2019;.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;none&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Always returns the value &amp;#X2018;&lt;TT&gt;deny&lt;/TT&gt;&amp;#X2019;.
@@ -1170,35 +1163,27 @@ opened session will be disconnected. The error &lt;TT&gt;session replaced&lt;/TT&gt;
 will be sent to the disconnected session. The value for this option
 can be either a number, or &lt;TT&gt;infinity&lt;/TT&gt;. The default value is
 &lt;TT&gt;infinity&lt;/TT&gt;.&lt;/P&gt;&lt;P&gt;The syntax is:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, max_user_sessions, [{&amp;lt;maxnumber&amp;gt;, &amp;lt;aclname&amp;gt;},
-                             ...
-                            ]}.
-&lt;/PRE&gt;&lt;P&gt;Examples:
-&lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
-To limit the number of sessions per user to 10 for all users:
-&lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, max_user_sessions, [{10, all}]}.
-&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;configmaxs2sconns&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Several connections to a remote Jabber server with ACL--&gt;
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access, max_user_sessions, [ {MaxNumber, ACLName}, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;This example limits the number of sessions per user to 5 for all users, and to 10 for admins:
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, max_user_sessions, [{10, admin}, {5, all}]}.
+&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;configmaxs2sconns&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Several connections to a remote Jabber server with ACL--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#configmaxs2sconns&quot;&gt;Several connections to a remote Jabber server with ACL&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;configmaxs2sconns&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The special access &lt;TT&gt;max_s2s_connections&lt;/TT&gt; specifies how many
 simultaneus S2S connections can be established to a specific remote Jabber server.
 The default value is &lt;TT&gt;1&lt;/TT&gt;.
 There&amp;#X2019;s also available the access &lt;TT&gt;max_s2s_connections_per_node&lt;/TT&gt;.&lt;/P&gt;&lt;P&gt;The syntax is:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, max_s2s_connections, [{&amp;lt;maxnumber&amp;gt;, &amp;lt;aclname&amp;gt;},
-                               ...
-                              ]}.
-&lt;/PRE&gt;&lt;P&gt;Examples:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access, max_s2s_connections, [ {MaxNumber, ACLName}, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Allow up to 3 connections with each remote server:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;{access, max_s2s_connections, [{3, all}]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;shapers&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Shapers--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc26&quot;&gt;3.1.6&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#shapers&quot;&gt;Shapers&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;shapers&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;Shapers enable you to limit connection traffic. The syntax of
-shapers is like this:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{shaper, &amp;lt;shapername&amp;gt;, &amp;lt;kind&amp;gt;}.
-&lt;/PRE&gt;&lt;P&gt;Currently only one kind of shaper called &lt;TT&gt;maxrate&lt;/TT&gt; is available. It has the
+&lt;/P&gt;&lt;P&gt;Shapers enable you to limit connection traffic.
+The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shaper, ShaperName, Kind}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;
+Currently only one kind of shaper called &lt;TT&gt;maxrate&lt;/TT&gt; is available. It has the
 following syntax:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{maxrate, &amp;lt;rate&amp;gt;}
-&lt;/PRE&gt;&lt;P&gt;where &lt;TT&gt;&amp;lt;rate&amp;gt;&lt;/TT&gt; stands for the maximum allowed incoming rate in bytes per
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{maxrate, Rate}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;
+where &lt;TT&gt;Rate&lt;/TT&gt; stands for the maximum allowed incoming rate in bytes per
 second.
 When a connection exceeds this limit, &lt;TT&gt;ejabberd&lt;/TT&gt; stops reading from the socket
 until the average rate is again below the allowed maximum.&lt;/P&gt;&lt;P&gt;Examples:
@@ -1213,14 +1198,15 @@ To define a shaper named &amp;#X2018;&lt;TT&gt;normal&lt;/TT&gt;&amp;#X2019; with traffic speed limi
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc27&quot;&gt;3.1.7&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#language&quot;&gt;Default Language&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;language&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;language&lt;/TT&gt; defines the default language of server strings that
 can be seen by Jabber clients. If a Jabber client does not support
-&lt;TT&gt;xml:lang&lt;/TT&gt;, the specified language is used. The default value is
-&lt;TT&gt;en&lt;/TT&gt;. In order to take effect there must be a translation file
-&lt;TT&gt;&amp;lt;language&amp;gt;.msg&lt;/TT&gt; in &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s &lt;TT&gt;msgs&lt;/TT&gt; directory.&lt;/P&gt;&lt;P&gt;For example, to set Russian as default language:
+&lt;TT&gt;xml:lang&lt;/TT&gt;, the specified language is used.&lt;/P&gt;&lt;P&gt;The option syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{language, Language}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The default value is &lt;TT&gt;en&lt;/TT&gt;.
+In order to take effect there must be a translation file
+&lt;TT&gt;Language.msg&lt;/TT&gt; in &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s &lt;TT&gt;msgs&lt;/TT&gt; directory.&lt;/P&gt;&lt;P&gt;For example, to set Russian as default language:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{language, &quot;ru&quot;}.
 &lt;/PRE&gt;&lt;P&gt;Appendix &lt;A HREF=&quot;#i18ni10n&quot;&gt;A&lt;/A&gt; provides more details about internationalization and localization.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;captcha&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection CAPTCHA--&gt;
 &lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc28&quot;&gt;3.1.8&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#captcha&quot;&gt;CAPTCHA&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;captcha&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Some &lt;TT&gt;ejabberd&lt;/TT&gt; modules can be configured to require a CAPTCHA challenge on certain actions.
-If the client does not support CAPTCHA Forms (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0158.html&quot;&gt;XEP-0158&lt;/A&gt;),
+If the client does not support CAPTCHA Forms (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0158.html&quot;&gt;XEP-0158&lt;/A&gt;),
 a web link is provided so the user can fill the challenge in a web browser.&lt;/P&gt;&lt;P&gt;An example script is provided that generates the image
 using ImageMagick&amp;#X2019;s Convert program.&lt;/P&gt;&lt;P&gt;The configurable options are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
@@ -1249,21 +1235,47 @@ See section &lt;A HREF=&quot;#listened-module&quot;&gt;3.1.3&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;Example configuration:
   }
 
 ]}.
+&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;stun&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection STUN--&gt;
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc29&quot;&gt;3.1.9&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#stun&quot;&gt;STUN&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;stun&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is able to act as a stand-alone STUN server
+(&lt;A HREF=&quot;http://tools.ietf.org/html/rfc5389&quot;&gt;RFC 5389&lt;/A&gt;). Currently only Binding usage
+is supported. In that role &lt;TT&gt;ejabberd&lt;/TT&gt; helps clients with Jingle ICE (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0176.html&quot;&gt;XEP-0176&lt;/A&gt;) support to discover their external addresses and ports.&lt;/P&gt;&lt;P&gt;You should configure &lt;TT&gt;ejabberd_stun&lt;/TT&gt; listening module as described in &lt;A HREF=&quot;#listened&quot;&gt;3.1.3&lt;/A&gt; section.
+If &lt;TT&gt;certfile&lt;/TT&gt; option is defined, &lt;TT&gt;ejabberd&lt;/TT&gt; multiplexes TCP and
+TLS over TCP connections on the same port. Obviously, &lt;TT&gt;certfile&lt;/TT&gt; option
+is defined for &lt;TT&gt;tcp&lt;/TT&gt; only. Note however that TCP or TLS over TCP
+support is not required for Binding usage and is reserved for
+&lt;A HREF=&quot;http://tools.ietf.org/html/draft-ietf-behave-turn-16&quot;&gt;TURN&lt;/A&gt;
+functionality. Feel free to configure &lt;TT&gt;udp&lt;/TT&gt; transport only.&lt;/P&gt;&lt;P&gt;Example configuration:
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{listen,
+ [
+  ...
+  {{3478, udp}, ejabberd_stun, []},
+  {3478, ejabberd_stun, []},
+  {5349, ejabberd_stun, [{certfile, &quot;/etc/ejabberd/server.pem&quot;}]},
+  ...
+ ]
+}.
+&lt;/PRE&gt;&lt;P&gt;You also need to configure DNS SRV records properly so clients can easily discover a
+STUN server serving your XMPP domain. Refer to section
+&lt;A HREF=&quot;http://tools.ietf.org/html/rfc5389#section-9&quot;&gt;DNS Discovery of a Server&lt;/A&gt;
+of &lt;A HREF=&quot;http://tools.ietf.org/html/rfc5389&quot;&gt;RFC 5389&lt;/A&gt; for details.&lt;/P&gt;&lt;P&gt;Example DNS SRV configuration:
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;_stun._udp   IN SRV  0 0 3478 stun.example.com.
+_stun._tcp   IN SRV  0 0 3478 stun.example.com.
+_stuns._tcp  IN SRV  0 0 5349 stun.example.com.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;includeconfigfile&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Include Additional Configuration Files--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc29&quot;&gt;3.1.9&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#includeconfigfile&quot;&gt;Include Additional Configuration Files&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;includeconfigfile&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;include_config_file&lt;/TT&gt; in a configuration file instructs &lt;TT&gt;ejabberd&lt;/TT&gt; to include other configuration files immediately.&lt;/P&gt;&lt;P&gt;The basic usage is:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{include_config_file, &amp;lt;filename&amp;gt;}.
-&lt;/PRE&gt;&lt;P&gt;It is also possible to specify suboptions:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{include_config_file, &amp;lt;filename&amp;gt;, [&amp;lt;suboption&amp;gt;, &amp;lt;suboption&amp;gt;, ...]}.
-&lt;/PRE&gt;&lt;P&gt;The filename can be indicated either as an absolute path,
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc30&quot;&gt;3.1.10&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#includeconfigfile&quot;&gt;Include Additional Configuration Files&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;includeconfigfile&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;include_config_file&lt;/TT&gt; in a configuration file instructs &lt;TT&gt;ejabberd&lt;/TT&gt; to include other configuration files immediately.&lt;/P&gt;&lt;P&gt;The basic syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{include_config_file, Filename}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;
+It is possible to specify suboptions using the full syntax:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{include_config_file, Filename, [Suboption, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The filename can be indicated either as an absolute path,
 or relative to the main &lt;TT&gt;ejabberd&lt;/TT&gt; configuration file.
 It isn&amp;#X2019;t possible to use wildcards.
 The file must exist and be readable.&lt;/P&gt;&lt;P&gt;The allowed suboptions are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;{disallow, [&amp;lt;option&amp;gt;, &amp;lt;option&amp;gt;, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Disallows the usage of those options in the included configuration file.
+&lt;B&gt;&lt;TT&gt;{disallow, [Optionname, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Disallows the usage of those options in the included configuration file.
 The options that match this criteria are not accepted.
 The default value is an empty list: &lt;TT&gt;[]&lt;/TT&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_only, [&amp;lt;option&amp;gt;, &amp;lt;option&amp;gt;, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allows only the usage of those options in the included configuration file.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_only, [Optionname, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allows only the usage of those options in the included configuration file.
 The options that do not match this criteria are not accepted.
 The default value is: &lt;TT&gt;all&lt;/TT&gt;
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;This is a basic example:
@@ -1281,12 +1293,12 @@ and later includes another file with additional rules:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{acl, admin, {user, &quot;bob&quot;, &quot;localhost&quot;}}.
 {acl, admin, {user, &quot;jan&quot;, &quot;localhost&quot;}}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;optionmacros&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Option Macros in Configuration File--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc30&quot;&gt;3.1.10&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#optionmacros&quot;&gt;Option Macros in Configuration File&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;optionmacros&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc31&quot;&gt;3.1.11&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#optionmacros&quot;&gt;Option Macros in Configuration File&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;optionmacros&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;In the &lt;TT&gt;ejabberd&lt;/TT&gt; configuration file,
 it is possible to define a macro for a value
 and later use this macro when defining an option.&lt;/P&gt;&lt;P&gt;A macro is defined with this syntax:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{define_macro, '&amp;lt;MACRO&amp;gt;', &amp;lt;value&amp;gt;}.
-&lt;/PRE&gt;&lt;P&gt;The &lt;TT&gt;MACRO&lt;/TT&gt; must be surrounded by single quotation marks,
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{define_macro, &amp;#X2019;MACRO&amp;#X2019;, Value}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;
+The &lt;TT&gt;MACRO&lt;/TT&gt; must be surrounded by single quotation marks,
 and all letters in uppercase; check the examples bellow.
 The &lt;TT&gt;value&lt;/TT&gt; can be any valid arbitrary Erlang term.&lt;/P&gt;&lt;P&gt;The first definition of a macro is preserved,
 and additional definitions of the same macro are forgotten.&lt;/P&gt;&lt;P&gt;Macros are processed after
@@ -1294,17 +1306,17 @@ additional configuration files have been included,
 so it is possible to use macros that
 are defined in configuration files included before the usage.&lt;/P&gt;&lt;P&gt;It isn&amp;#X2019;t possible to use a macro in the definition
 of another macro.&lt;/P&gt;&lt;P&gt;There are two ways to use a macro:
-&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;&amp;#X2019;&amp;lt;MACRO&amp;gt;&amp;#X2019;&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;&amp;#X2019;MACRO&amp;#X2019;&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 You can put this instead of a value in an &lt;TT&gt;ejabberd&lt;/TT&gt; option,
 and will be replaced with the &lt;TT&gt;value&lt;/TT&gt; previously defined.
 If the macro is not defined previously,
-the program will crash and report an error.&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{use_macro, &amp;#X2019;&amp;lt;MACRO&amp;gt;&amp;#X2019;, &amp;lt;defaultvalue&amp;gt;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+the program will crash and report an error.&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{use_macro, &amp;#X2019;MACRO&amp;#X2019;, Defaultvalue}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Use a macro even if it may not be defined.
 If the macro is not defined previously,
 the provided &lt;TT&gt;defaultvalue&lt;/TT&gt; is used.
 This usage behaves as if it were defined and used this way:
-&lt;PRE CLASS=&quot;verbatim&quot;&gt;{define_macro, '&amp;lt;MACRO&amp;gt;', &amp;lt;defaultvalue&amp;gt;}.
-'&amp;lt;MACRO&amp;gt;'
+&lt;PRE CLASS=&quot;verbatim&quot;&gt;{define_macro, 'MACRO', Defaultvalue}.
+'MACRO'
 &lt;/PRE&gt;&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;This example shows the basic usage of a macro:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{define_macro, 'LOG_LEVEL_NUMBER', 5}.
 {loglevel, 'LOG_LEVEL_NUMBER'}.
@@ -1330,7 +1342,7 @@ This usage behaves as if it were defined and used this way:
  ]
 }.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;database&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Database and LDAP Configuration--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc31&quot;&gt;3.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#database&quot;&gt;Database and LDAP Configuration&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;database&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc32&quot;&gt;3.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#database&quot;&gt;Database and LDAP Configuration&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;database&quot;&gt;&lt;/A&gt; 
 
 &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; uses its internal Mnesia database by default. However, it is
 possible to use a relational database or an LDAP server to store persistent,
@@ -1363,7 +1375,7 @@ For example:
   {auth_method, [odbc]}
 ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;mysql&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection MySQL--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc32&quot;&gt;3.2.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#mysql&quot;&gt;MySQL&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;mysql&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc33&quot;&gt;3.2.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#mysql&quot;&gt;MySQL&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;mysql&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Although this section will describe &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s configuration when you want to
 use the native MySQL driver, it does not describe MySQL&amp;#X2019;s installation and
 database creation. Check the MySQL documentation and the tutorial &lt;A HREF=&quot;http://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver&quot;&gt;Using ejabberd with MySQL native driver&lt;/A&gt; for information regarding these topics.
@@ -1387,17 +1399,13 @@ commands:
 value is used to define if we want to use ODBC, or one of the two native
 interface available, PostgreSQL or MySQL.&lt;/P&gt;&lt;P&gt;To use the native MySQL interface, you can pass a tuple of the following form as
 parameter:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{mysql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-&lt;/PRE&gt;&lt;P&gt;&lt;TT&gt;mysql&lt;/TT&gt; is a keyword that should be kept as is. For example:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{odbc_server, {mysql, &quot;localhost&quot;, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;}}.
-&lt;/PRE&gt;&lt;P&gt;Optionally, it is possible to define the MySQL port to use. This
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{mysql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;&lt;TT&gt;mysql&lt;/TT&gt; is a keyword that should be kept as is. For example:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{odbc_server, {mysql, &quot;localhost&quot;, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;}}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Optionally, it is possible to define the MySQL port to use. This
 option is only useful, in very rare cases, when you are not running
 MySQL with the default port setting. The &lt;TT&gt;mysql&lt;/TT&gt; parameter
 can thus take the following form:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{mysql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-&lt;/PRE&gt;&lt;P&gt;The &lt;TT&gt;Port&lt;/TT&gt; value should be an integer, without quotes. For example:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{odbc_server, {mysql, &quot;localhost&quot;, Port, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;}}.
-&lt;/PRE&gt;&lt;P&gt;By default &lt;TT&gt;ejabberd&lt;/TT&gt; opens 10 connections to the database for each virtual host.
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{mysql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The &lt;TT&gt;Port&lt;/TT&gt; value should be an integer, without quotes. For example:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{odbc_server, {mysql, &quot;localhost&quot;, Port, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;}}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;By default &lt;TT&gt;ejabberd&lt;/TT&gt; opens 10 connections to the database for each virtual host.
 Use this option to modify the value:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{odbc_pool_size, 10}.
 &lt;/PRE&gt;&lt;P&gt;You can configure an interval to make a dummy SQL request
@@ -1424,7 +1432,7 @@ relational databases like MySQL. To enable storage to your database, just make
 sure that your database is running well (see previous sections), and replace the
 suffix-less or ldap module variant with the odbc module variant. Keep in mind
 that you cannot have several variants of the same module loaded!&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;mssql&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Microsoft SQL Server--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc33&quot;&gt;3.2.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#mssql&quot;&gt;Microsoft SQL Server&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;mssql&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc34&quot;&gt;3.2.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#mssql&quot;&gt;Microsoft SQL Server&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;mssql&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Although this section will describe &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s configuration when you want to
 use Microsoft SQL Server, it does not describe Microsoft SQL Server&amp;#X2019;s
 installation and database creation. Check the MySQL documentation and the
@@ -1462,7 +1470,7 @@ database, just make sure that your database is running well (see previous
 sections), and replace the suffix-less or ldap module variant with the odbc
 module variant. Keep in mind that you cannot have several variants of the same
 module loaded!&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;pgsql&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection PostgreSQL--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc34&quot;&gt;3.2.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#pgsql&quot;&gt;PostgreSQL&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;pgsql&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc35&quot;&gt;3.2.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#pgsql&quot;&gt;PostgreSQL&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;pgsql&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Although this section will describe &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s configuration when you want to
 use the native PostgreSQL driver, it does not describe PostgreSQL&amp;#X2019;s installation
 and database creation. Check the PostgreSQL documentation and the tutorial &lt;A HREF=&quot;http://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver&quot;&gt;Using ejabberd with MySQL native driver&lt;/A&gt; for information regarding these topics.
@@ -1489,17 +1497,13 @@ using next commands:
 value is used to define if we want to use ODBC, or one of the two native
 interface available, PostgreSQL or MySQL.&lt;/P&gt;&lt;P&gt;To use the native PostgreSQL interface, you can pass a tuple of the following
 form as parameter:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{pgsql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-&lt;/PRE&gt;&lt;P&gt;&lt;TT&gt;pgsql&lt;/TT&gt; is a keyword that should be kept as is. For example:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{odbc_server, {pgsql, &quot;localhost&quot;, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;}}.
-&lt;/PRE&gt;&lt;P&gt;Optionally, it is possible to define the PostgreSQL port to use. This
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{pgsql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;&lt;TT&gt;pgsql&lt;/TT&gt; is a keyword that should be kept as is. For example:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{odbc_server, {pgsql, &quot;localhost&quot;, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;}}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Optionally, it is possible to define the PostgreSQL port to use. This
 option is only useful, in very rare cases, when you are not running
 PostgreSQL with the default port setting. The &lt;TT&gt;pgsql&lt;/TT&gt; parameter
 can thus take the following form:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{pgsql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-&lt;/PRE&gt;&lt;P&gt;The &lt;TT&gt;Port&lt;/TT&gt; value should be an integer, without quotes. For example:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{odbc_server, {pgsql, &quot;localhost&quot;, 5432, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;}}.
-&lt;/PRE&gt;&lt;P&gt;By default &lt;TT&gt;ejabberd&lt;/TT&gt; opens 10 connections to the database for each virtual host.
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{pgsql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The &lt;TT&gt;Port&lt;/TT&gt; value should be an integer, without quotes. For example:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{odbc_server, {pgsql, &quot;localhost&quot;, 5432, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;}}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;By default &lt;TT&gt;ejabberd&lt;/TT&gt; opens 10 connections to the database for each virtual host.
 Use this option to modify the value:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{odbc_pool_size, 10}.
 &lt;/PRE&gt;&lt;P&gt;You can configure an interval to make a dummy SQL request
@@ -1523,7 +1527,7 @@ relational databases like PostgreSQL. To enable storage to your database, just
 make sure that your database is running well (see previous sections), and
 replace the suffix-less or ldap module variant with the odbc module variant.
 Keep in mind that you cannot have several variants of the same module loaded!&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;odbc&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection ODBC Compatible--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc35&quot;&gt;3.2.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#odbc&quot;&gt;ODBC Compatible&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;odbc&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc36&quot;&gt;3.2.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#odbc&quot;&gt;ODBC Compatible&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;odbc&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Although this section will describe &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s configuration when you want to
 use the ODBC driver, it does not describe the installation and database creation
 of your database. Check the documentation of your database. The tutorial &lt;A HREF=&quot;http://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver&quot;&gt;Using ejabberd with MySQL native driver&lt;/A&gt; also can help you. Note that the tutorial
@@ -1568,7 +1572,7 @@ database, just make sure that your database is running well (see previous
 sections), and replace the suffix-less or ldap module variant with the odbc
 module variant. Keep in mind that you cannot have several variants of the same
 module loaded!&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;ldap&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection LDAP--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc36&quot;&gt;3.2.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#ldap&quot;&gt;LDAP&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ldap&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc37&quot;&gt;3.2.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#ldap&quot;&gt;LDAP&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ldap&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; has built-in LDAP support. You can authenticate users against LDAP
 server and use LDAP directory as vCard storage. Shared rosters are not supported
 yet.&lt;/P&gt;&lt;P&gt;Note that &lt;TT&gt;ejabberd&lt;/TT&gt; treats LDAP as a read-only storage:
@@ -1576,20 +1580,20 @@ it is possible to consult data, but not possible to
 create accounts, change password or edit vCard that is stored in LDAP.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;ldapconnection&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Connection--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#ldapconnection&quot;&gt;Connection&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ldapconnection&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;Parameters:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;ldap_servers&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; List of IP addresses or DNS names of your
+&lt;B&gt;&lt;TT&gt;{ldap_servers, [Servers, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; List of IP addresses or DNS names of your
 LDAP servers. This option is required.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_encrypt&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Type of connection encryption to the LDAP server.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_encrypt, none|tls}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Type of connection encryption to the LDAP server.
 Allowed values are: &lt;TT&gt;none&lt;/TT&gt;, &lt;TT&gt;tls&lt;/TT&gt;.
 Note that STARTTLS is not supported.
 The default value is: &lt;TT&gt;none&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_port&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Port to connect to your LDAP server.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_port, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Port to connect to your LDAP server.
 The default port is&amp;#XA0;389 if encryption is disabled; and 636 if encryption is enabled.
 If you configure a value, it is stored in &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s database.
 Then, if you remove that value from the configuration file,
 the value previously stored in the database will be used instead of the default port.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_rootdn&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Bind DN. The default value
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_rootdn, RootDN}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Bind DN. The default value
 is&amp;#XA0;&lt;TT&gt;&quot;&quot;&lt;/TT&gt; which means &amp;#X2018;anonymous connection&amp;#X2019;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_password&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Bind password. The default
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_password, Password}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Bind password. The default
 value is &lt;TT&gt;&quot;&quot;&lt;/TT&gt;.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Example:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{auth_method, ldap}.
@@ -1600,15 +1604,15 @@ value is &lt;TT&gt;&quot;&quot;&lt;/TT&gt;.
 &lt;/PRE&gt;&lt;P&gt;Note that current LDAP implementation does not support SSL secured communication
 and SASL authentication.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;ldapauth&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection Authentication--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#ldapauth&quot;&gt;Authentication&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ldapauth&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;You can authenticate users against an LDAP directory. Available options are:&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;ldap_base&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;LDAP base directory which stores
+&lt;B&gt;&lt;TT&gt;{ldap_base, Base}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;LDAP base directory which stores
 users accounts. This option is required.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_uids&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;LDAP attribute which holds a list
-of attributes to use as alternatives for getting the JID. The value is of
-the form: &lt;TT&gt;[{ldap_uidattr}]&lt;/TT&gt; or &lt;TT&gt;[{ldap_uidattr,
-ldap_uidattr_format}]&lt;/TT&gt;. You can use as many comma separated tuples
-&lt;TT&gt;{ldap_uidattr, ldap_uidattr_format}&lt;/TT&gt; that is needed. The default
-value is &lt;TT&gt;[{&quot;uid&quot;, &quot;%u&quot;}]&lt;/TT&gt;. The defaut &lt;TT&gt;ldap_uidattr_format&lt;/TT&gt;
-is &lt;TT&gt;&quot;%u&quot;&lt;/TT&gt;. The values for &lt;TT&gt;ldap_uidattr&lt;/TT&gt; and
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_uids, [ {ldap_uidattr} | {ldap_uidattr, ldap_uidattr_format}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+LDAP attribute which holds a list of attributes to use as alternatives for getting the JID. 
+The default attributes are &lt;TT&gt;[{&quot;uid&quot;, &quot;%u&quot;}]&lt;/TT&gt;.
+The attributes are of the form:
+&lt;TT&gt;[{ldap_uidattr}]&lt;/TT&gt; or &lt;TT&gt;[{ldap_uidattr, ldap_uidattr_format}]&lt;/TT&gt;.
+You can use as many comma separated attributes as needed. 
+The values for &lt;TT&gt;ldap_uidattr&lt;/TT&gt; and
 &lt;TT&gt;ldap_uidattr_format&lt;/TT&gt; are described as follow:
 &lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 &lt;B&gt;&lt;TT&gt;ldap_uidattr&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;LDAP attribute which holds
@@ -1619,13 +1623,13 @@ only one pattern variable &lt;TT&gt;&quot;%u&quot;&lt;/TT&gt; which will be replaced by the
 user&amp;#X2019;s part of a JID. For example, &lt;TT&gt;&quot;%u@example.org&quot;&lt;/TT&gt;. The default
 value is &lt;TT&gt;&quot;%u&quot;&lt;/TT&gt;.
 &lt;/DD&gt;&lt;/DL&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_filter&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
-&lt;A HREF=&quot;http://www.faqs.org/rfcs/rfc2254.html&quot;&gt;RFC 2254&lt;/A&gt; LDAP filter. The
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_filter, Filter}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;A HREF=&quot;http://tools.ietf.org/html/rfc4515&quot;&gt;RFC 4515&lt;/A&gt; LDAP filter. The
 default is &lt;TT&gt;none&lt;/TT&gt;. Example:
 &lt;TT&gt;&quot;(&amp;amp;(objectClass=shadowAccount)(memberOf=Jabber Users))&quot;&lt;/TT&gt;. Please, do
 not forget to close brackets and do not use superfluous whitespaces. Also you
 &lt;EM&gt;must not&lt;/EM&gt; use &lt;TT&gt;ldap_uidattr&lt;/TT&gt; attribute in filter because this
-attribute will be substituted in LDAP filter automatically.&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_local_filter&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+attribute will be substituted in LDAP filter automatically.&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_local_filter, Filter}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 If you can&amp;#X2019;t use &lt;TT&gt;ldap_filter&lt;/TT&gt; due to performance reasons
 (the LDAP server has many users registered),
 you can use this local filter.
@@ -1754,11 +1758,12 @@ configuration is shown below:&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{auth_method, ldap}.
   ...
  ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modules&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Modules Configuration--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc37&quot;&gt;3.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modules&quot;&gt;Modules Configuration&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modules&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc38&quot;&gt;3.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modules&quot;&gt;Modules Configuration&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modules&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The option &lt;TT&gt;modules&lt;/TT&gt; defines the list of modules that will be loaded after
 &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s startup. Each entry in the list is a tuple in which the first
 element is the name of a module and the second is a list of options for that
-module.&lt;/P&gt;&lt;P&gt;Examples:
+module.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{modules, [ {ModuleName, ModuleOptions}, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 In this example only the module &lt;TT&gt;mod_echo&lt;/TT&gt; is loaded and no module
 options are specified between the square brackets:
@@ -1776,40 +1781,42 @@ all entries end with a comma:
   {mod_version,   []}
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modoverview&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Modules Overview--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc38&quot;&gt;3.3.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modoverview&quot;&gt;Modules Overview&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modoverview&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc39&quot;&gt;3.3.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modoverview&quot;&gt;Modules Overview&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modoverview&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The following table lists all modules included in &lt;TT&gt;ejabberd&lt;/TT&gt;.&lt;/P&gt;&lt;BLOCKQUOTE CLASS=&quot;table&quot;&gt;&lt;DIV CLASS=&quot;center&quot;&gt;&lt;DIV CLASS=&quot;center&quot;&gt;&lt;HR WIDTH=&quot;80%&quot; SIZE=2&gt;&lt;/DIV&gt;
 &lt;TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1&gt;&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;B&gt;Module&lt;/B&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;B&gt;Feature&lt;/B&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;B&gt;Dependencies&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_adhoc&lt;/TT&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Ad-Hoc Commands (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0050.html&quot;&gt;XEP-0050&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_adhoc&lt;/TT&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Ad-Hoc Commands (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0050.html&quot;&gt;XEP-0050&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modannounce&quot;&gt;&lt;TT&gt;mod_announce&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Manage announcements&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;recommends &lt;TT&gt;mod_adhoc&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_caps&lt;/TT&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Entity Capabilities (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0115.html&quot;&gt;XEP-0115&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_caps&lt;/TT&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Entity Capabilities (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0115.html&quot;&gt;XEP-0115&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_configure&lt;/TT&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Server configuration using Ad-Hoc&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_adhoc&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#moddisco&quot;&gt;&lt;TT&gt;mod_disco&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Service Discovery (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0030.html&quot;&gt;XEP-0030&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#moddisco&quot;&gt;&lt;TT&gt;mod_disco&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Service Discovery (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0030.html&quot;&gt;XEP-0030&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modecho&quot;&gt;&lt;TT&gt;mod_echo&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Echoes Jabber packets&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modirc&quot;&gt;&lt;TT&gt;mod_irc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;IRC transport&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modlast&quot;&gt;&lt;TT&gt;mod_last&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Last Activity (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0012.html&quot;&gt;XEP-0012&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modlast&quot;&gt;&lt;TT&gt;mod_last_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Last Activity (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0012.html&quot;&gt;XEP-0012&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modmuc&quot;&gt;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Multi-User Chat (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0045.html&quot;&gt;XEP-0045&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modlast&quot;&gt;&lt;TT&gt;mod_last&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Last Activity (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0012.html&quot;&gt;XEP-0012&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modlast&quot;&gt;&lt;TT&gt;mod_last_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Last Activity (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0012.html&quot;&gt;XEP-0012&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modmuc&quot;&gt;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Multi-User Chat (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0045.html&quot;&gt;XEP-0045&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modmuclog&quot;&gt;&lt;TT&gt;mod_muc_log&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Multi-User Chat room logging&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modoffline&quot;&gt;&lt;TT&gt;mod_offline&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Offline message storage (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0160.html&quot;&gt;XEP-0160&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modoffline&quot;&gt;&lt;TT&gt;mod_offline_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Offline message storage (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0160.html&quot;&gt;XEP-0160&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modoffline&quot;&gt;&lt;TT&gt;mod_offline&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Offline message storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0160.html&quot;&gt;XEP-0160&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modoffline&quot;&gt;&lt;TT&gt;mod_offline_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Offline message storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0160.html&quot;&gt;XEP-0160&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modping&quot;&gt;&lt;TT&gt;mod_ping&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;XMPP Ping and periodic keepalives (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0199.html&quot;&gt;XEP-0199&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modprivacy&quot;&gt;&lt;TT&gt;mod_privacy&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Blocking Communication (XMPP IM)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modprivacy&quot;&gt;&lt;TT&gt;mod_privacy_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Blocking Communication (XMPP IM)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modprivate&quot;&gt;&lt;TT&gt;mod_private&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Private XML Storage (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0049.html&quot;&gt;XEP-0049&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modprivate&quot;&gt;&lt;TT&gt;mod_private_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Private XML Storage (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0049.html&quot;&gt;XEP-0049&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modproxy&quot;&gt;&lt;TT&gt;mod_proxy65&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;SOCKS5 Bytestreams (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0065.html&quot;&gt;XEP-0065&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modpubsub&quot;&gt;&lt;TT&gt;mod_pubsub&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Pub-Sub (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0060.html&quot;&gt;XEP-0060&lt;/A&gt;), PEP (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0163.html&quot;&gt;XEP-0163&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_caps&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modregister&quot;&gt;&lt;TT&gt;mod_register&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;In-Band Registration (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0077.html&quot;&gt;XEP-0077&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modprivate&quot;&gt;&lt;TT&gt;mod_private&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Private XML Storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0049.html&quot;&gt;XEP-0049&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modprivate&quot;&gt;&lt;TT&gt;mod_private_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Private XML Storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0049.html&quot;&gt;XEP-0049&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modproxy&quot;&gt;&lt;TT&gt;mod_proxy65&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;SOCKS5 Bytestreams (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0065.html&quot;&gt;XEP-0065&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modpubsub&quot;&gt;&lt;TT&gt;mod_pubsub&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Pub-Sub (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0060.html&quot;&gt;XEP-0060&lt;/A&gt;), PEP (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0163.html&quot;&gt;XEP-0163&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_caps&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modpubsub&quot;&gt;&lt;TT&gt;mod_pubsub_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Pub-Sub (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0060.html&quot;&gt;XEP-0060&lt;/A&gt;), PEP (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0163.html&quot;&gt;XEP-0163&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*) and &lt;TT&gt;mod_caps&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modregister&quot;&gt;&lt;TT&gt;mod_register&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;In-Band Registration (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0077.html&quot;&gt;XEP-0077&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modroster&quot;&gt;&lt;TT&gt;mod_roster&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Roster management (XMPP IM)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modroster&quot;&gt;&lt;TT&gt;mod_roster_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Roster management (XMPP IM)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modservicelog&quot;&gt;&lt;TT&gt;mod_service_log&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Copy user messages to logger service&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modsharedroster&quot;&gt;&lt;TT&gt;mod_shared_roster&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Shared roster management&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_roster&lt;/TT&gt; or&lt;/TD&gt;&lt;/TR&gt;
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;TT&gt;mod_roster_odbc&lt;/TT&gt;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modstats&quot;&gt;&lt;TT&gt;mod_stats&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Statistics Gathering (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0039.html&quot;&gt;XEP-0039&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modtime&quot;&gt;&lt;TT&gt;mod_time&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Entity Time (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0090.html&quot;&gt;XEP-0090&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modvcard&quot;&gt;&lt;TT&gt;mod_vcard&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;vcard-temp (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modvcardldap&quot;&gt;&lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;vcard-temp (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;LDAP server&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modvcard&quot;&gt;&lt;TT&gt;mod_vcard_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;vcard-temp (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
-&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modversion&quot;&gt;&lt;TT&gt;mod_version&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Software Version (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0092.html&quot;&gt;XEP-0092&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modstats&quot;&gt;&lt;TT&gt;mod_stats&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Statistics Gathering (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0039.html&quot;&gt;XEP-0039&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modtime&quot;&gt;&lt;TT&gt;mod_time&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Entity Time (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0202.html&quot;&gt;XEP-0202&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modvcard&quot;&gt;&lt;TT&gt;mod_vcard&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;vcard-temp (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modvcardldap&quot;&gt;&lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;vcard-temp (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;LDAP server&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modvcard&quot;&gt;&lt;TT&gt;mod_vcard_odbc&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;vcard-temp (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;supported DB (*)&lt;/TD&gt;&lt;/TR&gt;
+&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;A HREF=&quot;#modversion&quot;&gt;&lt;TT&gt;mod_version&lt;/TT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Software Version (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0092.html&quot;&gt;XEP-0092&lt;/A&gt;)&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
 &lt;/TABLE&gt;
 &lt;DIV CLASS=&quot;center&quot;&gt;&lt;HR WIDTH=&quot;80%&quot; SIZE=2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 (*) This module requires a supported database. For a list of supported databases, see section&amp;#XA0;&lt;A HREF=&quot;#database&quot;&gt;3.2&lt;/A&gt;.
@@ -1838,13 +1845,14 @@ Last connection date and time: Use &lt;TT&gt;mod_last_odbc&lt;/TT&gt; instead of
 &lt;TT&gt;ejabberd&lt;/TT&gt; website. Please remember that these contributions might not work or
 that they can contain severe bugs and security leaks. Therefore, use them at
 your own risk!&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;modcommonoptions&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Common Options--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc39&quot;&gt;3.3.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modcommonoptions&quot;&gt;Common Options&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modcommonoptions&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The following options are used by many modules. Therefore, they are described in
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc40&quot;&gt;3.3.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modcommonoptions&quot;&gt;Common Options&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modcommonoptions&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The following options are used by many modules. Therefore, they are described in
 this separate section.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;modiqdiscoption&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection &lt;TT&gt;iqdisc&lt;/TT&gt;--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modiqdiscoption&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Many modules define handlers for processing IQ queries of different namespaces
 to this server or to a user (e.&amp;#XA0;g. to &lt;TT&gt;example.org&lt;/TT&gt; or to
 &lt;TT&gt;user@example.org&lt;/TT&gt;). This option defines processing discipline for
-these queries. Possible values are:
+these queries.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{iqdisc, Value}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Possible &lt;TT&gt;Value&lt;/TT&gt; are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 &lt;B&gt;&lt;TT&gt;no_queue&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; All queries of a namespace with this processing discipline are
 processed immediately. This also means that no other packets can be processed
@@ -1871,8 +1879,9 @@ number of processes (32000 by default).
  ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modhostoption&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsubsection &lt;TT&gt;host&lt;/TT&gt;--&gt;
 &lt;H4 CLASS=&quot;subsubsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A HREF=&quot;#modhostoption&quot;&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/A&gt;&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modhostoption&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This option defines the Jabber ID of a service provided by an &lt;TT&gt;ejabberd&lt;/TT&gt; module.
-The keyword &quot;@HOST@&quot; is replaced at start time with the real virtual host string.&lt;/P&gt;&lt;P&gt;This example configures
+&lt;/P&gt;&lt;P&gt;This option defines the Jabber ID of a service provided by an &lt;TT&gt;ejabberd&lt;/TT&gt; module.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;If you include the keyword &quot;@HOST@&quot; in the HostName,
+it is replaced at start time with the real virtual host string.&lt;/P&gt;&lt;P&gt;This example configures
 the echo module to provide its echoing service
 in the Jabber ID &lt;TT&gt;mirror.example.org&lt;/TT&gt;:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
@@ -1890,7 +1899,7 @@ the &quot;@HOST@&quot; keyword must be used:
   ...
  ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modannounce&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_announce&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc40&quot;&gt;3.3.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modannounce&quot;&gt;&lt;TT&gt;mod_announce&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modannounce&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc41&quot;&gt;3.3.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modannounce&quot;&gt;&lt;TT&gt;mod_announce&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modannounce&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module enables configured users to broadcast announcements and to set
 the message of the day (MOTD).
 Configured users can perform these actions with a
@@ -1921,7 +1930,7 @@ login. The message is &lt;EM&gt;not sent&lt;/EM&gt; to any currently connected user.
 Any message sent to this JID removes the existing message of the day (MOTD).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;access&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option specifies who is allowed to
+&lt;B&gt;&lt;TT&gt;{access, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option specifies who is allowed to
 send announcements and to set the message of the day (by default, nobody is
 able to send such messages).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Examples:
@@ -1954,23 +1963,32 @@ Only administrators can send announcements:
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Note that &lt;TT&gt;mod_announce&lt;/TT&gt; can be resource intensive on large
 deployments as it can broadcast lot of messages. This module should be
 disabled for instances of &lt;TT&gt;ejabberd&lt;/TT&gt; with hundreds of thousands users.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;moddisco&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_disco&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc41&quot;&gt;3.3.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#moddisco&quot;&gt;&lt;TT&gt;mod_disco&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;moddisco&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc42&quot;&gt;3.3.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#moddisco&quot;&gt;&lt;TT&gt;mod_disco&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;moddisco&quot;&gt;&lt;/A&gt; 
 
 
 
-&lt;/P&gt;&lt;P&gt;This module adds support for Service Discovery (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0030.html&quot;&gt;XEP-0030&lt;/A&gt;). With
+
+&lt;/P&gt;&lt;P&gt;This module adds support for Service Discovery (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0030.html&quot;&gt;XEP-0030&lt;/A&gt;). With
 this module enabled, services on your server can be discovered by
 Jabber clients. Note that &lt;TT&gt;ejabberd&lt;/TT&gt; has no modules with support
-for the superseded Jabber Browsing (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0011.html&quot;&gt;XEP-0011&lt;/A&gt;) and Agent Information
-(&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0094.html&quot;&gt;XEP-0094&lt;/A&gt;). Accordingly, Jabber clients need to have support for
+for the superseded Jabber Browsing (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0011.html&quot;&gt;XEP-0011&lt;/A&gt;) and Agent Information
+(&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0094.html&quot;&gt;XEP-0094&lt;/A&gt;). Accordingly, Jabber clients need to have support for
 the newer Service Discovery protocol if you want them be able to discover
 the services you offer.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Service Discovery (&lt;TT&gt;http://jabber.org/protocol/disco#items&lt;/TT&gt; and
 &lt;TT&gt;http://jabber.org/protocol/disco#info&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;extra_domains&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; With this option,
-extra domains can be added to the Service Discovery item list.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{extra_domains, [Domain, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; With this option,
+you can specify a list of extra domains that are added to the Service Discovery item list.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{server_info, [ {Modules, Field, [Value, ...]}, ... ]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+Specify additional information about the server,
+as described in Contact Addresses for XMPP Services (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0157.html&quot;&gt;XEP-0157&lt;/A&gt;).
+&lt;TT&gt;Modules&lt;/TT&gt; can be the keyword &amp;#X2018;all&amp;#X2019;, 
+in which case the information is reported in all the services;
+or a list of &lt;TT&gt;ejabberd&lt;/TT&gt; modules, 
+in which case the information is only specified for the services provided by those modules.
+Any arbitrary &lt;TT&gt;Field&lt;/TT&gt; and &lt;TT&gt;Value&lt;/TT&gt; can be specified, not only contact addresses.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 To serve a link to the Jabber User Directory on &lt;TT&gt;jabber.org&lt;/TT&gt;:
@@ -1996,14 +2014,36 @@ To serve a link to the Jabber User Directory on &lt;TT&gt;jabber.org&lt;/TT&gt;:
                                 &quot;example.com&quot;]}]},
   ...
  ]}.
+&lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;With this configuration, all services show abuse addresses,
+feedback address on the main server,
+and admin addresses for both the main server and the vJUD service:
+&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
+ [
+  ...
+  {mod_disco, [{server_info, [
+      {all,
+       &quot;abuse-addresses&quot;,
+       [&quot;mailto:abuse@shakespeare.lit&quot;]},
+      {[mod_muc],
+       &quot;Web chatroom logs&quot;,
+       [&quot;http://www.example.org/muc-logs&quot;]},
+      {[mod_disco],
+       &quot;feedback-addresses&quot;,
+       [&quot;http://shakespeare.lit/feedback.php&quot;, &quot;mailto:feedback@shakespeare.lit&quot;, &quot;xmpp:feedback@shakespeare.lit&quot;]},
+      {[mod_disco, mod_vcard],
+       &quot;admin-addresses&quot;,
+       [&quot;mailto:xmpp@shakespeare.lit&quot;, &quot;xmpp:admins@shakespeare.lit&quot;]}
+  ]}]},
+  ...
+ ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modecho&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_echo&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc42&quot;&gt;3.3.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modecho&quot;&gt;&lt;TT&gt;mod_echo&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modecho&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc43&quot;&gt;3.3.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modecho&quot;&gt;&lt;TT&gt;mod_echo&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modecho&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module simply echoes any Jabber
 packet back to the sender. This mirror can be of interest for
 &lt;TT&gt;ejabberd&lt;/TT&gt; and Jabber client debugging.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
 service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
 hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;echo.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
 is replaced at start time with the real virtual host name.
@@ -2017,9 +2057,9 @@ of them all?
   ...
  ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpbind&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_http_bind&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc43&quot;&gt;3.3.6&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modhttpbind&quot;&gt;&lt;TT&gt;mod_http_bind&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpbind&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc44&quot;&gt;3.3.6&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modhttpbind&quot;&gt;&lt;TT&gt;mod_http_bind&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpbind&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module implements XMPP over Bosh (formerly known as HTTP Binding)
-as defined in &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0124.html&quot;&gt;XEP-0124&lt;/A&gt; and &lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0206.html&quot;&gt;XEP-0206&lt;/A&gt;.
+as defined in &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0124.html&quot;&gt;XEP-0124&lt;/A&gt; and &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0206.html&quot;&gt;XEP-0206&lt;/A&gt;.
 It extends ejabberd&amp;#X2019;s built in HTTP service with a configurable
 resource at which this service will be hosted.&lt;/P&gt;&lt;P&gt;To use HTTP-Binding, enable the module:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
@@ -2057,40 +2097,57 @@ For example:
   },
   ...
 ]}.
-&lt;/PRE&gt;&lt;P&gt;The maximum inactivity period is by default 30 seconds.
-This can be configured with the module option &lt;TT&gt;max_inactivity&lt;/TT&gt;.
+&lt;/PRE&gt;&lt;P&gt;Options:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
+&lt;B&gt;&lt;TT&gt;{max_inactivity, Seconds}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+Define the maximum inactivity period in seconds.
+Default value is 30 seconds.
 For example, to set 50 seconds:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
+&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
  [
   ...
   {mod_http_bind, [ {max_inactivity, 50} ]},
   ...
 ]}.
-&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpfileserver&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_http_fileserver&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc44&quot;&gt;3.3.7&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modhttpfileserver&quot;&gt;&lt;TT&gt;mod_http_fileserver&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpfileserver&quot;&gt;&lt;/A&gt; 
+&lt;/PRE&gt;&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpfileserver&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_http_fileserver&lt;/TT&gt;--&gt;
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc45&quot;&gt;3.3.7&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modhttpfileserver&quot;&gt;&lt;TT&gt;mod_http_fileserver&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modhttpfileserver&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This simple module serves files from the local disk over HTTP.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;docroot&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;B&gt;&lt;TT&gt;{docroot, Path}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 Directory to serve the files.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;accesslog&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{accesslog, Path}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 File to log accesses using an Apache-like format.
 No log will be recorded if this option is not specified.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;directory_indices&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{directory_indices, [Index, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 Indicate one or more directory index files, similarly to Apache&amp;#X2019;s
 DirectoryIndex variable. When a web request hits a directory
 instead of a regular file, those directory indices are looked in
 order, and the first one found is returned.
+Specify a mapping of extensions to content types.
+There are several content types already defined,
+with this option you can add new definitions, modify or delete existing ones.
+To delete an existing definition, simply define it with a value: &amp;#X2018;undefined&amp;#X2019;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{default_content_type, Type}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+Specify the content type to use for unknown extensions.
+Default value is &amp;#X2018;application/octet-stream&amp;#X2019;.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;This example configuration will serve the files from 
 the local directory &lt;CODE&gt;/var/www&lt;/CODE&gt;
 in the address &lt;CODE&gt;http://example.org:5280/pub/archive/&lt;/CODE&gt;.
+In this example a new content type &lt;TT&gt;ogg&lt;/TT&gt; is defined,
+&lt;TT&gt;png&lt;/TT&gt; is redefined, and &lt;TT&gt;jpg&lt;/TT&gt; definition is deleted.
 To use this module you must enable it:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
  [
   ...
   {mod_http_fileserver, [
                          {docroot, &quot;/var/www&quot;}, 
-    {directory_indices, [&quot;index.html&quot;, &quot;main.htm&quot;]},
-                         {accesslog, &quot;/var/log/ejabberd/access.log&quot;}
+                         {accesslog, &quot;/var/log/ejabberd/access.log&quot;},
+                         {directory_indices, [&quot;index.html&quot;, &quot;main.htm&quot;]},
+                         {content_types, [{&quot;.ogg&quot;, &quot;audio/ogg&quot;},
+                                          {&quot;.png&quot;, &quot;image/png&quot;},
+                                          {&quot;.jpg&quot;, undefined}
+                                         ]},
+                         {default_content_type, &quot;text/html&quot;}
                         ]
   },
   ...
@@ -2113,13 +2170,13 @@ To use this module you must enable it:
   ...
 ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modirc&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_irc&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc45&quot;&gt;3.3.8&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modirc&quot;&gt;&lt;TT&gt;mod_irc&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modirc&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc46&quot;&gt;3.3.8&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modirc&quot;&gt;&lt;TT&gt;mod_irc&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modirc&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module is an IRC transport that can be used to join channels on IRC
 servers.&lt;/P&gt;&lt;P&gt;End user information:
 
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 A Jabber client with &amp;#X2018;groupchat 1.0&amp;#X2019; support or Multi-User
-Chat support (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0045.html&quot;&gt;XEP-0045&lt;/A&gt;) is necessary to join IRC channels.
+Chat support (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0045.html&quot;&gt;XEP-0045&lt;/A&gt;) is necessary to join IRC channels.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;An IRC channel can be joined in nearly the same way as joining a
 Jabber Multi-User Chat room. The difference is that the room name will
 be &amp;#X2018;channel%&lt;TT&gt;irc.example.org&lt;/TT&gt;&amp;#X2019; in case &lt;TT&gt;irc.example.org&lt;/TT&gt; is
@@ -2129,7 +2186,7 @@ to the IRC transport instead of the Multi-User Chat service.
  &lt;TT&gt;nickserver!irc.example.org@irc.jabberserver.org&lt;/TT&gt;.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Entering your password is possible by sending &amp;#X2018;LOGIN nick password&amp;#X2019;&lt;BR&gt;
  to &lt;TT&gt;nickserver!irc.example.org@irc.jabberserver.org&lt;/TT&gt;.
-&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;The IRC transport provides Ad-Hoc Commands (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0050.html&quot;&gt;XEP-0050&lt;/A&gt;)
+&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;The IRC transport provides Ad-Hoc Commands (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0050.html&quot;&gt;XEP-0050&lt;/A&gt;)
 to join a channel, and to set custom IRC username and encoding.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;When using a popular Jabber server, it can occur that no
 connection can be achieved with some IRC servers because they limit the
@@ -2137,14 +2194,15 @@ number of conections from one IP.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
 service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
 hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;irc.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
 is replaced at start time with the real virtual host name.
 
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option can be used to specify who
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option can be used to specify who
 may use the IRC transport (default value: &lt;TT&gt;all&lt;/TT&gt;).
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;default_encoding&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Set the default IRC encoding (default value: &lt;TT&gt;&quot;koi8-r&quot;&lt;/TT&gt;).
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{default_encoding, Encoding}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Set the default IRC encoding.
+Default value: &lt;TT&gt;&quot;koi8-r&quot;&lt;/TT&gt;
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 In the first example, the IRC transport is available on (all) your
@@ -2173,17 +2231,17 @@ of &lt;TT&gt;example.org&lt;/TT&gt;, and any user of &lt;TT&gt;example.com&lt;/TT&gt;:
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modlast&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_last&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc46&quot;&gt;3.3.9&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modlast&quot;&gt;&lt;TT&gt;mod_last&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modlast&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module adds support for Last Activity (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0012.html&quot;&gt;XEP-0012&lt;/A&gt;). It can be used to
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc47&quot;&gt;3.3.9&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modlast&quot;&gt;&lt;TT&gt;mod_last&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modlast&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module adds support for Last Activity (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0012.html&quot;&gt;XEP-0012&lt;/A&gt;). It can be used to
 discover when a disconnected user last accessed the server, to know when a
 connected user was last active on the server, or to query the uptime of the
 &lt;TT&gt;ejabberd&lt;/TT&gt; server.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Last activity (&lt;TT&gt;jabber:iq:last&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;modmuc&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_muc&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc47&quot;&gt;3.3.10&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modmuc&quot;&gt;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modmuc&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module provides a Multi-User Chat (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0045.html&quot;&gt;XEP-0045&lt;/A&gt;) service.
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc48&quot;&gt;3.3.10&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modmuc&quot;&gt;&lt;TT&gt;mod_muc&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modmuc&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module provides a Multi-User Chat (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0045.html&quot;&gt;XEP-0045&lt;/A&gt;) service.
 Users can discover existing rooms, join or create them.
 Occupants of a room can chat in public or have private chats.&lt;/P&gt;&lt;P&gt;Some of the features of Multi-User Chat:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
@@ -2204,20 +2262,20 @@ set of rooms goes down, the rooms disappear and they will be recreated
 on an available node on first connection attempt.&lt;/P&gt;&lt;P&gt;Module options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
 service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
 hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;conference.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
 is replaced at start time with the real virtual host name.
 
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; You can specify who is allowed to use
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; You can specify who is allowed to use
 the Multi-User Chat service. By default everyone is allowed to use it.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access_create&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; To configure who is
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access_create, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; To configure who is
 allowed to create new rooms at the Multi-User Chat service, this option
 can be used. By default everybody is allowed to create rooms.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access_persistent&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; To configure who is
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access_persistent, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; To configure who is
 allowed to modify the &amp;#X2019;persistent&amp;#X2019; room option.
 By default everybody is allowed to modify that option.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access_admin&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option specifies
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access_admin, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option specifies
 who is allowed to administrate the Multi-User Chat service. The default
 value is &lt;TT&gt;none&lt;/TT&gt;, which means that only the room creator can
 administer his room.
@@ -2225,7 +2283,7 @@ The administrators can send a normal message to the service JID,
 and it will be shown in all active rooms as a service message.
 The administrators can send a groupchat message to the JID of an active room,
 and the message will be shown in the room as a service message.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;history_size&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; A small history of
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{history_size, Size}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; A small history of
 the current discussion is sent to users when they enter the
 room. With this option you can define the number of history messages
 to keep and send to users joining the room. The value is an
@@ -2233,35 +2291,35 @@ integer. Setting the value to &lt;TT&gt;0&lt;/TT&gt; disables the history feature
 and, as a result, nothing is kept in memory. The default value is
 &lt;TT&gt;20&lt;/TT&gt;. This value is global and thus affects all rooms on the
 service.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_users&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines at
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_users, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines at
 the service level, the maximum number of users allowed per
 room. It can be lowered in each room configuration but cannot be
 increased in individual room configuration. The default value is
 200.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_users_admin_threshold&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_users_admin_threshold, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
  This option defines the
 number of service admins or room owners allowed to enter the room when
 the maximum number of allowed occupants was reached. The default limit
 is 5.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_user_conferences&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_user_conferences, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
  This option defines the maximum
 number of rooms that any given user can join. The default value
 is 10. This option is used to prevent possible abuses. Note that
 this is a soft limit: some users can sometimes join more conferences
 in cluster configurations.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_room_id&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_room_id, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This option defines the maximum number of characters that Room ID
 can have when creating a new room.
 The default value is to not limit: infinite.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_room_name&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_room_name, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This option defines the maximum number of characters that Room Name
 can have when configuring the room.
 The default value is to not limit: infinite.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_room_desc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_room_desc, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This option defines the maximum number of characters that Room Description
 can have when configuring the room.
 The default value is to not limit: infinite.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;min_message_interval&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{min_message_interval, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This option defines the minimum interval between two messages send
 by an occupant in seconds. This option is global and valid for all
 rooms. A decimal value can be used. When this option is not defined,
@@ -2271,7 +2329,7 @@ be broadcasted by the service. A good value for this minimum message
 interval is 0.4 second. If an occupant tries to send messages faster, an
 error is send back explaining that the message has been discarded
 and describing the reason why the message is not acceptable.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;min_presence_interval&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{min_presence_interval, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
  This option defines the
 minimum of time between presence changes coming from a given occupant in
 seconds. This option is global and valid for all rooms. A
@@ -2283,36 +2341,36 @@ presence is cached by &lt;TT&gt;ejabberd&lt;/TT&gt; and only the last presence is
 broadcasted to all occupants in the room after expiration of the
 interval delay. Intermediate presence packets are silently
 discarded. A good value for this option is 4 seconds.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;default_room_options&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{default_room_options, [ {OptionName, OptionValue}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This module option allows to define the desired default room options.
 Note that the creator of a room can modify the options of his room
 at any time using a Jabber client with MUC capability.
 The available room options and the default values are:
 &lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;{allow_change_subj, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow occupants to change the subject.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_private_messages, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Occupants can send private messages to other occupants.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_query_users, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Occupants can send IQ queries to other occupants.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_user_invites, false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow occupants to send invitations.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_visitor_nickchange, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow visitors to
+&lt;B&gt;&lt;TT&gt;{allow_change_subj, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow occupants to change the subject.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_private_messages, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Occupants can send private messages to other occupants.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_query_users, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Occupants can send IQ queries to other occupants.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_user_invites, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow occupants to send invitations.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_visitor_nickchange, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow visitors to
 change nickname.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_visitor_status, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow visitors to send
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_visitor_status, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Allow visitors to send
 status text in presence updates. If disallowed, the &lt;TT&gt;status&lt;/TT&gt;
 text is stripped before broadcasting the presence update to all
 the room occupants.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{anonymous, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The room is anonymous:
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{anonymous, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The room is anonymous:
 occupants don&amp;#X2019;t see the real JIDs of other occupants.
 Note that the room moderators can always see the real JIDs of the occupants.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{logging, false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The public messages are logged using &lt;TT&gt;mod_muc_log&lt;/TT&gt;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{logging, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The public messages are logged using &lt;TT&gt;mod_muc_log&lt;/TT&gt;.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_users, 200}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Maximum number of occupants in the room.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{members_by_default, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The occupants that enter the room are participants by default, so they have &amp;#X2019;voice&amp;#X2019;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{members_only, false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Only members of the room can enter.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{moderated, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Only occupants with &amp;#X2019;voice&amp;#X2019; can send public messages.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{password, &quot;&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Password of the room. You may want to enable the next option too.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{password_protected, false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The password is required to enter the room.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{persistent, false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The room persists even if the last participant leaves.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{public, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The room is public in the list of the MUC service, so it can be discovered.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{public_list, true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The list of participants is public, without requiring to enter the room.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{title, &quot;&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; A human-readable title of the room.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{members_by_default, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The occupants that enter the room are participants by default, so they have &amp;#X2019;voice&amp;#X2019;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{members_only, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Only members of the room can enter.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{moderated, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Only occupants with &amp;#X2019;voice&amp;#X2019; can send public messages.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{password, &quot;roompass123&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Password of the room. You may want to enable the next option too.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{password_protected, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The password is required to enter the room.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{persistent, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The room persists even if the last participant leaves.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{public, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The room is public in the list of the MUC service, so it can be discovered.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{public_list, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; The list of participants is public, without requiring to enter the room.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{title, &quot;Room Title&quot;}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; A human-readable title of the room.
 &lt;/DD&gt;&lt;/DL&gt;
 All of those room options can be set to &lt;TT&gt;true&lt;/TT&gt; or &lt;TT&gt;false&lt;/TT&gt;,
 except &lt;TT&gt;password&lt;/TT&gt; and &lt;TT&gt;title&lt;/TT&gt; which are strings,
@@ -2405,7 +2463,7 @@ the newly created rooms have by default those options.
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modmuclog&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_muc_log&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc48&quot;&gt;3.3.11&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modmuclog&quot;&gt;&lt;TT&gt;mod_muc_log&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modmuclog&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc49&quot;&gt;3.3.11&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modmuclog&quot;&gt;&lt;TT&gt;mod_muc_log&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modmuclog&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module enables optional logging of Multi-User Chat (MUC) public conversations to
 HTML. Once you enable this module, users can join a room using a MUC capable
 Jabber client, and if they have enough privileges, they can request the
@@ -2415,7 +2473,7 @@ Room details are added on top of each page: room title, JID,
 author, subject and configuration.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 The room JID in the generated HTML is a link to join the room (using
-&lt;A HREF=&quot;http://www.xmpp.org/rfcs/rfc5122.html&quot;&gt;XMPP URI&lt;/A&gt;).
+&lt;A HREF=&quot;http://xmpp.org/rfcs/rfc5122.html&quot;&gt;XMPP URI&lt;/A&gt;).
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Subject and room configuration changes are tracked and displayed.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Joins, leaves, nick changes, kicks, bans and &amp;#X2018;/me&amp;#X2019; are tracked and
 displayed, including the reason if available.
@@ -2428,53 +2486,52 @@ displayed, including the reason if available.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;A custom link can be added on top of each page.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;access_log&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;B&gt;&lt;TT&gt;{access_log, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 This option restricts which occupants are allowed to enable or disable room
 logging. The default value is &lt;TT&gt;muc_admin&lt;/TT&gt;. Note for this default setting
 you need to have an access rule for &lt;TT&gt;muc_admin&lt;/TT&gt; in order to take effect.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;cssfile&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{cssfile, false|URL}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 With this option you can set whether the HTML files should have a custom CSS
 file or if they need to use the embedded CSS file. Allowed values are
 &lt;TT&gt;false&lt;/TT&gt; and an URL to a CSS file. With the first value, HTML files will
 include the embedded CSS code. With the latter, you can specify the URL of the
-custom CSS file (for example: &amp;#X2018;http://example.com/my.css&amp;#X2019;). The default value
+custom CSS file (for example: &lt;TT&gt;&quot;http://example.com/my.css&quot;&lt;/TT&gt;). The default value
 is &lt;TT&gt;false&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;dirname&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{dirname, room_jid|room_name}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Allows to configure the name of the room directory.
 Allowed values are &lt;TT&gt;room_jid&lt;/TT&gt; and &lt;TT&gt;room_name&lt;/TT&gt;.
 With the first value, the room directory name will be the full room JID.
 With the latter, the room directory name will be only the room name,
 not including the MUC service name.
 The default value is &lt;TT&gt;room_jid&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;dirtype&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{dirtype, subdirs|plain}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 The type of the created directories can be specified with this option. Allowed
 values are &lt;TT&gt;subdirs&lt;/TT&gt; and &lt;TT&gt;plain&lt;/TT&gt;. With the first value,
 subdirectories are created for each year and month. With the latter, the
 names of the log files contain the full date, and there are no subdirectories.
 The default value is &lt;TT&gt;subdirs&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;file_format&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{file_format, html|plaintext}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Define the format of the log files:
 &lt;TT&gt;html&lt;/TT&gt; stores in HTML format,
 &lt;TT&gt;plaintext&lt;/TT&gt; stores in plain text.
 The default value is &lt;TT&gt;html&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;outdir&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{outdir, Path}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 This option sets the full path to the directory in which the HTML files should
 be stored. Make sure the &lt;TT&gt;ejabberd&lt;/TT&gt; daemon user has write access on that
 directory. The default value is &lt;TT&gt;&quot;www/muc&quot;&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;spam_prevention&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{spam_prevention true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 To prevent spam, the &lt;TT&gt;spam_prevention&lt;/TT&gt; option adds a special attribute
 to links that prevent their indexation by search engines. The default value
 is &lt;TT&gt;true&lt;/TT&gt;, which mean that nofollow attributes will be added to user
 submitted links.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;timezone&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{timezone, local|universal}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 The time zone for the logs is configurable with this option. Allowed values
 are &lt;TT&gt;local&lt;/TT&gt; and &lt;TT&gt;universal&lt;/TT&gt;. With the first value, the local time,
 as reported to Erlang by the operating system, will be used. With the latter,
 GMT/UTC time will be used. The default value is &lt;TT&gt;local&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;top_link&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{top_link, {URL, Text}}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 With this option you can customize the link on the top right corner of each
-log file. The syntax of this option is &lt;TT&gt;{&quot;URL&quot;, &quot;Text&quot;}&lt;/TT&gt;. The default
-value is &lt;TT&gt;{&quot;/&quot;, &quot;Home&quot;}&lt;/TT&gt;.
+log file. The default value is &lt;TT&gt;{&quot;/&quot;, &quot;Home&quot;}&lt;/TT&gt;.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 In the first example any room owner can enable logging, and a
@@ -2525,13 +2582,14 @@ top link will be the default &lt;CODE&gt;&amp;lt;a href=&quot;/&quot;&amp;gt;Home&amp;lt;/a&amp;gt;&lt;/CODE&gt;.
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modoffline&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_offline&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc49&quot;&gt;3.3.12&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modoffline&quot;&gt;&lt;TT&gt;mod_offline&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modoffline&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module implements offline message storage. This means that all messages
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc50&quot;&gt;3.3.12&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modoffline&quot;&gt;&lt;TT&gt;mod_offline&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modoffline&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module implements offline message storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0160.html&quot;&gt;XEP-0160&lt;/A&gt;).
+This means that all messages
 sent to an offline user will be stored on the server until that user comes
 online again. Thus it is very similar to how email works. Note that
 &lt;TT&gt;ejabberdctl&lt;/TT&gt; has a command to delete expired messages
 (see section&amp;#XA0;&lt;A HREF=&quot;#ejabberdctl&quot;&gt;4.1&lt;/A&gt;).&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;access_max_user_messages&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;B&gt;&lt;TT&gt;{access_max_user_messages, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 This option defines which access rule will be enforced to limit
 the maximum number of offline messages that a user can have (quota).
 When a user has too many offline messages, any new messages that he receive are discarded,
@@ -2555,8 +2613,36 @@ and all the other users up to 100.
   {mod_offline,  [ {access_max_user_messages, max_user_offline_messages} ]},
   ...
  ]}.
+&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modping&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_ping&lt;/TT&gt;--&gt;
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc51&quot;&gt;3.3.13&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modping&quot;&gt;&lt;TT&gt;mod_ping&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modping&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module implements support for XMPP Ping (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0199.html&quot;&gt;XEP-0199&lt;/A&gt;) and periodic keepalives.
+When this module is enabled ejabberd responds correctly to
+ping requests, as defined in the protocol.&lt;/P&gt;&lt;P&gt;Configuration options:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
+&lt;B&gt;&lt;TT&gt;{send_pings, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+If this option is set to &lt;TT&gt;true&lt;/TT&gt;, the server sends pings to connected clients
+that are not active in a given interval &lt;TT&gt;ping_interval&lt;/TT&gt;.
+This is useful to keep client connections alive or checking availability.
+By default this option is disabled.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ping_interval, Seconds}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+How often to send pings to connected clients, if the previous option is enabled.
+If a client connection does not send or receive any stanza in this interval,
+a ping request is sent to the client.
+The default value is 60 seconds.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{timeout_action, none|kill}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+What to do when a client does not answer to a server ping request in less than 32 seconds.
+The default is to do nothing.
+&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;This example enables Ping responses, configures the module to send pings
+to client connections that are inactive for 4 minutes,
+and if a client does not answer to the ping in less than 32 seconds, its connection is closed:
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
+ [
+  ...
+  {mod_ping,  [{send_pings, true}, {ping_interval, 240}, {timeout_action, kill}]},
+  ...
+ ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modprivacy&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_privacy&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc50&quot;&gt;3.3.13&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modprivacy&quot;&gt;&lt;TT&gt;mod_privacy&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modprivacy&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc52&quot;&gt;3.3.14&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modprivacy&quot;&gt;&lt;TT&gt;mod_privacy&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modprivacy&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module implements Blocking Communication (also known as Privacy Rules)
 as defined in section 10 from XMPP IM. If end users have support for it in
 their Jabber client, they will be able to:
@@ -2578,47 +2664,50 @@ or subscription type (or globally).
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Allowing or blocking all communications based on JID, group, or
 subscription type (or globally).
 &lt;/LI&gt;&lt;/UL&gt;
-(from &lt;A HREF=&quot;http://www.xmpp.org/specs/rfc3921.html#privacy&quot;&gt;&lt;TT&gt;http://www.xmpp.org/specs/rfc3921.html#privacy&lt;/TT&gt;&lt;/A&gt;)
+(from &lt;A HREF=&quot;http://xmpp.org/specs/rfc3921.html#privacy&quot;&gt;&lt;TT&gt;http://xmpp.org/specs/rfc3921.html#privacy&lt;/TT&gt;&lt;/A&gt;)
 &lt;/BLOCKQUOTE&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Blocking Communication (&lt;TT&gt;jabber:iq:privacy&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;modprivate&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_private&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc51&quot;&gt;3.3.14&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modprivate&quot;&gt;&lt;TT&gt;mod_private&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modprivate&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module adds support for Private XML Storage (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0049.html&quot;&gt;XEP-0049&lt;/A&gt;):
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc53&quot;&gt;3.3.15&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modprivate&quot;&gt;&lt;TT&gt;mod_private&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modprivate&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module adds support for Private XML Storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0049.html&quot;&gt;XEP-0049&lt;/A&gt;):
 &lt;/P&gt;&lt;BLOCKQUOTE CLASS=&quot;quote&quot;&gt;
 Using this method, Jabber entities can store private data on the server and
 retrieve it whenever necessary. The data stored might be anything, as long as
 it is valid XML. One typical usage for this namespace is the server-side storage
-of client-specific preferences; another is Bookmark Storage (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0048.html&quot;&gt;XEP-0048&lt;/A&gt;).
+of client-specific preferences; another is Bookmark Storage (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0048.html&quot;&gt;XEP-0048&lt;/A&gt;).
 &lt;/BLOCKQUOTE&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Private XML Storage (&lt;TT&gt;jabber:iq:private&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;modproxy&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_proxy65&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc52&quot;&gt;3.3.15&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modproxy&quot;&gt;&lt;TT&gt;mod_proxy65&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modproxy&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module implements SOCKS5 Bytestreams (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0065.html&quot;&gt;XEP-0065&lt;/A&gt;).
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc54&quot;&gt;3.3.16&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modproxy&quot;&gt;&lt;TT&gt;mod_proxy65&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modproxy&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module implements SOCKS5 Bytestreams (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0065.html&quot;&gt;XEP-0065&lt;/A&gt;).
 It allows &lt;TT&gt;ejabberd&lt;/TT&gt; to act as a file transfer proxy between two
 XMPP clients.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines the hostname of the service.
-If this option is not set, the prefix &amp;#X2018;&lt;TT&gt;proxy.&lt;/TT&gt;&amp;#X2019; is added to &lt;TT&gt;ejabberd&lt;/TT&gt;
-hostname.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;name&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Defines Service Discovery name of the service.
+
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
+hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;proxy.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
+is replaced at start time with the real virtual host name.
+
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{name, Text}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Defines Service Discovery name of the service.
 Default is &lt;TT&gt;&quot;SOCKS5 Bytestreams&quot;&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ip&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option specifies which network interface
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ip, IPTuple}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option specifies which network interface
 to listen for. Default is an IP address of the service&amp;#X2019;s DNS name, or,
 if fails, &lt;CODE&gt;{127,0,0,1}&lt;/CODE&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;port&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines port to listen for
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{port, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines port to listen for
 incoming connections. Default is&amp;#XA0;7777.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;auth_type&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;SOCKS5 authentication type.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{auth_type, anonymous|plain}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;SOCKS5 authentication type.
 Possible values are &lt;TT&gt;anonymous&lt;/TT&gt; and &lt;TT&gt;plain&lt;/TT&gt;. Default is
 &lt;TT&gt;anonymous&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Defines ACL for file transfer initiators.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Defines ACL for file transfer initiators.
 Default is &lt;TT&gt;all&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;max_connections&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Maximum number of
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{max_connections, Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Maximum number of
 active connections per file transfer initiator. No limit by default.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;shaper&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines shaper for
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{shaper, none|ShaperName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option defines shaper for
 the file transfer peers. Shaper with the maximum bandwidth will be selected.
 Default is &lt;TT&gt;none&lt;/TT&gt;.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Examples:
@@ -2651,54 +2740,79 @@ The simpliest configuration of the module:
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modpubsub&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_pubsub&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc53&quot;&gt;3.3.16&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modpubsub&quot;&gt;&lt;TT&gt;mod_pubsub&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modpubsub&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module offers a Publish-Subscribe Service (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0060.html&quot;&gt;XEP-0060&lt;/A&gt;).
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc55&quot;&gt;3.3.17&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modpubsub&quot;&gt;&lt;TT&gt;mod_pubsub&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modpubsub&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module offers a Publish-Subscribe Service (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0060.html&quot;&gt;XEP-0060&lt;/A&gt;).
 The functionality in &lt;TT&gt;mod_pubsub&lt;/TT&gt; can be extended using plugins.
-The plugin that implements PEP (Personal Eventing via Pubsub) (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0163.html&quot;&gt;XEP-0163&lt;/A&gt;)
+The plugin that implements PEP (Personal Eventing via Pubsub) (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0163.html&quot;&gt;XEP-0163&lt;/A&gt;)
 is enabled in the default ejabberd configuration file,
 and it requires &lt;TT&gt;mod_caps&lt;/TT&gt;.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
 service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
 hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;pubsub.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
 is replaced at start time with the real virtual host name.
 
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;access_createnode&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{access_createnode, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This option restricts which users are allowed to create pubsub nodes using
-ACL and ACCESS. The default value is &lt;TT&gt;pubsub_createnode&lt;/TT&gt;. &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;plugins&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
-To specify which pubsub node plugins to use. If not defined, the default
-pubsub plugin is always used.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;nodetree&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
-To specify which nodetree to use. If not defined, the default pubsub
-nodetree is used. Only one nodetree can be used per host,
-and is shared by all node plugins.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;pep_sendlast_offline&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+ACL and ACCESS. The default value is &lt;TT&gt;pubsub_createnode&lt;/TT&gt;. &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{plugins, [ Plugin, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+To specify which pubsub node plugins to use.
+The first one in the list is used by default.
+If this option is not defined, the default plugins list is: &lt;TT&gt;[&quot;flat&quot;]&lt;/TT&gt;.
+PubSub clients can define which plugin to use when creating a node:
+add &lt;TT&gt;type=&amp;#X2019;plugin-name&amp;#X2019;&lt;/TT&gt; attribute to the &lt;TT&gt;create&lt;/TT&gt; stanza element.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{nodetree, Nodetree}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+To specify which nodetree to use.
+If not defined, the default pubsub nodetree is used: &quot;tree&quot;.
+Only one nodetree can be used per host, and is shared by all node plugins.&lt;P&gt;The &quot;virtual&quot; nodetree does not store nodes on database.
+This saves resources on systems with tons of nodes.
+If using the &quot;virtual&quot; nodetree,
+you can only enable those node plugins:
+[&quot;flat&quot;,&quot;pep&quot;] or [&quot;flat&quot;];
+any other plugins configuration will not work. 
+Also, all nodes will have the defaut configuration,
+and this can not be changed.
+Using &quot;virtual&quot; nodetree requires to start from a clean database,
+it will not work if you used the default &quot;tree&quot; nodetree before.&lt;/P&gt;&lt;P&gt;The &quot;dag&quot; nodetree provides experimental support for PubSub Collection Nodes (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0248.html&quot;&gt;XEP-0248&lt;/A&gt;).
+In that case you should also add &quot;dag&quot; node plugin as default, for example:
+&lt;TT&gt;{plugins, [&quot;dag&quot;,&quot;flat&quot;,&quot;hometree&quot;,&quot;pep&quot;]}&lt;/TT&gt;
+&lt;/P&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{pep_sendlast_offline, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 To specify whether or not we should get last published PEP items
 from users in our roster which are offline when we connect. Value is true or false.
 If not defined, pubsub assumes false so we only get last items of online contacts.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;last_item_cache&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{last_item_cache, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 To specify whether or not pubsub should cache last items. Value is true
 or false. If not defined, pubsub do not cache last items. On systems with not so many nodes,
 caching last items speeds up pubsub and allows to raise user connection rate. The cost is memory
 usage, as every item is stored in memory.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;pep_mapping&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{pep_mapping, [ {Key, Value}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
 This allow to define a Key-Value list to choose defined node plugins on given PEP namespace.
 The following example will use node_tune instead of node_pep for every PEP node with tune namespace:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;  {mod_pubsub, [{pep_mapping, [{&quot;http://jabber.org/protocol/tune&quot;, &quot;tune&quot;}]}]}
-&lt;/PRE&gt;&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Example:
+&lt;/PRE&gt;&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Example of configuration that uses flat nodes as default, and allows use of flat, nodetree and pep nodes:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
  [
   ...
   {mod_pubsub, [
                 {access_createnode, pubsub_createnode},
-                {plugins, [&quot;default&quot;, &quot;pep&quot;]}
-               ]}
+                {plugins, [&quot;flat&quot;, &quot;hometree&quot;, &quot;pep&quot;]}
+               ]},
+  ...
+ ]}.
+&lt;/PRE&gt;&lt;P&gt;Using ODBC database requires use of dedicated plugins. The following example shows previous configuration
+with ODBC usage:
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
+ [
+  ...
+  {mod_pubsub_odbc, [
+                {access_createnode, pubsub_createnode},
+                {plugins, [&quot;flat_odbc&quot;, &quot;hometree_odbc&quot;, &quot;pep_odbc&quot;]}
+               ]},
   ...
  ]}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modregister&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_register&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc54&quot;&gt;3.3.17&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modregister&quot;&gt;&lt;TT&gt;mod_register&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modregister&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module adds support for In-Band Registration (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0077.html&quot;&gt;XEP-0077&lt;/A&gt;). This protocol
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc56&quot;&gt;3.3.18&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modregister&quot;&gt;&lt;TT&gt;mod_register&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modregister&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module adds support for In-Band Registration (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0077.html&quot;&gt;XEP-0077&lt;/A&gt;). This protocol
 enables end users to use a Jabber client to:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Register a new account on the server.
@@ -2706,17 +2820,17 @@ Register a new account on the server.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Delete an existing account on the server.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;access&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option can be configured to specify
+&lt;B&gt;&lt;TT&gt;{access, AccessName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option can be configured to specify
 rules to restrict registration. If a rule returns &amp;#X2018;deny&amp;#X2019; on the requested
 user name, registration for that user name is denied. (there are no
 restrictions by default).
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;welcome_message&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Set a welcome message that
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{welcome_message, Message}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Set a welcome message that
 is sent to each newly registered account. The first string is the subject, and
 the second string is the message body.
 In the body you can set a newline with the characters: &lt;CODE&gt;\n&lt;/CODE&gt;
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;registration_watchers&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option defines a
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{registration_watchers, [ JID, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option defines a
 list of JIDs which will be notified each time a new account is registered.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for In-Band Registration (&lt;TT&gt;jabber:iq:register&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;This module reads also another option defined globally for the server:
 &lt;TT&gt;{registration_timeout, Timeout}&lt;/TT&gt;. 
@@ -2770,20 +2884,40 @@ Also define a registration timeout of one hour:
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modroster&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_roster&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc55&quot;&gt;3.3.18&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modroster&quot;&gt;&lt;TT&gt;mod_roster&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modroster&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module implements roster management as defined in &lt;A HREF=&quot;http://www.xmpp.org/specs/rfc3921.html#roster&quot;&gt;RFC 3921: XMPP IM&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;Options:
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc57&quot;&gt;3.3.19&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modroster&quot;&gt;&lt;TT&gt;mod_roster&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modroster&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module implements roster management as defined in
+&lt;A HREF=&quot;http://xmpp.org/specs/rfc3921.html#roster&quot;&gt;RFC 3921: XMPP IM&lt;/A&gt;.
+It also supports Roster Versioning (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0237.html&quot;&gt;XEP-0237&lt;/A&gt;).&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Roster Management (&lt;TT&gt;jabber:iq:roster&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
-&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;modservicelog&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_service_log&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc56&quot;&gt;3.3.19&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modservicelog&quot;&gt;&lt;TT&gt;mod_service_log&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modservicelog&quot;&gt;&lt;/A&gt; 
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{versioning, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Enables
+Roster Versioning.
+This option is disabled by default.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{store_current_id, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+If this option is enabled, the current version number is stored on the database.
+If disabled, the version number is calculated on the fly each time.
+Enabling this option reduces the load for both ejabberd and the database.
+This option does not affect the client in any way.
+This option is only useful if Roster Versioning is enabled.
+This option is disabled by default.
+Important: if you use &lt;TT&gt;mod_shared_roster&lt;/TT&gt;, you must disable this option.
+&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;This example configuration enables Roster Versioning with storage of current id:
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{modules,
+ [
+  ...
+  {mod_roster, [{versioning, true}, {store_current_id, true}]},
+  ...
+ ]}.
+&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;modservicelog&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_service_log&lt;/TT&gt;--&gt;
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc58&quot;&gt;3.3.20&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modservicelog&quot;&gt;&lt;TT&gt;mod_service_log&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modservicelog&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module adds support for logging end user packets via a Jabber message
 auditing service such as
 &lt;A HREF=&quot;http://www.funkypenguin.info/project/bandersnatch/&quot;&gt;Bandersnatch&lt;/A&gt;. All user
 packets are encapsulated in a &lt;CODE&gt;&amp;lt;route/&amp;gt;&lt;/CODE&gt; element and sent to the specified
 service(s).&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;loggers&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; With this option a (list of) service(s)
+&lt;B&gt;&lt;TT&gt;{loggers, [Names, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; With this option a (list of) service(s)
 that will receive the packets can be specified.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;Examples:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
@@ -2806,7 +2940,7 @@ To log all end user packets to the Bandersnatch service running on
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modsharedroster&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_shared_roster&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc57&quot;&gt;3.3.20&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modsharedroster&quot;&gt;&lt;TT&gt;mod_shared_roster&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modsharedroster&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc59&quot;&gt;3.3.21&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modsharedroster&quot;&gt;&lt;TT&gt;mod_shared_roster&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modsharedroster&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module enables you to create shared roster groups. This means that you can
 create groups of people that can see members from (other) groups in their
 rosters. The big advantages of this feature are that end users do not need to
@@ -2881,8 +3015,8 @@ roster groups as shown in the following table:
 &lt;/TABLE&gt;
 &lt;DIV CLASS=&quot;center&quot;&gt;&lt;HR WIDTH=&quot;80%&quot; SIZE=2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modstats&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_stats&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc58&quot;&gt;3.3.21&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modstats&quot;&gt;&lt;TT&gt;mod_stats&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modstats&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module adds support for Statistics Gathering (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0039.html&quot;&gt;XEP-0039&lt;/A&gt;). This protocol
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc60&quot;&gt;3.3.22&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modstats&quot;&gt;&lt;TT&gt;mod_stats&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modstats&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module adds support for Statistics Gathering (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0039.html&quot;&gt;XEP-0039&lt;/A&gt;). This protocol
 allows you to retrieve next statistics from your &lt;TT&gt;ejabberd&lt;/TT&gt; deployment:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Total number of registered users on the current virtual host (users/total).
@@ -2891,7 +3025,7 @@ Total number of registered users on the current virtual host (users/total).
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Total number of online users on all virtual hosts (users/all-hosts/online).
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Statistics Gathering (&lt;TT&gt;http://jabber.org/protocol/stats&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;As there are only a small amount of clients (for example
 &lt;A HREF=&quot;http://tkabber.jabber.ru/&quot;&gt;Tkabber&lt;/A&gt;) and software libraries with
@@ -2913,40 +3047,40 @@ by sending:
   &amp;lt;/query&amp;gt;
 &amp;lt;/iq&amp;gt;
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modtime&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_time&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc59&quot;&gt;3.3.22&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modtime&quot;&gt;&lt;TT&gt;mod_time&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modtime&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module features support for Entity Time (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0090.html&quot;&gt;XEP-0090&lt;/A&gt;). By using this XEP,
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc61&quot;&gt;3.3.23&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modtime&quot;&gt;&lt;TT&gt;mod_time&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modtime&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module features support for Entity Time (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0202.html&quot;&gt;XEP-0202&lt;/A&gt;). By using this XEP,
 you are able to discover the time at another entity&amp;#X2019;s location.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Entity Time (&lt;TT&gt;jabber:iq:time&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;modvcard&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_vcard&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc60&quot;&gt;3.3.23&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modvcard&quot;&gt;&lt;TT&gt;mod_vcard&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modvcard&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc62&quot;&gt;3.3.24&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modvcard&quot;&gt;&lt;TT&gt;mod_vcard&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modvcard&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module allows end users to store and retrieve their vCard, and to retrieve
-other users vCards, as defined in vcard-temp (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;). The module also
+other users vCards, as defined in vcard-temp (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0054.html&quot;&gt;XEP-0054&lt;/A&gt;). The module also
 implements an uncomplicated Jabber User Directory based on the vCards of
 these users. Moreover, it enables the server to send its vCard when queried.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
 service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
 hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;vjud.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
 is replaced at start time with the real virtual host name.
 
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for &lt;TT&gt;vcard-temp&lt;/TT&gt; IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;search&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option specifies whether the search
-functionality is enabled (value: &lt;TT&gt;true&lt;/TT&gt;) or disabled (value:
-&lt;TT&gt;false&lt;/TT&gt;). If disabled, the option &lt;TT&gt;host&lt;/TT&gt; will be ignored and the
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{search, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option specifies whether the search
+functionality is enabled or not
+If disabled, the option &lt;TT&gt;host&lt;/TT&gt; will be ignored and the
 Jabber User Directory service will not appear in the Service Discovery item
 list. The default value is &lt;TT&gt;true&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;matches&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;With this option, the number of reported
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{matches, infinity|Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;With this option, the number of reported
 search results can be limited. If the option&amp;#X2019;s value is set to &lt;TT&gt;infinity&lt;/TT&gt;,
 all search results are reported. The default value is &lt;TT&gt;30&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;allow_return_all&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option enables
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{allow_return_all, false|true}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option enables
 you to specify if search operations with empty input fields should return all
 users who added some information to their vCard. The default value is
 &lt;TT&gt;false&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;search_all_hosts&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;If this option is set
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{search_all_hosts, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;If this option is set
 to &lt;TT&gt;true&lt;/TT&gt;, search operations will apply to all virtual hosts. Otherwise
 only the current host will be searched. The default value is &lt;TT&gt;true&lt;/TT&gt;.
 This option is available in &lt;TT&gt;mod_vcard&lt;/TT&gt;, but not available in &lt;TT&gt;mod_vcard_odbc&lt;/TT&gt;.
@@ -2975,7 +3109,7 @@ and that all virtual hosts will be searched instead of only the current one:
   ...
  ]}.
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modvcardldap&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc61&quot;&gt;3.3.24&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modvcardldap&quot;&gt;&lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modvcardldap&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc63&quot;&gt;3.3.25&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modvcardldap&quot;&gt;&lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modvcardldap&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; can map LDAP attributes to vCard fields. This behaviour is
 implemented in the &lt;TT&gt;mod_vcard_ldap&lt;/TT&gt; module. This module does not depend on the
 authentication method (see&amp;#XA0;&lt;A HREF=&quot;#ldapauth&quot;&gt;3.2.5&lt;/A&gt;).&lt;/P&gt;&lt;P&gt;Note that &lt;TT&gt;ejabberd&lt;/TT&gt; treats LDAP as a read-only storage:
@@ -2990,32 +3124,35 @@ about these options. If one of these options is not set, &lt;TT&gt;ejabberd&lt;/TT&gt; will
 for the top-level option with the same name.&lt;/P&gt;&lt;P&gt;The second group of parameters
 consists of the following &lt;TT&gt;mod_vcard_ldap&lt;/TT&gt;-specific options:&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 
-&lt;B&gt;&lt;TT&gt;host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
+&lt;B&gt;&lt;TT&gt;{host, HostName}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;  This option defines the Jabber ID of the
 service. If the &lt;TT&gt;host&lt;/TT&gt; option is not specified, the Jabber ID will be the
 hostname of the virtual host with the prefix &amp;#X2018;&lt;TT&gt;vjud.&lt;/TT&gt;&amp;#X2019;. The keyword &quot;@HOST@&quot;
 is replaced at start time with the real virtual host name.
 
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for &lt;TT&gt;vcard-temp&lt;/TT&gt; IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;search&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option specifies whether the search
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{search, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option specifies whether the search
 functionality is enabled (value: &lt;TT&gt;true&lt;/TT&gt;) or disabled (value:
 &lt;TT&gt;false&lt;/TT&gt;). If disabled, the option &lt;TT&gt;host&lt;/TT&gt; will be ignored and the
 Jabber User Directory service will not appear in the Service Discovery item
 list. The default value is &lt;TT&gt;true&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;matches&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;With this option, the number of reported
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{matches, infinity|Number}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;With this option, the number of reported
 search results can be limited. If the option&amp;#X2019;s value is set to &lt;TT&gt;infinity&lt;/TT&gt;,
 all search results are reported. The default value is &lt;TT&gt;30&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_vcard_map&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;With this option you can
-set the table that maps LDAP attributes to vCard fields. The format is:
-&lt;TT&gt;[&lt;/TT&gt;&lt;TT&gt;Name_of_vCard_field, Pattern, List_of_LDAP_attributes&lt;/TT&gt;&lt;TT&gt;, ...]&lt;/TT&gt;.
-&lt;TT&gt;Name_of_vcard_field&lt;/TT&gt; is the type name of the vCard as defined in
-&lt;A HREF=&quot;http://www.ietf.org/rfc/rfc2426.txt&quot;&gt;RFC 2426&lt;/A&gt;. &lt;TT&gt;Pattern&lt;/TT&gt; is a
-string which contains pattern variables &lt;TT&gt;&quot;%u&quot;&lt;/TT&gt;, &lt;TT&gt;&quot;%d&quot;&lt;/TT&gt; or
-&lt;TT&gt;&quot;%s&quot;&lt;/TT&gt;. &lt;TT&gt;List_of_LDAP_attributes&lt;/TT&gt; is the list containing LDAP
-attributes. The pattern variables &lt;TT&gt;&quot;%s&quot;&lt;/TT&gt; will be sequentially replaced
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_vcard_map, [ {Name, Pattern, LDAPattributes}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+With this option you can set the table that maps LDAP attributes to vCard fields.
+
+&lt;TT&gt;Name&lt;/TT&gt; is the type name of the vCard as defined in
+&lt;A HREF=&quot;http://tools.ietf.org/html/rfc2426&quot;&gt;RFC 2426&lt;/A&gt;.
+&lt;TT&gt;Pattern&lt;/TT&gt; is a string which contains pattern variables
+&lt;TT&gt;&quot;%u&quot;&lt;/TT&gt;, &lt;TT&gt;&quot;%d&quot;&lt;/TT&gt; or &lt;TT&gt;&quot;%s&quot;&lt;/TT&gt;.
+&lt;TT&gt;LDAPattributes&lt;/TT&gt; is the list containing LDAP attributes.
+The pattern variables 
+&lt;TT&gt;&quot;%s&quot;&lt;/TT&gt; will be sequentially replaced 
 with the values of LDAP attributes from &lt;TT&gt;List_of_LDAP_attributes&lt;/TT&gt;,
-&lt;TT&gt;&quot;%u&quot;&lt;/TT&gt; will be replaced with the user part of a JID, and &lt;TT&gt;&quot;%d&quot;&lt;/TT&gt;
-will be replaced with the domain part of a JID. The default is:
+&lt;TT&gt;&quot;%u&quot;&lt;/TT&gt; will be replaced with the user part of a JID, 
+and &lt;TT&gt;&quot;%d&quot;&lt;/TT&gt; will be replaced with the domain part of a JID. 
+The default is:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;[{&quot;NICKNAME&quot;, &quot;%u&quot;, []},
  {&quot;FN&quot;, &quot;%s&quot;, [&quot;displayName&quot;]},
  {&quot;LAST&quot;, &quot;%s&quot;, [&quot;sn&quot;]},
@@ -3036,9 +3173,9 @@ will be replaced with the domain part of a JID. The default is:
  {&quot;BDAY&quot;, &quot;%s&quot;, [&quot;birthDay&quot;]},
  {&quot;ROLE&quot;, &quot;%s&quot;, [&quot;employeeType&quot;]},
  {&quot;PHOTO&quot;, &quot;%s&quot;, [&quot;jpegPhoto&quot;]}]
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_search_fields&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option
-defines the search form and the LDAP attributes to search within. The format
-is: &lt;TT&gt;[&lt;/TT&gt;&lt;TT&gt;Name, Attribute&lt;/TT&gt;&lt;TT&gt;, ...]&lt;/TT&gt;. &lt;TT&gt;Name&lt;/TT&gt; is the name of a search form
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_search_fields, [ {Name, Attribute}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option
+defines the search form and the LDAP attributes to search within.
+&lt;TT&gt;Name&lt;/TT&gt; is the name of a search form
 field which will be automatically translated by using the translation
 files (see &lt;TT&gt;msgs/*.msg&lt;/TT&gt; for available words). &lt;TT&gt;Attribute&lt;/TT&gt; is the
 LDAP attribute or the pattern &lt;TT&gt;&quot;%u&quot;&lt;/TT&gt;. The default is:
@@ -3054,11 +3191,11 @@ LDAP attribute or the pattern &lt;TT&gt;&quot;%u&quot;&lt;/TT&gt;. The default is:
  {&quot;Email&quot;, &quot;mail&quot;},
  {&quot;Organization Name&quot;, &quot;o&quot;},
  {&quot;Organization Unit&quot;, &quot;ou&quot;}]
-&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;ldap_search_reported&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option
-defines which search fields should be reported. The format is:
-&lt;TT&gt;[&lt;/TT&gt;&lt;TT&gt;Name, vCard_Name&lt;/TT&gt;&lt;TT&gt;, ...]&lt;/TT&gt;. &lt;TT&gt;Name&lt;/TT&gt; is the name of a search form
+&lt;/PRE&gt;&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{ldap_search_reported, [ {SearchField, VcardField}, ...]}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;This option
+defines which search fields should be reported.
+&lt;TT&gt;SearchField&lt;/TT&gt; is the name of a search form
 field which will be automatically translated by using the translation
-files (see &lt;TT&gt;msgs/*.msg&lt;/TT&gt; for available words). &lt;TT&gt;vCard_Name&lt;/TT&gt; is the
+files (see &lt;TT&gt;msgs/*.msg&lt;/TT&gt; for available words). &lt;TT&gt;VcardField&lt;/TT&gt; is the
 vCard field name defined in the &lt;TT&gt;ldap_vcard_map&lt;/TT&gt; option. The default
 is:
 &lt;PRE CLASS=&quot;verbatim&quot;&gt;[{&quot;Full Name&quot;, &quot;FN&quot;},
@@ -3151,17 +3288,17 @@ searching his info in LDAP.&lt;/P&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;TT&gt;ldap_vcard_map&lt;/T
   {&quot;Nickname&quot;, &quot;NICKNAME&quot;}
  ]},
 &lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;modversion&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection &lt;TT&gt;mod_version&lt;/TT&gt;--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc62&quot;&gt;3.3.25&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modversion&quot;&gt;&lt;TT&gt;mod_version&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modversion&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;This module implements Software Version (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0092.html&quot;&gt;XEP-0092&lt;/A&gt;). Consequently, it
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc64&quot;&gt;3.3.26&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#modversion&quot;&gt;&lt;TT&gt;mod_version&lt;/TT&gt;&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;modversion&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;This module implements Software Version (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0092.html&quot;&gt;XEP-0092&lt;/A&gt;). Consequently, it
 answers &lt;TT&gt;ejabberd&lt;/TT&gt;&amp;#X2019;s version when queried.&lt;/P&gt;&lt;P&gt;Options:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;show_os&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Should the operating system be revealed or not.
+&lt;B&gt;&lt;TT&gt;{show_os, true|false}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;Should the operating system be revealed or not.
 The default value is &lt;TT&gt;true&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;iqdisc&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{iqdisc, Discipline}&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This specifies
 the processing discipline for Software Version (&lt;TT&gt;jabber:iq:version&lt;/TT&gt;) IQ queries (see section&amp;#XA0;&lt;A HREF=&quot;#modiqdiscoption&quot;&gt;3.3.2&lt;/A&gt;).
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;manage&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Managing an &lt;TT&gt;ejabberd&lt;/TT&gt; Server--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc63&quot;&gt;Chapter&amp;#XA0;4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#manage&quot;&gt;Managing an &lt;TT&gt;ejabberd&lt;/TT&gt; Server&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;manage&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;ejabberdctl&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section &lt;TT&gt;ejabberdctl&lt;/TT&gt;--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc64&quot;&gt;4.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#ejabberdctl&quot;&gt;&lt;TT&gt;ejabberdctl&lt;/TT&gt;&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ejabberdctl&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;With the &lt;TT&gt;ejabberdctl&lt;/TT&gt; command line administration script 
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc65&quot;&gt;Chapter&amp;#XA0;4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#manage&quot;&gt;Managing an &lt;TT&gt;ejabberd&lt;/TT&gt; Server&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;manage&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;ejabberdctl&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section &lt;TT&gt;ejabberdctl&lt;/TT&gt;--&gt;
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc66&quot;&gt;4.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#ejabberdctl&quot;&gt;&lt;TT&gt;ejabberdctl&lt;/TT&gt;&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ejabberdctl&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;With the &lt;TT&gt;ejabberdctl&lt;/TT&gt; command line administration script 
 you can execute &lt;TT&gt;ejabberdctl commands&lt;/TT&gt; (described in the next section, &lt;A HREF=&quot;#ectl-commands&quot;&gt;4.1.1&lt;/A&gt;)
 and also many general &lt;TT&gt;ejabberd commands&lt;/TT&gt; (described in section &lt;A HREF=&quot;#eja-commands&quot;&gt;4.2&lt;/A&gt;).
 This means you can start, stop and perform many other administrative tasks
@@ -3173,7 +3310,7 @@ and other codes may be used for specific results.
 This can be used by other scripts to determine automatically
 if a command succeeded or failed,
 for example using: &lt;TT&gt;echo $?&lt;/TT&gt;&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;ectl-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection ejabberdctl Commands--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc65&quot;&gt;4.1.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#ectl-commands&quot;&gt;ejabberdctl Commands&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ectl-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;When &lt;TT&gt;ejabberdctl&lt;/TT&gt; is executed without any parameter,
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc67&quot;&gt;4.1.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#ectl-commands&quot;&gt;ejabberdctl Commands&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;ectl-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;When &lt;TT&gt;ejabberdctl&lt;/TT&gt; is executed without any parameter,
 it displays the available options. If there isn&amp;#X2019;t an &lt;TT&gt;ejabberd&lt;/TT&gt; server running,
 the available parameters are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
@@ -3209,7 +3346,7 @@ robot1
 testuser1
 testuser2
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;erlangconfiguration&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Erlang Runtime System--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc66&quot;&gt;4.1.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#erlangconfiguration&quot;&gt;Erlang Runtime System&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;erlangconfiguration&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is an Erlang/OTP application that runs inside an Erlang runtime system.
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc68&quot;&gt;4.1.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#erlangconfiguration&quot;&gt;Erlang Runtime System&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;erlangconfiguration&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; is an Erlang/OTP application that runs inside an Erlang runtime system.
 This system is configured using environment variables and command line parameters.
 The &lt;TT&gt;ejabberdctl&lt;/TT&gt; administration script uses many of those possibilities.
 You can configure some of them with the file &lt;TT&gt;ejabberdctl.cfg&lt;/TT&gt;,
@@ -3275,10 +3412,14 @@ Starts the Erlang system detached from the system console.
 	Maximum number of Erlang processes.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;-remsh ejabberd@localhost&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 	Open an Erlang shell in a remote Erlang node.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;-hidden&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+	The connections to other nodes are hidden (not published).
+	The result is that this node is not considered part of the cluster.
+	This is important when starting a temporary &lt;TT&gt;ctl&lt;/TT&gt; or &lt;TT&gt;debug&lt;/TT&gt; node.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;
 Note that some characters need to be escaped when used in shell scripts, for instance &lt;CODE&gt;&quot;&lt;/CODE&gt; and &lt;CODE&gt;{}&lt;/CODE&gt;.
 You can find other options in the Erlang manual page (&lt;TT&gt;erl -man erl&lt;/TT&gt;).&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;eja-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section &lt;TT&gt;ejabberd&lt;/TT&gt; Commands--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc67&quot;&gt;4.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#eja-commands&quot;&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; Commands&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;eja-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;An &lt;TT&gt;ejabberd command&lt;/TT&gt; is an abstract function identified by a name,
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc69&quot;&gt;4.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#eja-commands&quot;&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; Commands&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;eja-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;An &lt;TT&gt;ejabberd command&lt;/TT&gt; is an abstract function identified by a name,
 with a defined number and type of calling arguments and type of result
 that is registered in the &lt;TT&gt;ejabberd_commands&lt;/TT&gt; service.
 Those commands can be defined in any Erlang module and executed using any valid frontend.&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; includes a frontend to execute &lt;TT&gt;ejabberd commands&lt;/TT&gt;: the script &lt;TT&gt;ejabberdctl&lt;/TT&gt;.
@@ -3286,7 +3427,7 @@ Other known frontends that can be installed to execute ejabberd commands in diff
 &lt;TT&gt;ejabberd_xmlrpc&lt;/TT&gt; (XML-RPC service),
 &lt;TT&gt;mod_rest&lt;/TT&gt; (HTTP POST service),
 &lt;TT&gt;mod_shcommands&lt;/TT&gt; (ejabberd WebAdmin page).&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;list-eja-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection List of ejabberd Commands--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc68&quot;&gt;4.2.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#list-eja-commands&quot;&gt;List of ejabberd Commands&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;list-eja-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; includes a few ejabberd Commands by default.
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc70&quot;&gt;4.2.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#list-eja-commands&quot;&gt;List of ejabberd Commands&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;list-eja-commands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; includes a few ejabberd Commands by default.
 When more modules are installed, new commands may be available in the frontends.&lt;/P&gt;&lt;P&gt;The easiest way to get a list of the available commands, and get help for them is to use
 the ejabberdctl script:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;$ ejabberdctl help
@@ -3301,7 +3442,7 @@ Available commands in this ejabberd node:
   ...
 &lt;/PRE&gt;&lt;P&gt;The more interesting ones are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
-&lt;B&gt;&lt;TT&gt;reopen-log&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Reopen the log files after they were renamed.
+&lt;B&gt;&lt;TT&gt;reopen_log&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Reopen the log files after they were renamed.
 If the old files were not renamed before calling this command,
 they are automatically renamed to &lt;TT&gt;&quot;*-old.log&quot;&lt;/TT&gt;. See section &lt;A HREF=&quot;#logfiles&quot;&gt;7.1&lt;/A&gt;.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;backup ejabberd.backup&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
@@ -3309,7 +3450,7 @@ Store internal Mnesia database to a binary backup file.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;restore ejabberd.backup&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Restore immediately from a binary backup file the internal Mnesia database.
 This will consume quite some memory for big servers.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;install-fallback ejabberd.backup&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;install_fallback ejabberd.backup&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 The binary backup file is installed as fallback:
 it will be used to restore the database at the next ejabberd start.
 Similar to &lt;TT&gt;restore&lt;/TT&gt;, but requires less memory.
@@ -3318,23 +3459,33 @@ Dump internal Mnesia database to a text file dump.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;load ejabberd.dump&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 Restore immediately from a text file dump.
 This is not recommended for big databases, as it will consume much time,
-memory and processor. In that case it&amp;#X2019;s preferable to use &lt;TT&gt;backup&lt;/TT&gt; and &lt;TT&gt;install-fallback&lt;/TT&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;import-file, import-dir&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
-These options can be used to migrate from other Jabber/XMPP servers. There
-exist tutorials to &lt;A HREF=&quot;http://www.ejabberd.im/migrate-to-ejabberd&quot;&gt;migrate from other software to ejabberd&lt;/A&gt;.
-&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;delete-expired-messages&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option can be used to delete old messages
+memory and processor. In that case it&amp;#X2019;s preferable to use &lt;TT&gt;backup&lt;/TT&gt; and &lt;TT&gt;install_fallback&lt;/TT&gt;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;import_piefxis, export_piefxis, export_piefxis_host&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+These options can be used to migrate accounts
+using &lt;A HREF=&quot;http://xmpp.org/extensions/xep-0227.html&quot;&gt;XEP-0227&lt;/A&gt; formatted XML files
+from/to other Jabber/XMPP servers
+or move users of a vhost to another ejabberd installation.
+See also 
+&lt;A HREF=&quot;https://support.process-one.net/doc/display/P1/ejabberd+migration+kit&quot;&gt;ejabberd migration kit&lt;/A&gt;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;import_file, import_dir&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; 
+These options can be used to migrate accounts
+using jabberd1.4 formatted XML files.
+from other Jabber/XMPP servers
+There exist tutorials to
+&lt;A HREF=&quot;http://www.ejabberd.im/migrate-to-ejabberd&quot;&gt;migrate from other software to ejabberd&lt;/A&gt;.
+&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;delete_expired_messages&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; This option can be used to delete old messages
 in offline storage. This might be useful when the number of offline messages
 is very high.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;accesscommands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Restrict Execution with AccessCommands--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc69&quot;&gt;4.2.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#accesscommands&quot;&gt;Restrict Execution with AccessCommands&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;accesscommands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The frontends can be configured to restrict access to certain commands.
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc71&quot;&gt;4.2.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#accesscommands&quot;&gt;Restrict Execution with AccessCommands&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;accesscommands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The frontends can be configured to restrict access to certain commands.
 In that case, authentication information must be provided.
 In each frontend the &lt;TT&gt;AccessCommands&lt;/TT&gt; option is defined
 in a different place. But in all cases the option syntax is the same:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;AccessCommands = [ {Access, CommandNames, Arguments} ]
+&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;AccessCommands = [ {Access, CommandNames, Arguments}, ...]
 Access = atom()
 CommandNames = all | [CommandName]
 CommandName = atom()
-Arguments = [{ArgumentName, ArgumentValue}]
+Arguments = [ {ArgumentName, ArgumentValue}, ...]
 ArgumentName = atom()
 ArgumentValue = any()
 &lt;/PRE&gt;&lt;P&gt;The default value is to not define any restriction: &lt;TT&gt;[]&lt;/TT&gt;.
@@ -3372,7 +3523,7 @@ and the provided arguments do not contradict Arguments.&lt;/P&gt;&lt;P&gt;As an example to u
  {_bot_reg_test, [register, unregister], [{host, &quot;test.org&quot;}]}
 ]
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;webadmin&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Web Admin--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc70&quot;&gt;4.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#webadmin&quot;&gt;Web Admin&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;webadmin&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc72&quot;&gt;4.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#webadmin&quot;&gt;Web Admin&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;webadmin&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The &lt;TT&gt;ejabberd&lt;/TT&gt; Web Admin allows to administer most of &lt;TT&gt;ejabberd&lt;/TT&gt; using a web browser.&lt;/P&gt;&lt;P&gt;This feature is enabled by default:
 a &lt;TT&gt;ejabberd_http&lt;/TT&gt; listener with the option &lt;TT&gt;web_admin&lt;/TT&gt; (see
 section&amp;#XA0;&lt;A HREF=&quot;#listened&quot;&gt;3.1.3&lt;/A&gt;) is included in the listening ports. Then you can open
@@ -3444,13 +3595,13 @@ The file is searched by default in
 The directory of the documentation can be specified in
 the environment variable &lt;TT&gt;EJABBERD_DOC_PATH&lt;/TT&gt;.
 See section &lt;A HREF=&quot;#erlangconfiguration&quot;&gt;4.1.2&lt;/A&gt;.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;adhoccommands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Ad-hoc Commands--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc71&quot;&gt;4.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#adhoccommands&quot;&gt;Ad-hoc Commands&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;adhoccommands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;If you enable &lt;TT&gt;mod_configure&lt;/TT&gt; and &lt;TT&gt;mod_adhoc&lt;/TT&gt;,
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc73&quot;&gt;4.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#adhoccommands&quot;&gt;Ad-hoc Commands&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;adhoccommands&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;If you enable &lt;TT&gt;mod_configure&lt;/TT&gt; and &lt;TT&gt;mod_adhoc&lt;/TT&gt;,
 you can perform several administrative tasks in &lt;TT&gt;ejabberd&lt;/TT&gt;
 with a Jabber client.
-The client must support Ad-Hoc Commands (&lt;A HREF=&quot;http://www.xmpp.org/extensions/xep-0050.html&quot;&gt;XEP-0050&lt;/A&gt;),
+The client must support Ad-Hoc Commands (&lt;A HREF=&quot;http://xmpp.org/extensions/xep-0050.html&quot;&gt;XEP-0050&lt;/A&gt;),
 and you must login in the Jabber server with
 an account with proper privileges.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;changeerlangnodename&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Change Computer Hostname--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc72&quot;&gt;4.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#changeerlangnodename&quot;&gt;Change Computer Hostname&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;changeerlangnodename&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; uses the distributed Mnesia database.
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc74&quot;&gt;4.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#changeerlangnodename&quot;&gt;Change Computer Hostname&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;changeerlangnodename&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; uses the distributed Mnesia database.
 Being distributed, Mnesia enforces consistency of its file,
 so it stores the name of the Erlang node in it (see section &lt;A HREF=&quot;#nodename&quot;&gt;5.4&lt;/A&gt;).
 The name of an Erlang node includes the hostname of the computer.
@@ -3487,8 +3638,8 @@ mv /var/lib/ejabberd/*.* /var/lib/ejabberd/oldfiles/
 &lt;/PRE&gt;&lt;/LI&gt;&lt;LI CLASS=&quot;li-enumerate&quot;&gt;Check that the information of the old database is available: accounts, rosters...
 After you finish, remember to delete the temporary backup files from public directories.
 &lt;/LI&gt;&lt;/OL&gt;&lt;P&gt; &lt;A NAME=&quot;secure&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Securing &lt;TT&gt;ejabberd&lt;/TT&gt;--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc73&quot;&gt;Chapter&amp;#XA0;5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#secure&quot;&gt;Securing &lt;TT&gt;ejabberd&lt;/TT&gt;&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;secure&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;firewall&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Firewall Settings--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc74&quot;&gt;5.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#firewall&quot;&gt;Firewall Settings&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;firewall&quot;&gt;&lt;/A&gt; 
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc75&quot;&gt;Chapter&amp;#XA0;5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#secure&quot;&gt;Securing &lt;TT&gt;ejabberd&lt;/TT&gt;&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;secure&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;firewall&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Firewall Settings--&gt;
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc76&quot;&gt;5.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#firewall&quot;&gt;Firewall Settings&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;firewall&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;You need to take the following TCP ports in mind when configuring your firewall:
 &lt;/P&gt;&lt;BLOCKQUOTE CLASS=&quot;table&quot;&gt;&lt;DIV CLASS=&quot;center&quot;&gt;&lt;DIV CLASS=&quot;center&quot;&gt;&lt;HR WIDTH=&quot;80%&quot; SIZE=2&gt;&lt;/DIV&gt;
 &lt;TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1&gt;&lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;B&gt;Port&lt;/B&gt;&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;&lt;B&gt;Description&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
@@ -3499,7 +3650,7 @@ After you finish, remember to delete the temporary backup files from public dire
 &lt;TR&gt;&lt;TD ALIGN=left NOWRAP&gt;port range&lt;/TD&gt;&lt;TD ALIGN=left NOWRAP&gt;Used for connections between Erlang nodes. This range is configurable (see section &lt;A HREF=&quot;#epmd&quot;&gt;5.2&lt;/A&gt;).&lt;/TD&gt;&lt;/TR&gt;
 &lt;/TABLE&gt;
 &lt;DIV CLASS=&quot;center&quot;&gt;&lt;HR WIDTH=&quot;80%&quot; SIZE=2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt; &lt;A NAME=&quot;epmd&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section epmd--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc75&quot;&gt;5.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#epmd&quot;&gt;epmd&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;epmd&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;A HREF=&quot;http://www.erlang.org/doc/man/epmd.html&quot;&gt;epmd (Erlang Port Mapper Daemon)&lt;/A&gt;
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc77&quot;&gt;5.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#epmd&quot;&gt;epmd&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;epmd&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;A HREF=&quot;http://www.erlang.org/doc/man/epmd.html&quot;&gt;epmd (Erlang Port Mapper Daemon)&lt;/A&gt;
 is a small name server included in Erlang/OTP
 and used by Erlang programs when establishing distributed Erlang communications.
 &lt;TT&gt;ejabberd&lt;/TT&gt; needs &lt;TT&gt;epmd&lt;/TT&gt; to use &lt;TT&gt;ejabberdctl&lt;/TT&gt; and also when clustering &lt;TT&gt;ejabberd&lt;/TT&gt; nodes.
@@ -3524,7 +3675,7 @@ but can be configured in the file &lt;TT&gt;ejabberdctl.cfg&lt;/TT&gt;.
 The Erlang command-line parameter used internally is, for example:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;erl ... -kernel inet_dist_listen_min 4370 inet_dist_listen_max 4375
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;cookie&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Erlang Cookie--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc76&quot;&gt;5.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#cookie&quot;&gt;Erlang Cookie&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;cookie&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The Erlang cookie is a string with numbers and letters.
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc78&quot;&gt;5.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#cookie&quot;&gt;Erlang Cookie&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;cookie&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The Erlang cookie is a string with numbers and letters.
 An Erlang node reads the cookie at startup from the command-line parameter &lt;TT&gt;-setcookie&lt;/TT&gt;.
 If not indicated, the cookie is read from the cookie file &lt;TT&gt;$HOME/.erlang.cookie&lt;/TT&gt;.
 If this file does not exist, it is created immediately with a random cookie.
@@ -3538,7 +3689,7 @@ to prevent unauthorized access or intrusion to an Erlang node.
 The communication between Erlang nodes are not encrypted,
 so the cookie could be read sniffing the traffic on the network.
 The recommended way to secure the Erlang node is to block the port 4369.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;nodename&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Erlang Node Name--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc77&quot;&gt;5.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#nodename&quot;&gt;Erlang Node Name&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;nodename&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;An Erlang node may have a node name.
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc79&quot;&gt;5.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#nodename&quot;&gt;Erlang Node Name&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;nodename&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;An Erlang node may have a node name.
 The name can be short (if indicated with the command-line parameter &lt;TT&gt;-sname&lt;/TT&gt;)
 or long (if indicated with the parameter &lt;TT&gt;-name&lt;/TT&gt;).
 Starting an Erlang node with -sname limits the communication between Erlang nodes to the LAN.&lt;/P&gt;&lt;P&gt;Using the option &lt;TT&gt;-sname&lt;/TT&gt; instead of &lt;TT&gt;-name&lt;/TT&gt; is a simple method
@@ -3547,7 +3698,7 @@ However, it is not ultimately effective to prevent access to the Erlang node,
 because it may be possible to fake the fact that you are on another network
 using a modified version of Erlang &lt;TT&gt;epmd&lt;/TT&gt;.
 The recommended way to secure the Erlang node is to block the port 4369.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;secure-files&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Securing Sensible Files--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc78&quot;&gt;5.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#secure-files&quot;&gt;Securing Sensible Files&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;secure-files&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; stores sensible data in the file system either in plain text or binary files.
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc80&quot;&gt;5.5&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#secure-files&quot;&gt;Securing Sensible Files&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;secure-files&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; stores sensible data in the file system either in plain text or binary files.
 The file system permissions should be set to only allow the proper user to read,
 write and execute those files and directories.&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 &lt;B&gt;&lt;TT&gt;ejabberd configuration file: /etc/ejabberd/ejabberd.cfg&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
@@ -3567,9 +3718,9 @@ so it is preferable to secure the whole &lt;TT&gt;/var/lib/ejabberd/&lt;/TT&gt; directory.
 &lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;Erlang cookie file: /var/lib/ejabberd/.erlang.cookie&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt;
 See section &lt;A HREF=&quot;#cookie&quot;&gt;5.3&lt;/A&gt;.
 &lt;/DD&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;clustering&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Clustering--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc79&quot;&gt;Chapter&amp;#XA0;6&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#clustering&quot;&gt;Clustering&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;clustering&quot;&gt;&lt;/A&gt; 
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc81&quot;&gt;Chapter&amp;#XA0;6&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#clustering&quot;&gt;Clustering&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;clustering&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;howitworks&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section How it Works--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc80&quot;&gt;6.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#howitworks&quot;&gt;How it Works&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;howitworks&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc82&quot;&gt;6.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#howitworks&quot;&gt;How it Works&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;howitworks&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;A Jabber domain is served by one or more &lt;TT&gt;ejabberd&lt;/TT&gt; nodes. These nodes can
 be run on different machines that are connected via a network. They all
 must have the ability to connect to port 4369 of all another nodes, and must
@@ -3583,29 +3734,29 @@ router,
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;session manager,
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;s2s manager.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;router&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Router--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc81&quot;&gt;6.1.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#router&quot;&gt;Router&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;router&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc83&quot;&gt;6.1.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#router&quot;&gt;Router&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;router&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module is the main router of Jabber packets on each node. It
 routes them based on their destination&amp;#X2019;s domains. It uses a global
 routing table. The domain of the packet&amp;#X2019;s destination is searched in the
 routing table, and if it is found, the packet is routed to the
 appropriate process. If not, it is sent to the s2s manager.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;localrouter&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Local Router--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc82&quot;&gt;6.1.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#localrouter&quot;&gt;Local Router&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;localrouter&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc84&quot;&gt;6.1.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#localrouter&quot;&gt;Local Router&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;localrouter&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module routes packets which have a destination domain equal to
 one of this server&amp;#X2019;s host names. If the destination JID has a non-empty user
 part, it is routed to the session manager, otherwise it is processed depending
 on its content.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;sessionmanager&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Session Manager--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc83&quot;&gt;6.1.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#sessionmanager&quot;&gt;Session Manager&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;sessionmanager&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc85&quot;&gt;6.1.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#sessionmanager&quot;&gt;Session Manager&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;sessionmanager&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module routes packets to local users. It looks up to which user
 resource a packet must be sent via a presence table. Then the packet is
 either routed to the appropriate c2s process, or stored in offline
 storage, or bounced back.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;s2smanager&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection s2s Manager--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc84&quot;&gt;6.1.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#s2smanager&quot;&gt;s2s Manager&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;s2smanager&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc86&quot;&gt;6.1.4&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#s2smanager&quot;&gt;s2s Manager&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;s2smanager&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;This module routes packets to other Jabber servers. First, it
 checks if an opened s2s connection from the domain of the packet&amp;#X2019;s
 source to the domain of the packet&amp;#X2019;s destination exists. If that is the case,
 the s2s manager routes the packet to the process
 serving this connection, otherwise a new connection is opened.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;cluster&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Clustering Setup--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc85&quot;&gt;6.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#cluster&quot;&gt;Clustering Setup&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;cluster&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc87&quot;&gt;6.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#cluster&quot;&gt;Clustering Setup&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;cluster&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Suppose you already configured &lt;TT&gt;ejabberd&lt;/TT&gt; on one machine named (&lt;TT&gt;first&lt;/TT&gt;),
 and you need to setup another one to make an &lt;TT&gt;ejabberd&lt;/TT&gt; cluster. Then do
 following steps:&lt;/P&gt;&lt;OL CLASS=&quot;enumerate&quot; type=1&gt;&lt;LI CLASS=&quot;li-enumerate&quot;&gt;
@@ -3643,30 +3794,29 @@ and &amp;#X2018;&lt;CODE&gt;access&lt;/CODE&gt;&amp;#X2019; options because they will be taken from
 enabled only on one machine in the cluster.
 &lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;You can repeat these steps for other machines supposed to serve this
 domain.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;servicelb&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Service Load-Balancing--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc86&quot;&gt;6.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#servicelb&quot;&gt;Service Load-Balancing&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;servicelb&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc88&quot;&gt;6.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#servicelb&quot;&gt;Service Load-Balancing&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;servicelb&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;componentlb&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Components Load-Balancing--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc87&quot;&gt;6.3.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#componentlb&quot;&gt;Components Load-Balancing&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;componentlb&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;domainlb&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Domain Load-Balancing Algorithm--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc88&quot;&gt;6.3.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#domainlb&quot;&gt;Domain Load-Balancing Algorithm&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;domainlb&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; includes an algorithm to load balance the components that are plugged on an &lt;TT&gt;ejabberd&lt;/TT&gt; cluster. It means that you can plug one or several instances of the same component on each &lt;TT&gt;ejabberd&lt;/TT&gt; cluster and that the traffic will be automatically distributed.&lt;/P&gt;&lt;P&gt;The default distribution algorithm try to deliver to a local instance of a component. If several local instances are available, one instance is chosen randomly. If no instance is available locally, one instance is chosen randomly among the remote component instances.&lt;/P&gt;&lt;P&gt;If you need a different behaviour, you can change the load balancing behaviour with the option &lt;TT&gt;domain_balancing&lt;/TT&gt;. The syntax of the option is the following:&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{domain_balancing, &quot;component.example.com&quot;, &amp;lt;balancing_criterium&amp;gt;}.
-&lt;/PRE&gt;&lt;P&gt;Several balancing criteria are available:
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc89&quot;&gt;6.3.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#componentlb&quot;&gt;Components Load-Balancing&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;componentlb&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;domainlb&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Domain Load-Balancing Algorithm--&gt;
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc90&quot;&gt;6.3.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#domainlb&quot;&gt;Domain Load-Balancing Algorithm&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;domainlb&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; includes an algorithm to load balance the components that are plugged on an &lt;TT&gt;ejabberd&lt;/TT&gt; cluster. It means that you can plug one or several instances of the same component on each &lt;TT&gt;ejabberd&lt;/TT&gt; cluster and that the traffic will be automatically distributed.&lt;/P&gt;&lt;P&gt;The default distribution algorithm try to deliver to a local instance of a component. If several local instances are available, one instance is chosen randomly. If no instance is available locally, one instance is chosen randomly among the remote component instances.&lt;/P&gt;&lt;P&gt;If you need a different behaviour, you can change the load balancing behaviour with the option &lt;TT&gt;domain_balancing&lt;/TT&gt;. The syntax of the option is the following:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{domain_balancing, &quot;component.example.com&quot;, BalancingCriteria}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Several balancing criteria are available:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 &lt;TT&gt;destination&lt;/TT&gt;: the full JID of the packet &lt;TT&gt;to&lt;/TT&gt; attribute is used.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;TT&gt;source&lt;/TT&gt;: the full JID of the packet &lt;TT&gt;from&lt;/TT&gt; attribute is used.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;TT&gt;bare_destination&lt;/TT&gt;: the bare JID (without resource) of the packet &lt;TT&gt;to&lt;/TT&gt; attribute is used.
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;&lt;TT&gt;bare_source&lt;/TT&gt;: the bare JID (without resource) of the packet &lt;TT&gt;from&lt;/TT&gt; attribute is used.
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;If the value corresponding to the criteria is the same, the same component instance in the cluster will be used.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;lbbuckets&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC subsection Load-Balancing Buckets--&gt;
-&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc89&quot;&gt;6.3.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#lbbuckets&quot;&gt;Load-Balancing Buckets&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;lbbuckets&quot;&gt;&lt;/A&gt; 
-&lt;/P&gt;&lt;P&gt;When there is a risk of failure for a given component, domain balancing can cause service trouble. If one component is failing the service will not work correctly unless the sessions are rebalanced.&lt;/P&gt;&lt;P&gt;In this case, it is best to limit the problem to the sessions handled by the failing component. This is what the &lt;TT&gt;domain_balancing_component_number&lt;/TT&gt; option does, making the load balancing algorithm not dynamic, but sticky on a fix number of component instances.&lt;/P&gt;&lt;P&gt;The syntax is the following:
-&lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{domain_balancing_component_number, &quot;component.example.com&quot;, N}
-&lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;debugging&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Debugging--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc90&quot;&gt;Chapter&amp;#XA0;7&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#debugging&quot;&gt;Debugging&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;debugging&quot;&gt;&lt;/A&gt; 
+&lt;H3 CLASS=&quot;subsection&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc91&quot;&gt;6.3.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#lbbuckets&quot;&gt;Load-Balancing Buckets&lt;/A&gt;&lt;/H3&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;lbbuckets&quot;&gt;&lt;/A&gt; 
+&lt;/P&gt;&lt;P&gt;When there is a risk of failure for a given component, domain balancing can cause service trouble. If one component is failing the service will not work correctly unless the sessions are rebalanced.&lt;/P&gt;&lt;P&gt;In this case, it is best to limit the problem to the sessions handled by the failing component. This is what the &lt;TT&gt;domain_balancing_component_number&lt;/TT&gt; option does, making the load balancing algorithm not dynamic, but sticky on a fix number of component instances.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{domain_balancing_component_number, &quot;component.example.com&quot;, Number}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt; &lt;A NAME=&quot;debugging&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Debugging--&gt;
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc92&quot;&gt;Chapter&amp;#XA0;7&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#debugging&quot;&gt;Debugging&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;debugging&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;logfiles&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Log Files--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc91&quot;&gt;7.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#logfiles&quot;&gt;Log Files&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;logfiles&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;An &lt;TT&gt;ejabberd&lt;/TT&gt; node writes two log files:
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc93&quot;&gt;7.1&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#logfiles&quot;&gt;Log Files&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;logfiles&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;An &lt;TT&gt;ejabberd&lt;/TT&gt; node writes two log files:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 	&lt;B&gt;&lt;TT&gt;ejabberd.log&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; is the ejabberd service log, with the messages reported by &lt;TT&gt;ejabberd&lt;/TT&gt; code
 	&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;sasl.log&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; is the Erlang/OTP system log, with the messages reported by Erlang/OTP using SASL (System Architecture Support Libraries)
-&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;The option &lt;TT&gt;loglevel&lt;/TT&gt; modifies the verbosity of the file ejabberd.log.
-The possible levels are:
+&lt;/DD&gt;&lt;/DL&gt;&lt;P&gt;The option &lt;TT&gt;loglevel&lt;/TT&gt; modifies the verbosity of the file ejabberd.log. The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{loglevel, Level}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The possible &lt;TT&gt;Level&lt;/TT&gt; are:
 &lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;
 	&lt;B&gt;&lt;TT&gt;0&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; No ejabberd log at all (not recommended)
 	&lt;/DD&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;1&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;DD CLASS=&quot;dd-description&quot;&gt; Critical
@@ -3683,30 +3833,32 @@ The ejabberdctl command &lt;TT&gt;reopen-log&lt;/TT&gt;
 (please refer to section &lt;A HREF=&quot;#ectl-commands&quot;&gt;4.1.1&lt;/A&gt;)
 reopens the log files,
 and also renames the old ones if you didn&amp;#X2019;t rename them.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;debugconsole&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Debug Console--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc92&quot;&gt;7.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#debugconsole&quot;&gt;Debug Console&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;debugconsole&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The Debug Console is an Erlang shell attached to an already running &lt;TT&gt;ejabberd&lt;/TT&gt; server.
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc94&quot;&gt;7.2&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#debugconsole&quot;&gt;Debug Console&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;debugconsole&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;The Debug Console is an Erlang shell attached to an already running &lt;TT&gt;ejabberd&lt;/TT&gt; server.
 With this Erlang shell, an experienced administrator can perform complex tasks.&lt;/P&gt;&lt;P&gt;This shell gives complete control over the &lt;TT&gt;ejabberd&lt;/TT&gt; server,
 so it is important to use it with extremely care.
 There are some simple and safe examples in the article
 &lt;A HREF=&quot;http://www.ejabberd.im/interconnect-erl-nodes&quot;&gt;Interconnecting Erlang Nodes&lt;/A&gt;&lt;/P&gt;&lt;P&gt;To exit the shell, close the window or press the keys: control+c control+c.&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;watchdog&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC section Watchdog Alerts--&gt;
-&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc93&quot;&gt;7.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#watchdog&quot;&gt;Watchdog Alerts&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;watchdog&quot;&gt;&lt;/A&gt; 
+&lt;H2 CLASS=&quot;section&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc95&quot;&gt;7.3&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#watchdog&quot;&gt;Watchdog Alerts&lt;/A&gt;&lt;/H2&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;watchdog&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;&lt;TT&gt;ejabberd&lt;/TT&gt; includes a watchdog mechanism that may be useful to developers
 when troubleshooting a problem related to memory usage.
 If a process in the &lt;TT&gt;ejabberd&lt;/TT&gt; server consumes more memory than the configured threshold,
 a message is sent to the Jabber accounts defined with the option
 &lt;TT&gt;watchdog_admins&lt;/TT&gt;
- in the &lt;TT&gt;ejabberd&lt;/TT&gt; configuration file.&lt;/P&gt;&lt;P&gt;The memory consumed is measured in &lt;TT&gt;words&lt;/TT&gt;:
+ in the &lt;TT&gt;ejabberd&lt;/TT&gt; configuration file.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{watchdog_admins, [JID, ...]}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;The memory consumed is measured in &lt;TT&gt;words&lt;/TT&gt;:
 a word on 32-bit architecture is 4 bytes,
 and a word on 64-bit architecture is 8 bytes.
 The threshold by default is 1000000 words.
 This value can be configured with the option &lt;TT&gt;watchdog_large_heap&lt;/TT&gt;,
-or in a conversation with the watchdog alert bot.&lt;/P&gt;&lt;P&gt;Example configuration:
+or in a conversation with the watchdog alert bot.&lt;/P&gt;&lt;P&gt;The syntax is:
+&lt;/P&gt;&lt;DL CLASS=&quot;description&quot;&gt;&lt;DT CLASS=&quot;dt-description&quot;&gt;&lt;B&gt;&lt;TT&gt;{watchdog_large_heap, Number}.&lt;/TT&gt;&lt;/B&gt;&lt;/DT&gt;&lt;/DL&gt;&lt;P&gt;Example configuration:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{watchdog_admins, [&quot;admin2@localhost&quot;, &quot;admin2@example.org&quot;]}.
 {watchdog_large_heap, 30000000}.
 &lt;/PRE&gt;&lt;P&gt;To remove watchdog admins, remove them in the option.
 To remove all watchdog admins, set the option with an empty list:
 &lt;/P&gt;&lt;PRE CLASS=&quot;verbatim&quot;&gt;{watchdog_admins, []}.
 &lt;/PRE&gt;&lt;P&gt; &lt;A NAME=&quot;i18ni10n&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Internationalization and Localization--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc94&quot;&gt;Appendix&amp;#XA0;A&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#i18ni10n&quot;&gt;Internationalization and Localization&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;i18ni10n&quot;&gt;&lt;/A&gt; 
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc96&quot;&gt;Appendix&amp;#XA0;A&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#i18ni10n&quot;&gt;Internationalization and Localization&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;i18ni10n&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;The source code of &lt;TT&gt;ejabberd&lt;/TT&gt; supports localization.
 The translators can edit the
 &lt;A HREF=&quot;http://www.gnu.org/software/gettext/&quot;&gt;gettext&lt;/A&gt; .po files
@@ -3741,9 +3893,9 @@ HTTP header &amp;#X2018;Accept-Language: ru&amp;#X2019;&lt;/TD&gt;&lt;/TR&gt;
 &lt;/TABLE&gt;&lt;/DIV&gt;
 &lt;A NAME=&quot;fig:webadmmainru&quot;&gt;&lt;/A&gt;
 &lt;DIV CLASS=&quot;center&quot;&gt;&lt;HR WIDTH=&quot;80%&quot; SIZE=2&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt; &lt;A NAME=&quot;releasenotes&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Release Notes--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc95&quot;&gt;Appendix&amp;#XA0;B&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#releasenotes&quot;&gt;Release Notes&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;releasenotes&quot;&gt;&lt;/A&gt; 
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc97&quot;&gt;Appendix&amp;#XA0;B&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#releasenotes&quot;&gt;Release Notes&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;releasenotes&quot;&gt;&lt;/A&gt; 
 &lt;/P&gt;&lt;P&gt;Release notes are available from &lt;A HREF=&quot;http://www.process-one.net/en/ejabberd/release_notes/&quot;&gt;ejabberd Home Page&lt;/A&gt;&lt;/P&gt;&lt;P&gt; &lt;A NAME=&quot;acknowledgements&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Acknowledgements--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc96&quot;&gt;Appendix&amp;#XA0;C&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#acknowledgements&quot;&gt;Acknowledgements&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;acknowledgements&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;Thanks to all people who contributed to this guide:
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc98&quot;&gt;Appendix&amp;#XA0;C&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#acknowledgements&quot;&gt;Acknowledgements&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;acknowledgements&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;Thanks to all people who contributed to this guide:
 &lt;/P&gt;&lt;UL CLASS=&quot;itemize&quot;&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;
 Alexey Shchepin (&lt;A HREF=&quot;xmpp:aleksey@jabber.ru&quot;&gt;&lt;TT&gt;xmpp:aleksey@jabber.ru&lt;/TT&gt;&lt;/A&gt;)
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Badlop (&lt;A HREF=&quot;xmpp:badlop@jabberes.org&quot;&gt;&lt;TT&gt;xmpp:badlop@jabberes.org&lt;/TT&gt;&lt;/A&gt;)
@@ -3755,7 +3907,7 @@ Alexey Shchepin (&lt;A HREF=&quot;xmpp:aleksey@jabber.ru&quot;&gt;&lt;TT&gt;xmpp:aleksey@jabber.ru&lt;/TT
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Sergei Golovan (&lt;A HREF=&quot;xmpp:sgolovan@nes.ru&quot;&gt;&lt;TT&gt;xmpp:sgolovan@nes.ru&lt;/TT&gt;&lt;/A&gt;)
 &lt;/LI&gt;&lt;LI CLASS=&quot;li-itemize&quot;&gt;Vsevolod Pelipas (&lt;A HREF=&quot;xmpp:vsevoload@jabber.ru&quot;&gt;&lt;TT&gt;xmpp:vsevoload@jabber.ru&lt;/TT&gt;&lt;/A&gt;)
 &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;A NAME=&quot;copyright&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;!--TOC chapter Copyright Information--&gt;
-&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc97&quot;&gt;Appendix&amp;#XA0;D&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#copyright&quot;&gt;Copyright Information&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;copyright&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;Ejabberd Installation and Operation Guide.&lt;BR&gt;
+&lt;H1 CLASS=&quot;chapter&quot;&gt;&lt;!--SEC ANCHOR --&gt;&lt;A NAME=&quot;htoc99&quot;&gt;Appendix&amp;#XA0;D&lt;/A&gt;&amp;#XA0;&amp;#XA0;&lt;A HREF=&quot;#copyright&quot;&gt;Copyright Information&lt;/A&gt;&lt;/H1&gt;&lt;!--SEC END --&gt;&lt;P&gt; &lt;A NAME=&quot;copyright&quot;&gt;&lt;/A&gt; &lt;/P&gt;&lt;P&gt;Ejabberd Installation and Operation Guide.&lt;BR&gt;
 Copyright &amp;#XA9; 2003 &amp;#X2014; 2009 ProcessOne&lt;/P&gt;&lt;P&gt;This document is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2</diff>
      <filename>doc/guide.html</filename>
    </modified>
    <modified>
      <diff>@@ -59,6 +59,7 @@
 \newcommand{\shell}[1]{\texttt{#1}}
 \newcommand{\ejabberd}{\texttt{ejabberd}}
 \newcommand{\Jabber}{Jabber}
+\newcommand{\esyntax}[1]{\begin{description}\titem{#1}\end{description}}
 
 %% Modules
 \newcommand{\module}[1]{\texttt{#1}}
@@ -77,12 +78,14 @@
 \newcommand{\modmuclog}{\module{mod\_muc\_log}}
 \newcommand{\modoffline}{\module{mod\_offline}}
 \newcommand{\modofflineodbc}{\module{mod\_offline\_odbc}}
+\newcommand{\modping}{\module{mod\_ping}}
 \newcommand{\modprivacy}{\module{mod\_privacy}}
 \newcommand{\modprivacyodbc}{\module{mod\_privacy\_odbc}}
 \newcommand{\modprivate}{\module{mod\_private}}
 \newcommand{\modprivateodbc}{\module{mod\_private\_odbc}}
 \newcommand{\modproxy}{\module{mod\_proxy65}}
 \newcommand{\modpubsub}{\module{mod\_pubsub}}
+\newcommand{\modpubsubodbc}{\module{mod\_pubsub\_odbc}}
 \newcommand{\modregister}{\module{mod\_register}}
 \newcommand{\modroster}{\module{mod\_roster}}
 \newcommand{\modrosterodbc}{\module{mod\_roster\_odbc}}
@@ -105,10 +108,10 @@
 %\ifthenelse{\boolean{modhttpbind}}{\input{mod_http_bind.tex}}{}
 
 %% Common options
-\newcommand{\iqdiscitem}[1]{\titem{iqdisc} \ind{options!iqdisc}This specifies
+\newcommand{\iqdiscitem}[1]{\titem{\{iqdisc, Discipline\}} \ind{options!iqdisc}This specifies
 the processing discipline for #1 IQ queries (see section~\ref{modiqdiscoption}).}
 \newcommand{\hostitem}[1]{
-  \titem{host} \ind{options!host} This option defines the Jabber ID of the
+  \titem{\{host, HostName\}} \ind{options!host} This option defines the Jabber ID of the
   service. If the \texttt{host} option is not specified, the Jabber ID will be the
   hostname of the virtual host with the prefix `\jid{#1.}'. The keyword &quot;@HOST@&quot;
   is replaced at start time with the real virtual host name.
@@ -169,7 +172,7 @@ ejabberd Development Team
 \gdef\ahrefurl#1{\href{#1}{\texttt{#1}}}
 \gdef\footahref#1#2{#2\footnote{\href{#1}{\texttt{#1}}}}
 \end{latexonly}
-\newcommand{\txepref}[2]{\footahref{http://www.xmpp.org/extensions/xep-#1.html}{#2}}
+\newcommand{\txepref}[2]{\footahref{http://xmpp.org/extensions/xep-#1.html}{#2}}
 \newcommand{\xepref}[1]{\txepref{#1}{XEP-#1}}
 
 \begin{document}
@@ -309,6 +312,7 @@ To compile \ejabberd{} on a `Unix-like' operating system, you need:
 \item PAM library. Optional. For Pluggable Authentication Modules (PAM). See section \ref{pam}.
 \item GNU Iconv 1.8 or higher, for the IRC Transport (mod\_irc). Optional. Not needed on systems with GNU Libc. See section \ref{modirc}.
 \item ImageMagick's Convert program. Optional. For CAPTCHA challenges. See section \ref{captcha}.
+\item exmpp 0.9.1 or higher. Optional. For import/export user data with \xepref{0227} XML files.
 \end{itemize}
 
 \makesubsection{download}{Download Source Code}
@@ -606,7 +610,7 @@ host name(s) stored in the database will be used.
 
 
 You can override the old values stored in the database by adding next lines to
-the configuration file:
+the beginning of the configuration file:
 \begin{verbatim}
 override_global.
 override_local.
@@ -622,20 +626,18 @@ and ACLs will be removed before new ones are added.
 The option \option{hosts} defines a list containing one or more domains that
 \ejabberd{} will serve.
 
+The syntax is:
+\esyntax{\{hosts, [HostName, ...]\}.}
+
 Examples:
 \begin{itemize}
 \item Serving one domain:
 \begin{verbatim}
 {hosts, [&quot;example.org&quot;]}.
 \end{verbatim}
-\item Serving one domain, and backwards compatible with older \ejabberd{}
-  versions:
+\item Serving three domains:
 \begin{verbatim}
-{host, &quot;example.org&quot;}.
-\end{verbatim}
-\item Serving two domains:
-\begin{verbatim}
-{hosts, [&quot;example.net&quot;, &quot;example.com&quot;]}.
+{hosts, [&quot;example.net&quot;, &quot;example.com&quot;, &quot;jabber.somesite.org&quot;]}.
 \end{verbatim}
 \end{itemize}
 
@@ -643,11 +645,10 @@ Examples:
 \ind{virtual hosting}\ind{virtual hosts}\ind{virtual domains}
 
 Options can be defined separately for every virtual host using the
-\term{host\_config} option.\ind{options!host\_config} It has the following
-syntax:
-\begin{verbatim}
-{host_config, &lt;hostname&gt;, [&lt;option&gt;, &lt;option&gt;, ...]}.
-\end{verbatim}
+\term{host\_config} option.
+
+The syntax is: \ind{options!host\_config}
+\esyntax{\{host\_config, HostName, [Option, ...]\}}
 
 Examples:
 \begin{itemize}
@@ -683,14 +684,10 @@ Examples:
 To define specific ejabberd modules in a virtual host,
 you can define the global \term{modules} option with the common modules,
 and later add specific modules to certain virtual hosts.
-To accomplish that, instead of defining each option in \term{host\_config} with the syntax
-\begin{verbatim}
-{&lt;option-name&gt;, &lt;option-value&gt;}
-\end{verbatim}
+To accomplish that, instead of defining each option in \term{host\_config} with the general syntax
+\esyntax{\{OptionName, OptionValue\}}
 use this syntax:
-\begin{verbatim}
-{{add, &lt;option-name&gt;}, &lt;option-value&gt;}
-\end{verbatim}
+\esyntax{\{\{add, OptionName\}, OptionValue\}}
 
 In this example three virtual hosts have some similar modules, but there are also
 other different modules for some specific virtual hosts:
@@ -732,32 +729,26 @@ other different modules for some specific virtual hosts:
 \makesubsection{listened}{Listening Ports}
 \ind{options!listen}
 
-The option \option{listen} defines for which addresses and ports \ejabberd{}
+The option \option{listen} defines for which ports, addresses and network protocols \ejabberd{}
 will listen and what services will be run on them. Each element of the list is a
 tuple with the following elements:
 \begin{itemize}
-\item Port number. Optionally also the IP address.
+\item Port number. Optionally also the IP address and/or a transport protocol.
 \item Listening module that serves this port.
 \item Options for the TCP socket and for the listening module.
 \end{itemize}
 
-With the basic syntax the ports will listen on all IPv4 network addresses:
-\begin{verbatim}
-{listen, [
-          {&lt;port-number&gt;, &lt;module&gt;, [&lt;options&gt;]},
-          {&lt;port-number&gt;, &lt;module&gt;, [&lt;options&gt;]},
-          ...
-          {&lt;port-number&gt;, &lt;module&gt;, [&lt;options&gt;]}
-         ]}.
-\end{verbatim}
+The option syntax is:
+\esyntax{\{listen, [Listener, ...]\}.}
 
-It is possible to specify the IP address for a port using the full syntax:
-\begin{verbatim}
-          {{&lt;port-number&gt;, &lt;ip-address&gt;}, &lt;module&gt;, [&lt;options&gt;]}
-\end{verbatim}
+To define a listener there are several syntax.
+\esyntax{\{PortNumber, Module, [Option, ...]\}}
+\esyntax{\{\{PortNumber, IPaddress\}, Module, [Option, ...]\}}
+\esyntax{\{\{PortNumber, TransportProtocol\}, Module, [Option, ...]\}}
+\esyntax{\{\{PortNumber, IPaddress, TransportProtocol\}, Module, [Option, ...]\}}
 
 
-\makesubsubsection{listened-port}{Port Number and IP Address}
+\makesubsubsection{listened-port}{Port Number, IP Address and Transport Protocol}
 
 The port number defines which port to listen for incoming connections.
 It can be a Jabber/XMPP standard port 
@@ -769,6 +760,7 @@ The socket will listen only in that network interface.
 It is possible to specify a generic address,
 so \ejabberd{} will listen in all addresses.
 Depending in the type of the IP address, IPv4 or IPv6 will be used.
+When not specified the IP address, it will listen on all IPv4 network addresses.
 
 Some example values for IP address:
 \begin{itemize}
@@ -781,6 +773,9 @@ Some example values for IP address:
 \item \verb|{16#fdca, 16#8ab6, 16#a243, 16#75ef, 0, 0, 0, 1}| is the IPv6 address \verb|FDCA:8AB6:A243:75EF::1/128|
 \end{itemize}
 
+The transport protocol can be \term{tcp} or \term{udp}.
+Default is \term{tcp}.
+
 
 \makesubsubsection{listened-module}{Listening Module}
 
@@ -801,6 +796,10 @@ The available modules, their purpose and the options allowed by each one are:
     (as defined in the Jabber Component Protocol (\xepref{0114}).\\
     Options: \texttt{access}, \texttt{hosts},
     \texttt{shaper}, \texttt{service\_check\_from}
+  \titem{\texttt{ejabberd\_stun}}
+    Handles STUN Binding requests as defined in
+    \footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389}.\\
+    Options: \texttt{certfile}
   \titem{\texttt{ejabberd\_http}}
     Handles incoming HTTP connections.\\
     Options: \texttt{captcha}, \texttt{certfile}, \texttt{http\_bind}, \texttt{http\_poll},
@@ -812,19 +811,19 @@ The available modules, their purpose and the options allowed by each one are:
 
 This is a detailed description of each option allowed by the listening modules:
 \begin{description}
-  \titem{\{access, &lt;access rule&gt;\}} \ind{options!access}This option defines
+  \titem{\{access, AccessName\}} \ind{options!access}This option defines
     access to the port. The default value is \term{all}.
   \titem{\{certfile, Path\}} Full path to a file containing the default SSL certificate.
     To define a certificate file specific for a given domain, use the global option \term{domain\_certfile}.
-  \titem{service\_check\_from} \ind{options!service\_check\_from}
+  \titem{\{service\_check\_from, true|false\}} \ind{options!service\_check\_from}
     This option can be used with \term{ejabberd\_service} only. It is
     used to disable control on the from field on packets send by an
     external components. The option can be either \term{true} or
     \term{false}. The default value is \term{true} which conforms to \xepref{0114}.
-  \titem{\{hosts, [Hostnames], [HostOptions]\}} \ind{options!hosts}
+  \titem{\{hosts, [Hostname, ...], [HostOption, ...]\}} \ind{options!hosts}
     The external Jabber component that connects to this \term{ejabberd\_service}
     can serve one or more hostnames.
-    In \term{HostOptions} you can define options for the component;
+    As \term{HostOption} you can define options for the component;
     currently the only allowed option is the password required to the component
     when attempt to connect to ejabberd: \poption{\{password, Secret\}}.
     Note that you cannot define in a single \term{ejabberd\_service} components of
@@ -873,7 +872,7 @@ This is a detailed description of each option allowed by the listening modules:
     connections and 131072 for s2s connections. s2s max stanza size
     must always much higher than c2s limit. Change this value with
     extreme care as it can cause unwanted disconnect if set too low.
-  \titem{\{request\_handlers, [\{Path, Module\}]\}} To define one or several handlers that will serve HTTP requests.
+  \titem{\{request\_handlers, [ \{Path, Module\}, ...]\}} To define one or several handlers that will serve HTTP requests.
     The Path is a list of strings; so the URIs that start with that Path will be served by Module.
     For example, if you want \term{mod\_foo} to serve the URIs that start with \term{/a/b/},
     and you also want \term{mod\_http\_bind} to serve the URIs \term{/http-bind/},
@@ -883,7 +882,7 @@ This is a detailed description of each option allowed by the listening modules:
     Note that \xepref{0114} requires that the domain must match the hostname of the component.
     Only enable this option if you are completely sure you need to enable it.
     Default value: false.
-  \titem{\{shaper, &lt;access rule&gt;\}} \ind{options!shaper}This option defines a
+  \titem{\{shaper, none|ShaperName\}} \ind{options!shaper}This option defines a
     shaper for the port (see section~\ref{shapers}). The default value
     is \term{none}.
   \titem{starttls} \ind{options!starttls}\ind{STARTTLS}This option
@@ -901,7 +900,7 @@ This is a detailed description of each option allowed by the listening modules:
     commonly on port 5223 for client-to-server communications.
     But this method is nowadays deprecated and not recommended.
     The preferable encryption method is STARTTLS on port 5222, as defined 
-    \footahref{http://www.xmpp.org/specs/rfc3920.html\#tls}{RFC 3920: XMPP Core},
+    \footahref{http://xmpp.org/specs/rfc3920.html\#tls}{RFC 3920: XMPP Core},
     which can be enabled in \ejabberd{} with the option \term{starttls}.
     If this option is set, you should also set the \option{certfile} option.
   \titem{web\_admin} \ind{options!web\_admin}\ind{web admin}This option
@@ -930,6 +929,10 @@ There are some additional global options that can be specified in the ejabberd c
   Specify which address families to try, in what order, and connect timeout in milliseconds.
   By default it first tries connecting with IPv4, if that fails it tries using IPv6,
   with a timeout of 10000 milliseconds.
+  \titem{\{s2s\_dns\_options, [ \{Property, Value\}, ...]\}}
+  \ind{options!s2s\_dns\_options}Define properties to use for DNS resolving.
+  Allowed Properties are: \term{timeout} in seconds which default value is \term{10}
+  and \term{retries} which default value is \term{2}.
   \titem{\{s2s\_default\_policy, allow|deny\}}
   The default policy for incoming and outgoing s2s connections to other Jabber servers.
   The default value is \term{allow}.
@@ -952,6 +955,7 @@ However, the c2s and s2s connections to the domain \term{example.com} use the fi
   and also allows plain connections for old clients.
 \item Port 5223 listens for c2s connections with the old SSL.
 \item Port 5269 listens for s2s connections with STARTTLS. The socket is set for IPv6 instead of IPv4.
+\item Port 3478 listens for STUN requests over UDP.
 \item Port 5280 listens for HTTP requests, and serves the HTTP Poll service.
 \item Port 5281 listens for HTTP requests, and serves the Web Admin using HTTPS as explained in
   section~\ref{webadmin}. The socket only listens connections to the IP address 127.0.0.1.
@@ -976,6 +980,7 @@ However, the c2s and s2s connections to the domain \term{example.com} use the fi
                                    {shaper, s2s_shaper},
                                    {max_stanza_size, 131072}
                                   ]},
+  {{3478, udp}, ejabberd_stun, []},
   {5280, ejabberd_http, [
                          http_poll
                         ]},
@@ -1119,11 +1124,9 @@ you have to make the transports log and do \ind{XDB}XDB by themselves:
 \makesubsection{auth}{Authentication}
 \ind{authentication}\ind{options!auth\_method}
 
-The option \option{auth\_method} defines the authentication method that is used
-for user authentication:
-\begin{verbatim}
-{auth_method, [&lt;method&gt;]}.
-\end{verbatim}
+The option \option{auth\_method} defines the authentication methods that are used
+for user authentication. The syntax is:
+\esyntax{\{auth\_method, [Method, ...]\}.}
 
 The following authentication methods are supported by \ejabberd{}:
 \begin{itemize}
@@ -1143,11 +1146,7 @@ Account creation is only supported by internal and odbc methods.
 \ind{internal authentication}\ind{Mnesia}
 
 \ejabberd{} uses its internal Mnesia database as the default authentication method.
-
-\begin{itemize}
-\item \term{auth\_method}: The value \term{internal} will enable the internal
-  authentication method.
-\end{itemize}
+The value \term{internal} will enable the internal authentication method.
 
 Examples:
 \begin{itemize}
@@ -1166,6 +1165,8 @@ Examples:
 \makesubsubsection{saslanonymous}{SASL Anonymous and Anonymous Login}
 \ind{sasl anonymous}\ind{anonymous login}
 
+The value \term{anonymous} will enable the internal authentication method.
+
 %TODO: introduction; tell what people can do with this
 The anonymous authentication method can be configured with the following
 options. Remember that you can use the \term{host\_config} option to set virtual
@@ -1173,21 +1174,19 @@ host specific options (see section~\ref{virtualhost}). Note that there also
 is a detailed tutorial regarding \footahref{http://support.process-one.net/doc/display/MESSENGER/Anonymous+users+support}{SASL
 Anonymous and anonymous login configuration}.
 
-\begin{itemize}
-\item \term{auth\_method}: The value \term{anonymous} will enable the anonymous
-  authentication method.
-\item \term{allow\_multiple\_connections}: This value for this option can be
-  either \term{true} or \term{false} and is only used when the anonymous mode is
+\begin{description}
+\titem{\{allow\_multiple\_connections, false|true\}} This option is only used
+  when the anonymous mode is
   enabled. Setting it to \term{true} means that the same username can be taken
   multiple times in anonymous login mode if different resource are used to
   connect. This option is only useful in very special occasions. The default
   value is \term{false}.
-\item \term{anonymous\_protocol}: This option can take three values:
-  \term{sasl\_anon}, \term{login\_anon} or \term{both}. \term{sasl\_anon} means
+\titem{\{anonymous\_protocol, sasl\_anon | login\_anon | both\}} 
+  \term{sasl\_anon} means
   that the SASL Anonymous method will be used. \term{login\_anon} means that the
   anonymous login method will be used. \term{both} means that SASL Anonymous and
   login anonymous are both enabled.
-\end{itemize}
+\end{description}
 
 Those options are defined for each virtual host with the \term{host\_config}
 parameter (see section~\ref{virtualhost}).
@@ -1240,7 +1239,7 @@ PAM authentication is disabled by default, so you have to configure and compile
 
 Options:
 \begin{description}
-\titem{pam\_service}\ind{options!pam\_service}This option defines the PAM service name.
+\titem{\{pam\_service, Name\}}\ind{options!pam\_service}This option defines the PAM service name.
 Default is \term{&quot;ejabberd&quot;}. Refer to the PAM documentation of your operation system
 for more information.
 \end{description}
@@ -1297,75 +1296,74 @@ then \term{/etc/nssswitch.conf} must be configured to use \term{winbind} as well
 
 Access control in \ejabberd{} is performed via Access Control Lists (ACLs). The
 declarations of ACLs in the configuration file have the following syntax:
-\begin{verbatim}
-{acl, &lt;aclname&gt;, {&lt;acltype&gt;, ...}}.
-\end{verbatim}
-\term{&lt;acltype&gt;} can be one of the following:
+\esyntax{\{acl, ACLName, ACLValue\}.}
+
+\term{ACLValue} can be one of the following:
 \begin{description}
 \titem{all} Matches all JIDs. Example:
 \begin{verbatim}
 {acl, all, all}.
 \end{verbatim}
-\titem{\{user, &lt;username&gt;\}} Matches the user with the name
-  \term{&lt;username&gt;} at the first virtual host. Example:
+\titem{\{user, Username\}} Matches the user with the name
+  \term{Username} at the first virtual host. Example:
 \begin{verbatim}
 {acl, admin, {user, &quot;yozhik&quot;}}.
 \end{verbatim}
-\titem{\{user, &lt;username&gt;, &lt;server&gt;\}} Matches the user with the JID
-  \term{&lt;username&gt;@&lt;server&gt;} and any resource. Example:
+\titem{\{user, Username, Server\}} Matches the user with the JID
+  \term{Username@Server} and any resource. Example:
 \begin{verbatim}
 {acl, admin, {user, &quot;yozhik&quot;, &quot;example.org&quot;}}.
 \end{verbatim}
-\titem{\{server, &lt;server&gt;\}} Matches any JID from server
-  \term{&lt;server&gt;}. Example:
+\titem{\{server, Server\}} Matches any JID from server
+  \term{Server}. Example:
 \begin{verbatim}
 {acl, exampleorg, {server, &quot;example.org&quot;}}.
 \end{verbatim}
-\titem{\{resource, &lt;resource&gt;\}} Matches any JID with a resource
-  \term{&lt;resource&gt;}. Example:
+\titem{\{resource, Resource\}} Matches any JID with a resource
+  \term{Resource}. Example:
 \begin{verbatim}
 {acl, mucklres, {resource, &quot;muckl&quot;}}.
 \end{verbatim}
-\titem{\{shared\_group, &lt;groupname&gt;\}} Matches any member of a Shared Roster Group with name \term{&lt;groupname&gt;} in the virtual host. Example:
+\titem{\{shared\_group, Groupname\}} Matches any member of a Shared Roster Group with name \term{Groupname} in the virtual host. Example:
 \begin{verbatim}
 {acl, techgroupmembers, {shared_group, &quot;techteam&quot;}}.
 \end{verbatim}
-\titem{\{shared\_group, &lt;groupname&gt;, &lt;server&gt;\}} Matches any member of a Shared Roster Group with name \term{&lt;groupname&gt;} in the virtual host \term{&lt;server&gt;}. Example:
+\titem{\{shared\_group, Groupname, Server\}} Matches any member of a Shared Roster Group with name \term{Groupname} in the virtual host \term{Server}. Example:
 \begin{verbatim}
 {acl, techgroupmembers, {shared_group, &quot;techteam&quot;, &quot;example.org&quot;}}.
 \end{verbatim}
-\titem{\{user\_regexp, &lt;regexp&gt;\}} Matches any local user with a name that
-  matches \term{&lt;regexp&gt;} on local virtual hosts. Example:
+\titem{\{user\_regexp, Regexp\}} Matches any local user with a name that
+  matches \term{Regexp} on local virtual hosts. Example:
 \begin{verbatim}
 {acl, tests, {user_regexp, &quot;^test[0-9]*$&quot;}}.
 \end{verbatim}
 %$
-\titem{\{user\_regexp, &lt;regexp&gt;, &lt;server&gt;\}} Matches any user with a name
-  that matches \term{&lt;regexp&gt;} at server \term{&lt;server&gt;}. Example:
+\titem{\{user\_regexp, UserRegexp, Server\}} Matches any user with a name
+  that matches \term{Regexp} at server \term{Server}. Example:
 \begin{verbatim}
-{acl, tests, {user_regexp, &quot;^test&quot;, &quot;example.org&quot;}}.
+{acl, tests, {user_Userregexp, &quot;^test&quot;, &quot;example.org&quot;}}.
 \end{verbatim}
-\titem{\{server\_regexp, &lt;regexp&gt;\}} Matches any JID from the server that
-  matches \term{&lt;regexp&gt;}. Example:
+\titem{\{server\_regexp, Regexp\}} Matches any JID from the server that
+  matches \term{Regexp}. Example:
 \begin{verbatim}
 {acl, icq, {server_regexp, &quot;^icq\\.&quot;}}.
 \end{verbatim}
-\titem{\{resource\_regexp, &lt;regexp&gt;\}} Matches any JID with a resource that
-  matches \term{&lt;regexp&gt;}. Example:
+\titem{\{resource\_regexp, Regexp\}} Matches any JID with a resource that
+  matches \term{Regexp}. Example:
 \begin{verbatim}
 {acl, icq, {resource_regexp, &quot;^laptop\\.&quot;}}.
 \end{verbatim}
-\titem{\{node\_regexp, &lt;user\_regexp&gt;, &lt;server\_regexp&gt;\}} Matches any user
-  with a name that matches \term{&lt;user\_regexp&gt;} at any server that matches
-  \term{&lt;server\_regexp&gt;}. Example:
+\titem{\{node\_regexp, UserRegexp, ServerRegexp\}} Matches any user
+  with a name that matches \term{UserRegexp} at any server that matches
+  \term{ServerRegexp}. Example:
 \begin{verbatim}
 {acl, yohzik, {node_regexp, &quot;^yohzik$&quot;, &quot;^example.(com|org)$&quot;}}.
 \end{verbatim}
-\titem{\{user\_glob, &lt;glob&gt;\}}
-\titem{\{user\_glob, &lt;glob&gt;, &lt;server&gt;\}}
-\titem{\{server\_glob, &lt;glob&gt;\}}
-\titem{\{resource\_glob, &lt;glob&gt;\}}
-\titem{\{node\_glob, &lt;user\_glob&gt;, &lt;server\_glob&gt;\}} This is the same as
+\titem{\{user\_glob, Glob\}}
+\titem{\{user\_glob, Glob, Server\}}
+\titem{\{server\_glob, Glob\}}
+\titem{\{resource\_glob, Glob\}}
+\titem{\{node\_glob, UserGlob, ServerGlob\}} This is the same as
   above. However, it uses shell glob patterns instead of regexp. These patterns
   can have the following special characters:
   \begin{description}
@@ -1378,7 +1376,7 @@ declarations of ACLs in the configuration file have the following syntax:
   \end{description}
 \end{description}
 
-The following ACLs are pre-defined:
+The following \term{ACLName} are pre-defined:
 \begin{description}
 \titem{all} Matches any JID.
 \titem{none} Matches no JID.
@@ -1387,15 +1385,11 @@ The following ACLs are pre-defined:
 \makesubsubsection{AccessRights}{Access Rights}
 \ind{access}\ind{ACL}\ind{options!acl}\ind{ACL}\ind{Access Control List}
 
-An entry allowing or denying access to different services looks similar to
-this:
-\begin{verbatim}
-{access, &lt;accessname&gt;, [{allow, &lt;aclname&gt;},
-                        {deny, &lt;aclname&gt;},
-                        ...
-                       ]}.
-\end{verbatim}
-When a JID is checked to have access to \term{&lt;accessname&gt;}, the server
+An entry allowing or denying access to different services.
+The syntax is:
+\esyntax{\{access, AccessName, [ \{allow|deny, ACLName\}, ...]\}.}
+
+When a JID is checked to have access to \term{Accessname}, the server
 sequentially checks if that JID matches any of the ACLs that are named in the
 second elements of the tuples in the list. If it matches, the first element of
 the first matched tuple is returned, otherwise the value `\term{deny}' is
@@ -1408,7 +1402,7 @@ Example:
                      {allow, all}]}.
 \end{verbatim}
 
-The following access rules are pre-defined:
+The following \term{AccessName} are pre-defined:
 \begin{description}
 \titem{all} Always returns the value `\term{allow}'.
 \titem{none} Always returns the value `\term{deny}'.
@@ -1426,19 +1420,12 @@ can be either a number, or \term{infinity}.  The default value is
 \term{infinity}.
 
 The syntax is:
-\begin{verbatim}
-{access, max_user_sessions, [{&lt;maxnumber&gt;, &lt;aclname&gt;},
-                             ...
-                            ]}.
-\end{verbatim}
+\esyntax{\{access, max\_user\_sessions, [ \{MaxNumber, ACLName\}, ...]\}.}
 
-Examples:
-\begin{itemize}
-\item To limit the number of sessions per user to 10 for all users:
+This example limits the number of sessions per user to 5 for all users, and to 10 for admins:
 \begin{verbatim}
-{access, max_user_sessions, [{10, all}]}.
+{access, max_user_sessions, [{10, admin}, {5, all}]}.
 \end{verbatim}
-\end{itemize}
 
 \makesubsubsection{configmaxs2sconns}{Several connections to a remote Jabber server with ACL}
 \ind{options!max\_s2s\_connections}
@@ -1449,11 +1436,7 @@ The default value is \term{1}.
 There's also available the access \term{max\_s2s\_connections\_per\_node}.
 
 The syntax is:
-\begin{verbatim}
-{access, max_s2s_connections, [{&lt;maxnumber&gt;, &lt;aclname&gt;},
-                               ...
-                              ]}.
-\end{verbatim}
+\esyntax{\{access, max\_s2s\_connections, [ \{MaxNumber, ACLName\}, ...]\}.}
 
 Examples:
 \begin{itemize}
@@ -1466,17 +1449,13 @@ Examples:
 \makesubsection{shapers}{Shapers}
 \ind{options!shaper}\ind{options!maxrate}\ind{shapers}\ind{maxrate}\ind{traffic speed}
 
-Shapers enable you to limit connection traffic. The syntax of
-shapers is like this:
-\begin{verbatim}
-{shaper, &lt;shapername&gt;, &lt;kind&gt;}.
-\end{verbatim}
+Shapers enable you to limit connection traffic.
+The syntax is:
+\esyntax{\{shaper, ShaperName, Kind\}.}
 Currently only one kind of shaper called \term{maxrate} is available. It has the
 following syntax:
-\begin{verbatim}
-{maxrate, &lt;rate&gt;}
-\end{verbatim}
-where \term{&lt;rate&gt;} stands for the maximum allowed incoming rate in bytes per
+\esyntax{\{maxrate, Rate\}}
+where \term{Rate} stands for the maximum allowed incoming rate in bytes per
 second.
 When a connection exceeds this limit, \ejabberd{} stops reading from the socket
 until the average rate is again below the allowed maximum.
@@ -1500,9 +1479,14 @@ Examples:
 
 The option \option{language} defines the default language of server strings that
 can be seen by \Jabber{} clients. If a \Jabber{} client does not support
-\option{xml:lang}, the specified language is used. The default value is
-\term{en}. In order to take effect there must be a translation file
-\term{&lt;language&gt;.msg} in \ejabberd{}'s \term{msgs} directory.
+\option{xml:lang}, the specified language is used.
+
+The option syntax is:
+\esyntax{\{language, Language\}.}
+
+The default value is \term{en}.
+In order to take effect there must be a translation file
+\term{Language.msg} in \ejabberd{}'s \term{msgs} directory.
 
 For example, to set Russian as default language:
 \begin{verbatim}
@@ -1556,21 +1540,56 @@ Example configuration:
 ]}.
 \end{verbatim}
 
+\makesubsection{stun}{STUN}
+\ind{options!stun}\ind{stun}
 
-\makesubsection{includeconfigfile}{Include Additional Configuration Files}
-\ind{options!includeconfigfile}\ind{includeconfigfile}
+\ejabberd{} is able to act as a stand-alone STUN server
+(\footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389}). Currently only Binding usage
+is supported. In that role \ejabberd{} helps clients with Jingle ICE (\xepref{0176}) support to discover their external addresses and ports.
 
-The option \option{include\_config\_file} in a configuration file instructs \ejabberd{} to include other configuration files immediately.
+You should configure \term{ejabberd\_stun} listening module as described in \ref{listened} section.
+If \option{certfile} option is defined, \ejabberd{} multiplexes TCP and
+TLS over TCP connections on the same port. Obviously, \option{certfile} option
+is defined for \term{tcp} only. Note however that TCP or TLS over TCP
+support is not required for Binding usage and is reserved for
+\footahref{http://tools.ietf.org/html/draft-ietf-behave-turn-16}{TURN}
+functionality. Feel free to configure \term{udp} transport only.
 
-The basic usage is:
+Example configuration:
 \begin{verbatim}
-{include_config_file, &lt;filename&gt;}.
+{listen,
+ [
+  ...
+  {{3478, udp}, ejabberd_stun, []},
+  {3478, ejabberd_stun, []},
+  {5349, ejabberd_stun, [{certfile, &quot;/etc/ejabberd/server.pem&quot;}]},
+  ...
+ ]
+}.
 \end{verbatim}
-It is also possible to specify suboptions:
+
+You also need to configure DNS SRV records properly so clients can easily discover a
+STUN server serving your XMPP domain. Refer to section
+\footahref{http://tools.ietf.org/html/rfc5389\#section-9}{DNS Discovery of a Server}
+of \footahref{http://tools.ietf.org/html/rfc5389}{RFC 5389} for details.
+
+Example DNS SRV configuration:
 \begin{verbatim}
-{include_config_file, &lt;filename&gt;, [&lt;suboption&gt;, &lt;suboption&gt;, ...]}.
+_stun._udp   IN SRV  0 0 3478 stun.example.com.
+_stun._tcp   IN SRV  0 0 3478 stun.example.com.
+_stuns._tcp  IN SRV  0 0 5349 stun.example.com.
 \end{verbatim}
 
+\makesubsection{includeconfigfile}{Include Additional Configuration Files}
+\ind{options!includeconfigfile}\ind{includeconfigfile}
+
+The option \option{include\_config\_file} in a configuration file instructs \ejabberd{} to include other configuration files immediately.
+
+The basic syntax is:
+\esyntax{\{include\_config\_file, Filename\}.}
+It is possible to specify suboptions using the full syntax:
+\esyntax{\{include\_config\_file, Filename, [Suboption, ...]\}.}
+
 The filename can be indicated either as an absolute path,
 or relative to the main \ejabberd{} configuration file.
 It isn't possible to use wildcards.
@@ -1578,10 +1597,10 @@ The file must exist and be readable.
 
 The allowed suboptions are:
 \begin{description}
-  \titem{\{disallow, [&lt;option&gt;, &lt;option&gt;, ...]\}} Disallows the usage of those options in the included configuration file.
+  \titem{\{disallow, [Optionname, ...]\}} Disallows the usage of those options in the included configuration file.
   The options that match this criteria are not accepted.
   The default value is an empty list: \term{[]}
-  \titem{\{allow\_only, [&lt;option&gt;, &lt;option&gt;, ...]\}} Allows only the usage of those options in the included configuration file.
+  \titem{\{allow\_only, [Optionname, ...]\}} Allows only the usage of those options in the included configuration file.
   The options that do not match this criteria are not accepted.
   The default value is: \term{all}
 \end{description}
@@ -1620,9 +1639,7 @@ it is possible to define a macro for a value
 and later use this macro when defining an option.
 
 A macro is defined with this syntax:
-\begin{verbatim}
-{define_macro, '&lt;MACRO&gt;', &lt;value&gt;}.
-\end{verbatim}
+\esyntax{\{define\_macro, 'MACRO', Value\}.}
 The \term{MACRO} must be surrounded by single quotation marks,
 and all letters in uppercase; check the examples bellow.
 The \term{value} can be any valid arbitrary Erlang term.
@@ -1641,20 +1658,20 @@ of another macro.
 There are two ways to use a macro:
 \begin{description}
 
-  \titem{'&lt;MACRO&gt;'}
+  \titem{'MACRO'}
   You can put this instead of a value in an \ejabberd{} option,
   and will be replaced with the \term{value} previously defined.
   If the macro is not defined previously,
   the program will crash and report an error.
 
-  \titem{\{use\_macro, '&lt;MACRO&gt;', &lt;defaultvalue&gt;\}}
+  \titem{\{use\_macro, 'MACRO', Defaultvalue\}}
   Use a macro even if it may not be defined.
   If the macro is not defined previously,
   the provided \term{defaultvalue} is used.
   This usage behaves as if it were defined and used this way:
 \begin{verbatim}
-{define_macro, '&lt;MACRO&gt;', &lt;defaultvalue&gt;}.
-'&lt;MACRO&gt;'
+{define_macro, 'MACRO', Defaultvalue}.
+'MACRO'
 \end{verbatim}
 
 \end{description}
@@ -1783,27 +1800,19 @@ interface available, PostgreSQL or MySQL.
 
 To use the native MySQL interface, you can pass a tuple of the following form as
 parameter:
-\begin{verbatim}
-{mysql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-\end{verbatim}
+\esyntax{\{mysql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;\}}
 
 \term{mysql} is a keyword that should be kept as is. For example:
-\begin{verbatim}
-{odbc_server, {mysql, &quot;localhost&quot;, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;}}.
-\end{verbatim}
+\esyntax{\{odbc\_server, \{mysql, &quot;localhost&quot;, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;\}\}.}
 
 Optionally, it is possible to define the MySQL port to use. This
 option is only useful, in very rare cases, when you are not running
 MySQL with the default port setting. The \term{mysql} parameter
 can thus take the following form:
-\begin{verbatim}
-{mysql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-\end{verbatim}
+\esyntax{\{mysql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;\}}
 
 The \term{Port} value should be an integer, without quotes. For example:
-\begin{verbatim}
-{odbc_server, {mysql, &quot;localhost&quot;, Port, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;}}.
-\end{verbatim}
+\esyntax{\{odbc\_server, \{mysql, &quot;localhost&quot;, Port, &quot;test&quot;, &quot;root&quot;, &quot;password&quot;\}\}.}
 
 By default \ejabberd{} opens 10 connections to the database for each virtual host.
 Use this option to modify the value:
@@ -1961,27 +1970,20 @@ interface available, PostgreSQL or MySQL.
 
 To use the native PostgreSQL interface, you can pass a tuple of the following
 form as parameter:
-\begin{verbatim}
-{pgsql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-\end{verbatim}
+\esyntax{\{pgsql, &quot;Server&quot;, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;\}}
 
 \term{pgsql} is a keyword that should be kept as is. For example:
-\begin{verbatim}
-{odbc_server, {pgsql, &quot;localhost&quot;, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;}}.
-\end{verbatim}
+\esyntax{\{odbc\_server, \{pgsql, &quot;localhost&quot;, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;\}\}.}
 
 Optionally, it is possible to define the PostgreSQL port to use. This
 option is only useful, in very rare cases, when you are not running
 PostgreSQL with the default port setting. The \term{pgsql} parameter
 can thus take the following form:
-\begin{verbatim}
-{pgsql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;}
-\end{verbatim}
+\esyntax{\{pgsql, &quot;Server&quot;, Port, &quot;Database&quot;, &quot;Username&quot;, &quot;Password&quot;\}}
 
 The \term{Port} value should be an integer, without quotes. For example:
-\begin{verbatim}
-{odbc_server, {pgsql, &quot;localhost&quot;, 5432, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;}}.
-\end{verbatim}
+\esyntax{\{odbc\_server, \{pgsql, &quot;localhost&quot;, 5432, &quot;database&quot;, &quot;ejabberd&quot;, &quot;password&quot;\}\}.}
+
 By default \ejabberd{} opens 10 connections to the database for each virtual host.
 Use this option to modify the value:
 \begin{verbatim}
@@ -2114,20 +2116,20 @@ create accounts, change password or edit vCard that is stored in LDAP.
 
 Parameters:
 \begin{description}
-\titem{ldap\_servers} \ind{options!ldap\_server}List of IP addresses or DNS names of your
+\titem{\{ldap\_servers, [Servers, ...]\}} \ind{options!ldap\_server}List of IP addresses or DNS names of your
 LDAP servers. This option is required.
-\titem{ldap\_encrypt} \ind{options!ldap\_encrypt}Type of connection encryption to the LDAP server.
+\titem{\{ldap\_encrypt, none|tls\}} \ind{options!ldap\_encrypt}Type of connection encryption to the LDAP server.
 Allowed values are: \term{none}, \term{tls}.
 Note that STARTTLS is not supported.
 The default value is: \term{none}.
-\titem{ldap\_port} \ind{options!ldap\_port}Port to connect to your LDAP server.
+\titem{\{ldap\_port, Number\}} \ind{options!ldap\_port}Port to connect to your LDAP server.
 The default port is~389 if encryption is disabled; and 636 if encryption is enabled.
 If you configure a value, it is stored in \ejabberd{}'s database.
 Then, if you remove that value from the configuration file,
 the value previously stored in the database will be used instead of the default port.
-\titem{ldap\_rootdn} \ind{options!ldap\_rootdn}Bind DN. The default value
+\titem{\{ldap\_rootdn, RootDN\}} \ind{options!ldap\_rootdn}Bind DN. The default value
   is~\term{&quot;&quot;} which means `anonymous connection'.
-\titem{ldap\_password} \ind{options!ldap\_password}Bind password. The default
+\titem{\{ldap\_password, Password\}} \ind{options!ldap\_password}Bind password. The default
   value is \term{&quot;&quot;}.
 \end{description}
 
@@ -2148,15 +2150,15 @@ and SASL authentication.
 You can authenticate users against an LDAP directory. Available options are:
 
 \begin{description}
-\titem{ldap\_base}\ind{options!ldap\_base}LDAP base directory which stores
+\titem{\{ldap\_base, Base\}}\ind{options!ldap\_base}LDAP base directory which stores
   users accounts. This option is required.
-  \titem{ldap\_uids}\ind{options!ldap\_uids}LDAP attribute which holds a list
-  of attributes to use as alternatives for getting the JID. The value is of
-  the form: \term{[\{ldap\_uidattr\}]} or \term{[\{ldap\_uidattr,
-  ldap\_uidattr\_format\}]}. You can use as many comma separated tuples
-  \term{\{ldap\_uidattr, ldap\_uidattr\_format\}} that is needed. The default
-  value is \term{[\{&quot;uid&quot;, &quot;\%u&quot;\}]}. The defaut \term{ldap\_uidattr\_format}
-  is \term{&quot;\%u&quot;}. The values for \term{ldap\_uidattr} and
+  \titem{\{ldap\_uids, [ \{ldap\_uidattr\} | \{ldap\_uidattr, ldap\_uidattr\_format\}, ...]\}}\ind{options!ldap\_uids}
+  LDAP attribute which holds a list of attributes to use as alternatives for getting the JID. 
+  The default attributes are \term{[\{&quot;uid&quot;, &quot;\%u&quot;\}]}.
+  The attributes are of the form:
+  \term{[\{ldap\_uidattr\}]} or \term{[\{ldap\_uidattr, ldap\_uidattr\_format\}]}.
+  You can use as many comma separated attributes as needed. 
+  The values for \term{ldap\_uidattr} and
   \term{ldap\_uidattr\_format} are described as follow:
   \begin{description}
     \titem{ldap\_uidattr}\ind{options!ldap\_uidattr}LDAP attribute which holds
@@ -2167,16 +2169,16 @@ You can authenticate users against an LDAP directory. Available options are:
     user's part of a JID. For example, \term{&quot;\%u@example.org&quot;}. The default
     value is \term{&quot;\%u&quot;}.
   \end{description}
-  \titem{ldap\_filter}\ind{options!ldap\_filter}\ind{protocols!RFC 2254: The
-  String Representation of LDAP Search Filters}
-  \footahref{http://www.faqs.org/rfcs/rfc2254.html}{RFC 2254} LDAP filter. The
+  \titem{\{ldap\_filter, Filter\}}\ind{options!ldap\_filter}\ind{protocols!RFC 4515:
+  LDAP String Representation of Search Filters}
+  \footahref{http://tools.ietf.org/html/rfc4515}{RFC 4515} LDAP filter. The
   default is \term{none}. Example:
   \term{&quot;(\&amp;(objectClass=shadowAccount)(memberOf=Jabber Users))&quot;}. Please, do
   not forget to close brackets and do not use superfluous whitespaces. Also you
   \emph{must not} use \option{ldap\_uidattr} attribute in filter because this
   attribute will be substituted in LDAP filter automatically.
 
-  \titem{ldap\_local\_filter}\ind{options!ldap\_local\_filter}
+  \titem{\{ldap\_local\_filter, Filter\}}\ind{options!ldap\_local\_filter}
   If you can't use \term{ldap\_filter} due to performance reasons
   (the LDAP server has many users registered),
   you can use this local filter.
@@ -2339,6 +2341,9 @@ The option \term{modules} defines the list of modules that will be loaded after
 element is the name of a module and the second is a list of options for that
 module.
 
+The syntax is:
+\esyntax{\{modules, [ \{ModuleName, ModuleOptions\}, ...]\}.}
+
 Examples:
 \begin{itemize}
 \item In this example only the module \modecho{} is loaded and no module
@@ -2385,12 +2390,14 @@ The following table lists all modules included in \ejabberd{}.
     \hline \ahrefloc{modmuclog}{\modmuclog{}} &amp; Multi-User Chat room logging &amp; \modmuc{} \\
     \hline \ahrefloc{modoffline}{\modoffline{}} &amp; Offline message storage (\xepref{0160}) &amp;  \\
     \hline \ahrefloc{modoffline}{\modofflineodbc{}} &amp; Offline message storage (\xepref{0160}) &amp; supported DB (*) \\
+    \hline \ahrefloc{modping}{\modping{}} &amp; XMPP Ping and periodic keepalives (\xepref{0199}) &amp;  \\
     \hline \ahrefloc{modprivacy}{\modprivacy{}} &amp; Blocking Communication (XMPP IM) &amp;  \\
     \hline \ahrefloc{modprivacy}{\modprivacyodbc{}} &amp; Blocking Communication (XMPP IM) &amp; supported DB (*) \\
     \hline \ahrefloc{modprivate}{\modprivate{}} &amp; Private XML Storage (\xepref{0049}) &amp;  \\
     \hline \ahrefloc{modprivate}{\modprivateodbc{}} &amp; Private XML Storage (\xepref{0049}) &amp; supported DB (*) \\
     \hline \ahrefloc{modproxy}{\modproxy{}} &amp; SOCKS5 Bytestreams (\xepref{0065}) &amp;  \\
     \hline \ahrefloc{modpubsub}{\modpubsub{}} &amp; Pub-Sub (\xepref{0060}), PEP (\xepref{0163}) &amp; \modcaps{} \\
+    \hline \ahrefloc{modpubsub}{\modpubsubodbc{}} &amp; Pub-Sub (\xepref{0060}), PEP (\xepref{0163}) &amp; supported DB (*) and \modcaps{} \\
     \hline \ahrefloc{modregister}{\modregister{}} &amp; In-Band Registration (\xepref{0077}) &amp;  \\
     \hline \ahrefloc{modroster}{\modroster{}} &amp; Roster management (XMPP IM) &amp;  \\
     \hline \ahrefloc{modroster}{\modrosterodbc{}} &amp; Roster management (XMPP IM) &amp; supported DB (*) \\
@@ -2398,7 +2405,7 @@ The following table lists all modules included in \ejabberd{}.
     \hline \ahrefloc{modsharedroster}{\modsharedroster{}} &amp; Shared roster management &amp; \modroster{} or \\
     &amp; &amp; \modrosterodbc\\
     \hline \ahrefloc{modstats}{\modstats{}} &amp; Statistics Gathering (\xepref{0039}) &amp;  \\
-    \hline \ahrefloc{modtime}{\modtime{}} &amp; Entity Time (\xepref{0090}) &amp;  \\
+    \hline \ahrefloc{modtime}{\modtime{}} &amp; Entity Time (\xepref{0202}) &amp;  \\
     \hline \ahrefloc{modvcard}{\modvcard{}} &amp; vcard-temp (\xepref{0054}) &amp;  \\
     \hline \ahrefloc{modvcardldap}{\modvcardldap{}} &amp; vcard-temp (\xepref{0054}) &amp; LDAP server \\
     \hline \ahrefloc{modvcard}{\modvcardodbc{}} &amp; vcard-temp (\xepref{0054}) &amp; supported DB (*) \\
@@ -2455,7 +2462,12 @@ this separate section.
 Many modules define handlers for processing IQ queries of different namespaces
 to this server or to a user (e.\,g.\ to \jid{example.org} or to
 \jid{user@example.org}). This option defines processing discipline for
-these queries. Possible values are:
+these queries.
+
+The syntax is:
+\esyntax{\{iqdisc, Value\}}
+
+Possible \term{Value} are:
 \begin{description}
 \titem{no\_queue} All queries of a namespace with this processing discipline are
   processed immediately. This also means that no other packets can be processed
@@ -2489,7 +2501,12 @@ Example:
 \ind{options!host}
 
 This option defines the Jabber ID of a service provided by an \ejabberd{} module.
-The keyword &quot;@HOST@&quot; is replaced at start time with the real virtual host string.
+
+The syntax is:
+\esyntax{\{host, HostName\}}
+
+If you include the keyword &quot;@HOST@&quot; in the HostName,
+it is replaced at start time with the real virtual host string.
 
 This example configures
 the \ind{modules!\modecho{}}echo module to provide its echoing service
@@ -2553,7 +2570,7 @@ hosts in ejabberd.
 
 Options:
 \begin{description}
-\titem{access} \ind{options!access}This option specifies who is allowed to
+\titem{\{access, AccessName\}} \ind{options!access}This option specifies who is allowed to
   send announcements and to set the message of the day (by default, nobody is
   able to send such messages).
 \end{description}
@@ -2600,6 +2617,7 @@ disabled for instances of \ejabberd{} with hundreds of thousands users.
 \ind{protocols!XEP-0030: Service Discovery}
 \ind{protocols!XEP-0011: Jabber Browsing}
 \ind{protocols!XEP-0094: Agent Information}
+\ind{protocols!XEP-0157: Contact Addresses for XMPP Services}
 
 This module adds support for Service Discovery (\xepref{0030}). With
 this module enabled, services on your server can be discovered by
@@ -2613,8 +2631,16 @@ Options:
 \begin{description}
 \iqdiscitem{Service Discovery (\ns{http://jabber.org/protocol/disco\#items} and
   \ns{http://jabber.org/protocol/disco\#info})}
-\titem{extra\_domains} \ind{options!extra\_domains}With this option,
-  extra domains can be added to the Service Discovery item list.
+\titem{\{extra\_domains, [Domain, ...]\}} \ind{options!extra\_domains}With this option,
+  you can specify a list of extra domains that are added to the Service Discovery item list.
+\titem{\{server\_info, [ \{Modules, Field, [Value, ...]\}, ... ]\}} \ind{options!server\_info}
+  Specify additional information about the server,
+  as described in Contact Addresses for XMPP Services (\xepref{0157}).
+  \term{Modules} can be the keyword `all', 
+  in which case the information is reported in all the services;
+  or a list of \ejabberd{} modules, 
+  in which case the information is only specified for the services provided by those modules.
+  Any arbitrary \term{Field} and \term{Value} can be specified, not only contact addresses.
 \end{description}
 
 Examples:
@@ -2648,9 +2674,32 @@ Examples:
   ...
  ]}.
 \end{verbatim}
+\item With this configuration, all services show abuse addresses,
+feedback address on the main server,
+and admin addresses for both the main server and the vJUD service:
+\begin{verbatim}
+{modules,
+ [
+  ...
+  {mod_disco, [{server_info, [
+      {all,
+       &quot;abuse-addresses&quot;,
+       [&quot;mailto:abuse@shakespeare.lit&quot;]},
+      {[mod_muc],
+       &quot;Web chatroom logs&quot;,
+       [&quot;http://www.example.org/muc-logs&quot;]},
+      {[mod_disco],
+       &quot;feedback-addresses&quot;,
+       [&quot;http://shakespeare.lit/feedback.php&quot;, &quot;mailto:feedback@shakespeare.lit&quot;, &quot;xmpp:feedback@shakespeare.lit&quot;]},
+      {[mod_disco, mod_vcard],
+       &quot;admin-addresses&quot;,
+       [&quot;mailto:xmpp@shakespeare.lit&quot;, &quot;xmpp:admins@shakespeare.lit&quot;]}
+  ]}]},
+  ...
+ ]}.
+\end{verbatim}
 \end{itemize}
 
-
 \makesubsection{modecho}{\modecho{}}
 \ind{modules!\modecho{}}\ind{debugging}
 
@@ -2727,9 +2776,12 @@ For example:
 ]}.
 \end{verbatim}
 
-The maximum inactivity period is by default 30 seconds.
-This can be configured with the module option \term{max\_inactivity}.
-For example, to set 50 seconds:
+Options:
+\begin{description}
+  \titem{\{max\_inactivity, Seconds\}} \ind{options!max\_inactivity}
+  Define the maximum inactivity period in seconds.
+  Default value is 30 seconds.
+  For example, to set 50 seconds:
 \begin{verbatim}
 {modules,
  [
@@ -2738,6 +2790,8 @@ For example, to set 50 seconds:
   ...
 ]}.
 \end{verbatim}
+\end{description}
+
 
 \makesubsection{modhttpfileserver}{\modhttpfileserver{}}
 \ind{modules!\modhttpfileserver{}}\ind{modhttpfileserver}
@@ -2746,21 +2800,35 @@ This simple module serves files from the local disk over HTTP.
 
 Options:
 \begin{description}
-  \titem{docroot} \ind{options!docroot}
+  \titem{\{docroot, Path\}} \ind{options!docroot}
     Directory to serve the files.
-  \titem{accesslog} \ind{options!accesslog}
+  \titem{\{accesslog, Path\}} \ind{options!accesslog}
     File to log accesses using an Apache-like format.
     No log will be recorded if this option is not specified.
-  \titem{directory\_indices} \ind{options!directoryindices}
+  \titem{\{directory\_indices, [Index, ...]\}} \ind{options!directoryindices}
     Indicate one or more directory index files, similarly to Apache's
     DirectoryIndex variable. When a web request hits a directory
     instead of a regular file, those directory indices are looked in
     order, and the first one found is returned.
+  %B \titem{content\_types} \ind{options!contenttypes}
+  %M \titem{\{content\_types, \{Extension, Type\} \}} \ind{options!contenttypes}
+  %B \titem{\{content\_types, [ Extension, Type, ... ]\}} \ind{options!contenttypes}
+  %B \titem{\{content\_types, [ {Extension, Type}, ... ]\}} \ind{options!contenttypes}
+  %M \titem{\{content\_types, [ \{Extension, Type\}, ... ]\}} \ind{options!contenttypes}
+    Specify a mapping of extensions to content types.
+    There are several content types already defined,
+    with this option you can add new definitions, modify or delete existing ones.
+    To delete an existing definition, simply define it with a value: `undefined'.
+  \titem{\{default\_content\_type, Type\}} \ind{options!defaultcontenttype}
+    Specify the content type to use for unknown extensions.
+    Default value is `application/octet-stream'.
 \end{description}
 
 This example configuration will serve the files from 
 the local directory \verb|/var/www|
 in the address \verb|http://example.org:5280/pub/archive/|.
+In this example a new content type \term{ogg} is defined,
+\term{png} is redefined, and \term{jpg} definition is deleted.
 To use this module you must enable it:
 \begin{verbatim}
 {modules,
@@ -2768,8 +2836,13 @@ To use this module you must enable it:
   ...
   {mod_http_fileserver, [
                          {docroot, &quot;/var/www&quot;}, 
-			 {directory_indices, [&quot;index.html&quot;, &quot;main.htm&quot;]},
-                         {accesslog, &quot;/var/log/ejabberd/access.log&quot;}
+                         {accesslog, &quot;/var/log/ejabberd/access.log&quot;},
+                         {directory_indices, [&quot;index.html&quot;, &quot;main.htm&quot;]},
+                         {content_types, [{&quot;.ogg&quot;, &quot;audio/ogg&quot;},
+                                          {&quot;.png&quot;, &quot;image/png&quot;},
+                                          {&quot;.jpg&quot;, undefined}
+                                         ]},
+                         {default_content_type, &quot;text/html&quot;}
                         ]
   },
   ...
@@ -2825,9 +2898,10 @@ End user information:
 Options:
 \begin{description}
 \hostitem{irc}
-\titem{access} \ind{options!access}This option can be used to specify who
+\titem{\{access, AccessName\}} \ind{options!access}This option can be used to specify who
   may use the IRC transport (default value: \term{all}).
-\titem{default\_encoding} \ind{options!defaultencoding}Set the default IRC encoding (default value: \term{&quot;koi8-r&quot;}).
+\titem{\{default\_encoding, Encoding\}} \ind{options!defaultencoding}Set the default IRC encoding.
+  Default value: \term{&quot;koi8-r&quot;}
 \end{description}
 
 Examples:
@@ -2908,15 +2982,15 @@ on an available node on first connection attempt.
 Module options:
 \begin{description}
 \hostitem{conference}
-\titem{access} \ind{options!access}You can specify who is allowed to use
+\titem{\{access, AccessName\}} \ind{options!access}You can specify who is allowed to use
   the Multi-User Chat service. By default everyone is allowed to use it.
-\titem{access\_create} \ind{options!access\_create}To configure who is
+\titem{\{access\_create, AccessName\}} \ind{options!access\_create}To configure who is
   allowed to create new rooms at the Multi-User Chat service, this option
   can be used. By default everybody is allowed to create rooms.
-\titem{access\_persistent} \ind{options!access\_persistent}To configure who is
+\titem{\{access\_persistent, AccessName\}} \ind{options!access\_persistent}To configure who is
   allowed to modify the 'persistent' room option.
   By default everybody is allowed to modify that option.
-\titem{access\_admin} \ind{options!access\_admin}This option specifies
+\titem{\{access\_admin, AccessName\}} \ind{options!access\_admin}This option specifies
   who is allowed to administrate the Multi-User Chat service. The default
   value is \term{none}, which means that only the room creator can
   administer his room.
@@ -2924,7 +2998,7 @@ Module options:
   and it will be shown in all active rooms as a service message.
   The administrators can send a groupchat message to the JID of an active room,
   and the message will be shown in the room as a service message.
-\titem{history\_size} \ind{options!history\_size}A small history of
+\titem{\{history\_size, Size\}} \ind{options!history\_size}A small history of
   the current discussion is sent to users when they enter the
   room. With this option you can define the number of history messages
   to keep and send to users joining the room. The value is an
@@ -2932,35 +3006,35 @@ Module options:
   and, as a result, nothing is kept in memory. The default value is
   \term{20}. This value is global and thus affects all rooms on the
   service.
-\titem{max\_users} \ind{options!max\_users} This option defines at
+\titem{\{max\_users, Number\}} \ind{options!max\_users} This option defines at
   the service level, the maximum number of users allowed per
   room. It can be lowered in each room configuration but cannot be
   increased in individual room configuration. The default value is
   200.
-\titem{max\_users\_admin\_threshold}
+\titem{\{max\_users\_admin\_threshold, Number\}}
   \ind{options!max\_users\_admin\_threshold} This option defines the
   number of service admins or room owners allowed to enter the room when
   the maximum number of allowed occupants was reached. The default limit
   is 5.
-\titem{max\_user\_conferences}
+\titem{\{max\_user\_conferences, Number\}}
   \ind{options!max\_user\_conferences} This option defines the maximum
   number of rooms that any given user can join. The default value
   is 10. This option is used to prevent possible abuses. Note that
   this is a soft limit: some users can sometimes join more conferences
   in cluster configurations.
-\titem{max\_room\_id} \ind{options!max\_room\_id}
+\titem{\{max\_room\_id, Number\}} \ind{options!max\_room\_id}
   This option defines the maximum number of characters that Room ID
   can have when creating a new room.
   The default value is to not limit: infinite.
-\titem{max\_room\_name} \ind{options!max\_room\_name}
+\titem{\{max\_room\_name, Number\}} \ind{options!max\_room\_name}
   This option defines the maximum number of characters that Room Name
   can have when configuring the room.
   The default value is to not limit: infinite.
-\titem{max\_room\_desc} \ind{options!max\_room\_desc}
+\titem{\{max\_room\_desc, Number\}} \ind{options!max\_room\_desc}
   This option defines the maximum number of characters that Room Description
   can have when configuring the room.
   The default value is to not limit: infinite.
-\titem{min\_message\_interval} \ind{options!min\_message\_interval}
+\titem{\{min\_message\_interval, Number\}} \ind{options!min\_message\_interval}
   This option defines the minimum interval between two messages send
   by an occupant in seconds. This option is global and valid for all
   rooms. A decimal value can be used. When this option is not defined,
@@ -2970,7 +3044,7 @@ Module options:
   interval is 0.4 second. If an occupant tries to send messages faster, an
   error is send back explaining that the message has been discarded
   and describing the reason why the message is not acceptable.
-\titem{min\_presence\_interval}
+\titem{\{min\_presence\_interval, Number\}}
   \ind{options!min\_presence\_interval} This option defines the
   minimum of time between presence changes coming from a given occupant in
   seconds. This option is global and valid for all rooms. A
@@ -2982,36 +3056,36 @@ Module options:
   broadcasted to all occupants in the room after expiration of the
   interval delay. Intermediate presence packets are silently
   discarded. A good value for this option is 4 seconds.
-\titem{default\_room\_options} \ind{options!default\_room\_options}
+\titem{\{default\_room\_options, [ \{OptionName, OptionValue\}, ...]\}} \ind{options!default\_room\_options}
   This module option allows to define the desired default room options.
   Note that the creator of a room can modify the options of his room
   at any time using a Jabber client with MUC capability.
   The available room options and the default values are:
   \begin{description}
-  \titem{\{allow\_change\_subj, true\}} Allow occupants to change the subject.
-  \titem{\{allow\_private\_messages, true\}} Occupants can send private messages to other occupants.
-  \titem{\{allow\_query\_users, true\}} Occupants can send IQ queries to other occupants.
-  \titem{\{allow\_user\_invites, false\}} Allow occupants to send invitations.
-  \titem{\{allow\_visitor\_nickchange, true\}} Allow visitors to
+  \titem{\{allow\_change\_subj, true|false\}} Allow occupants to change the subject.
+  \titem{\{allow\_private\_messages, true|false\}} Occupants can send private messages to other occupants.
+  \titem{\{allow\_query\_users, true|false\}} Occupants can send IQ queries to other occupants.
+  \titem{\{allow\_user\_invites, false|true\}} Allow occupants to send invitations.
+  \titem{\{allow\_visitor\_nickchange, true|false\}} Allow visitors to
   change nickname.
-  \titem{\{allow\_visitor\_status, true\}} Allow visitors to send
+  \titem{\{allow\_visitor\_status, true|false\}} Allow visitors to send
   status text in presence updates.  If disallowed, the \term{status}
   text is stripped before broadcasting the presence update to all
   the room occupants.
-  \titem{\{anonymous, true\}} The room is anonymous:
+  \titem{\{anonymous, true|false\}} The room is anonymous:
   occupants don't see the real JIDs of other occupants.
   Note that the room moderators can always see the real JIDs of the occupants.
-  \titem{\{logging, false\}} The public messages are logged using \term{mod\_muc\_log}.
+  \titem{\{logging, false|true\}} The public messages are logged using \term{mod\_muc\_log}.
   \titem{\{max\_users, 200\}} Maximum number of occupants in the room.
-  \titem{\{members\_by\_default, true\}} The occupants that enter the room are participants by default, so they have 'voice'.
-  \titem{\{members\_only, false\}} Only members of the room can enter.
-  \titem{\{moderated, true\}} Only occupants with 'voice' can send public messages.
-  \titem{\{password, &quot;&quot;\}} Password of the room. You may want to enable the next option too.
-  \titem{\{password\_protected, false\}} The password is required to enter the room.
-  \titem{\{persistent, false\}} The room persists even if the last participant leaves.
-  \titem{\{public, true\}} The room is public in the list of the MUC service, so it can be discovered.
-  \titem{\{public\_list, true\}} The list of participants is public, without requiring to enter the room.
-  \titem{\{title, &quot;&quot;\}} A human-readable title of the room.
+  \titem{\{members\_by\_default, true|false\}} The occupants that enter the room are participants by default, so they have 'voice'.
+  \titem{\{members\_only, false|true\}} Only members of the room can enter.
+  \titem{\{moderated, true|false\}} Only occupants with 'voice' can send public messages.
+  \titem{\{password, &quot;roompass123&quot;\}} Password of the room. You may want to enable the next option too.
+  \titem{\{password\_protected, false|true\}} The password is required to enter the room.
+  \titem{\{persistent, false|true\}} The room persists even if the last participant leaves.
+  \titem{\{public, true|false\}} The room is public in the list of the MUC service, so it can be discovered.
+  \titem{\{public\_list, true|false\}} The list of participants is public, without requiring to enter the room.
+  \titem{\{title, &quot;Room Title&quot;\}} A human-readable title of the room.
   \end{description}
   All of those room options can be set to \term{true} or \term{false},
   except \term{password} and \term{title} which are strings,
@@ -3133,7 +3207,7 @@ Features:
   author, subject and configuration.
 \item \ind{protocols!RFC 5122: Internationalized Resource Identifiers (IRIs) and Uniform Resource Identifiers (URIs) for the Extensible Messaging and Presence Protocol (XMPP)}
   The room JID in the generated HTML is a link to join the room (using
-  \footahref{http://www.xmpp.org/rfcs/rfc5122.html}{XMPP URI}).
+  \footahref{http://xmpp.org/rfcs/rfc5122.html}{XMPP URI}).
 \item Subject and room configuration changes are tracked and displayed.
 \item Joins, leaves, nick changes, kicks, bans and `/me' are tracked and
   displayed, including the reason if available.
@@ -3148,53 +3222,52 @@ Features:
 
 Options:
 \begin{description}
-\titem{access\_log}\ind{options!access\_log}
+\titem{\{access\_log, AccessName\}}\ind{options!access\_log}
   This option restricts which occupants are allowed to enable or disable room
   logging. The default value is \term{muc\_admin}. Note for this default setting
   you need to have an access rule for \term{muc\_admin} in order to take effect.
-\titem{cssfile}\ind{options!cssfile}
+\titem{\{cssfile, false|URL\}}\ind{options!cssfile}
   With this option you can set whether the HTML files should have a custom CSS
   file or if they need to use the embedded CSS file. Allowed values are
   \term{false} and an URL to a CSS file. With the first value, HTML files will
   include the embedded CSS code. With the latter, you can specify the URL of the
-  custom CSS file (for example: `http://example.com/my.css'). The default value
+  custom CSS file (for example: \term{&quot;http://example.com/my.css&quot;}). The default value
   is \term{false}.
-\titem{dirname}\ind{options!dirname}
+\titem{\{dirname, room\_jid|room\_name\}}\ind{options!dirname}
   Allows to configure the name of the room directory.
   Allowed values are \term{room\_jid} and \term{room\_name}.
   With the first value, the room directory name will be the full room JID.
   With the latter, the room directory name will be only the room name,
   not including the MUC service name.
   The default value is \term{room\_jid}.
-\titem{dirtype}\ind{options!dirtype}
+\titem{\{dirtype, subdirs|plain\}}\ind{options!dirtype}
   The type of the created directories can be specified with this option. Allowed
   values are \term{subdirs} and \term{plain}. With the first value,
   subdirectories are created for each year and month. With the latter, the
   names of the log files contain the full date, and there are no subdirectories.
   The default value is \term{subdirs}.
-\titem{file\_format}\ind{options!file\_format}
+\titem{\{file\_format, html|plaintext\}}\ind{options!file\_format}
   Define the format of the log files:
   \term{html} stores in HTML format,
   \term{plaintext} stores in plain text.
   The default value is \term{html}.
-\titem{outdir}\ind{options!outdir}
+\titem{\{outdir, Path\}}\ind{options!outdir}
   This option sets the full path to the directory in which the HTML files should
   be stored. Make sure the \ejabberd{} daemon user has write access on that
   directory. The default value is \term{&quot;www/muc&quot;}.
-\titem{spam\_prevention}\ind{options!spam\_prevention}
+\titem{\{spam\_prevention true|false\}}\ind{options!spam\_prevention}
   To prevent spam, the \term{spam\_prevention} option adds a special attribute
   to links that prevent their indexation by search engines. The default value
   is \term{true}, which mean that nofollow attributes will be added to user
   submitted links.
-\titem{timezone}\ind{options!timezone}
+\titem{\{timezone, local|universal\}}\ind{options!timezone}
   The time zone for the logs is configurable with this option. Allowed values
   are \term{local} and \term{universal}. With the first value, the local time,
   as reported to Erlang by the operating system, will be used. With the latter,
   GMT/UTC time will be used. The default value is \term{local}.
-\titem{top\_link}\ind{options!top\_link}
+\titem{\{top\_link, \{URL, Text\}\}}\ind{options!top\_link}
   With this option you can customize the link on the top right corner of each
-  log file. The syntax of this option is \term{\{&quot;URL&quot;, &quot;Text&quot;\}}. The default
-  value is \term{\{&quot;/&quot;, &quot;Home&quot;\}}.
+  log file. The default value is \term{\{&quot;/&quot;, &quot;Home&quot;\}}.
 \end{description}
 
 Examples:
@@ -3255,14 +3328,15 @@ Examples:
 \makesubsection{modoffline}{\modoffline{}}
 \ind{modules!\modoffline{}}
 
-This module implements offline message storage. This means that all messages
+This module implements offline message storage (\xepref{0160}).
+This means that all messages
 sent to an offline user will be stored on the server until that user comes
 online again. Thus it is very similar to how email works. Note that
 \term{ejabberdctl}\ind{ejabberdctl} has a command to delete expired messages
 (see section~\ref{ejabberdctl}).
 
 \begin{description}
-  \titem{access\_max\_user\_messages}\ind{options!access\_max\_user\_messages}
+  \titem{\{access\_max\_user\_messages, Number\}}\ind{options!access\_max\_user\_messages}
   This option defines which access rule will be enforced to limit
   the maximum number of offline messages that a user can have (quota).
   When a user has too many offline messages, any new messages that he receive are discarded,
@@ -3291,6 +3365,43 @@ and all the other users up to 100.
  ]}.
 \end{verbatim}
 
+\makesubsection{modping}{\modping{}}
+\ind{modules!\modping{}}
+
+This module implements support for XMPP Ping (\xepref{0199}) and periodic keepalives.
+When this module is enabled ejabberd responds correctly to
+ping requests, as defined in the protocol.
+
+Configuration options:
+\begin{description}
+  \titem{\{send\_pings, true|false\}}\ind{options!send\_pings}
+  If this option is set to \term{true}, the server sends pings to connected clients
+  that are not active in a given interval \term{ping\_interval}.
+  This is useful to keep client connections alive or checking availability.
+  By default this option is disabled.
+  % because it is mostly not needed and consumes resources.
+  \titem{\{ping\_interval, Seconds\}}\ind{options!ping\_interval}
+  How often to send pings to connected clients, if the previous option is enabled.
+  If a client connection does not send or receive any stanza in this interval,
+  a ping request is sent to the client.
+  The default value is 60 seconds.
+  \titem{\{timeout\_action, none|kill\}}\ind{options!timeout\_action}
+  What to do when a client does not answer to a server ping request in less than 32 seconds.
+  % Those 32 seconds are defined in ejabberd_local.erl: -define(IQ_TIMEOUT, 32000).
+  The default is to do nothing.
+\end{description}
+
+This example enables Ping responses, configures the module to send pings
+to client connections that are inactive for 4 minutes,
+and if a client does not answer to the ping in less than 32 seconds, its connection is closed:
+\begin{verbatim}
+{modules,
+ [
+  ...
+  {mod_ping,  [{send_pings, true}, {ping_interval, 240}, {timeout_action, kill}]},
+  ...
+ ]}.
+\end{verbatim}
 
 \makesubsection{modprivacy}{\modprivacy{}}
 \ind{modules!\modprivacy{}}\ind{Blocking Communication}\ind{Privacy Rules}\ind{protocols!RFC 3921: XMPP IM}
@@ -3316,7 +3427,7 @@ their \Jabber{} client, they will be able to:
 \item Allowing or blocking all communications based on JID, group, or
   subscription type (or globally).
 \end{itemize}
-(from \ahrefurl{http://www.xmpp.org/specs/rfc3921.html\#privacy})
+(from \ahrefurl{http://xmpp.org/specs/rfc3921.html\#privacy})
 \end{quote}
 
 Options:
@@ -3349,24 +3460,22 @@ XMPP clients.
 
 Options:
 \begin{description}
-\titem{host}\ind{options!host}This option defines the hostname of the service.
-If this option is not set, the prefix `\jid{proxy.}' is added to \ejabberd{}
-hostname.
-\titem{name}\ind{options!name}Defines Service Discovery name of the service.
+\hostitem{proxy}
+\titem{\{name, Text\}}\ind{options!name}Defines Service Discovery name of the service.
 Default is \term{&quot;SOCKS5 Bytestreams&quot;}.
-\titem{ip}\ind{options!ip}This option specifies which network interface
+\titem{\{ip, IPTuple\}}\ind{options!ip}This option specifies which network interface
 to listen for. Default is an IP address of the service's DNS name, or,
 if fails, \verb|{127,0,0,1}|.
-\titem{port}\ind{options!port}This option defines port to listen for
+\titem{\{port, Number\}}\ind{options!port}This option defines port to listen for
 incoming connections. Default is~7777.
-\titem{auth\_type}\ind{options!auth\_type}SOCKS5 authentication type.
+\titem{\{auth\_type, anonymous|plain\}}\ind{options!auth\_type}SOCKS5 authentication type.
 Possible values are \term{anonymous} and \term{plain}. Default is
 \term{anonymous}.
-\titem{access}\ind{options!access}Defines ACL for file transfer initiators.
+\titem{\{access, AccessName\}}\ind{options!access}Defines ACL for file transfer initiators.
 Default is \term{all}.
-\titem{max\_connections}\ind{options!max\_connections}Maximum number of
+\titem{\{max\_connections, Number\}}\ind{options!max\_connections}Maximum number of
 active connections per file transfer initiator. No limit by default.
-\titem{shaper}\ind{options!shaper}This option defines shaper for
+\titem{\{shaper, none|ShaperName\}}\ind{options!shaper}This option defines shaper for
 the file transfer peers. Shaper with the maximum bandwidth will be selected.
 Default is \term{none}.
 \end{description}
@@ -3418,26 +3527,44 @@ and it requires \modcaps{}.
 Options:
 \begin{description}
 \hostitem{pubsub}
-\titem{access\_createnode} \ind{options!access\_createnode}
+\titem{\{access\_createnode, AccessName\}} \ind{options!access\_createnode}
   This option restricts which users are allowed to create pubsub nodes using
   ACL and ACCESS. The default value is \term{pubsub\_createnode}. % Not clear enough + do not use abbreviations.
-\titem{plugins} \ind{options!plugins}
-  To specify which pubsub node plugins to use. If not defined, the default
-  pubsub plugin is always used.
-\titem{nodetree} \ind{options!nodetree}
-  To specify which nodetree to use. If not defined, the default pubsub
-  nodetree is used. Only one nodetree can be used per host,
-  and is shared by all node plugins.
-\titem{pep\_sendlast\_offline} \ind{options!pep\_sendlast\_offline}
+\titem{\{plugins, [ Plugin, ...]\}} \ind{options!plugins}
+  To specify which pubsub node plugins to use.
+  The first one in the list is used by default.
+  If this option is not defined, the default plugins list is: \term{[&quot;flat&quot;]}.
+  PubSub clients can define which plugin to use when creating a node:
+  add \term{type='plugin-name'} attribute to the \term{create} stanza element.
+\titem{\{nodetree, Nodetree\}} \ind{options!nodetree}
+  To specify which nodetree to use.
+  If not defined, the default pubsub nodetree is used: &quot;tree&quot;.
+  Only one nodetree can be used per host, and is shared by all node plugins.
+
+  The &quot;virtual&quot; nodetree does not store nodes on database.
+  This saves resources on systems with tons of nodes.
+  If using the &quot;virtual&quot; nodetree,
+  you can only enable those node plugins:
+  [&quot;flat&quot;,&quot;pep&quot;] or [&quot;flat&quot;];
+  any other plugins configuration will not work. 
+  Also, all nodes will have the defaut configuration,
+  and this can not be changed.
+  Using &quot;virtual&quot; nodetree requires to start from a clean database,
+  it will not work if you used the default &quot;tree&quot; nodetree before.
+
+  The &quot;dag&quot; nodetree provides experimental support for PubSub Collection Nodes (\xepref{0248}).
+  In that case you should also add &quot;dag&quot; node plugin as default, for example:
+  \term{\{plugins, [&quot;dag&quot;,&quot;flat&quot;,&quot;hometree&quot;,&quot;pep&quot;]\}}
+\titem{\{pep\_sendlast\_offline, false|true\}} \ind{options!pep\_sendlast\_offline}
   To specify whether or not we should get last published PEP items
   from users in our roster which are offline when we connect. Value is true or false.
   If not defined, pubsub assumes false so we only get last items of online contacts.
-\titem{last\_item\_cache} \ind{options!last\_item\_cache}
+\titem{\{last\_item\_cache, false|true\}} \ind{options!last\_item\_cache}
   To specify whether or not pubsub should cache last items. Value is true
   or false. If not defined, pubsub do not cache last items. On systems with not so many nodes,
   caching last items speeds up pubsub and allows to raise user connection rate. The cost is memory
   usage, as every item is stored in memory.
-\titem{pep\_mapping} \ind{pep\_mapping}
+\titem{\{pep\_mapping, [ \{Key, Value\}, ...]\}} \ind{pep\_mapping}
   This allow to define a Key-Value list to choose defined node plugins on given PEP namespace.
   The following example will use node\_tune instead of node\_pep for every PEP node with tune namespace:
 \begin{verbatim}
@@ -3447,19 +3574,32 @@ Options:
 %  This option allows to create additional pubsub virtual hosts in a single module instance.
 \end{description}
 
-Example:
+Example of configuration that uses flat nodes as default, and allows use of flat, nodetree and pep nodes:
 \begin{verbatim}
 {modules,
  [
   ...
   {mod_pubsub, [
                 {access_createnode, pubsub_createnode},
-                {plugins, [&quot;default&quot;, &quot;pep&quot;]}
-               ]}
+                {plugins, [&quot;flat&quot;, &quot;hometree&quot;, &quot;pep&quot;]}
+               ]},
+  ...
+ ]}.
+\end{verbatim}
+
+Using ODBC database requires use of dedicated plugins. The following example shows previous configuration
+with ODBC usage:
+\begin{verbatim}
+{modules,
+ [
+  ...
+  {mod_pubsub_odbc, [
+                {access_createnode, pubsub_createnode},
+                {plugins, [&quot;flat_odbc&quot;, &quot;hometree_odbc&quot;, &quot;pep_odbc&quot;]}
+               ]},
   ...
  ]}.
 \end{verbatim}
-%                  {served_hosts, [&quot;example.com&quot;, &quot;example.org&quot;]}
 
 \makesubsection{modregister}{\modregister{}}
 \ind{modules!\modregister{}}\ind{protocols!XEP-0077: In-Band Registration}\ind{public registration}
@@ -3475,15 +3615,15 @@ enables end users to use a \Jabber{} client to:
 
 Options:
 \begin{description}
-\titem{access} \ind{options!access}This option can be configured to specify
+\titem{\{access, AccessName\}} \ind{options!access}This option can be configured to specify
   rules to restrict registration. If a rule returns `deny' on the requested
   user name, registration for that user name is denied. (there are no
   restrictions by default).
-\titem{welcome\_message} \ind{options!welcomem}Set a welcome message that
+\titem{\{welcome\_message, Message\}} \ind{options!welcomem}Set a welcome message that
   is sent to each newly registered account. The first string is the subject, and
   the second string is the message body.
   In the body you can set a newline with the characters: \verb|\n|
-\titem{registration\_watchers} \ind{options!rwatchers}This option defines a
+\titem{\{registration\_watchers, [ JID, ...]\}} \ind{options!rwatchers}This option defines a
   list of JIDs which will be notified each time a new account is registered.
 \iqdiscitem{In-Band Registration (\ns{jabber:iq:register})}
 \end{description}
@@ -3552,13 +3692,36 @@ Also define a registration timeout of one hour:
 \makesubsection{modroster}{\modroster{}}
 \ind{modules!\modroster{}}\ind{roster management}\ind{protocols!RFC 3921: XMPP IM}
 
-This module implements roster management as defined in \footahref{http://www.xmpp.org/specs/rfc3921.html\#roster}{RFC 3921: XMPP IM}.
+This module implements roster management as defined in
+\footahref{http://xmpp.org/specs/rfc3921.html\#roster}{RFC 3921: XMPP IM}.
+It also supports Roster Versioning (\xepref{0237}).
 
 Options:
 \begin{description}
 \iqdiscitem{Roster Management (\ns{jabber:iq:roster})}
+  \titem{\{versioning, false|true\}} \ind{options!versioning}Enables
+  Roster Versioning.
+  This option is disabled by default.
+  \titem{\{store\_current\_id, false|true\}} \ind{options!storecurrentid}
+  If this option is enabled, the current version number is stored on the database.
+  If disabled, the version number is calculated on the fly each time.
+  Enabling this option reduces the load for both ejabberd and the database.
+  This option does not affect the client in any way.
+  This option is only useful if Roster Versioning is enabled.
+  This option is disabled by default.
+  Important: if you use \modsharedroster, you must disable this option.
 \end{description}
 
+This example configuration enables Roster Versioning with storage of current id:
+\begin{verbatim}
+{modules,
+ [
+  ...
+  {mod_roster, [{versioning, true}, {store_current_id, true}]},
+  ...
+ ]}.
+\end{verbatim}
+
 \makesubsection{modservicelog}{\modservicelog{}}
 \ind{modules!\modservicelog{}}\ind{message auditing}\ind{Bandersnatch}
 
@@ -3570,7 +3733,7 @@ service(s).
 
 Options:
 \begin{description}
-\titem{loggers} \ind{options!loggers}With this option a (list of) service(s)
+\titem{\{loggers, [Names, ...]\}} \ind{options!loggers}With this option a (list of) service(s)
   that will receive the packets can be specified.
 \end{description}
 
@@ -3751,9 +3914,9 @@ in order to get the statistics. Here they are:
 \end{itemize}
 
 \makesubsection{modtime}{\modtime{}}
-\ind{modules!\modtime{}}\ind{protocols!XEP-0090: Entity Time}
+\ind{modules!\modtime{}}\ind{protocols!XEP-0202: Entity Time}
 
-This module features support for Entity Time (\xepref{0090}). By using this XEP,
+This module features support for Entity Time (\xepref{0202}). By using this XEP,
 you are able to discover the time at another entity's location.
 
 Options:
@@ -3773,19 +3936,19 @@ Options:
 \begin{description}
 \hostitem{vjud}
 \iqdiscitem{\ns{vcard-temp}}
-\titem{search}\ind{options!search}This option specifies whether the search
-  functionality is enabled (value: \term{true}) or disabled (value:
-  \term{false}). If disabled, the option \term{host} will be ignored and the
+\titem{\{search, true|false\}}\ind{options!search}This option specifies whether the search
+  functionality is enabled or not
+  If disabled, the option \term{host} will be ignored and the
   \Jabber{} User Directory service will not appear in the Service Discovery item
   list. The default value is \term{true}.
-\titem{matches}\ind{options!matches}With this option, the number of reported
+\titem{\{matches, infinity|Number\}}\ind{options!matches}With this option, the number of reported
   search results can be limited. If the option's value is set to \term{infinity},
   all search results are reported. The default value is \term{30}.
-\titem{allow\_return\_all}\ind{options!allow\_return\_all}This option enables
+\titem{\{allow\_return\_all, false|true\}}\ind{options!allow\_return\_all}This option enables
   you to specify if search operations with empty input fields should return all
   users who added some information to their vCard. The default value is
   \term{false}.
-\titem{search\_all\_hosts}\ind{options!search\_all\_hosts}If this option is set
+\titem{\{search\_all\_hosts, true|false\}}\ind{options!search\_all\_hosts}If this option is set
   to \term{true}, search operations will apply to all virtual hosts. Otherwise
   only the current host will be searched. The default value is \term{true}.
   This option is available in \modvcard, but not available in \modvcardodbc.
@@ -3849,25 +4012,28 @@ consists of the following \modvcardldap{}-specific options:
 \begin{description}
 \hostitem{vjud}
 \iqdiscitem{\ns{vcard-temp}}
-\titem{search}\ind{options!search}This option specifies whether the search
+\titem{\{search, true|false\}}\ind{options!search}This option specifies whether the search
   functionality is enabled (value: \term{true}) or disabled (value:
   \term{false}). If disabled, the option \term{host} will be ignored and the
   \Jabber{} User Directory service will not appear in the Service Discovery item
   list. The default value is \term{true}.
-\titem{matches}\ind{options!matches}With this option, the number of reported
+\titem{\{matches, infinity|Number\}}\ind{options!matches}With this option, the number of reported
   search results can be limited. If the option's value is set to \term{infinity},
   all search results are reported. The default value is \term{30}.
-\titem{ldap\_vcard\_map}\ind{options!ldap\_vcard\_map}With this option you can
-  set the table that maps LDAP attributes to vCard fields. The format is:
-  \term{[{Name\_of\_vCard\_field, Pattern, List\_of\_LDAP\_attributes}, ...]}.\ind{protocols!RFC 2426: vCard MIME Directory Profile}
-  \term{Name\_of\_vcard\_field} is the type name of the vCard as defined in
-  \footahref{http://www.ietf.org/rfc/rfc2426.txt}{RFC 2426}. \term{Pattern} is a
-  string which contains pattern variables \term{&quot;\%u&quot;}, \term{&quot;\%d&quot;} or
-  \term{&quot;\%s&quot;}. \term{List\_of\_LDAP\_attributes} is the list containing LDAP
-  attributes. The pattern variables \term{&quot;\%s&quot;} will be sequentially replaced
+\titem{\{ldap\_vcard\_map, [ \{Name, Pattern, LDAPattributes\}, ...]\}} \ind{options!ldap\_vcard\_map}
+  With this option you can set the table that maps LDAP attributes to vCard fields.
+  \ind{protocols!RFC 2426: vCard MIME Directory Profile}
+  \term{Name} is the type name of the vCard as defined in
+  \footahref{http://tools.ietf.org/html/rfc2426}{RFC 2426}.
+  \term{Pattern} is a string which contains pattern variables
+  \term{&quot;\%u&quot;}, \term{&quot;\%d&quot;} or \term{&quot;\%s&quot;}.
+  \term{LDAPattributes} is the list containing LDAP attributes.
+  The pattern variables 
+  \term{&quot;\%s&quot;} will be sequentially replaced 
   with the values of LDAP attributes from \term{List\_of\_LDAP\_attributes},
-  \term{&quot;\%u&quot;} will be replaced with the user part of a JID, and \term{&quot;\%d&quot;}
-  will be replaced with the domain part of a JID. The default is:
+  \term{&quot;\%u&quot;} will be replaced with the user part of a JID, 
+  and \term{&quot;\%d&quot;} will be replaced with the domain part of a JID. 
+  The default is:
 \begin{verbatim}
 [{&quot;NICKNAME&quot;, &quot;%u&quot;, []},
  {&quot;FN&quot;, &quot;%s&quot;, [&quot;displayName&quot;]},
@@ -3890,9 +4056,9 @@ consists of the following \modvcardldap{}-specific options:
  {&quot;ROLE&quot;, &quot;%s&quot;, [&quot;employeeType&quot;]},
  {&quot;PHOTO&quot;, &quot;%s&quot;, [&quot;jpegPhoto&quot;]}]
 \end{verbatim}
-\titem{ldap\_search\_fields}\ind{options!ldap\_search\_fields}This option
-  defines the search form and the LDAP attributes to search within. The format
-  is: \term{[{Name, Attribute}, ...]}. \term{Name} is the name of a search form
+\titem{\{ldap\_search\_fields, [ \{Name, Attribute\}, ...]\}}\ind{options!ldap\_search\_fields}This option
+  defines the search form and the LDAP attributes to search within.
+  \term{Name} is the name of a search form
   field which will be automatically translated by using the translation
   files (see \term{msgs/*.msg} for available words). \term{Attribute} is the
   LDAP attribute or the pattern \term{&quot;\%u&quot;}. The default is:
@@ -3910,11 +4076,11 @@ consists of the following \modvcardldap{}-specific options:
  {&quot;Organization Name&quot;, &quot;o&quot;},
  {&quot;Organization Unit&quot;, &quot;ou&quot;}]
 \end{verbatim}
-\titem{ldap\_search\_reported}\ind{options!ldap\_search\_reported}This option
-  defines which search fields should be reported. The format is:
-  \term{[{Name, vCard\_Name}, ...]}. \term{Name} is the name of a search form
+\titem{\{ldap\_search\_reported, [ \{SearchField, VcardField\}, ...]\}}\ind{options!ldap\_search\_reported}This option
+  defines which search fields should be reported.
+  \term{SearchField} is the name of a search form
   field which will be automatically translated by using the translation
-  files (see \term{msgs/*.msg} for available words). \term{vCard\_Name} is the
+  files (see \term{msgs/*.msg} for available words). \term{VcardField} is the
   vCard field name defined in the \option{ldap\_vcard\_map} option. The default
   is:
 \begin{verbatim}
@@ -4041,7 +4207,7 @@ answers \ejabberd{}'s version when queried.
 
 Options:
 \begin{description}
-\titem{show\_os}\ind{options!showos}Should the operating system be revealed or not.
+\titem{\{show\_os, true|false\}}\ind{options!showos}Should the operating system be revealed or not.
   The default value is \term{true}.
 \iqdiscitem{Software Version (\ns{jabber:iq:version})}
 \end{description}
@@ -4192,6 +4358,10 @@ The command line parameters:
 	Maximum number of Erlang processes.
   \titem{-remsh ejabberd@localhost}
 	Open an Erlang shell in a remote Erlang node.
+  \titem{-hidden}
+	The connections to other nodes are hidden (not published).
+	The result is that this node is not considered part of the cluster.
+	This is important when starting a temporary \term{ctl} or \term{debug} node.
 \end{description}
 Note that some characters need to be escaped when used in shell scripts, for instance \verb|&quot;| and \verb|{}|.
 You can find other options in the Erlang manual page (\shell{erl -man erl}).
@@ -4231,7 +4401,7 @@ Available commands in this ejabberd node:
 
 The more interesting ones are:
 \begin{description}
-\titem{reopen-log} Reopen the log files after they were renamed.
+\titem{reopen\_log} Reopen the log files after they were renamed.
   If the old files were not renamed before calling this command,
   they are automatically renamed to \term{&quot;*-old.log&quot;}. See section \ref{logfiles}.
 \titem {backup ejabberd.backup}
@@ -4239,7 +4409,7 @@ The more interesting ones are:
 \titem {restore ejabberd.backup}
   Restore immediately from a binary backup file the internal Mnesia database.
   This will consume quite some memory for big servers.
-\titem {install-fallback ejabberd.backup}
+\titem {install\_fallback ejabberd.backup}
   The binary backup file is installed as fallback:
   it will be used to restore the database at the next ejabberd start.
   Similar to \term{restore}, but requires less memory.
@@ -4248,13 +4418,23 @@ The more interesting ones are:
 \titem {load ejabberd.dump}
   Restore immediately from a text file dump.
   This is not recommended for big databases, as it will consume much time,
-  memory and processor. In that case it's preferable to use \term{backup} and \term{install-fallback}.
+  memory and processor. In that case it's preferable to use \term{backup} and \term{install\_fallback}.
 %%More information about backuping can
 %%  be found in section~\ref{backup}.
-\titem{import-file, import-dir} \ind{migration from other software}
-  These options can be used to migrate from other \Jabber{}/XMPP servers. There
-  exist tutorials to \footahref{http://www.ejabberd.im/migrate-to-ejabberd}{migrate from other software to ejabberd}.
-\titem{delete-expired-messages} This option can be used to delete old messages
+\titem{import\_piefxis, export\_piefxis, export\_piefxis\_host} \ind{migrate between servers}
+  These options can be used to migrate accounts
+  using \xepref{0227} formatted XML files
+  from/to other \Jabber{}/XMPP servers
+  or move users of a vhost to another ejabberd installation.
+  See also 
+  \footahref{https://support.process-one.net/doc/display/P1/ejabberd+migration+kit}{ejabberd migration kit}.
+\titem{import\_file, import\_dir} \ind{migration from other software}
+  These options can be used to migrate accounts
+  using jabberd1.4 formatted XML files.
+  from other \Jabber{}/XMPP servers
+  There exist tutorials to
+  \footahref{http://www.ejabberd.im/migrate-to-ejabberd}{migrate from other software to ejabberd}.
+\titem{delete\_expired\_messages} This option can be used to delete old messages
   in offline storage. This might be useful when the number of offline messages
   is very high.
 \end{description}
@@ -4266,11 +4446,11 @@ In that case, authentication information must be provided.
 In each frontend the \term{AccessCommands} option is defined
 in a different place. But in all cases the option syntax is the same:
 \begin{verbatim}
-AccessCommands = [ {Access, CommandNames, Arguments} ]
+AccessCommands = [ {Access, CommandNames, Arguments}, ...]
 Access = atom()
 CommandNames = all | [CommandName]
 CommandName = atom()
-Arguments = [{ArgumentName, ArgumentValue}]
+Arguments = [ {ArgumentName, ArgumentValue}, ...]
 ArgumentName = atom()
 ArgumentValue = any()
 \end{verbatim}
@@ -4762,10 +4942,7 @@ domain.
 The default distribution algorithm try to deliver to a local instance of a component. If several local instances are available, one instance is chosen randomly. If no instance is available locally, one instance is chosen randomly among the remote component instances.
 
 If you need a different behaviour, you can change the load balancing behaviour with the option \option{domain\_balancing}. The syntax of the option is the following:
-
-\begin{verbatim}
-{domain_balancing, &quot;component.example.com&quot;, &lt;balancing_criterium&gt;}.
-\end{verbatim}
+\esyntax{\{domain\_balancing, &quot;component.example.com&quot;, BalancingCriteria\}.}
 
 Several balancing criteria are available:
 \begin{itemize}
@@ -4784,10 +4961,8 @@ When there is a risk of failure for a given component, domain balancing can caus
 
 In this case, it is best to limit the problem to the sessions handled by the failing component. This is what the \term{domain\_balancing\_component\_number} option does, making the load balancing algorithm not dynamic, but sticky on a fix number of component instances.
 
-The syntax is the following:
-\begin{verbatim}
-{domain_balancing_component_number, &quot;component.example.com&quot;, N}
-\end{verbatim}
+The syntax is:
+\esyntax{\{domain\_balancing\_component\_number, &quot;component.example.com&quot;, Number\}.}
 
 
 
@@ -4808,8 +4983,10 @@ An \ejabberd{} node writes two log files:
 	\titem{sasl.log} is the Erlang/OTP system log, with the messages reported by Erlang/OTP using SASL (System Architecture Support Libraries)
 \end{description}
 
-The option \term{loglevel} modifies the verbosity of the file ejabberd.log.
-The possible levels are:
+The option \term{loglevel} modifies the verbosity of the file ejabberd.log. The syntax is:
+\esyntax{\{loglevel, Level\}.}
+
+The possible \term{Level} are:
 \begin{description}
 	\titem{0} No ejabberd log at all (not recommended)
 	\titem{1} Critical
@@ -4854,6 +5031,9 @@ a message is sent to the Jabber accounts defined with the option
 \term{watchdog\_admins}
 \ind{options!watchdog\_admins} in the \ejabberd{} configuration file.
 
+The syntax is:
+\esyntax{\{watchdog\_admins, [JID, ...]\}.}
+
 The memory consumed is measured in \term{words}:
 a word on 32-bit architecture is 4 bytes,
 and a word on 64-bit architecture is 8 bytes.
@@ -4861,6 +5041,9 @@ The threshold by default is 1000000 words.
 This value can be configured with the option \term{watchdog\_large\_heap},
 or in a conversation with the watchdog alert bot.
 
+The syntax is:
+\esyntax{\{watchdog\_large\_heap, Number\}.}
+
 Example configuration:
 \begin{verbatim}
 {watchdog_admins, [&quot;admin2@localhost&quot;, &quot;admin2@example.org&quot;]}.</diff>
      <filename>doc/guide.tex</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ Joeri}
 
 %ejabberd is a free and open source instant messaging server written in Erlang. ejabberd is cross-platform, distributed, fault-tolerant, and based on open standards to achieve real-time communication (Jabber/XMPP).
 
-\ejabberd{} is a \marking{free and open source} instant messaging server written in \footahref{http://www.erlang.org/}{Erlang}.
+\ejabberd{} is a \marking{free and open source} instant messaging server written in \footahref{http://www.erlang.org/}{Erlang/OTP}.
 
 \ejabberd{} is \marking{cross-platform}, distributed, fault-tolerant, and based on open standards to achieve real-time communication.
 </diff>
      <filename>doc/introduction.tex</filename>
    </modified>
    <modified>
      <diff>@@ -63,7 +63,7 @@ endif
 prefix = @prefix@
 exec_prefix = @exec_prefix@
 
-SUBDIRS = @mod_irc@ @mod_pubsub@ @mod_muc@ @mod_proxy65@ @eldap@ @pam@ @web@ stringprep @tls@ @odbc@ @ejabberd_zlib@
+SUBDIRS = @mod_irc@ @mod_pubsub@ @mod_muc@ @mod_proxy65@ @eldap@ @pam@ @web@ stringprep stun @tls@ @odbc@ @ejabberd_zlib@
 ERLSHLIBS = expat_erl.so
 ERLBEHAVS = cyrsasl.erl gen_mod.erl p1_fsm.erl
 SOURCES_ALL = $(wildcard *.erl)
@@ -183,7 +183,7 @@ install: all
 	install -b -m 644 $(G_USER) inetrc $(ETCDIR)/inetrc
 	#
 	# Administration script
-	[ -d $(SBINDIR) ] || install -d -m 750 $(SBINDIR)
+	[ -d $(SBINDIR) ] || install -d -m 755 $(SBINDIR)
 	install -m 550 $(G_USER) ejabberdctl.example $(SBINDIR)/ejabberdctl
 	#
 	# Binary Erlang files</diff>
      <filename>src/Makefile.in</filename>
    </modified>
    <modified>
      <diff>@@ -1,62 +1,83 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for ejabberd.erl version.
+# Generated by GNU Autoconf 2.64 for ejabberd.erl version.
 #
 # Report bugs to &lt;ejabberd@process-one.net&gt;.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# Foundation, Inc.
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n &quot;${ZSH_VERSION+set}&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then
+if test -n &quot;${ZSH_VERSION+set}&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+&quot;$@&quot;}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+&quot;$@&quot;}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+&quot;$@&quot;}'='&quot;$@&quot;'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2&gt;/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2&gt;/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test &quot;${PATH_SEPARATOR+set}&quot; != set; then
-  echo &quot;#! /bin/sh&quot; &gt;conf$$.sh
-  echo  &quot;exit 0&quot;   &gt;&gt;conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH=&quot;/nonexistent;.&quot;; conf$$.sh) &gt;/dev/null 2&gt;&amp;1; then
-    PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z &quot;$BASH_VERSION$ZSH_VERSION&quot; \
+    &amp;&amp; (test &quot;X`print -r -- $as_echo`&quot; = &quot;X$as_echo&quot;) 2&gt;/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test &quot;X`printf %s $as_echo`&quot; = &quot;X$as_echo&quot;) 2&gt;/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test &quot;X`(/usr/ucb/echo -n -n $as_echo) 2&gt;/dev/null`&quot; = &quot;X-n $as_echo&quot;; then
+    as_echo_body='eval /usr/ucb/echo -n &quot;$1$as_nl&quot;'
+    as_echo_n='/usr/ucb/echo -n'
   else
-    PATH_SEPARATOR=:
+    as_echo_body='eval expr &quot;X$1&quot; : &quot;X\\(.*\\)&quot;'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *&quot;$as_nl&quot;*)
+	expr &quot;X$arg&quot; : &quot;X\\(.*\\)$as_nl&quot;;
+	arg=`expr &quot;X$arg&quot; : &quot;.*$as_nl\\(.*\\)&quot;`;;
+      esac;
+      expr &quot;X$arg&quot; : &quot;X\\(.*\\)&quot; | tr -d &quot;$as_nl&quot;
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
   fi
-  rm -f conf$$.sh
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) &gt;/dev/null 2&gt;&amp;1; then
-  as_unset=unset
-else
-  as_unset=false
+# The user is always right.
+if test &quot;${PATH_SEPARATOR+set}&quot; != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) &gt;/dev/null 2&gt;&amp;1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 
@@ -65,20 +86,18 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=&quot; &quot;&quot;	$as_nl&quot;
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  test -r &quot;$as_dir/$0&quot; &amp;&amp; as_myself=$as_dir/$0 &amp;&amp; break
-done
+    test -r &quot;$as_dir/$0&quot; &amp;&amp; as_myself=$as_dir/$0 &amp;&amp; break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -89,354 +108,322 @@ if test &quot;x$as_myself&quot; = x; then
   as_myself=$0
 fi
 if test ! -f &quot;$as_myself&quot;; then
-  echo &quot;$as_myself: error: cannot find myself; rerun with an absolute file name&quot; &gt;&amp;2
-  { (exit 1); exit 1; }
+  $as_echo &quot;$as_myself: error: cannot find myself; rerun with an absolute file name&quot; &gt;&amp;2
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the &quot;|| exit 1&quot;
+# suppresses any &quot;Segmentation fault&quot; message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  &amp;&amp; ( (unset $as_var) || exit 1) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; unset $as_var || :
 done
 PS1='$ '
 PS2='&gt; '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z &quot;`(eval $as_var=C; export $as_var) 2&gt;&amp;1`&quot;); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' &gt;/dev/null 2&gt;&amp;1 &amp;&amp;
-   test &quot;X`expr 00001 : '.*\(...\)'`&quot; = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; test &quot;X`basename -- / 2&gt;&amp;1`&quot; = &quot;X/&quot;; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- &quot;$0&quot; ||
-$as_expr X/&quot;$0&quot; : '.*/\([^/][^/]*\)/*$' \| \
-	 X&quot;$0&quot; : 'X\(//\)$' \| \
-	 X&quot;$0&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
-echo X/&quot;$0&quot; |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # CDPATH.
-$as_unset CDPATH
-
+(unset CDPATH) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; unset CDPATH
 
 if test &quot;x$CONFIG_SHELL&quot; = x; then
-  if (eval &quot;:&quot;) 2&gt;/dev/null; then
-  as_have_required=yes
+  as_bourne_compatible=&quot;if test -n \&quot;\${ZSH_VERSION+set}\&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\&quot;\$@\&quot;}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\&quot;\$@\&quot;}'='\&quot;\$@\&quot;'
+  setopt NO_GLOB_SUBST
 else
-  as_have_required=no
+  case \`(set -o) 2&gt;/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
-
-  if test $as_have_required = yes &amp;&amp; 	 (eval &quot;:
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+&quot;
+  as_required=&quot;as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
 
 exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y &amp;&amp; test x = \&quot;\$1\&quot; ); then
-  :
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure &amp;&amp; { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure &amp;&amp; { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y &amp;&amp; test x = \&quot;\$1\&quot; ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1&quot;
+  as_suggested=&quot;  as_lineno_1=&quot;;as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested&quot; as_lineno_1a=\$LINENO
+  as_lineno_2=&quot;;as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested&quot; as_lineno_2a=\$LINENO
+  eval 'test \&quot;x\$as_lineno_1'\$as_run'\&quot; != \&quot;x\$as_lineno_2'\$as_run'\&quot; &amp;&amp;
+  test \&quot;x\`expr \$as_lineno_1'\$as_run' + 1\`\&quot; = \&quot;x\$as_lineno_2'\$as_run'\&quot;' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1&quot;
+  if (eval &quot;$as_required&quot;) 2&gt;/dev/null; then :
+  as_have_required=yes
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_have_required=no
 fi
+  if test x$as_have_required = xyes &amp;&amp; (eval &quot;$as_suggested&quot;) 2&gt;/dev/null; then :
 
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \&quot;x\$as_lineno_1\&quot; != \&quot;x\$as_lineno_2\&quot; &amp;&amp;
-  test \&quot;x\`expr \$as_lineno_1 + 1\`\&quot; = \&quot;x\$as_lineno_2\&quot;) || { (exit 1); exit 1; }
-&quot;) 2&gt; /dev/null; then
-  :
 else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  case $as_dir in
+  as_found=:
+  case $as_dir in #(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
-	     as_candidate_shells=&quot;$as_candidate_shells $as_dir/$as_base&quot;
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f &quot;$as_shell&quot; || test -f &quot;$as_shell.exe&quot;; } &amp;&amp;
+		    { $as_echo &quot;$as_bourne_compatible&quot;&quot;$as_required&quot; | as_run=a &quot;$as_shell&quot;; } 2&gt;/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo &quot;$as_bourne_compatible&quot;&quot;$as_suggested&quot; | as_run=a &quot;$as_shell&quot;; } 2&gt;/dev/null; then :
+  break 2
+fi
+fi
 	   done;;
        esac
+  as_found=false
 done
+$as_found || { if { test -f &quot;$SHELL&quot; || test -f &quot;$SHELL.exe&quot;; } &amp;&amp;
+	      { $as_echo &quot;$as_bourne_compatible&quot;&quot;$as_required&quot; | as_run=a &quot;$SHELL&quot;; } 2&gt;/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
 IFS=$as_save_IFS
 
 
-      for as_shell in $as_candidate_shells $SHELL; do
-	 # Try only shells that exist, to save several forks.
-	 if { test -f &quot;$as_shell&quot; || test -f &quot;$as_shell.exe&quot;; } &amp;&amp;
-		{ (&quot;$as_shell&quot;) 2&gt; /dev/null &lt;&lt;\_ASEOF
-if test -n &quot;${ZSH_VERSION+set}&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+&quot;$@&quot;}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+&quot;$@&quot;}'='&quot;$@&quot;'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2&gt;/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
+      if test &quot;x$CONFIG_SHELL&quot; != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec &quot;$CONFIG_SHELL&quot; &quot;$as_myself&quot; ${1+&quot;$@&quot;}
 fi
 
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-	       as_have_required=yes
-	       if { &quot;$as_shell&quot; 2&gt; /dev/null &lt;&lt;\_ASEOF
-if test -n &quot;${ZSH_VERSION+set}&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+&quot;$@&quot;}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+&quot;$@&quot;}'='&quot;$@&quot;'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2&gt;/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
+    if test x$as_have_required = xno; then :
+  $as_echo &quot;$0: This script requires a shell more modern than all&quot;
+  $as_echo &quot;$0: the shells that I found on your system.&quot;
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo &quot;$0: In particular, zsh $ZSH_VERSION has bugs and should&quot;
+    $as_echo &quot;$0: be upgraded to zsh 4.3.4 or later.&quot;
+  else
+    $as_echo &quot;$0: Please tell bug-autoconf@gnu.org and
+$0: ejabberd@process-one.net about your system, including
+$0: any error possibly output before this message. Then
+$0: install a modern shell, or manually run the script
+$0: under such a shell if you do have one.&quot;
+  fi
+  exit 1
 fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
 
-
-:
-(as_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
 }
+as_unset=as_fn_unset
 
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
 
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a &quot;trap 0&quot; or &quot;set -e&quot; context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create &quot;$as_dir&quot; as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
 
-if as_func_ret_success; then
-  :
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d &quot;$as_dir&quot; || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo &quot;$as_dir&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs=&quot;'$as_qdir' $as_dirs&quot;
+      as_dir=`$as_dirname -- &quot;$as_dir&quot; ||
+$as_expr X&quot;$as_dir&quot; : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X&quot;$as_dir&quot; : 'X\(//\)[^/]' \| \
+	 X&quot;$as_dir&quot; : 'X\(//\)$' \| \
+	 X&quot;$as_dir&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
+$as_echo X&quot;$as_dir&quot; |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d &quot;$as_dir&quot; &amp;&amp; break
+    done
+    test -z &quot;$as_dirs&quot; || eval &quot;mkdir $as_dirs&quot;
+  } || test -d &quot;$as_dir&quot; || as_fn_error &quot;cannot create directory $as_dir&quot;
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval &quot;as_var=1; as_var+=2; test x\$as_var = x12&quot;) 2&gt;/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y &amp;&amp; test x = &quot;$1&quot; ); then
-  :
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval &quot;test \$(( 1 + 1 )) = 2&quot;) 2&gt;/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
 else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test &quot;x$as_lineno_1&quot; != &quot;x$as_lineno_2&quot; &amp;&amp;
-  test &quot;x`expr $as_lineno_1 + 1`&quot; = &quot;x$as_lineno_2&quot;) || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
-fi
-
-fi
-
-      done
-
-      if test &quot;x$CONFIG_SHELL&quot; != x; then
-  for as_var in BASH_ENV ENV
-        do ($as_unset $as_var) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; $as_unset $as_var
-        done
-        export CONFIG_SHELL
-        exec &quot;$CONFIG_SHELL&quot; &quot;$as_myself&quot; ${1+&quot;$@&quot;}
-fi
-
-
-    if test $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
+  as_fn_arith ()
+  {
+    as_val=`expr &quot;$@&quot; || test $? -eq 1`
+  }
+fi # as_fn_arith
 
 
-(eval &quot;as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output &quot;`basename $0`: error: ERROR&quot; to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 &amp;&amp; as_status=1
+  if test &quot;$3&quot;; then
+    as_lineno=${as_lineno-&quot;$2&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: $1&quot; &gt;&amp;$3
+  fi
+  $as_echo &quot;$as_me: error: $1&quot; &gt;&amp;2
+  as_fn_exit $as_status
+} # as_fn_error
 
-exitcode=0
-if as_func_success; then
-  :
+if expr a : '\(a\)' &gt;/dev/null 2&gt;&amp;1 &amp;&amp;
+   test &quot;X`expr 00001 : '.*\(...\)'`&quot; = X001; then
+  as_expr=expr
 else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
+  as_expr=false
 fi
 
-if as_func_ret_success; then
-  :
+if (basename -- /) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; test &quot;X`basename -- / 2&gt;&amp;1`&quot; = &quot;X/&quot;; then
+  as_basename=basename
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
+  as_basename=false
 fi
 
-if ( set x; as_func_ret_success y &amp;&amp; test x = \&quot;\$1\&quot; ); then
-  :
+if (as_dir=`dirname -- /` &amp;&amp; test &quot;X$as_dir&quot; = X/) &gt;/dev/null 2&gt;&amp;1; then
+  as_dirname=dirname
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_dirname=false
 fi
 
-test \$exitcode = 0&quot;) || {
-  echo No shell found that supports shell functions.
-  echo Please tell autoconf@gnu.org about your system,
-  echo including any error possibly output before this
-  echo message
-}
-
+as_me=`$as_basename -- &quot;$0&quot; ||
+$as_expr X/&quot;$0&quot; : '.*/\([^/][^/]*\)/*$' \| \
+	 X&quot;$0&quot; : 'X\(//\)$' \| \
+	 X&quot;$0&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
+$as_echo X/&quot;$0&quot; |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test &quot;x$as_lineno_1&quot; != &quot;x$as_lineno_2&quot; &amp;&amp;
-  test &quot;x`expr $as_lineno_1 + 1`&quot; = &quot;x$as_lineno_2&quot; || {
 
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test &quot;x$as_lineno_1'$as_run'&quot; != &quot;x$as_lineno_2'$as_run'&quot; &amp;&amp;
+  test &quot;x`expr $as_lineno_1'$as_run' + 1`&quot; = &quot;x$as_lineno_2'$as_run'&quot;' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
     /[$]LINENO/=
@@ -453,8 +440,7 @@ test \$exitcode = 0&quot;) || {
       s/-\n.*//
     ' &gt;$as_me.lineno &amp;&amp;
   chmod +x &quot;$as_me.lineno&quot; ||
-    { echo &quot;$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+    { $as_echo &quot;$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell&quot; &gt;&amp;2; as_fn_exit 1; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
@@ -464,49 +450,40 @@ test \$exitcode = 0&quot;) || {
   exit
 }
 
-
-if (as_dir=`dirname -- /` &amp;&amp; test &quot;X$as_dir&quot; = X/) &gt;/dev/null 2&gt;&amp;1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` &gt; /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' &gt;/dev/null 2&gt;&amp;1 &amp;&amp;
-   test &quot;X`expr 00001 : '.*\(...\)'`&quot; = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo &gt;conf$$.file
-if ln -s conf$$.file conf$$ 2&gt;/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP &lt; 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2&gt;/dev/null &amp;&amp; test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2&gt;/dev/null
+fi
+if (echo &gt;conf$$.file) 2&gt;/dev/null; then
+  if ln -s conf$$.file conf$$ 2&gt;/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP &lt; 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2&gt;/dev/null &amp;&amp; test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2&gt;/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2&gt;/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
@@ -514,7 +491,7 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2&gt;/dev/null
 
 if mkdir -p . 2&gt;/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p &quot;$as_dir&quot;'
 else
   test -d ./-p &amp;&amp; rmdir ./-p
   as_mkdir_p=false
@@ -531,12 +508,12 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d &quot;$1&quot;; then
-        test -d &quot;$1/.&quot;;
+	test -d &quot;$1/.&quot;;
       else
-	case $1 in
-        -*)set &quot;./$1&quot;;;
+	case $1 in #(
+	-*)set &quot;./$1&quot;;;
 	esac;
-	case `ls -ld'$as_ls_L_option' &quot;$1&quot; 2&gt;/dev/null` in
+	case `ls -ld'$as_ls_L_option' &quot;$1&quot; 2&gt;/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -550,7 +527,6 @@ as_tr_cpp=&quot;eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'&quot;
 as_tr_sh=&quot;eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'&quot;
 
 
-
 exec 7&lt;&amp;0 &lt;/dev/null 6&gt;&amp;1
 
 # Name of the host.
@@ -569,7 +545,6 @@ cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME='ejabberd.erl'
@@ -577,6 +552,7 @@ PACKAGE_TARNAME='ejabberd'
 PACKAGE_VERSION='version'
 PACKAGE_STRING='ejabberd.erl version'
 PACKAGE_BUGREPORT='ejabberd@process-one.net'
+PACKAGE_URL=''
 
 # Factoring default headers for most tests.
 ac_includes_default=&quot;\
@@ -615,97 +591,123 @@ ac_includes_default=&quot;\
 #endif&quot;
 
 ac_default_prefix=/
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-SET_MAKE
-ERLC
-ERL
-ERLANG_CFLAGS
-ERLANG_LIBS
-ERLANG_SSL39
-LIBICONV
-CPP
-GREP
-EGREP
-EXPAT_CFLAGS
-EXPAT_LIBS
-LIBOBJS
-mod_irc
-make_mod_irc
-mod_muc
-make_mod_muc
-mod_proxy65
-make_mod_proxy65
-mod_pubsub
-make_mod_pubsub
-eldap
-make_eldap
-odbc
-make_odbc
-tls
-make_tls
-web
-make_web
-ejabberd_zlib
-make_ejabberd_zlib
-ZLIB_CFLAGS
-ZLIB_LIBS
-pam
-make_pam
-PAM_CFLAGS
-PAM_LIBS
-hipe
-roster_gateway_workaround
-db_type
-transient_supervisors
-full_xml
-SSL_LIBS
-SSL_CFLAGS
+ac_subst_vars='LTLIBOBJS
 INSTALLUSER
-LTLIBOBJS'
+SSL_CFLAGS
+SSL_LIBS
+full_xml
+transient_supervisors
+db_type
+roster_gateway_workaround
+hipe
+PAM_LIBS
+PAM_CFLAGS
+make_pam
+pam
+ZLIB_LIBS
+ZLIB_CFLAGS
+make_ejabberd_zlib
+ejabberd_zlib
+make_web
+web
+make_tls
+tls
+make_odbc
+odbc
+make_eldap
+eldap
+make_mod_pubsub
+mod_pubsub
+make_mod_proxy65
+mod_proxy65
+make_mod_muc
+mod_muc
+make_mod_irc
+mod_irc
+LIBOBJS
+EXPAT_LIBS
+EXPAT_CFLAGS
+EGREP
+GREP
+CPP
+LIBICONV
+ERLANG_SSL39
+ERLANG_LIBS
+ERLANG_CFLAGS
+ERL
+ERLC
+SET_MAKE
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
 ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_erlang
+with_libiconv_prefix
+with_expat
+enable_mod_irc
+enable_mod_muc
+enable_mod_proxy65
+enable_mod_pubsub
+enable_eldap
+enable_odbc
+enable_tls
+enable_web
+enable_ejabberd_zlib
+with_zlib
+enable_pam
+with_pam
+enable_hipe
+enable_roster_gateway_workaround
+enable_mssql
+enable_transient_supervisors
+enable_full_xml
+with_openssl
+enable_user
+'
       ac_precious_vars='build_alias
 host_alias
 target_alias
@@ -720,6 +722,8 @@ CPP'
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -818,13 +822,20 @@ do
     datarootdir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_feature=`expr &quot;x$ac_option&quot; : 'x-*disable-\(.*\)'`
+    ac_useropt=`expr &quot;x$ac_option&quot; : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr &quot;x$ac_feature&quot; : &quot;.*[^-._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
-      { echo &quot;$as_me: error: invalid feature name: $ac_feature&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=no ;;
+    expr &quot;x$ac_useropt&quot; : &quot;.*[^-+._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
+      as_fn_error &quot;invalid feature name: $ac_useropt&quot;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo &quot;$ac_useropt&quot; | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *&quot;
+&quot;enable_$ac_useropt&quot;
+&quot;*) ;;
+      *) ac_unrecognized_opts=&quot;$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig&quot;
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
 
   -docdir | --docdir | --docdi | --doc | --do)
     ac_prev=docdir ;;
@@ -837,13 +848,20 @@ do
     dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_feature=`expr &quot;x$ac_option&quot; : 'x-*enable-\([^=]*\)'`
+    ac_useropt=`expr &quot;x$ac_option&quot; : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr &quot;x$ac_feature&quot; : &quot;.*[^-._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
-      { echo &quot;$as_me: error: invalid feature name: $ac_feature&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=\$ac_optarg ;;
+    expr &quot;x$ac_useropt&quot; : &quot;.*[^-+._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
+      as_fn_error &quot;invalid feature name: $ac_useropt&quot;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo &quot;$ac_useropt&quot; | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *&quot;
+&quot;enable_$ac_useropt&quot;
+&quot;*) ;;
+      *) ac_unrecognized_opts=&quot;$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig&quot;
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1034,22 +1052,36 @@ do
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`expr &quot;x$ac_option&quot; : 'x-*with-\([^=]*\)'`
+    ac_useropt=`expr &quot;x$ac_option&quot; : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr &quot;x$ac_package&quot; : &quot;.*[^-._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
-      { echo &quot;$as_me: error: invalid package name: $ac_package&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=\$ac_optarg ;;
+    expr &quot;x$ac_useropt&quot; : &quot;.*[^-+._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
+      as_fn_error &quot;invalid package name: $ac_useropt&quot;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo &quot;$ac_useropt&quot; | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *&quot;
+&quot;with_$ac_useropt&quot;
+&quot;*) ;;
+      *) ac_unrecognized_opts=&quot;$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig&quot;
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_package=`expr &quot;x$ac_option&quot; : 'x-*without-\(.*\)'`
+    ac_useropt=`expr &quot;x$ac_option&quot; : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr &quot;x$ac_package&quot; : &quot;.*[^-._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
-      { echo &quot;$as_me: error: invalid package name: $ac_package&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=no ;;
+    expr &quot;x$ac_useropt&quot; : &quot;.*[^-+._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
+      as_fn_error &quot;invalid package name: $ac_useropt&quot;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo &quot;$ac_useropt&quot; | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *&quot;
+&quot;with_$ac_useropt&quot;
+&quot;*) ;;
+      *) ac_unrecognized_opts=&quot;$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig&quot;
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -1069,25 +1101,25 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { echo &quot;$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information.&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+  -*) as_fn_error &quot;unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information.&quot;
     ;;
 
   *=*)
     ac_envvar=`expr &quot;x$ac_option&quot; : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
-    expr &quot;x$ac_envvar&quot; : &quot;.*[^_$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
-      { echo &quot;$as_me: error: invalid variable name: $ac_envvar&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error &quot;invalid variable name: \`$ac_envvar'&quot; ;;
+    esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    echo &quot;$as_me: WARNING: you should use --build, --host, --target&quot; &gt;&amp;2
+    $as_echo &quot;$as_me: WARNING: you should use --build, --host, --target&quot; &gt;&amp;2
     expr &quot;x$ac_option&quot; : &quot;.*[^-._$as_cr_alnum]&quot; &gt;/dev/null &amp;&amp;
-      echo &quot;$as_me: WARNING: invalid host type: $ac_option&quot; &gt;&amp;2
+      $as_echo &quot;$as_me: WARNING: invalid host type: $ac_option&quot; &gt;&amp;2
     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
@@ -1096,23 +1128,36 @@ done
 
 if test -n &quot;$ac_prev&quot;; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo &quot;$as_me: error: missing argument to $ac_option&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+  as_fn_error &quot;missing argument to $ac_option&quot;
 fi
 
-# Be sure to have absolute directory names.
+if test -n &quot;$ac_unrecognized_opts&quot;; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error &quot;unrecognized options: $ac_unrecognized_opts&quot; ;;
+    *)     $as_echo &quot;$as_me: WARNING: unrecognized options: $ac_unrecognized_opts&quot; &gt;&amp;2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
 		libdir localedir mandir
 do
   eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr &quot;X$ac_val&quot; : 'X\(.*[^/]\)' \| &quot;X$ac_val&quot; : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
   case $ac_val in
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  { echo &quot;$as_me: error: expected an absolute directory name for --$ac_var: $ac_val&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+  as_fn_error &quot;expected an absolute directory name for --$ac_var: $ac_val&quot;
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1126,7 +1171,7 @@ target=$target_alias
 if test &quot;x$host_alias&quot; != x; then
   if test &quot;x$build_alias&quot; = x; then
     cross_compiling=maybe
-    echo &quot;$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    $as_echo &quot;$as_me: WARNING: If you wanted to set the --build type, don't use --host.
     If a cross compiler is detected then cross compile mode will be used.&quot; &gt;&amp;2
   elif test &quot;x$build_alias&quot; != &quot;x$host_alias&quot;; then
     cross_compiling=yes
@@ -1142,23 +1187,21 @@ test &quot;$silent&quot; = yes &amp;&amp; exec 6&gt;/dev/null
 ac_pwd=`pwd` &amp;&amp; test -n &quot;$ac_pwd&quot; &amp;&amp;
 ac_ls_di=`ls -di .` &amp;&amp;
 ac_pwd_ls_di=`cd &quot;$ac_pwd&quot; &amp;&amp; ls -di .` ||
-  { echo &quot;$as_me: error: Working directory cannot be determined&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+  as_fn_error &quot;working directory cannot be determined&quot;
 test &quot;X$ac_ls_di&quot; = &quot;X$ac_pwd_ls_di&quot; ||
-  { echo &quot;$as_me: error: pwd does not report name of working directory&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+  as_fn_error &quot;pwd does not report name of working directory&quot;
 
 
 # Find the source files, if location was not specified.
 if test -z &quot;$srcdir&quot;; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- &quot;$0&quot; ||
-$as_expr X&quot;$0&quot; : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X&quot;$0&quot; : 'X\(//\)[^/]' \| \
-	 X&quot;$0&quot; : 'X\(//\)$' \| \
-	 X&quot;$0&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
-echo X&quot;$0&quot; |
+  ac_confdir=`$as_dirname -- &quot;$as_myself&quot; ||
+$as_expr X&quot;$as_myself&quot; : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X&quot;$as_myself&quot; : 'X\(//\)[^/]' \| \
+	 X&quot;$as_myself&quot; : 'X\(//\)$' \| \
+	 X&quot;$as_myself&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
+$as_echo X&quot;$as_myself&quot; |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -1185,13 +1228,11 @@ else
 fi
 if test ! -r &quot;$srcdir/$ac_unique_file&quot;; then
   test &quot;$ac_srcdir_defaulted&quot; = yes &amp;&amp; srcdir=&quot;$ac_confdir or ..&quot;
-  { echo &quot;$as_me: error: cannot find sources ($ac_unique_file) in $srcdir&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+  as_fn_error &quot;cannot find sources ($ac_unique_file) in $srcdir&quot;
 fi
 ac_msg=&quot;sources are in $srcdir, but \`cd $srcdir' does not work&quot;
 ac_abs_confdir=`(
-	cd &quot;$srcdir&quot; &amp;&amp; test -r &quot;./$ac_unique_file&quot; || { echo &quot;$as_me: error: $ac_msg&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
+	cd &quot;$srcdir&quot; &amp;&amp; test -r &quot;./$ac_unique_file&quot; || as_fn_error &quot;$ac_msg&quot;
 	pwd)`
 # When building in place, set srcdir=.
 if test &quot;$ac_abs_confdir&quot; = &quot;$ac_pwd&quot;; then
@@ -1239,9 +1280,9 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
+                          [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
+                          [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1251,25 +1292,25 @@ for instance \`--prefix=\$HOME'.
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR          info documentation [DATAROOTDIR/info]
-  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/ejabberd]
-  --htmldir=DIR          html documentation [DOCDIR]
-  --dvidir=DIR           dvi documentation [DOCDIR]
-  --pdfdir=DIR           pdf documentation [DOCDIR]
-  --psdir=DIR            ps documentation [DOCDIR]
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/ejabberd]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
 _ACEOF
 
   cat &lt;&lt;\_ACEOF
@@ -1283,6 +1324,7 @@ if test -n &quot;$ac_init_help&quot;; then
   cat &lt;&lt;\_ACEOF
 
 Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-mod_irc        enable mod_irc (default: yes)
@@ -1307,7 +1349,8 @@ Optional Features:
                           (default: yes)
   --enable-full-xml       use XML features in XMPP stream (ex: CDATA)
                           (default: no, requires XML compliant clients)
-  --enable-user[=USER]    allow this system user to start ejabberd (default:
+  --enable-user[[[=USER]]]
+                          allow this system user to start ejabberd (default:
                           no)
 
 Optional Packages:
@@ -1342,15 +1385,17 @@ fi
 if test &quot;$ac_init_help&quot; = &quot;recursive&quot;; then
   # If there are subdirs, report their specific --help.
   for ac_dir in : $ac_subdirs_all; do test &quot;x$ac_dir&quot; = x: &amp;&amp; continue
-    test -d &quot;$ac_dir&quot; || continue
+    test -d &quot;$ac_dir&quot; ||
+      { cd &quot;$srcdir&quot; &amp;&amp; ac_pwd=`pwd` &amp;&amp; srcdir=. &amp;&amp; test -d &quot;$ac_dir&quot;; } ||
+      continue
     ac_builddir=.
 
 case &quot;$ac_dir&quot; in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo &quot;$ac_dir&quot; | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo &quot;$ac_dir&quot; | sed 's|^\.[\\/]||'`
   # A &quot;..&quot; for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo &quot;$ac_dir_suffix&quot; | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo &quot;$ac_dir_suffix&quot; | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   &quot;&quot;) ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1386,7 +1431,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &amp;&amp;
       $SHELL &quot;$ac_srcdir/configure&quot; --help=recursive
     else
-      echo &quot;$as_me: WARNING: no configuration information is in $ac_dir&quot; &gt;&amp;2
+      $as_echo &quot;$as_me: WARNING: no configuration information is in $ac_dir&quot; &gt;&amp;2
     fi || ac_status=$?
     cd &quot;$ac_pwd&quot; || { ac_status=$?; break; }
   done
@@ -1396,21 +1441,311 @@ test -n &quot;$ac_init_help&quot; &amp;&amp; exit $ac_status
 if $ac_init_version; then
   cat &lt;&lt;\_ACEOF
 ejabberd.erl configure version
-generated by GNU Autoconf 2.61
+generated by GNU Autoconf 2.64
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
   exit
 fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-&quot;$1&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try=&quot;$ac_compile&quot;
+case &quot;(($ac_try&quot; in
+  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
+  (eval &quot;$ac_compile&quot;) 2&gt;conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err &gt;conftest.er1
+    cat conftest.er1 &gt;&amp;5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; } &amp;&amp; {
+	 test -z &quot;$ac_c_werror_flag&quot; ||
+	 test ! -s conftest.err
+       } &amp;&amp; test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
+sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test &quot;x$as_lineno_stack&quot; = x &amp;&amp; { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-&quot;$1&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try=&quot;$ac_link&quot;
+case &quot;(($ac_try&quot; in
+  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
+  (eval &quot;$ac_link&quot;) 2&gt;conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err &gt;conftest.er1
+    cat conftest.er1 &gt;&amp;5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; } &amp;&amp; {
+	 test -z &quot;$ac_c_werror_flag&quot; ||
+	 test ! -s conftest.err
+       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp; {
+	 test &quot;$cross_compiling&quot; = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
+sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test &quot;x$as_lineno_stack&quot; = x &amp;&amp; { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-&quot;$1&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
+case &quot;(($ac_try&quot; in
+  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
+  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err &gt;conftest.er1
+    cat conftest.er1 &gt;&amp;5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; } &gt;/dev/null &amp;&amp; {
+	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
+sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test &quot;x$as_lineno_stack&quot; = x &amp;&amp; { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-&quot;$1&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { as_var=$3; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then :
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $2&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $2... &quot; &gt;&amp;6; }
+if { as_var=$3; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
+fi
+eval ac_res=\$$3
+	       { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_res&quot; &gt;&amp;5
+$as_echo &quot;$ac_res&quot; &gt;&amp;6; }
+else
+  # Is the header compilable?
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking $2 usability&quot; &gt;&amp;5
+$as_echo_n &quot;checking $2 usability... &quot; &gt;&amp;6; }
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include &lt;$2&gt;
+_ACEOF
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler&quot; &gt;&amp;5
+$as_echo &quot;$ac_header_compiler&quot; &gt;&amp;6; }
+
+# Is the header present?
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking $2 presence&quot; &gt;&amp;5
+$as_echo_n &quot;checking $2 presence... &quot; &gt;&amp;6; }
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
+/* end confdefs.h.  */
+#include &lt;$2&gt;
+_ACEOF
+if ac_fn_c_try_cpp &quot;$LINENO&quot;; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc&quot; &gt;&amp;5
+$as_echo &quot;$ac_header_preproc&quot; &gt;&amp;6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2: proceeding with the compiler's result&quot; &gt;&amp;2;}
+    ;;
+  no:yes:* )
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2: present but cannot be compiled&quot; &gt;&amp;2;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2: see the Autoconf documentation&quot; &gt;&amp;2;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $2: proceeding with the compiler's result&quot; &gt;&amp;2;}
+( cat &lt;&lt;\_ASBOX
+## --------------------------------------- ##
+## Report this to ejabberd@process-one.net ##
+## --------------------------------------- ##
+_ASBOX
+     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
+    ;;
+esac
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $2&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $2... &quot; &gt;&amp;6; }
+if { as_var=$3; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
+else
+  eval &quot;$3=\$ac_header_compiler&quot;
+fi
+eval ac_res=\$$3
+	       { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_res&quot; &gt;&amp;5
+$as_echo &quot;$ac_res&quot; &gt;&amp;6; }
+fi
+  eval $as_lineno_stack; test &quot;x$as_lineno_stack&quot; = x &amp;&amp; { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-&quot;$1&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try=&quot;$ac_link&quot;
+case &quot;(($ac_try&quot; in
+  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
+  (eval &quot;$ac_link&quot;) 2&gt;&amp;5
+  ac_status=$?
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; } &amp;&amp; { ac_try='./conftest$ac_exeext'
+  { { case &quot;(($ac_try&quot; in
+  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
+  (eval &quot;$ac_try&quot;) 2&gt;&amp;5
+  ac_status=$?
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo &quot;$as_me: program exited with status $ac_status&quot; &gt;&amp;5
+       $as_echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
+sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test &quot;x$as_lineno_stack&quot; = x &amp;&amp; { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-&quot;$1&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $2&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $2... &quot; &gt;&amp;6; }
+if { as_var=$3; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
+else
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include &lt;$2&gt;
+_ACEOF
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
+  eval &quot;$3=yes&quot;
+else
+  eval &quot;$3=no&quot;
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_res&quot; &gt;&amp;5
+$as_echo &quot;$ac_res&quot; &gt;&amp;6; }
+  eval $as_lineno_stack; test &quot;x$as_lineno_stack&quot; = x &amp;&amp; { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
 cat &gt;config.log &lt;&lt;_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by ejabberd.erl $as_me version, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   $ $0 $@
 
@@ -1446,8 +1781,8 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  echo &quot;PATH: $as_dir&quot;
-done
+    $as_echo &quot;PATH: $as_dir&quot;
+  done
 IFS=$as_save_IFS
 
 } &gt;&amp;5
@@ -1481,12 +1816,12 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`echo &quot;$ac_arg&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;` ;;
+      ac_arg=`$as_echo &quot;$ac_arg&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;` ;;
     esac
     case $ac_pass in
-    1) ac_configure_args0=&quot;$ac_configure_args0 '$ac_arg'&quot; ;;
+    1) as_fn_append ac_configure_args0 &quot; '$ac_arg'&quot; ;;
     2)
-      ac_configure_args1=&quot;$ac_configure_args1 '$ac_arg'&quot;
+      as_fn_append ac_configure_args1 &quot; '$ac_arg'&quot;
       if test $ac_must_keep_next = true; then
 	ac_must_keep_next=false # Got value, back to normal.
       else
@@ -1502,13 +1837,13 @@ do
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args=&quot;$ac_configure_args '$ac_arg'&quot;
+      as_fn_append ac_configure_args &quot; '$ac_arg'&quot;
       ;;
     esac
   done
 done
-$as_unset ac_configure_args0 || test &quot;${ac_configure_args0+set}&quot; != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test &quot;${ac_configure_args1+set}&quot; != set || { ac_configure_args1=; export ac_configure_args1; }
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
@@ -1533,12 +1868,13 @@ _ASBOX
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo &quot;$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: Cache variable $ac_var contains a newline.&quot; &gt;&amp;2;} ;;
+      *_cv_*) { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: cache variable $ac_var contains a newline&quot; &gt;&amp;2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      *) $as_unset $ac_var ;;
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -1567,9 +1903,9 @@ _ASBOX
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`echo &quot;$ac_val&quot; | sed &quot;s/'\''/'\''\\\\\\\\'\'''\''/g&quot;`;;
+      *\'\''*) ac_val=`$as_echo &quot;$ac_val&quot; | sed &quot;s/'\''/'\''\\\\\\\\'\'''\''/g&quot;`;;
       esac
-      echo &quot;$ac_var='\''$ac_val'\''&quot;
+      $as_echo &quot;$ac_var='\''$ac_val'\''&quot;
     done | sort
     echo
 
@@ -1584,9 +1920,9 @@ _ASBOX
       do
 	eval ac_val=\$$ac_var
 	case $ac_val in
-	*\'\''*) ac_val=`echo &quot;$ac_val&quot; | sed &quot;s/'\''/'\''\\\\\\\\'\'''\''/g&quot;`;;
+	*\'\''*) ac_val=`$as_echo &quot;$ac_val&quot; | sed &quot;s/'\''/'\''\\\\\\\\'\'''\''/g&quot;`;;
 	esac
-	echo &quot;$ac_var='\''$ac_val'\''&quot;
+	$as_echo &quot;$ac_var='\''$ac_val'\''&quot;
       done | sort
       echo
     fi
@@ -1602,64 +1938,69 @@ _ASBOX
       echo
     fi
     test &quot;$ac_signal&quot; != 0 &amp;&amp;
-      echo &quot;$as_me: caught signal $ac_signal&quot;
-    echo &quot;$as_me: exit $exit_status&quot;
+      $as_echo &quot;$as_me: caught signal $ac_signal&quot;
+    $as_echo &quot;$as_me: exit $exit_status&quot;
   } &gt;&amp;5
   rm -f core *.core core.conftest.* &amp;&amp;
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &amp;&amp;
     exit $exit_status
 ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
+$as_echo &quot;/* confdefs.h */&quot; &gt; confdefs.h
+
 # Predefined preprocessor variables.
 
 cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
 #define PACKAGE_NAME &quot;$PACKAGE_NAME&quot;
 _ACEOF
 
-
 cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
 #define PACKAGE_TARNAME &quot;$PACKAGE_TARNAME&quot;
 _ACEOF
 
-
 cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
 #define PACKAGE_VERSION &quot;$PACKAGE_VERSION&quot;
 _ACEOF
 
-
 cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
 #define PACKAGE_STRING &quot;$PACKAGE_STRING&quot;
 _ACEOF
 
-
 cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
 #define PACKAGE_BUGREPORT &quot;$PACKAGE_BUGREPORT&quot;
 _ACEOF
 
+cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
+#define PACKAGE_URL &quot;$PACKAGE_URL&quot;
+_ACEOF
+
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
 if test -n &quot;$CONFIG_SITE&quot;; then
-  set x &quot;$CONFIG_SITE&quot;
+  ac_site_file1=$CONFIG_SITE
 elif test &quot;x$prefix&quot; != xNONE; then
-  set x &quot;$prefix/share/config.site&quot; &quot;$prefix/etc/config.site&quot;
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
 else
-  set x &quot;$ac_default_prefix/share/config.site&quot; \
-	&quot;$ac_default_prefix/etc/config.site&quot;
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
 fi
-shift
-for ac_site_file
+for ac_site_file in &quot;$ac_site_file1&quot; &quot;$ac_site_file2&quot;
 do
+  test &quot;x$ac_site_file&quot; = xNONE &amp;&amp; continue
   if test -r &quot;$ac_site_file&quot;; then
-    { echo &quot;$as_me:$LINENO: loading site script $ac_site_file&quot; &gt;&amp;5
-echo &quot;$as_me: loading site script $ac_site_file&quot; &gt;&amp;6;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file&quot; &gt;&amp;5
+$as_echo &quot;$as_me: loading site script $ac_site_file&quot; &gt;&amp;6;}
     sed 's/^/| /' &quot;$ac_site_file&quot; &gt;&amp;5
     . &quot;$ac_site_file&quot;
   fi
@@ -1669,16 +2010,16 @@ if test -r &quot;$cache_file&quot;; then
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f &quot;$cache_file&quot;; then
-    { echo &quot;$as_me:$LINENO: loading cache $cache_file&quot; &gt;&amp;5
-echo &quot;$as_me: loading cache $cache_file&quot; &gt;&amp;6;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: loading cache $cache_file&quot; &gt;&amp;5
+$as_echo &quot;$as_me: loading cache $cache_file&quot; &gt;&amp;6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . &quot;$cache_file&quot;;;
       *)                      . &quot;./$cache_file&quot;;;
     esac
   fi
 else
-  { echo &quot;$as_me:$LINENO: creating cache $cache_file&quot; &gt;&amp;5
-echo &quot;$as_me: creating cache $cache_file&quot; &gt;&amp;6;}
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: creating cache $cache_file&quot; &gt;&amp;5
+$as_echo &quot;$as_me: creating cache $cache_file&quot; &gt;&amp;6;}
   &gt;$cache_file
 fi
 
@@ -1692,68 +2033,56 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo &quot;$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run&quot; &gt;&amp;5
-echo &quot;$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run&quot; &gt;&amp;2;}
+      { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run&quot; &gt;&amp;2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo &quot;$as_me:$LINENO: error: \`$ac_var' was not set in the previous run&quot; &gt;&amp;5
-echo &quot;$as_me: error: \`$ac_var' was not set in the previous run&quot; &gt;&amp;2;}
+      { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: \`$ac_var' was not set in the previous run&quot; &gt;&amp;2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test &quot;x$ac_old_val&quot; != &quot;x$ac_new_val&quot;; then
-	{ echo &quot;$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:&quot; &gt;&amp;5
-echo &quot;$as_me: error: \`$ac_var' has changed since the previous run:&quot; &gt;&amp;2;}
-	{ echo &quot;$as_me:$LINENO:   former value:  $ac_old_val&quot; &gt;&amp;5
-echo &quot;$as_me:   former value:  $ac_old_val&quot; &gt;&amp;2;}
-	{ echo &quot;$as_me:$LINENO:   current value: $ac_new_val&quot; &gt;&amp;5
-echo &quot;$as_me:   current value: $ac_new_val&quot; &gt;&amp;2;}
-	ac_cache_corrupted=:
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test &quot;$ac_old_val_w&quot; != &quot;$ac_new_val_w&quot;; then
+	  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: \`$ac_var' has changed since the previous run:&quot; &gt;&amp;2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:&quot; &gt;&amp;5
+$as_echo &quot;$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:&quot; &gt;&amp;2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo &quot;$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'&quot; &gt;&amp;5
+$as_echo &quot;$as_me:   former value:  \`$ac_old_val'&quot; &gt;&amp;2;}
+	{ $as_echo &quot;$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'&quot; &gt;&amp;5
+$as_echo &quot;$as_me:   current value: \`$ac_new_val'&quot; &gt;&amp;2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test &quot;$ac_new_set&quot; = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`echo &quot;$ac_new_val&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;` ;;
+    *\'*) ac_arg=$ac_var=`$as_echo &quot;$ac_new_val&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case &quot; $ac_configure_args &quot; in
       *&quot; '$ac_arg' &quot;*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args=&quot;$ac_configure_args '$ac_arg'&quot; ;;
+      *) as_fn_append ac_configure_args &quot; '$ac_arg'&quot; ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { echo &quot;$as_me:$LINENO: error: changes in the environment can compromise the build&quot; &gt;&amp;5
-echo &quot;$as_me: error: changes in the environment can compromise the build&quot; &gt;&amp;2;}
-  { { echo &quot;$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over&quot; &gt;&amp;5
-echo &quot;$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: changes in the environment can compromise the build&quot; &gt;&amp;2;}
+  as_fn_error &quot;run \`make distclean' and/or \`rm $cache_file' and start over&quot; &quot;$LINENO&quot; 5
 fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -1772,10 +2101,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n &quot;$ac_tool_prefix&quot;; then
   # Extract the first word of &quot;${ac_tool_prefix}gcc&quot;, so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_CC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_CC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if test -n &quot;$CC&quot;; then
   ac_cv_prog_CC=&quot;$CC&quot; # Let the user override the test.
@@ -1785,25 +2114,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_prog_CC=&quot;${ac_tool_prefix}gcc&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n &quot;$CC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $CC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$CC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $CC&quot; &gt;&amp;5
+$as_echo &quot;$CC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -1812,10 +2141,10 @@ if test -z &quot;$ac_cv_prog_CC&quot;; then
   ac_ct_CC=$CC
   # Extract the first word of &quot;gcc&quot;, so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_ac_ct_CC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_ac_ct_CC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if test -n &quot;$ac_ct_CC&quot;; then
   ac_cv_prog_ac_ct_CC=&quot;$ac_ct_CC&quot; # Let the user override the test.
@@ -1825,25 +2154,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_prog_ac_ct_CC=&quot;gcc&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n &quot;$ac_ct_CC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $ac_ct_CC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_ct_CC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC&quot; &gt;&amp;5
+$as_echo &quot;$ac_ct_CC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
   if test &quot;x$ac_ct_CC&quot; = x; then
@@ -1851,12 +2180,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo &quot;$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;2;}
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -1869,10 +2194,10 @@ if test -z &quot;$CC&quot;; then
           if test -n &quot;$ac_tool_prefix&quot;; then
     # Extract the first word of &quot;${ac_tool_prefix}cc&quot;, so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_CC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_CC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if test -n &quot;$CC&quot;; then
   ac_cv_prog_CC=&quot;$CC&quot; # Let the user override the test.
@@ -1882,25 +2207,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_prog_CC=&quot;${ac_tool_prefix}cc&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n &quot;$CC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $CC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$CC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $CC&quot; &gt;&amp;5
+$as_echo &quot;$CC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -1909,10 +2234,10 @@ fi
 if test -z &quot;$CC&quot;; then
   # Extract the first word of &quot;cc&quot;, so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_CC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_CC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if test -n &quot;$CC&quot;; then
   ac_cv_prog_CC=&quot;$CC&quot; # Let the user override the test.
@@ -1923,18 +2248,18 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     if test &quot;$as_dir/$ac_word$ac_exec_ext&quot; = &quot;/usr/ucb/cc&quot;; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC=&quot;cc&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
@@ -1953,11 +2278,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n &quot;$CC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $CC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$CC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $CC&quot; &gt;&amp;5
+$as_echo &quot;$CC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -1968,10 +2293,10 @@ if test -z &quot;$CC&quot;; then
   do
     # Extract the first word of &quot;$ac_tool_prefix$ac_prog&quot;, so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_CC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_CC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if test -n &quot;$CC&quot;; then
   ac_cv_prog_CC=&quot;$CC&quot; # Let the user override the test.
@@ -1981,25 +2306,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_prog_CC=&quot;$ac_tool_prefix$ac_prog&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n &quot;$CC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $CC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$CC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $CC&quot; &gt;&amp;5
+$as_echo &quot;$CC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -2012,10 +2337,10 @@ if test -z &quot;$CC&quot;; then
 do
   # Extract the first word of &quot;$ac_prog&quot;, so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_ac_ct_CC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_ac_ct_CC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if test -n &quot;$ac_ct_CC&quot;; then
   ac_cv_prog_ac_ct_CC=&quot;$ac_ct_CC&quot; # Let the user override the test.
@@ -2025,25 +2350,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_prog_ac_ct_CC=&quot;$ac_prog&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n &quot;$ac_ct_CC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $ac_ct_CC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_ct_CC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC&quot; &gt;&amp;5
+$as_echo &quot;$ac_ct_CC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -2055,12 +2380,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo &quot;$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;2;}
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2070,98 +2391,82 @@ fi
 fi
 
 
-test -z &quot;$CC&quot; &amp;&amp; { { echo &quot;$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details.&quot; &gt;&amp;5
-echo &quot;$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details.&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+test -z &quot;$CC&quot; &amp;&amp; { { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+as_fn_error &quot;no acceptable C compiler found in \$PATH
+See \`config.log' for more details.&quot; &quot;$LINENO&quot; 5; }
 
 # Provide some information about the compiler.
-echo &quot;$as_me:$LINENO: checking for C compiler version&quot; &gt;&amp;5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try=&quot;$ac_compiler --version &gt;&amp;5&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compiler --version &gt;&amp;5&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }
-{ (ac_try=&quot;$ac_compiler -v &gt;&amp;5&quot;
+$as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for C compiler version&quot; &gt;&amp;5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try=&quot;$ac_compiler $ac_option &gt;&amp;5&quot;
 case &quot;(($ac_try&quot; in
   *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compiler -v &gt;&amp;5&quot;) 2&gt;&amp;5
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
+  (eval &quot;$ac_compiler $ac_option &gt;&amp;5&quot;) 2&gt;conftest.err
   ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }
-{ (ac_try=&quot;$ac_compiler -V &gt;&amp;5&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compiler -V &gt;&amp;5&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err &gt;conftest.er1
+    cat conftest.er1 &gt;&amp;5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; }
+done
 
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
-
+#include &lt;stdio.h&gt;
 int
 main ()
 {
+FILE *f = fopen (&quot;conftest.out&quot;, &quot;w&quot;);
+ return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files=&quot;$ac_clean_files a.out a.exe b.out&quot;
+ac_clean_files=&quot;$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out&quot;
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ echo &quot;$as_me:$LINENO: checking for C compiler default output file name&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for C compiler default output file name... $ECHO_C&quot; &gt;&amp;6; }
-ac_link_default=`echo &quot;$ac_link&quot; | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort.  b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions.  Remove them first so a
-# subsequent execution test works.
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name&quot; &gt;&amp;5
+$as_echo_n &quot;checking for C compiler default output file name... &quot; &gt;&amp;6; }
+ac_link_default=`$as_echo &quot;$ac_link&quot; | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files=&quot;a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*&quot;
+
 ac_rmfiles=
 for ac_file in $ac_files
 do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     * ) ac_rmfiles=&quot;$ac_rmfiles $ac_file&quot;;;
   esac
 done
 rm -f $ac_rmfiles
 
-if { (ac_try=&quot;$ac_link_default&quot;
+if { { ac_try=&quot;$ac_link_default&quot;
 case &quot;(($ac_try&quot; in
   *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
   (eval &quot;$ac_link_default&quot;) 2&gt;&amp;5
   ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; then
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; }; then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -2171,14 +2476,14 @@ for ac_file in $ac_files ''
 do
   test -f &quot;$ac_file&quot; || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
 	;;
     [ab].out )
 	# We found the default executable, but exeext='' is most
 	# certainly right.
 	break;;
     *.* )
-        if test &quot;${ac_cv_exeext+set}&quot; = set &amp;&amp; test &quot;$ac_cv_exeext&quot; != no;
+	if test &quot;${ac_cv_exeext+set}&quot; = set &amp;&amp; test &quot;$ac_cv_exeext&quot; != no;
 	then :; else
 	   ac_cv_exeext=`expr &quot;$ac_file&quot; : '[^.]*\(\..*\)'`
 	fi
@@ -2197,78 +2502,75 @@ test &quot;$ac_cv_exeext&quot; = no &amp;&amp; ac_cv_exeext=
 else
   ac_file=''
 fi
-
-{ echo &quot;$as_me:$LINENO: result: $ac_file&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_file&quot; &gt;&amp;6; }
-if test -z &quot;$ac_file&quot;; then
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_file&quot; &gt;&amp;5
+$as_echo &quot;$ac_file&quot; &gt;&amp;6; }
+if test -z &quot;$ac_file&quot;; then :
+  $as_echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
 sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
 
-{ { echo &quot;$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details.&quot; &gt;&amp;5
-echo &quot;$as_me: error: C compiler cannot create executables
-See \`config.log' for more details.&quot; &gt;&amp;2;}
-   { (exit 77); exit 77; }; }
+{ { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+{ as_fn_set_status 77
+as_fn_error &quot;C compiler cannot create executables
+See \`config.log' for more details.&quot; &quot;$LINENO&quot; 5; }; }
 fi
-
 ac_exeext=$ac_cv_exeext
 
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo &quot;$as_me:$LINENO: checking whether the C compiler works&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether the C compiler works... $ECHO_C&quot; &gt;&amp;6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether the C compiler works&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether the C compiler works... &quot; &gt;&amp;6; }
 # If not cross compiling, check that we can run a simple program.
 if test &quot;$cross_compiling&quot; != yes; then
   if { ac_try='./$ac_file'
-  { (case &quot;(($ac_try&quot; in
+  { { case &quot;(($ac_try&quot; in
   *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
   (eval &quot;$ac_try&quot;) 2&gt;&amp;5
   ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; }; then
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; }; }; then
     cross_compiling=no
   else
     if test &quot;$cross_compiling&quot; = maybe; then
 	cross_compiling=yes
     else
-	{ { echo &quot;$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details.&quot; &gt;&amp;5
-echo &quot;$as_me: error: cannot run C compiled programs.
+	{ { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+as_fn_error &quot;cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details.&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+See \`config.log' for more details.&quot; &quot;$LINENO&quot; 5; }
     fi
   fi
 fi
-{ echo &quot;$as_me:$LINENO: result: yes&quot; &gt;&amp;5
-echo &quot;${ECHO_T}yes&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: yes&quot; &gt;&amp;5
+$as_echo &quot;yes&quot; &gt;&amp;6; }
 
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
 ac_clean_files=$ac_clean_files_save
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo &quot;$as_me:$LINENO: checking whether we are cross compiling&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether we are cross compiling... $ECHO_C&quot; &gt;&amp;6; }
-{ echo &quot;$as_me:$LINENO: result: $cross_compiling&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$cross_compiling&quot; &gt;&amp;6; }
-
-{ echo &quot;$as_me:$LINENO: checking for suffix of executables&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for suffix of executables... $ECHO_C&quot; &gt;&amp;6; }
-if { (ac_try=&quot;$ac_link&quot;
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether we are cross compiling... &quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $cross_compiling&quot; &gt;&amp;5
+$as_echo &quot;$cross_compiling&quot; &gt;&amp;6; }
+
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for suffix of executables&quot; &gt;&amp;5
+$as_echo_n &quot;checking for suffix of executables... &quot; &gt;&amp;6; }
+if { { ac_try=&quot;$ac_link&quot;
 case &quot;(($ac_try&quot; in
   *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
   (eval &quot;$ac_link&quot;) 2&gt;&amp;5
   ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; then
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; }; then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2276,37 +2578,31 @@ eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
 for ac_file in conftest.exe conftest conftest.*; do
   test -f &quot;$ac_file&quot; || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr &quot;$ac_file&quot; : '[^.]*\(\..*\)'`
 	  break;;
     * ) break;;
   esac
 done
 else
-  { { echo &quot;$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details.&quot; &gt;&amp;5
-echo &quot;$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details.&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+as_fn_error &quot;cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details.&quot; &quot;$LINENO&quot; 5; }
 fi
-
 rm -f conftest$ac_cv_exeext
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_exeext&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_exeext&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_exeext&quot; &gt;&amp;6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-{ echo &quot;$as_me:$LINENO: checking for suffix of object files&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for suffix of object files... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_objext+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for suffix of object files&quot; &gt;&amp;5
+$as_echo_n &quot;checking for suffix of object files... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_objext+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2318,51 +2614,46 @@ main ()
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (ac_try=&quot;$ac_compile&quot;
+if { { ac_try=&quot;$ac_compile&quot;
 case &quot;(($ac_try&quot; in
   *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
+eval ac_try_echo=&quot;\&quot;\$as_me:${as_lineno-$LINENO}: $ac_try_echo\&quot;&quot;
+$as_echo &quot;$ac_try_echo&quot;; } &gt;&amp;5
   (eval &quot;$ac_compile&quot;) 2&gt;&amp;5
   ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; then
+  $as_echo &quot;$as_me:${as_lineno-$LINENO}: \$? = $ac_status&quot; &gt;&amp;5
+  test $ac_status = 0; }; then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f &quot;$ac_file&quot; || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
     *) ac_cv_objext=`expr &quot;$ac_file&quot; : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
+  $as_echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
 sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
 
-{ { echo &quot;$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details.&quot; &gt;&amp;5
-echo &quot;$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details.&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+{ { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+as_fn_error &quot;cannot compute suffix of object files: cannot compile
+See \`config.log' for more details.&quot; &quot;$LINENO&quot; 5; }
 fi
-
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_objext&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_objext&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_objext&quot; &gt;&amp;6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ echo &quot;$as_me:$LINENO: checking whether we are using the GNU C compiler&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether we are using the GNU C compiler... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_c_compiler_gnu+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether we are using the GNU C compiler... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_c_compiler_gnu+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2376,54 +2667,34 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_compiler_gnu=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_compiler_gnu=no
+  ac_compiler_gnu=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_c_compiler_gnu&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_c_compiler_gnu&quot; &gt;&amp;6; }
-GCC=`test $ac_compiler_gnu = yes &amp;&amp; echo yes`
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_c_compiler_gnu&quot; &gt;&amp;6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ echo &quot;$as_me:$LINENO: checking whether $CC accepts -g&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether $CC accepts -g... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_cc_g+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether $CC accepts -g... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_cc_g+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
    CFLAGS=&quot;-g&quot;
-   cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+   cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2434,34 +2705,11 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_cv_prog_cc_g=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	CFLAGS=&quot;&quot;
-      cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  CFLAGS=&quot;&quot;
+      cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2472,35 +2720,12 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  :
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
 
-	ac_c_werror_flag=$ac_save_c_werror_flag
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS=&quot;-g&quot;
-	 cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+	 cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2511,42 +2736,18 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_cv_prog_cc_g=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_prog_cc_g&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_prog_cc_g&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_prog_cc_g&quot; &gt;&amp;6; }
 if test &quot;$ac_test_CFLAGS&quot; = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -2562,18 +2763,14 @@ else
     CFLAGS=
   fi
 fi
-{ echo &quot;$as_me:$LINENO: checking for $CC option to accept ISO C89&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $CC option to accept ISO C89... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_prog_cc_c89+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $CC option to accept ISO C89... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_prog_cc_c89+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdarg.h&gt;
 #include &lt;stdio.h&gt;
@@ -2630,31 +2827,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
 	-Ae &quot;-Aa -D_HPUX_SOURCE&quot; &quot;-Xc -D__EXTENSIONS__&quot;
 do
   CC=&quot;$ac_save_CC $ac_arg&quot;
-  rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+  if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_cv_prog_cc_c89=$ac_arg
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext
   test &quot;x$ac_cv_prog_cc_c89&quot; != &quot;xno&quot; &amp;&amp; break
 done
@@ -2665,17 +2840,19 @@ fi
 # AC_CACHE_VAL
 case &quot;x$ac_cv_prog_cc_c89&quot; in
   x)
-    { echo &quot;$as_me:$LINENO: result: none needed&quot; &gt;&amp;5
-echo &quot;${ECHO_T}none needed&quot; &gt;&amp;6; } ;;
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: none needed&quot; &gt;&amp;5
+$as_echo &quot;none needed&quot; &gt;&amp;6; } ;;
   xno)
-    { echo &quot;$as_me:$LINENO: result: unsupported&quot; &gt;&amp;5
-echo &quot;${ECHO_T}unsupported&quot; &gt;&amp;6; } ;;
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: unsupported&quot; &gt;&amp;5
+$as_echo &quot;unsupported&quot; &gt;&amp;6; } ;;
   *)
     CC=&quot;$CC $ac_cv_prog_cc_c89&quot;
-    { echo &quot;$as_me:$LINENO: result: $ac_cv_prog_cc_c89&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_prog_cc_c89&quot; &gt;&amp;6; } ;;
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_prog_cc_c89&quot; &gt;&amp;6; } ;;
 esac
+if test &quot;x$ac_cv_prog_cc_c89&quot; != xno; then :
 
+fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -2683,11 +2860,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext &gt;&amp;5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS &gt;&amp;5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-{ echo &quot;$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C&quot; &gt;&amp;6; }
-set x ${MAKE-make}; ac_make=`echo &quot;$2&quot; | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether ${MAKE-make} sets \$(MAKE)... &quot; &gt;&amp;6; }
+set x ${MAKE-make}
+ac_make=`$as_echo &quot;$2&quot; | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   cat &gt;conftest.make &lt;&lt;\_ACEOF
 SHELL = /bin/sh
@@ -2704,12 +2882,12 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { echo &quot;$as_me:$LINENO: result: yes&quot; &gt;&amp;5
-echo &quot;${ECHO_T}yes&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: yes&quot; &gt;&amp;5
+$as_echo &quot;yes&quot; &gt;&amp;6; }
   SET_MAKE=
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
   SET_MAKE=&quot;MAKE=${MAKE-make}&quot;
 fi
 
@@ -2721,7 +2899,7 @@ fi
 #locating erlang
 
 # Check whether --with-erlang was given.
-if test &quot;${with_erlang+set}&quot; = set; then
+if test &quot;${with_erlang+set}&quot; = set; then :
   withval=$with_erlang;
 fi
 
@@ -2729,10 +2907,10 @@ fi
    if test -n &quot;$ac_tool_prefix&quot;; then
   # Extract the first word of &quot;${ac_tool_prefix}erlc&quot;, so it can be a program name with args.
 set dummy ${ac_tool_prefix}erlc; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_path_ERLC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_path_ERLC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   case $ERLC in
   [\\/]* | ?:[\\/]*)
@@ -2745,14 +2923,14 @@ for as_dir in $as_dummy
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_path_ERLC=&quot;$as_dir/$ac_word$ac_exec_ext&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -2760,11 +2938,11 @@ esac
 fi
 ERLC=$ac_cv_path_ERLC
 if test -n &quot;$ERLC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $ERLC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ERLC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ERLC&quot; &gt;&amp;5
+$as_echo &quot;$ERLC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -2773,10 +2951,10 @@ if test -z &quot;$ac_cv_path_ERLC&quot;; then
   ac_pt_ERLC=$ERLC
   # Extract the first word of &quot;erlc&quot;, so it can be a program name with args.
 set dummy erlc; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_path_ac_pt_ERLC+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_path_ac_pt_ERLC+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   case $ac_pt_ERLC in
   [\\/]* | ?:[\\/]*)
@@ -2789,14 +2967,14 @@ for as_dir in $as_dummy
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_path_ac_pt_ERLC=&quot;$as_dir/$ac_word$ac_exec_ext&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -2804,11 +2982,11 @@ esac
 fi
 ac_pt_ERLC=$ac_cv_path_ac_pt_ERLC
 if test -n &quot;$ac_pt_ERLC&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $ac_pt_ERLC&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_pt_ERLC&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_pt_ERLC&quot; &gt;&amp;5
+$as_echo &quot;$ac_pt_ERLC&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
   if test &quot;x$ac_pt_ERLC&quot; = x; then
@@ -2816,12 +2994,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo &quot;$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;2;}
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;2;}
 ac_tool_warned=yes ;;
 esac
     ERLC=$ac_pt_ERLC
@@ -2833,10 +3007,10 @@ fi
    if test -n &quot;$ac_tool_prefix&quot;; then
   # Extract the first word of &quot;${ac_tool_prefix}erl&quot;, so it can be a program name with args.
 set dummy ${ac_tool_prefix}erl; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_path_ERL+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_path_ERL+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   case $ERL in
   [\\/]* | ?:[\\/]*)
@@ -2849,14 +3023,14 @@ for as_dir in $as_dummy
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_path_ERL=&quot;$as_dir/$ac_word$ac_exec_ext&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -2864,11 +3038,11 @@ esac
 fi
 ERL=$ac_cv_path_ERL
 if test -n &quot;$ERL&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $ERL&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ERL&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ERL&quot; &gt;&amp;5
+$as_echo &quot;$ERL&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
 
@@ -2877,10 +3051,10 @@ if test -z &quot;$ac_cv_path_ERL&quot;; then
   ac_pt_ERL=$ERL
   # Extract the first word of &quot;erl&quot;, so it can be a program name with args.
 set dummy erl; ac_word=$2
-{ echo &quot;$as_me:$LINENO: checking for $ac_word&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_word... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_path_ac_pt_ERL+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for $ac_word&quot; &gt;&amp;5
+$as_echo_n &quot;checking for $ac_word... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_path_ac_pt_ERL+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   case $ac_pt_ERL in
   [\\/]* | ?:[\\/]*)
@@ -2893,14 +3067,14 @@ for as_dir in $as_dummy
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f &quot;$as_dir/$ac_word$ac_exec_ext&quot; &amp;&amp; $as_test_x &quot;$as_dir/$ac_word$ac_exec_ext&quot;; }; then
     ac_cv_path_ac_pt_ERL=&quot;$as_dir/$ac_word$ac_exec_ext&quot;
-    echo &quot;$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext&quot; &gt;&amp;5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -2908,11 +3082,11 @@ esac
 fi
 ac_pt_ERL=$ac_cv_path_ac_pt_ERL
 if test -n &quot;$ac_pt_ERL&quot;; then
-  { echo &quot;$as_me:$LINENO: result: $ac_pt_ERL&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_pt_ERL&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_pt_ERL&quot; &gt;&amp;5
+$as_echo &quot;$ac_pt_ERL&quot; &gt;&amp;6; }
 else
-  { echo &quot;$as_me:$LINENO: result: no&quot; &gt;&amp;5
-echo &quot;${ECHO_T}no&quot; &gt;&amp;6; }
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: no&quot; &gt;&amp;5
+$as_echo &quot;no&quot; &gt;&amp;6; }
 fi
 
   if test &quot;x$ac_pt_ERL&quot; = x; then
@@ -2920,12 +3094,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo &quot;$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org.&quot; &gt;&amp;2;}
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: using cross tools not prefixed with host triplet&quot; &gt;&amp;2;}
 ac_tool_warned=yes ;;
 esac
     ERL=$ac_pt_ERL
@@ -2936,9 +3106,7 @@ fi
 
 
    if test &quot;z$ERLC&quot; = &quot;z&quot; || test &quot;z$ERL&quot; = &quot;z&quot;; then
-   		{ { echo &quot;$as_me:$LINENO: error: erlang not found&quot; &gt;&amp;5
-echo &quot;$as_me: error: erlang not found&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+   		as_fn_error &quot;erlang not found&quot; &quot;$LINENO&quot; 5
    fi
 
 
@@ -2995,21 +3163,15 @@ libpath(App) -&gt;
 _EOF
 
    if ! $ERLC conftest.erl; then
-   	   { { echo &quot;$as_me:$LINENO: error: could not compile sample program&quot; &gt;&amp;5
-echo &quot;$as_me: error: could not compile sample program&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+   	   as_fn_error &quot;could not compile sample program&quot; &quot;$LINENO&quot; 5
    fi
 
    if ! $ERL -s conftest -noshell; then
-       { { echo &quot;$as_me:$LINENO: error: could not run sample program&quot; &gt;&amp;5
-echo &quot;$as_me: error: could not run sample program&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+       as_fn_error &quot;could not run sample program&quot; &quot;$LINENO&quot; 5
    fi
 
    if ! test -f conftest.out; then
-       { { echo &quot;$as_me:$LINENO: error: erlang program was not properly executed, (conftest.out was not produced)&quot; &gt;&amp;5
-echo &quot;$as_me: error: erlang program was not properly executed, (conftest.out was not produced)&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+       as_fn_error &quot;erlang program was not properly executed, (conftest.out was not produced)&quot; &quot;$LINENO&quot; 5
    fi
 
    # First line
@@ -3035,7 +3197,7 @@ echo &quot;$as_me: error: erlang program was not properly executed, (conftest.out was
 
 
 # Check whether --with-libiconv-prefix was given.
-if test &quot;${with_libiconv_prefix+set}&quot; = set; then
+if test &quot;${with_libiconv_prefix+set}&quot; = set; then :
   withval=$with_libiconv_prefix;
     for dir in `echo &quot;$withval&quot; | tr : ' '`; do
       if test -d $dir/include; then CPPFLAGS=&quot;$CPPFLAGS -I$dir/include&quot;; fi
@@ -3046,19 +3208,15 @@ if test &quot;${with_libiconv_prefix+set}&quot; = set; then
 fi
 
 
-  { echo &quot;$as_me:$LINENO: checking for iconv&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for iconv... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${am_cv_func_iconv+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for iconv&quot; &gt;&amp;5
+$as_echo_n &quot;checking for iconv... &quot; &gt;&amp;6; }
+if test &quot;${am_cv_func_iconv+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
 
     am_cv_func_iconv=&quot;no, consider installing GNU libiconv&quot;
     am_cv_lib_iconv=no
-    cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+    cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 #include &lt;iconv.h&gt;
@@ -3072,42 +3230,15 @@ iconv_t cd = iconv_open(&quot;&quot;,&quot;&quot;);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   am_cv_func_iconv=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
     if test &quot;$am_cv_func_iconv&quot; != yes; then
       am_save_LIBS=&quot;$LIBS&quot;
       LIBS=&quot;$LIBS -liconv&quot;
-      cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+      cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 #include &lt;iconv.h&gt;
@@ -3121,35 +3252,12 @@ iconv_t cd = iconv_open(&quot;&quot;,&quot;&quot;);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
       LIBS=&quot;$am_save_LIBS&quot;
     fi
 	    if test &quot;$am_cv_func_iconv&quot; != yes; then
@@ -3159,11 +3267,7 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       LIBS=&quot;$LIBS -liconv&quot;
 	  LDFLAGS=&quot;$LDFLAGS -L/usr/local/lib&quot;
 	  CFLAGS=&quot;$CFLAGS -I/usr/local/include&quot;
-      cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+      cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 #include &lt;iconv.h&gt;
@@ -3177,61 +3281,34 @@ iconv_t cd = iconv_open(&quot;&quot;,&quot;&quot;);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 		CPPFLAGS=&quot;$CPPFLAGS -I/usr/local/include&quot;
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	LDFLAGS=&quot;$am_save_LDFLAGS&quot;
+  LDFLAGS=&quot;$am_save_LDFLAGS&quot;
 		CFLAGS=&quot;$am_save_CFLAGS&quot;
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
       LIBS=&quot;$am_save_LIBS&quot;
     fi
 
 
 fi
-{ echo &quot;$as_me:$LINENO: result: $am_cv_func_iconv&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$am_cv_func_iconv&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv&quot; &gt;&amp;5
+$as_echo &quot;$am_cv_func_iconv&quot; &gt;&amp;6; }
   if test &quot;$am_cv_func_iconv&quot; = yes; then
 
-cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define HAVE_ICONV 1
-_ACEOF
+$as_echo &quot;#define HAVE_ICONV 1&quot; &gt;&gt;confdefs.h
 
-    { echo &quot;$as_me:$LINENO: checking for iconv declaration&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for iconv declaration... $ECHO_C&quot; &gt;&amp;6; }
-    if test &quot;${am_cv_proto_iconv+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for iconv declaration&quot; &gt;&amp;5
+$as_echo_n &quot;checking for iconv declaration... &quot; &gt;&amp;6; }
+    if test &quot;${am_cv_proto_iconv+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
 
-      cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+      cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include &lt;stdlib.h&gt;
@@ -3254,39 +3331,19 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   am_cv_proto_iconv_arg1=&quot;&quot;
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	am_cv_proto_iconv_arg1=&quot;const&quot;
+  am_cv_proto_iconv_arg1=&quot;const&quot;
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
       am_cv_proto_iconv=&quot;extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);&quot;
 fi
 
     am_cv_proto_iconv=`echo &quot;$am_cv_proto_iconv&quot; | tr -s ' ' | sed -e 's/( /(/'`
-    { echo &quot;$as_me:$LINENO: result: ${ac_t:-
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: ${ac_t:-
          }$am_cv_proto_iconv&quot; &gt;&amp;5
-echo &quot;${ECHO_T}${ac_t:-
+$as_echo &quot;${ac_t:-
          }$am_cv_proto_iconv&quot; &gt;&amp;6; }
 
 cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
@@ -3306,15 +3363,15 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext &gt;&amp;5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS &gt;&amp;5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo &quot;$as_me:$LINENO: checking how to run the C preprocessor&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking how to run the C preprocessor... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor&quot; &gt;&amp;5
+$as_echo_n &quot;checking how to run the C preprocessor... &quot; &gt;&amp;6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n &quot;$CPP&quot; &amp;&amp; test -d &quot;$CPP&quot;; then
   CPP=
 fi
 if test -z &quot;$CPP&quot;; then
-  if test &quot;${ac_cv_prog_CPP+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+  if test &quot;${ac_cv_prog_CPP+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in &quot;$CC -E&quot; &quot;$CC -E -traditional-cpp&quot; &quot;/lib/cpp&quot;
@@ -3328,11 +3385,7 @@ do
   # &lt;limits.h&gt; exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. &quot;Syntax error&quot; is here to catch this case.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include &lt;limits.h&gt;
@@ -3341,76 +3394,34 @@ cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+if ac_fn_c_try_cpp &quot;$LINENO&quot;; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;ac_nonexistent.h&gt;
 _ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp &quot;$LINENO&quot;; then :
   # Broken: success on invalid input.
 continue
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -3422,8 +3433,8 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ echo &quot;$as_me:$LINENO: result: $CPP&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$CPP&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $CPP&quot; &gt;&amp;5
+$as_echo &quot;$CPP&quot; &gt;&amp;6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -3433,11 +3444,7 @@ do
   # &lt;limits.h&gt; exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. &quot;Syntax error&quot; is here to catch this case.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include &lt;limits.h&gt;
@@ -3446,83 +3453,40 @@ cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+if ac_fn_c_try_cpp &quot;$LINENO&quot;; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;ac_nonexistent.h&gt;
 _ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp &quot;$LINENO&quot;; then :
   # Broken: success on invalid input.
 continue
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+if $ac_preproc_ok; then :
+
 else
-  { { echo &quot;$as_me:$LINENO: error: C preprocessor \&quot;$CPP\&quot; fails sanity check
-See \`config.log' for more details.&quot; &gt;&amp;5
-echo &quot;$as_me: error: C preprocessor \&quot;$CPP\&quot; fails sanity check
-See \`config.log' for more details.&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':&quot; &gt;&amp;5
+$as_echo &quot;$as_me: error: in \`$ac_pwd':&quot; &gt;&amp;2;}
+as_fn_error &quot;C preprocessor \&quot;$CPP\&quot; fails sanity check
+See \`config.log' for more details.&quot; &quot;$LINENO&quot; 5; }
 fi
 
 ac_ext=c
@@ -3532,45 +3496,40 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-{ echo &quot;$as_me:$LINENO: checking for grep that handles long lines and -e&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for grep that handles long lines and -e... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_path_GREP+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  # Extract the first word of &quot;grep ggrep&quot; to use in msg output
-if test -z &quot;$GREP&quot;; then
-set dummy grep ggrep; ac_prog_name=$2
-if test &quot;${ac_cv_path_GREP+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e&quot; &gt;&amp;5
+$as_echo_n &quot;checking for grep that handles long lines and -e... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_path_GREP+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
+  if test -z &quot;$GREP&quot;; then
   ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_prog in grep ggrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_GREP=&quot;$as_dir/$ac_prog$ac_exec_ext&quot;
-    { test -f &quot;$ac_path_GREP&quot; &amp;&amp; $as_test_x &quot;$ac_path_GREP&quot;; } || continue
-    # Check for GNU ac_path_GREP and select it if it is found.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP=&quot;$as_dir/$ac_prog$ac_exec_ext&quot;
+      { test -f &quot;$ac_path_GREP&quot; &amp;&amp; $as_test_x &quot;$ac_path_GREP&quot;; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `&quot;$ac_path_GREP&quot; --version 2&gt;&amp;1` in
 *GNU*)
   ac_cv_path_GREP=&quot;$ac_path_GREP&quot; ac_path_GREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N &quot;0123456789$ECHO_C&quot; &gt;&quot;conftest.in&quot;
+  $as_echo_n 0123456789 &gt;&quot;conftest.in&quot;
   while :
   do
     cat &quot;conftest.in&quot; &quot;conftest.in&quot; &gt;&quot;conftest.tmp&quot;
     mv &quot;conftest.tmp&quot; &quot;conftest.in&quot;
     cp &quot;conftest.in&quot; &quot;conftest.nl&quot;
-    echo 'GREP' &gt;&gt; &quot;conftest.nl&quot;
+    $as_echo 'GREP' &gt;&gt; &quot;conftest.nl&quot;
     &quot;$ac_path_GREP&quot; -e 'GREP$' -e '-(cannot match)-' &lt; &quot;conftest.nl&quot; &gt;&quot;conftest.out&quot; 2&gt;/dev/null || break
     diff &quot;conftest.out&quot; &quot;conftest.nl&quot; &gt;/dev/null 2&gt;&amp;1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 &amp;&amp; ac_count=$as_val
     if test $ac_count -gt ${ac_path_GREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_GREP=&quot;$ac_path_GREP&quot;
@@ -3582,77 +3541,61 @@ case `&quot;$ac_path_GREP&quot; --version 2&gt;&amp;1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_GREP_found &amp;&amp; break 3
+      $ac_path_GREP_found &amp;&amp; break 3
+    done
+  done
   done
-done
-
-done
 IFS=$as_save_IFS
-
-
-fi
-
-GREP=&quot;$ac_cv_path_GREP&quot;
-if test -z &quot;$GREP&quot;; then
-  { { echo &quot;$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin&quot; &gt;&amp;5
-echo &quot;$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z &quot;$ac_cv_path_GREP&quot;; then
+    as_fn_error &quot;no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin&quot; &quot;$LINENO&quot; 5
+  fi
 else
   ac_cv_path_GREP=$GREP
 fi
 
-
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_path_GREP&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_path_GREP&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_path_GREP&quot; &gt;&amp;6; }
  GREP=&quot;$ac_cv_path_GREP&quot;
 
 
-{ echo &quot;$as_me:$LINENO: checking for egrep&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for egrep... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_path_EGREP+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for egrep&quot; &gt;&amp;5
+$as_echo_n &quot;checking for egrep... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_path_EGREP+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   if echo a | $GREP -E '(a|b)' &gt;/dev/null 2&gt;&amp;1
    then ac_cv_path_EGREP=&quot;$GREP -E&quot;
    else
-     # Extract the first word of &quot;egrep&quot; to use in msg output
-if test -z &quot;$EGREP&quot;; then
-set dummy egrep; ac_prog_name=$2
-if test &quot;${ac_cv_path_EGREP+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
+     if test -z &quot;$EGREP&quot;; then
   ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  for ac_prog in egrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_EGREP=&quot;$as_dir/$ac_prog$ac_exec_ext&quot;
-    { test -f &quot;$ac_path_EGREP&quot; &amp;&amp; $as_test_x &quot;$ac_path_EGREP&quot;; } || continue
-    # Check for GNU ac_path_EGREP and select it if it is found.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP=&quot;$as_dir/$ac_prog$ac_exec_ext&quot;
+      { test -f &quot;$ac_path_EGREP&quot; &amp;&amp; $as_test_x &quot;$ac_path_EGREP&quot;; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `&quot;$ac_path_EGREP&quot; --version 2&gt;&amp;1` in
 *GNU*)
   ac_cv_path_EGREP=&quot;$ac_path_EGREP&quot; ac_path_EGREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N &quot;0123456789$ECHO_C&quot; &gt;&quot;conftest.in&quot;
+  $as_echo_n 0123456789 &gt;&quot;conftest.in&quot;
   while :
   do
     cat &quot;conftest.in&quot; &quot;conftest.in&quot; &gt;&quot;conftest.tmp&quot;
     mv &quot;conftest.tmp&quot; &quot;conftest.in&quot;
     cp &quot;conftest.in&quot; &quot;conftest.nl&quot;
-    echo 'EGREP' &gt;&gt; &quot;conftest.nl&quot;
+    $as_echo 'EGREP' &gt;&gt; &quot;conftest.nl&quot;
     &quot;$ac_path_EGREP&quot; 'EGREP$' &lt; &quot;conftest.nl&quot; &gt;&quot;conftest.out&quot; 2&gt;/dev/null || break
     diff &quot;conftest.out&quot; &quot;conftest.nl&quot; &gt;/dev/null 2&gt;&amp;1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 &amp;&amp; ac_count=$as_val
     if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_EGREP=&quot;$ac_path_EGREP&quot;
@@ -3664,46 +3607,31 @@ case `&quot;$ac_path_EGREP&quot; --version 2&gt;&amp;1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_EGREP_found &amp;&amp; break 3
+      $ac_path_EGREP_found &amp;&amp; break 3
+    done
+  done
   done
-done
-
-done
 IFS=$as_save_IFS
-
-
-fi
-
-EGREP=&quot;$ac_cv_path_EGREP&quot;
-if test -z &quot;$EGREP&quot;; then
-  { { echo &quot;$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin&quot; &gt;&amp;5
-echo &quot;$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z &quot;$ac_cv_path_EGREP&quot;; then
+    as_fn_error &quot;no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin&quot; &quot;$LINENO&quot; 5
+  fi
 else
   ac_cv_path_EGREP=$EGREP
 fi
 
-
    fi
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_path_EGREP&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_path_EGREP&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_path_EGREP&quot; &gt;&amp;6; }
  EGREP=&quot;$ac_cv_path_EGREP&quot;
 
 
-{ echo &quot;$as_me:$LINENO: checking for ANSI C header files&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for ANSI C header files... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_header_stdc+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for ANSI C header files&quot; &gt;&amp;5
+$as_echo_n &quot;checking for ANSI C header files... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_header_stdc+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 #include &lt;stdarg.h&gt;
@@ -3718,47 +3646,23 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_cv_header_stdc=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;string.h&gt;
 
 _ACEOF
 if (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;&amp;5 |
-  $EGREP &quot;memchr&quot; &gt;/dev/null 2&gt;&amp;1; then
-  :
+  $EGREP &quot;memchr&quot; &gt;/dev/null 2&gt;&amp;1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -3768,18 +3672,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 
 _ACEOF
 if (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;&amp;5 |
-  $EGREP &quot;free&quot; &gt;/dev/null 2&gt;&amp;1; then
-  :
+  $EGREP &quot;free&quot; &gt;/dev/null 2&gt;&amp;1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -3789,14 +3689,10 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test &quot;$cross_compiling&quot; = yes; then
+  if test &quot;$cross_compiling&quot; = yes; then :
   :
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;ctype.h&gt;
 #include &lt;stdlib.h&gt;
@@ -3823,113 +3719,36 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; { ac_try='./conftest$ac_exeext'
-  { (case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_try&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo &quot;$as_me: program exited with status $ac_status&quot; &gt;&amp;5
-echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+if ac_fn_c_try_run &quot;$LINENO&quot;; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_header_stdc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_header_stdc&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_header_stdc&quot; &gt;&amp;6; }
 if test $ac_cv_header_stdc = yes; then
 
-cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo &quot;#define STDC_HEADERS 1&quot; &gt;&gt;confdefs.h
 
 fi
 
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
-{ echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include &lt;$ac_header&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  eval &quot;$as_ac_Header=yes&quot;
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	eval &quot;$as_ac_Header=no&quot;
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  as_ac_Header=`$as_echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
+ac_fn_c_check_header_compile &quot;$LINENO&quot; &quot;$ac_header&quot; &quot;$as_ac_Header&quot; &quot;$ac_includes_default
+&quot;
+eval as_val=\$$as_ac_Header
+   if test &quot;x$as_val&quot; = x&quot;&quot;yes; then :
   cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
-#define `echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
+#define `$as_echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -3939,7 +3758,7 @@ done
 
 
 # Check whether --with-expat was given.
-if test &quot;${with_expat+set}&quot; = set; then
+if test &quot;${with_expat+set}&quot; = set; then :
   withval=$with_expat;
 fi
 
@@ -3951,18 +3770,14 @@ fi
 		EXPAT_LIBS=&quot;-L$with_expat/lib&quot;
 	fi
 
-	{ echo &quot;$as_me:$LINENO: checking for XML_ParserCreate in -lexpat&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for XML_ParserCreate in -lexpat... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_lib_expat_XML_ParserCreate+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+	{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for XML_ParserCreate in -lexpat&quot; &gt;&amp;5
+$as_echo_n &quot;checking for XML_ParserCreate in -lexpat... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_lib_expat_XML_ParserCreate+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS=&quot;-lexpat &quot;$EXPAT_LIBS&quot; $LIBS&quot;
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3980,39 +3795,18 @@ return XML_ParserCreate ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   ac_cv_lib_expat_XML_ParserCreate=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_lib_expat_XML_ParserCreate=no
+  ac_cv_lib_expat_XML_ParserCreate=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_lib_expat_XML_ParserCreate&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_lib_expat_XML_ParserCreate&quot; &gt;&amp;6; }
-if test $ac_cv_lib_expat_XML_ParserCreate = yes; then
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_expat_XML_ParserCreate&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_lib_expat_XML_ParserCreate&quot; &gt;&amp;6; }
+if test &quot;x$ac_cv_lib_expat_XML_ParserCreate&quot; = x&quot;&quot;yes; then :
    EXPAT_LIBS=&quot;$EXPAT_LIBS -lexpat&quot;
 		       expat_found=yes
 else
@@ -4020,153 +3814,18 @@ else
 fi
 
 	if test $expat_found = no; then
-		{ { echo &quot;$as_me:$LINENO: error: Could not find development files of Expat library&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find development files of Expat library&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+		as_fn_error &quot;Could not find development files of Expat library&quot; &quot;$LINENO&quot; 5
 	fi
 	expat_save_CFLAGS=&quot;$CFLAGS&quot;
 	CFLAGS=&quot;$CFLAGS $EXPAT_CFLAGS&quot;
        expat_save_CPPFLAGS=&quot;$CPPFLAGS&quot;
        CPPFLAGS=&quot;$CPPFLAGS $EXPAT_CFLAGS&quot;
-
-for ac_header in expat.h
-do
-as_ac_Header=`echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  { echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-else
-  # Is the header compilable?
-{ echo &quot;$as_me:$LINENO: checking $ac_header usability&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header usability... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include &lt;$ac_header&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_compiler&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_compiler&quot; &gt;&amp;6; }
-
-# Is the header present?
-{ echo &quot;$as_me:$LINENO: checking $ac_header presence&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header presence... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-#include &lt;$ac_header&gt;
-_ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_preproc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_preproc&quot; &gt;&amp;6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;2;}
-    ( cat &lt;&lt;\_ASBOX
-## --------------------------------------- ##
-## Report this to ejabberd@process-one.net ##
-## --------------------------------------- ##
-_ASBOX
-     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
-    ;;
-esac
-{ echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  eval &quot;$as_ac_Header=\$ac_header_preproc&quot;
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+	for ac_header in expat.h
+do :
+  ac_fn_c_check_header_mongrel &quot;$LINENO&quot; &quot;expat.h&quot; &quot;ac_cv_header_expat_h&quot; &quot;$ac_includes_default&quot;
+if test &quot;x$ac_cv_header_expat_h&quot; = x&quot;&quot;yes; then :
   cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
-#define `echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
+#define HAVE_EXPAT_H 1
 _ACEOF
 
 else
@@ -4176,9 +3835,7 @@ fi
 done
 
 	if test $expat_found = no; then
-		{ { echo &quot;$as_me:$LINENO: error: Could not find expat.h&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find expat.h&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+		as_fn_error &quot;Could not find expat.h&quot; &quot;$LINENO&quot; 5
 	fi
 	CFLAGS=&quot;$expat_save_CFLAGS&quot;
        CPPFLAGS=&quot;$expat_save_CPPFLAGS&quot;
@@ -4188,16 +3845,12 @@ echo &quot;$as_me: error: Could not find expat.h&quot; &gt;&amp;2;}
 
 
 # Checks for typedefs, structures, and compiler characteristics.
-{ echo &quot;$as_me:$LINENO: checking for an ANSI C-conforming const&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for an ANSI C-conforming const... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_c_const+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const&quot; &gt;&amp;5
+$as_echo_n &quot;checking for an ANSI C-conforming const... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_c_const+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -4257,40 +3910,18 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_cv_c_const=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_c_const=no
+  ac_cv_c_const=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_c_const&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_c_const&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_c_const&quot; &gt;&amp;6; }
 if test $ac_cv_c_const = no; then
 
-cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define const
-_ACEOF
+$as_echo &quot;#define const /**/&quot; &gt;&gt;confdefs.h
 
 fi
 
@@ -4302,164 +3933,27 @@ fi
 
 
 # Checks for library functions.
-
 for ac_header in stdlib.h
-do
-as_ac_Header=`echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  { echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-else
-  # Is the header compilable?
-{ echo &quot;$as_me:$LINENO: checking $ac_header usability&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header usability... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include &lt;$ac_header&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_compiler&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_compiler&quot; &gt;&amp;6; }
-
-# Is the header present?
-{ echo &quot;$as_me:$LINENO: checking $ac_header presence&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header presence... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-#include &lt;$ac_header&gt;
-_ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_preproc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_preproc&quot; &gt;&amp;6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;2;}
-    ( cat &lt;&lt;\_ASBOX
-## --------------------------------------- ##
-## Report this to ejabberd@process-one.net ##
-## --------------------------------------- ##
-_ASBOX
-     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
-    ;;
-esac
-{ echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  eval &quot;$as_ac_Header=\$ac_header_preproc&quot;
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  ac_fn_c_check_header_mongrel &quot;$LINENO&quot; &quot;stdlib.h&quot; &quot;ac_cv_header_stdlib_h&quot; &quot;$ac_includes_default&quot;
+if test &quot;x$ac_cv_header_stdlib_h&quot; = x&quot;&quot;yes; then :
   cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
-#define `echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
+#define HAVE_STDLIB_H 1
 _ACEOF
 
 fi
 
 done
 
-{ echo &quot;$as_me:$LINENO: checking for GNU libc compatible malloc&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for GNU libc compatible malloc... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_func_malloc_0_nonnull+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc&quot; &gt;&amp;5
+$as_echo_n &quot;checking for GNU libc compatible malloc... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_func_malloc_0_nonnull+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
-  if test &quot;$cross_compiling&quot; = yes; then
+  if test &quot;$cross_compiling&quot; = yes; then :
   ac_cv_func_malloc_0_nonnull=no
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined STDC_HEADERS || defined HAVE_STDLIB_H
 # include &lt;stdlib.h&gt;
@@ -4475,52 +3969,24 @@ return ! malloc (0);
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; { ac_try='./conftest$ac_exeext'
-  { (case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_try&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run &quot;$LINENO&quot;; then :
   ac_cv_func_malloc_0_nonnull=yes
 else
-  echo &quot;$as_me: program exited with status $ac_status&quot; &gt;&amp;5
-echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-( exit $ac_status )
-ac_cv_func_malloc_0_nonnull=no
+  ac_cv_func_malloc_0_nonnull=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_func_malloc_0_nonnull&quot; &gt;&amp;6; }
-if test $ac_cv_func_malloc_0_nonnull = yes; then
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_func_malloc_0_nonnull&quot; &gt;&amp;6; }
+if test $ac_cv_func_malloc_0_nonnull = yes; then :
 
-cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define HAVE_MALLOC 1
-_ACEOF
+$as_echo &quot;#define HAVE_MALLOC 1&quot; &gt;&gt;confdefs.h
 
 else
-  cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define HAVE_MALLOC 0
-_ACEOF
+  $as_echo &quot;#define HAVE_MALLOC 0&quot; &gt;&gt;confdefs.h
 
    case &quot; $LIBOBJS &quot; in
   *&quot; malloc.$ac_objext &quot;* ) ;;
@@ -4529,24 +3995,17 @@ _ACEOF
 esac
 
 
-cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define malloc rpl_malloc
-_ACEOF
+$as_echo &quot;#define malloc rpl_malloc&quot; &gt;&gt;confdefs.h
 
 fi
 
 
-
-{ echo &quot;$as_me:$LINENO: checking for ANSI C header files&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for ANSI C header files... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_header_stdc+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for ANSI C header files&quot; &gt;&amp;5
+$as_echo_n &quot;checking for ANSI C header files... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_header_stdc+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 #include &lt;stdarg.h&gt;
@@ -4561,47 +4020,23 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile &quot;$LINENO&quot;; then :
   ac_cv_header_stdc=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;string.h&gt;
 
 _ACEOF
 if (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;&amp;5 |
-  $EGREP &quot;memchr&quot; &gt;/dev/null 2&gt;&amp;1; then
-  :
+  $EGREP &quot;memchr&quot; &gt;/dev/null 2&gt;&amp;1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -4611,18 +4046,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;stdlib.h&gt;
 
 _ACEOF
 if (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;&amp;5 |
-  $EGREP &quot;free&quot; &gt;/dev/null 2&gt;&amp;1; then
-  :
+  $EGREP &quot;free&quot; &gt;/dev/null 2&gt;&amp;1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -4632,14 +4063,10 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test &quot;$cross_compiling&quot; = yes; then
+  if test &quot;$cross_compiling&quot; = yes; then :
   :
 else
-  cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+  cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 #include &lt;ctype.h&gt;
 #include &lt;stdlib.h&gt;
@@ -4666,48 +4093,22 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; { ac_try='./conftest$ac_exeext'
-  { (case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_try&quot;) 2&gt;&amp;5
-  ac_status=$?
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo &quot;$as_me: program exited with status $ac_status&quot; &gt;&amp;5
-echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
+if ac_fn_c_try_run &quot;$LINENO&quot;; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_header_stdc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_header_stdc&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_header_stdc&quot; &gt;&amp;6; }
 if test $ac_cv_header_stdc = yes; then
 
-cat &gt;&gt;confdefs.h &lt;&lt;\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo &quot;#define STDC_HEADERS 1&quot; &gt;&gt;confdefs.h
 
 fi
 
@@ -4715,10 +4116,10 @@ fi
 
 mod_irc=
 make_mod_irc=
-{ echo &quot;$as_me:$LINENO: checking whether build mod_irc&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build mod_irc... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build mod_irc&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build mod_irc... &quot; &gt;&amp;6; }
 # Check whether --enable-mod_irc was given.
-if test &quot;${enable_mod_irc+set}&quot; = set; then
+if test &quot;${enable_mod_irc+set}&quot; = set; then :
   enableval=$enable_mod_irc; mr_enable_mod_irc=&quot;$enableval&quot;
 else
   mr_enable_mod_irc=yes
@@ -4728,8 +4129,8 @@ if test &quot;$mr_enable_mod_irc&quot; = &quot;yes&quot;; then
 mod_irc=mod_irc
 make_mod_irc=mod_irc/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_mod_irc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_mod_irc&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_mod_irc&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_mod_irc&quot; &gt;&amp;6; }
 
 
 
@@ -4737,10 +4138,10 @@ echo &quot;${ECHO_T}$mr_enable_mod_irc&quot; &gt;&amp;6; }
 
 mod_muc=
 make_mod_muc=
-{ echo &quot;$as_me:$LINENO: checking whether build mod_muc&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build mod_muc... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build mod_muc&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build mod_muc... &quot; &gt;&amp;6; }
 # Check whether --enable-mod_muc was given.
-if test &quot;${enable_mod_muc+set}&quot; = set; then
+if test &quot;${enable_mod_muc+set}&quot; = set; then :
   enableval=$enable_mod_muc; mr_enable_mod_muc=&quot;$enableval&quot;
 else
   mr_enable_mod_muc=yes
@@ -4750,8 +4151,8 @@ if test &quot;$mr_enable_mod_muc&quot; = &quot;yes&quot;; then
 mod_muc=mod_muc
 make_mod_muc=mod_muc/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_mod_muc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_mod_muc&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_mod_muc&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_mod_muc&quot; &gt;&amp;6; }
 
 
 
@@ -4759,10 +4160,10 @@ echo &quot;${ECHO_T}$mr_enable_mod_muc&quot; &gt;&amp;6; }
 
 mod_proxy65=
 make_mod_proxy65=
-{ echo &quot;$as_me:$LINENO: checking whether build mod_proxy65&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build mod_proxy65... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build mod_proxy65&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build mod_proxy65... &quot; &gt;&amp;6; }
 # Check whether --enable-mod_proxy65 was given.
-if test &quot;${enable_mod_proxy65+set}&quot; = set; then
+if test &quot;${enable_mod_proxy65+set}&quot; = set; then :
   enableval=$enable_mod_proxy65; mr_enable_mod_proxy65=&quot;$enableval&quot;
 else
   mr_enable_mod_proxy65=yes
@@ -4772,8 +4173,8 @@ if test &quot;$mr_enable_mod_proxy65&quot; = &quot;yes&quot;; then
 mod_proxy65=mod_proxy65
 make_mod_proxy65=mod_proxy65/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_mod_proxy65&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_mod_proxy65&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_mod_proxy65&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_mod_proxy65&quot; &gt;&amp;6; }
 
 
 
@@ -4781,10 +4182,10 @@ echo &quot;${ECHO_T}$mr_enable_mod_proxy65&quot; &gt;&amp;6; }
 
 mod_pubsub=
 make_mod_pubsub=
-{ echo &quot;$as_me:$LINENO: checking whether build mod_pubsub&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build mod_pubsub... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build mod_pubsub&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build mod_pubsub... &quot; &gt;&amp;6; }
 # Check whether --enable-mod_pubsub was given.
-if test &quot;${enable_mod_pubsub+set}&quot; = set; then
+if test &quot;${enable_mod_pubsub+set}&quot; = set; then :
   enableval=$enable_mod_pubsub; mr_enable_mod_pubsub=&quot;$enableval&quot;
 else
   mr_enable_mod_pubsub=yes
@@ -4794,8 +4195,8 @@ if test &quot;$mr_enable_mod_pubsub&quot; = &quot;yes&quot;; then
 mod_pubsub=mod_pubsub
 make_mod_pubsub=mod_pubsub/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_mod_pubsub&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_mod_pubsub&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_mod_pubsub&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_mod_pubsub&quot; &gt;&amp;6; }
 
 
 
@@ -4803,10 +4204,10 @@ echo &quot;${ECHO_T}$mr_enable_mod_pubsub&quot; &gt;&amp;6; }
 
 eldap=
 make_eldap=
-{ echo &quot;$as_me:$LINENO: checking whether build eldap&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build eldap... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build eldap&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build eldap... &quot; &gt;&amp;6; }
 # Check whether --enable-eldap was given.
-if test &quot;${enable_eldap+set}&quot; = set; then
+if test &quot;${enable_eldap+set}&quot; = set; then :
   enableval=$enable_eldap; mr_enable_eldap=&quot;$enableval&quot;
 else
   mr_enable_eldap=yes
@@ -4816,8 +4217,8 @@ if test &quot;$mr_enable_eldap&quot; = &quot;yes&quot;; then
 eldap=eldap
 make_eldap=eldap/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_eldap&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_eldap&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_eldap&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_eldap&quot; &gt;&amp;6; }
 
 
 
@@ -4825,10 +4226,10 @@ echo &quot;${ECHO_T}$mr_enable_eldap&quot; &gt;&amp;6; }
 
 odbc=
 make_odbc=
-{ echo &quot;$as_me:$LINENO: checking whether build odbc&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build odbc... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build odbc&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build odbc... &quot; &gt;&amp;6; }
 # Check whether --enable-odbc was given.
-if test &quot;${enable_odbc+set}&quot; = set; then
+if test &quot;${enable_odbc+set}&quot; = set; then :
   enableval=$enable_odbc; mr_enable_odbc=&quot;$enableval&quot;
 else
   mr_enable_odbc=no
@@ -4838,8 +4239,8 @@ if test &quot;$mr_enable_odbc&quot; = &quot;yes&quot;; then
 odbc=odbc
 make_odbc=odbc/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_odbc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_odbc&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_odbc&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_odbc&quot; &gt;&amp;6; }
 
 
 
@@ -4847,10 +4248,10 @@ echo &quot;${ECHO_T}$mr_enable_odbc&quot; &gt;&amp;6; }
 
 tls=
 make_tls=
-{ echo &quot;$as_me:$LINENO: checking whether build tls&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build tls... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build tls&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build tls... &quot; &gt;&amp;6; }
 # Check whether --enable-tls was given.
-if test &quot;${enable_tls+set}&quot; = set; then
+if test &quot;${enable_tls+set}&quot; = set; then :
   enableval=$enable_tls; mr_enable_tls=&quot;$enableval&quot;
 else
   mr_enable_tls=yes
@@ -4860,8 +4261,8 @@ if test &quot;$mr_enable_tls&quot; = &quot;yes&quot;; then
 tls=tls
 make_tls=tls/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_tls&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_tls&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_tls&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_tls&quot; &gt;&amp;6; }
 
 
 
@@ -4869,10 +4270,10 @@ echo &quot;${ECHO_T}$mr_enable_tls&quot; &gt;&amp;6; }
 
 web=
 make_web=
-{ echo &quot;$as_me:$LINENO: checking whether build web&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build web... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build web&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build web... &quot; &gt;&amp;6; }
 # Check whether --enable-web was given.
-if test &quot;${enable_web+set}&quot; = set; then
+if test &quot;${enable_web+set}&quot; = set; then :
   enableval=$enable_web; mr_enable_web=&quot;$enableval&quot;
 else
   mr_enable_web=yes
@@ -4882,8 +4283,8 @@ if test &quot;$mr_enable_web&quot; = &quot;yes&quot;; then
 web=web
 make_web=web/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_web&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_web&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_web&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_web&quot; &gt;&amp;6; }
 
 
 
@@ -4892,10 +4293,10 @@ echo &quot;${ECHO_T}$mr_enable_web&quot; &gt;&amp;6; }
 
 ejabberd_zlib=
 make_ejabberd_zlib=
-{ echo &quot;$as_me:$LINENO: checking whether build ejabberd_zlib&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build ejabberd_zlib... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build ejabberd_zlib&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build ejabberd_zlib... &quot; &gt;&amp;6; }
 # Check whether --enable-ejabberd_zlib was given.
-if test &quot;${enable_ejabberd_zlib+set}&quot; = set; then
+if test &quot;${enable_ejabberd_zlib+set}&quot; = set; then :
   enableval=$enable_ejabberd_zlib; mr_enable_ejabberd_zlib=&quot;$enableval&quot;
 else
   mr_enable_ejabberd_zlib=yes
@@ -4905,8 +4306,8 @@ if test &quot;$mr_enable_ejabberd_zlib&quot; = &quot;yes&quot;; then
 ejabberd_zlib=ejabberd_zlib
 make_ejabberd_zlib=ejabberd_zlib/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_ejabberd_zlib&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_ejabberd_zlib&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_ejabberd_zlib&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_ejabberd_zlib&quot; &gt;&amp;6; }
 
 
 
@@ -4914,7 +4315,7 @@ echo &quot;${ECHO_T}$mr_enable_ejabberd_zlib&quot; &gt;&amp;6; }
 #locating zlib
 
 # Check whether --with-zlib was given.
-if test &quot;${with_zlib+set}&quot; = set; then
+if test &quot;${with_zlib+set}&quot; = set; then :
   withval=$with_zlib;
 fi
 
@@ -4927,18 +4328,14 @@ if test x&quot;$ejabberd_zlib&quot; != x; then
 		ZLIB_LIBS=&quot;-L$with_zlib/lib&quot;
 	fi
 
-	{ echo &quot;$as_me:$LINENO: checking for gzgets in -lz&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for gzgets in -lz... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_lib_z_gzgets+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+	{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for gzgets in -lz&quot; &gt;&amp;5
+$as_echo_n &quot;checking for gzgets in -lz... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_lib_z_gzgets+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS=&quot;-lz &quot;$ZLIB_LIBS&quot; $LIBS&quot;
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -4956,39 +4353,18 @@ return gzgets ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   ac_cv_lib_z_gzgets=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_lib_z_gzgets=no
+  ac_cv_lib_z_gzgets=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_lib_z_gzgets&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_lib_z_gzgets&quot; &gt;&amp;6; }
-if test $ac_cv_lib_z_gzgets = yes; then
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzgets&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_lib_z_gzgets&quot; &gt;&amp;6; }
+if test &quot;x$ac_cv_lib_z_gzgets&quot; = x&quot;&quot;yes; then :
    ZLIB_LIBS=&quot;$ZLIB_LIBS -lz&quot;
 		       zlib_found=yes
 else
@@ -4996,153 +4372,18 @@ else
 fi
 
 	if test $zlib_found = no; then
-		{ { echo &quot;$as_me:$LINENO: error: Could not find development files of zlib library. Install them or disable \`ejabberd_zlib' with: --disable-ejabberd_zlib&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find development files of zlib library. Install them or disable \`ejabberd_zlib' with: --disable-ejabberd_zlib&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+		as_fn_error &quot;Could not find development files of zlib library. Install them or disable \`ejabberd_zlib' with: --disable-ejabberd_zlib&quot; &quot;$LINENO&quot; 5
 	fi
 	zlib_save_CFLAGS=&quot;$CFLAGS&quot;
 	CFLAGS=&quot;$CFLAGS $ZLIB_CFLAGS&quot;
        zlib_save_CPPFLAGS=&quot;$CFLAGS&quot;
        CPPFLAGS=&quot;$CPPFLAGS $ZLIB_CFLAGS&quot;
-
-for ac_header in zlib.h
-do
-as_ac_Header=`echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  { echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-else
-  # Is the header compilable?
-{ echo &quot;$as_me:$LINENO: checking $ac_header usability&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header usability... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include &lt;$ac_header&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_compiler&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_compiler&quot; &gt;&amp;6; }
-
-# Is the header present?
-{ echo &quot;$as_me:$LINENO: checking $ac_header presence&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header presence... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-#include &lt;$ac_header&gt;
-_ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_preproc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_preproc&quot; &gt;&amp;6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;2;}
-    ( cat &lt;&lt;\_ASBOX
-## --------------------------------------- ##
-## Report this to ejabberd@process-one.net ##
-## --------------------------------------- ##
-_ASBOX
-     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
-    ;;
-esac
-{ echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  eval &quot;$as_ac_Header=\$ac_header_preproc&quot;
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+	for ac_header in zlib.h
+do :
+  ac_fn_c_check_header_mongrel &quot;$LINENO&quot; &quot;zlib.h&quot; &quot;ac_cv_header_zlib_h&quot; &quot;$ac_includes_default&quot;
+if test &quot;x$ac_cv_header_zlib_h&quot; = x&quot;&quot;yes; then :
   cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
-#define `echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
+#define HAVE_ZLIB_H 1
 _ACEOF
 
 else
@@ -5152,9 +4393,7 @@ fi
 done
 
 	if test $zlib_found = no; then
-		{ { echo &quot;$as_me:$LINENO: error: Could not find zlib.h. Install it or disable \`ejabberd_zlib' with: --disable-ejabberd_zlib&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find zlib.h. Install it or disable \`ejabberd_zlib' with: --disable-ejabberd_zlib&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+		as_fn_error &quot;Could not find zlib.h. Install it or disable \`ejabberd_zlib' with: --disable-ejabberd_zlib&quot; &quot;$LINENO&quot; 5
 	fi
 	CFLAGS=&quot;$zlib_save_CFLAGS&quot;
        CPPFLAGS=&quot;$zlib_save_CPPFLAGS&quot;
@@ -5167,10 +4406,10 @@ fi
 
 pam=
 make_pam=
-{ echo &quot;$as_me:$LINENO: checking whether build pam&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking whether build pam... $ECHO_C&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking whether build pam&quot; &gt;&amp;5
+$as_echo_n &quot;checking whether build pam... &quot; &gt;&amp;6; }
 # Check whether --enable-pam was given.
-if test &quot;${enable_pam+set}&quot; = set; then
+if test &quot;${enable_pam+set}&quot; = set; then :
   enableval=$enable_pam; mr_enable_pam=&quot;$enableval&quot;
 else
   mr_enable_pam=no
@@ -5180,8 +4419,8 @@ if test &quot;$mr_enable_pam&quot; = &quot;yes&quot;; then
 pam=pam
 make_pam=pam/Makefile
 fi
-{ echo &quot;$as_me:$LINENO: result: $mr_enable_pam&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$mr_enable_pam&quot; &gt;&amp;6; }
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $mr_enable_pam&quot; &gt;&amp;5
+$as_echo &quot;$mr_enable_pam&quot; &gt;&amp;6; }
 
 
 
@@ -5189,7 +4428,7 @@ echo &quot;${ECHO_T}$mr_enable_pam&quot; &gt;&amp;6; }
 #locating PAM
 
 # Check whether --with-pam was given.
-if test &quot;${with_pam+set}&quot; = set; then
+if test &quot;${with_pam+set}&quot; = set; then :
   withval=$with_pam;
 fi
 
@@ -5201,18 +4440,14 @@ if test x&quot;$pam&quot; != x; then
 		PAM_LIBS=&quot;-L$with_pam/lib&quot;
 	fi
 
-	{ echo &quot;$as_me:$LINENO: checking for pam_start in -lpam&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for pam_start in -lpam... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_lib_pam_pam_start+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+	{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for pam_start in -lpam&quot; &gt;&amp;5
+$as_echo_n &quot;checking for pam_start in -lpam... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_lib_pam_pam_start+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS=&quot;-lpam &quot;$PAM_LIBS&quot; $LIBS&quot;
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -5230,39 +4465,18 @@ return pam_start ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   ac_cv_lib_pam_pam_start=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_lib_pam_pam_start=no
+  ac_cv_lib_pam_pam_start=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_lib_pam_pam_start&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_lib_pam_pam_start&quot; &gt;&amp;6; }
-if test $ac_cv_lib_pam_pam_start = yes; then
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_pam_start&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_lib_pam_pam_start&quot; &gt;&amp;6; }
+if test &quot;x$ac_cv_lib_pam_pam_start&quot; = x&quot;&quot;yes; then :
    PAM_LIBS=&quot;$PAM_LIBS -lpam&quot;
 		       pam_found=yes
 else
@@ -5270,153 +4484,18 @@ else
 fi
 
 	if test $pam_found = no; then
-		{ { echo &quot;$as_me:$LINENO: error: Could not find development files of PAM library. Install them or disable \`pam' with: --disable-pam&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find development files of PAM library. Install them or disable \`pam' with: --disable-pam&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+		as_fn_error &quot;Could not find development files of PAM library. Install them or disable \`pam' with: --disable-pam&quot; &quot;$LINENO&quot; 5
 	fi
 	pam_save_CFLAGS=&quot;$CFLAGS&quot;
 	CFLAGS=&quot;$CFLAGS $PAM_CFLAGS&quot;
        pam_save_CPPFLAGS=&quot;$CPPFLAGS&quot;
        CPPFLAGS=&quot;$CPPFLAGS $PAM_CFLAGS&quot;
-
-for ac_header in security/pam_appl.h
-do
-as_ac_Header=`echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  { echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-else
-  # Is the header compilable?
-{ echo &quot;$as_me:$LINENO: checking $ac_header usability&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header usability... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include &lt;$ac_header&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_compiler&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_compiler&quot; &gt;&amp;6; }
-
-# Is the header present?
-{ echo &quot;$as_me:$LINENO: checking $ac_header presence&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header presence... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-#include &lt;$ac_header&gt;
-_ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_preproc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_preproc&quot; &gt;&amp;6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;2;}
-    ( cat &lt;&lt;\_ASBOX
-## --------------------------------------- ##
-## Report this to ejabberd@process-one.net ##
-## --------------------------------------- ##
-_ASBOX
-     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
-    ;;
-esac
-{ echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  eval &quot;$as_ac_Header=\$ac_header_preproc&quot;
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+	for ac_header in security/pam_appl.h
+do :
+  ac_fn_c_check_header_mongrel &quot;$LINENO&quot; &quot;security/pam_appl.h&quot; &quot;ac_cv_header_security_pam_appl_h&quot; &quot;$ac_includes_default&quot;
+if test &quot;x$ac_cv_header_security_pam_appl_h&quot; = x&quot;&quot;yes; then :
   cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
-#define `echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
+#define HAVE_SECURITY_PAM_APPL_H 1
 _ACEOF
 
 else
@@ -5426,9 +4505,7 @@ fi
 done
 
 	if test $pam_found = no; then
-		{ { echo &quot;$as_me:$LINENO: error: Could not find security/pam_appl.h. Install it or disable \`pam' with: --disable-pam&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find security/pam_appl.h. Install it or disable \`pam' with: --disable-pam&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+		as_fn_error &quot;Could not find security/pam_appl.h. Install it or disable \`pam' with: --disable-pam&quot; &quot;$LINENO&quot; 5
 	fi
 	CFLAGS=&quot;$pam_save_CFLAGS&quot;
        CPPFLAGS=&quot;$pam_save_CPPFLAGS&quot;
@@ -5439,13 +4516,11 @@ fi
 
 
 # Check whether --enable-hipe was given.
-if test &quot;${enable_hipe+set}&quot; = set; then
+if test &quot;${enable_hipe+set}&quot; = set; then :
   enableval=$enable_hipe; case &quot;${enableval}&quot; in
   yes) hipe=true ;;
   no)  hipe=false ;;
-  *) { { echo &quot;$as_me:$LINENO: error: bad value ${enableval} for --enable-hipe&quot; &gt;&amp;5
-echo &quot;$as_me: error: bad value ${enableval} for --enable-hipe&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; } ;;
+  *) as_fn_error &quot;bad value ${enableval} for --enable-hipe&quot; &quot;$LINENO&quot; 5 ;;
 esac
 else
   hipe=false
@@ -5454,13 +4529,11 @@ fi
 
 
 # Check whether --enable-roster_gateway_workaround was given.
-if test &quot;${enable_roster_gateway_workaround+set}&quot; = set; then
+if test &quot;${enable_roster_gateway_workaround+set}&quot; = set; then :
   enableval=$enable_roster_gateway_workaround; case &quot;${enableval}&quot; in
   yes) roster_gateway_workaround=true ;;
   no)  roster_gateway_workaround=false ;;
-  *) { { echo &quot;$as_me:$LINENO: error: bad value ${enableval} for --enable-roster-gateway-workaround&quot; &gt;&amp;5
-echo &quot;$as_me: error: bad value ${enableval} for --enable-roster-gateway-workaround&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; } ;;
+  *) as_fn_error &quot;bad value ${enableval} for --enable-roster-gateway-workaround&quot; &quot;$LINENO&quot; 5 ;;
 esac
 else
   roster_gateway_workaround=false
@@ -5469,13 +4542,11 @@ fi
 
 
 # Check whether --enable-mssql was given.
-if test &quot;${enable_mssql+set}&quot; = set; then
+if test &quot;${enable_mssql+set}&quot; = set; then :
   enableval=$enable_mssql; case &quot;${enableval}&quot; in
   yes) db_type=mssql ;;
   no)  db_type=generic ;;
-  *) { { echo &quot;$as_me:$LINENO: error: bad value ${enableval} for --enable-mssql&quot; &gt;&amp;5
-echo &quot;$as_me: error: bad value ${enableval} for --enable-mssql&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; } ;;
+  *) as_fn_error &quot;bad value ${enableval} for --enable-mssql&quot; &quot;$LINENO&quot; 5 ;;
 esac
 else
   db_type=generic
@@ -5484,13 +4555,11 @@ fi
 
 
 # Check whether --enable-transient_supervisors was given.
-if test &quot;${enable_transient_supervisors+set}&quot; = set; then
+if test &quot;${enable_transient_supervisors+set}&quot; = set; then :
   enableval=$enable_transient_supervisors; case &quot;${enableval}&quot; in
   yes) transient_supervisors=true ;;
   no)  transient_supervisors=false ;;
-  *) { { echo &quot;$as_me:$LINENO: error: bad value ${enableval} for --enable-full-xml&quot; &gt;&amp;5
-echo &quot;$as_me: error: bad value ${enableval} for --enable-full-xml&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; } ;;
+  *) as_fn_error &quot;bad value ${enableval} for --enable-full-xml&quot; &quot;$LINENO&quot; 5 ;;
 esac
 else
   transient_supervisors=true
@@ -5499,13 +4568,11 @@ fi
 
 
 # Check whether --enable-full_xml was given.
-if test &quot;${enable_full_xml+set}&quot; = set; then
+if test &quot;${enable_full_xml+set}&quot; = set; then :
   enableval=$enable_full_xml; case &quot;${enableval}&quot; in
   yes) full_xml=true ;;
   no)  full_xml=false ;;
-  *) { { echo &quot;$as_me:$LINENO: error: bad value ${enableval} for --enable-full-xml&quot; &gt;&amp;5
-echo &quot;$as_me: error: bad value ${enableval} for --enable-full-xml&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; } ;;
+  *) as_fn_error &quot;bad value ${enableval} for --enable-full-xml&quot; &quot;$LINENO&quot; 5 ;;
 esac
 else
   full_xml=false
@@ -5513,12 +4580,12 @@ fi
 
 
 
-ac_config_files=&quot;$ac_config_files Makefile $make_mod_irc $make_mod_muc $make_mod_pubsub $make_mod_proxy65 $make_eldap $make_pam $make_web stringprep/Makefile $make_tls $make_odbc $make_ejabberd_zlib&quot;
+ac_config_files=&quot;$ac_config_files Makefile $make_mod_irc $make_mod_muc $make_mod_pubsub $make_mod_proxy65 $make_eldap $make_pam $make_web stringprep/Makefile stun/Makefile $make_tls $make_odbc $make_ejabberd_zlib&quot;
 
 #openssl
 
 # Check whether --with-openssl was given.
-if test &quot;${with_openssl+set}&quot; = set; then
+if test &quot;${with_openssl+set}&quot; = set; then :
   withval=$with_openssl;
 fi
 
@@ -5530,18 +4597,14 @@ if test x&quot;$tls&quot; != x; then
         printf &quot;looking for openssl in $ssl_prefix...\n&quot;
         SSL_CFLAGS=&quot;-I$ssl_prefix/include&quot;
         SSL_LIBS=&quot;-L$ssl_prefix/lib -lcrypto&quot;
-        { echo &quot;$as_me:$LINENO: checking for SSL_new in -lssl&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for SSL_new in -lssl... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_lib_ssl_SSL_new+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
+        { $as_echo &quot;$as_me:${as_lineno-$LINENO}: checking for SSL_new in -lssl&quot; &gt;&amp;5
+$as_echo_n &quot;checking for SSL_new in -lssl... &quot; &gt;&amp;6; }
+if test &quot;${ac_cv_lib_ssl_SSL_new+set}&quot; = set; then :
+  $as_echo_n &quot;(cached) &quot; &gt;&amp;6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS=&quot;-lssl  $SSL_LIBS $SSL_CFLAGS  $LIBS&quot;
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
+cat confdefs.h - &lt;&lt;_ACEOF &gt;conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -5559,39 +4622,18 @@ return SSL_new ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try=&quot;$ac_link&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_link&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest$ac_exeext &amp;&amp;
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link &quot;$LINENO&quot;; then :
   ac_cv_lib_ssl_SSL_new=yes
 else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_cv_lib_ssl_SSL_new=no
+  ac_cv_lib_ssl_SSL_new=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_new&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_lib_ssl_SSL_new&quot; &gt;&amp;6; }
-if test $ac_cv_lib_ssl_SSL_new = yes; then
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_new&quot; &gt;&amp;5
+$as_echo &quot;$ac_cv_lib_ssl_SSL_new&quot; &gt;&amp;6; }
+if test &quot;x$ac_cv_lib_ssl_SSL_new&quot; = x&quot;&quot;yes; then :
    have_openssl=yes
 else
    have_openssl=no
@@ -5600,145 +4642,12 @@ fi
         if test x&quot;$have_openssl&quot; = xyes; then
             save_CPPFLAGS=$CPPFLAGS
             CPPFLAGS=&quot;-I$ssl_prefix/include $CPPFLAGS&quot;
-
-for ac_header in openssl/ssl.h
-do
-as_ac_Header=`echo &quot;ac_cv_header_$ac_header&quot; | $as_tr_sh`
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  { echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-else
-  # Is the header compilable?
-{ echo &quot;$as_me:$LINENO: checking $ac_header usability&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header usability... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include &lt;$ac_header&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_compiler&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_compiler&quot; &gt;&amp;6; }
-
-# Is the header present?
-{ echo &quot;$as_me:$LINENO: checking $ac_header presence&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking $ac_header presence... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-#include &lt;$ac_header&gt;
-_ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_preproc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_preproc&quot; &gt;&amp;6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the compiler's result&quot; &gt;&amp;2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: present but cannot be compiled&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: see the Autoconf documentation&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: proceeding with the preprocessor's result&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_header: in the future, the compiler will take precedence&quot; &gt;&amp;2;}
-    ( cat &lt;&lt;\_ASBOX
-## --------------------------------------- ##
-## Report this to ejabberd@process-one.net ##
-## --------------------------------------- ##
-_ASBOX
-     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
-    ;;
-esac
-{ echo &quot;$as_me:$LINENO: checking for $ac_header&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for $ac_header... $ECHO_C&quot; &gt;&amp;6; }
-if { as_var=$as_ac_Header; eval &quot;test \&quot;\${$as_var+set}\&quot; = set&quot;; }; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  eval &quot;$as_ac_Header=\$ac_header_preproc&quot;
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo &quot;$as_me:$LINENO: result: $ac_res&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_res&quot; &gt;&amp;6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+            for ac_header in openssl/ssl.h
+do :
+  ac_fn_c_check_header_mongrel &quot;$LINENO&quot; &quot;openssl/ssl.h&quot; &quot;ac_cv_header_openssl_ssl_h&quot; &quot;$ac_includes_default&quot;
+if test &quot;x$ac_cv_header_openssl_ssl_h&quot; = x&quot;&quot;yes; then :
   cat &gt;&gt;confdefs.h &lt;&lt;_ACEOF
-#define `echo &quot;HAVE_$ac_header&quot; | $as_tr_cpp` 1
+#define HAVE_OPENSSL_SSL_H 1
 _ACEOF
  have_openssl_h=yes
 fi
@@ -5761,9 +4670,7 @@ done
         fi
     done
 if test x${have_openssl} != xyes; then
-    { { echo &quot;$as_me:$LINENO: error: Could not find development files of OpenSSL library. Install them or disable \`tls' with: --disable-tls&quot; &gt;&amp;5
-echo &quot;$as_me: error: Could not find development files of OpenSSL library. Install them or disable \`tls' with: --disable-tls&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error &quot;Could not find development files of OpenSSL library. Install them or disable \`tls' with: --disable-tls&quot; &quot;$LINENO&quot; 5
 fi
 
 
@@ -5783,134 +4690,8 @@ else
                 fi
         done
 fi
-if test &quot;${ac_cv_header_krb5_h+set}&quot; = set; then
-  { echo &quot;$as_me:$LINENO: checking for krb5.h&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for krb5.h... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_header_krb5_h+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_header_krb5_h&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_header_krb5_h&quot; &gt;&amp;6; }
-else
-  # Is the header compilable?
-{ echo &quot;$as_me:$LINENO: checking krb5.h usability&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking krb5.h usability... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include &lt;krb5.h&gt;
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try=&quot;$ac_compile&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_compile&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &amp;&amp; {
-	 test -z &quot;$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       } &amp;&amp; test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_compiler&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_compiler&quot; &gt;&amp;6; }
-
-# Is the header present?
-{ echo &quot;$as_me:$LINENO: checking krb5.h presence&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking krb5.h presence... $ECHO_C&quot; &gt;&amp;6; }
-cat &gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h &gt;&gt;conftest.$ac_ext
-cat &gt;&gt;conftest.$ac_ext &lt;&lt;_ACEOF
-/* end confdefs.h.  */
-#include &lt;krb5.h&gt;
-_ACEOF
-if { (ac_try=&quot;$ac_cpp conftest.$ac_ext&quot;
-case &quot;(($ac_try&quot; in
-  *\&quot;* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval &quot;echo \&quot;\$as_me:$LINENO: $ac_try_echo\&quot;&quot;) &gt;&amp;5
-  (eval &quot;$ac_cpp conftest.$ac_ext&quot;) 2&gt;conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 &gt;conftest.err
-  rm -f conftest.er1
-  cat conftest.err &gt;&amp;5
-  echo &quot;$as_me:$LINENO: \$? = $ac_status&quot; &gt;&amp;5
-  (exit $ac_status); } &gt;/dev/null &amp;&amp; {
-	 test -z &quot;$ac_c_preproc_warn_flag$ac_c_werror_flag&quot; ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo &quot;$as_me: failed program was:&quot; &gt;&amp;5
-sed 's/^/| /' conftest.$ac_ext &gt;&amp;5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo &quot;$as_me:$LINENO: result: $ac_header_preproc&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_header_preproc&quot; &gt;&amp;6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h: accepted by the compiler, rejected by the preprocessor!&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h: proceeding with the compiler's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h: proceeding with the compiler's result&quot; &gt;&amp;2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h: present but cannot be compiled&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h: present but cannot be compiled&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h:     check for missing prerequisite headers?&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h:     check for missing prerequisite headers?&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h: see the Autoconf documentation&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h: see the Autoconf documentation&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h:     section \&quot;Present But Cannot Be Compiled\&quot;&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h: proceeding with the preprocessor's result&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h: proceeding with the preprocessor's result&quot; &gt;&amp;2;}
-    { echo &quot;$as_me:$LINENO: WARNING: krb5.h: in the future, the compiler will take precedence&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: krb5.h: in the future, the compiler will take precedence&quot; &gt;&amp;2;}
-    ( cat &lt;&lt;\_ASBOX
-## --------------------------------------- ##
-## Report this to ejabberd@process-one.net ##
-## --------------------------------------- ##
-_ASBOX
-     ) | sed &quot;s/^/$as_me: WARNING:     /&quot; &gt;&amp;2
-    ;;
-esac
-{ echo &quot;$as_me:$LINENO: checking for krb5.h&quot; &gt;&amp;5
-echo $ECHO_N &quot;checking for krb5.h... $ECHO_C&quot; &gt;&amp;6; }
-if test &quot;${ac_cv_header_krb5_h+set}&quot; = set; then
-  echo $ECHO_N &quot;(cached) $ECHO_C&quot; &gt;&amp;6
-else
-  ac_cv_header_krb5_h=$ac_header_preproc
-fi
-{ echo &quot;$as_me:$LINENO: result: $ac_cv_header_krb5_h&quot; &gt;&amp;5
-echo &quot;${ECHO_T}$ac_cv_header_krb5_h&quot; &gt;&amp;6; }
+ac_fn_c_check_header_mongrel &quot;$LINENO&quot; &quot;krb5.h&quot; &quot;ac_cv_header_krb5_h&quot; &quot;$ac_includes_default&quot;
+if test &quot;x$ac_cv_header_krb5_h&quot; = x&quot;&quot;yes; then :
 
 fi
 
@@ -5918,7 +4699,7 @@ fi
 
 ENABLEUSER=&quot;&quot;
 # Check whether --enable-user was given.
-if test &quot;${enable_user+set}&quot; = set; then
+if test &quot;${enable_user+set}&quot; = set; then :
   enableval=$enable_user; case &quot;${enableval}&quot; in
      yes) ENABLEUSER=`whoami` ;;
      no) ENABLEUSER=&quot;&quot; ;;
@@ -5959,12 +4740,13 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo &quot;$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: Cache variable $ac_var contains a newline.&quot; &gt;&amp;2;} ;;
+      *_cv_*) { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: cache variable $ac_var contains a newline&quot; &gt;&amp;2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      *) $as_unset $ac_var ;;
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -5972,8 +4754,8 @@ echo &quot;$as_me: WARNING: Cache variable $ac_var contains a newline.&quot; &gt;&amp;2;} ;;
   (set) 2&gt;&amp;1 |
     case $as_nl`(ac_space=' '; set) 2&gt;&amp;1` in #(
     *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
       sed -n \
 	&quot;s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p&quot;
@@ -5996,12 +4778,12 @@ echo &quot;$as_me: WARNING: Cache variable $ac_var contains a newline.&quot; &gt;&amp;2;} ;;
 if diff &quot;$cache_file&quot; confcache &gt;/dev/null 2&gt;&amp;1; then :; else
   if test -w &quot;$cache_file&quot;; then
     test &quot;x$cache_file&quot; != &quot;x/dev/null&quot; &amp;&amp;
-      { echo &quot;$as_me:$LINENO: updating cache $cache_file&quot; &gt;&amp;5
-echo &quot;$as_me: updating cache $cache_file&quot; &gt;&amp;6;}
+      { $as_echo &quot;$as_me:${as_lineno-$LINENO}: updating cache $cache_file&quot; &gt;&amp;5
+$as_echo &quot;$as_me: updating cache $cache_file&quot; &gt;&amp;6;}
     cat confcache &gt;$cache_file
   else
-    { echo &quot;$as_me:$LINENO: not updating unwritable cache $cache_file&quot; &gt;&amp;5
-echo &quot;$as_me: not updating unwritable cache $cache_file&quot; &gt;&amp;6;}
+    { $as_echo &quot;$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file&quot; &gt;&amp;5
+$as_echo &quot;$as_me: not updating unwritable cache $cache_file&quot; &gt;&amp;6;}
   fi
 fi
 rm -f confcache
@@ -6018,6 +4800,12 @@ test &quot;x$exec_prefix&quot; = xNONE &amp;&amp; exec_prefix='${prefix}'
 # take arguments), then branch to the quote section.  Otherwise,
 # look for a macro that doesn't take arguments.
 ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
 t clear
 :clear
 s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
@@ -6047,11 +4835,11 @@ ac_ltlibobjs=
 for ac_i in : $LIBOBJS; do test &quot;x$ac_i&quot; = x: &amp;&amp; continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`echo &quot;$ac_i&quot; | sed &quot;$ac_script&quot;`
+  ac_i=`$as_echo &quot;$ac_i&quot; | sed &quot;$ac_script&quot;`
   # 2. Prepend LIBOBJDIR.  When used with automake&gt;=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
-  ac_libobjs=&quot;$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext&quot;
-  ac_ltlibobjs=&quot;$ac_ltlibobjs \${LIBOBJDIR}$ac_i&quot;'$U.lo'
+  as_fn_append ac_libobjs &quot; \${LIBOBJDIR}$ac_i\$U.$ac_objext&quot;
+  as_fn_append ac_ltlibobjs &quot; \${LIBOBJDIR}$ac_i&quot;'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -6060,11 +4848,13 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 : ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files=&quot;$ac_clean_files $CONFIG_STATUS&quot;
-{ echo &quot;$as_me:$LINENO: creating $CONFIG_STATUS&quot; &gt;&amp;5
-echo &quot;$as_me: creating $CONFIG_STATUS&quot; &gt;&amp;6;}
-cat &gt;$CONFIG_STATUS &lt;&lt;_ACEOF
+{ $as_echo &quot;$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS&quot; &gt;&amp;5
+$as_echo &quot;$as_me: creating $CONFIG_STATUS&quot; &gt;&amp;6;}
+as_write_fail=0
+cat &gt;$CONFIG_STATUS &lt;&lt;_ASEOF || as_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -6074,59 +4864,79 @@ cat &gt;$CONFIG_STATUS &lt;&lt;_ACEOF
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n &quot;${ZSH_VERSION+set}&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then
+if test -n &quot;${ZSH_VERSION+set}&quot; &amp;&amp; (emulate sh) &gt;/dev/null 2&gt;&amp;1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+&quot;$@&quot;}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+&quot;$@&quot;}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+&quot;$@&quot;}'='&quot;$@&quot;'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2&gt;/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2&gt;/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test &quot;${PATH_SEPARATOR+set}&quot; != set; then
-  echo &quot;#! /bin/sh&quot; &gt;conf$$.sh
-  echo  &quot;exit 0&quot;   &gt;&gt;conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH=&quot;/nonexistent;.&quot;; conf$$.sh) &gt;/dev/null 2&gt;&amp;1; then
-    PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z &quot;$BASH_VERSION$ZSH_VERSION&quot; \
+    &amp;&amp; (test &quot;X`print -r -- $as_echo`&quot; = &quot;X$as_echo&quot;) 2&gt;/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test &quot;X`printf %s $as_echo`&quot; = &quot;X$as_echo&quot;) 2&gt;/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test &quot;X`(/usr/ucb/echo -n -n $as_echo) 2&gt;/dev/null`&quot; = &quot;X-n $as_echo&quot;; then
+    as_echo_body='eval /usr/ucb/echo -n &quot;$1$as_nl&quot;'
+    as_echo_n='/usr/ucb/echo -n'
   else
-    PATH_SEPARATOR=:
+    as_echo_body='eval expr &quot;X$1&quot; : &quot;X\\(.*\\)&quot;'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *&quot;$as_nl&quot;*)
+	expr &quot;X$arg&quot; : &quot;X\\(.*\\)$as_nl&quot;;
+	arg=`expr &quot;X$arg&quot; : &quot;.*$as_nl\\(.*\\)&quot;`;;
+      esac;
+      expr &quot;X$arg&quot; : &quot;X\\(.*\\)&quot; | tr -d &quot;$as_nl&quot;
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
   fi
-  rm -f conf$$.sh
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) &gt;/dev/null 2&gt;&amp;1; then
-  as_unset=unset
-else
-  as_unset=false
+# The user is always right.
+if test &quot;${PATH_SEPARATOR+set}&quot; != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) &gt;/dev/null 2&gt;&amp;1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 
@@ -6135,20 +4945,18 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=&quot; &quot;&quot;	$as_nl&quot;
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z &quot;$as_dir&quot; &amp;&amp; as_dir=.
-  test -r &quot;$as_dir/$0&quot; &amp;&amp; as_myself=$as_dir/$0 &amp;&amp; break
-done
+    test -r &quot;$as_dir/$0&quot; &amp;&amp; as_myself=$as_dir/$0 &amp;&amp; break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -6159,32 +4967,111 @@ if test &quot;x$as_myself&quot; = x; then
   as_myself=$0
 fi
 if test ! -f &quot;$as_myself&quot;; then
-  echo &quot;$as_myself: error: cannot find myself; rerun with an absolute file name&quot; &gt;&amp;2
-  { (exit 1); exit 1; }
+  $as_echo &quot;$as_myself: error: cannot find myself; rerun with an absolute file name&quot; &gt;&amp;2
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the &quot;|| exit 1&quot;
+# suppresses any &quot;Segmentation fault&quot; message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  &amp;&amp; ( (unset $as_var) || exit 1) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; unset $as_var || :
 done
 PS1='$ '
 PS2='&gt; '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z &quot;`(eval $as_var=C; export $as_var) 2&gt;&amp;1`&quot;); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; $as_unset $as_var
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) &gt;/dev/null 2&gt;&amp;1 &amp;&amp; unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output &quot;`basename $0`: error: ERROR&quot; to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 &amp;&amp; as_status=1
+  if test &quot;$3&quot;; then
+    as_lineno=${as_lineno-&quot;$2&quot;} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo &quot;$as_me:${as_lineno-$LINENO}: error: $1&quot; &gt;&amp;$3
   fi
-done
+  $as_echo &quot;$as_me: error: $1&quot; &gt;&amp;2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a &quot;trap 0&quot; or &quot;set -e&quot; context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval &quot;as_var=1; as_var+=2; test x\$as_var = x12&quot;) 2&gt;/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval &quot;test \$(( 1 + 1 )) = 2&quot;) 2&gt;/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr &quot;$@&quot; || test $? -eq 1`
+  }
+fi # as_fn_arith
+
 
-# Required to use basename.
 if expr a : '\(a\)' &gt;/dev/null 2&gt;&amp;1 &amp;&amp;
    test &quot;X`expr 00001 : '.*\(...\)'`&quot; = X001; then
   as_expr=expr
@@ -6198,13 +5085,17 @@ else
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` &amp;&amp; test &quot;X$as_dir&quot; = X/) &gt;/dev/null 2&gt;&amp;1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
 as_me=`$as_basename -- &quot;$0&quot; ||
 $as_expr X/&quot;$0&quot; : '.*/\([^/][^/]*\)/*$' \| \
 	 X&quot;$0&quot; : 'X\(//\)$' \| \
 	 X&quot;$0&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
-echo X/&quot;$0&quot; |
+$as_echo X/&quot;$0&quot; |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
@@ -6219,104 +5110,103 @@ echo X/&quot;$0&quot; |
 	  }
 	  s/.*/./; q'`
 
-# CDPATH.
-$as_unset CDPATH
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test &quot;x$as_lineno_1&quot; != &quot;x$as_lineno_2&quot; &amp;&amp;
-  test &quot;x`expr $as_lineno_1 + 1`&quot; = &quot;x$as_lineno_2&quot; || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' &lt;$as_myself |
-    sed '
-      s/[$]LINENO.*/&amp;-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' &gt;$as_me.lineno &amp;&amp;
-  chmod +x &quot;$as_me.lineno&quot; ||
-    { echo &quot;$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . &quot;./$as_me.lineno&quot;
-  # Exit status is that of the last command.
-  exit
-}
-
-
-if (as_dir=`dirname -- /` &amp;&amp; test &quot;X$as_dir&quot; = X/) &gt;/dev/null 2&gt;&amp;1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` &gt; /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' &gt;/dev/null 2&gt;&amp;1 &amp;&amp;
-   test &quot;X`expr 00001 : '.*\(...\)'`&quot; = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo &gt;conf$$.file
-if ln -s conf$$.file conf$$ 2&gt;/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP &lt; 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2&gt;/dev/null &amp;&amp; test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2&gt;/dev/null
+fi
+if (echo &gt;conf$$.file) 2&gt;/dev/null; then
+  if ln -s conf$$.file conf$$ 2&gt;/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP &lt; 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2&gt;/dev/null &amp;&amp; test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2&gt;/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2&gt;/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2&gt;/dev/null
 
+
+# as_fn_mkdir_p
+# -------------
+# Create &quot;$as_dir&quot; as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d &quot;$as_dir&quot; || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo &quot;$as_dir&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs=&quot;'$as_qdir' $as_dirs&quot;
+      as_dir=`$as_dirname -- &quot;$as_dir&quot; ||
+$as_expr X&quot;$as_dir&quot; : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X&quot;$as_dir&quot; : 'X\(//\)[^/]' \| \
+	 X&quot;$as_dir&quot; : 'X\(//\)$' \| \
+	 X&quot;$as_dir&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
+$as_echo X&quot;$as_dir&quot; |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d &quot;$as_dir&quot; &amp;&amp; break
+    done
+    test -z &quot;$as_dirs&quot; || eval &quot;mkdir $as_dirs&quot;
+  } || test -d &quot;$as_dir&quot; || as_fn_error &quot;cannot create directory $as_dir&quot;
+
+
+} # as_fn_mkdir_p
 if mkdir -p . 2&gt;/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p &quot;$as_dir&quot;'
 else
   test -d ./-p &amp;&amp; rmdir ./-p
   as_mkdir_p=false
@@ -6333,12 +5223,12 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d &quot;$1&quot;; then
-        test -d &quot;$1/.&quot;;
+	test -d &quot;$1/.&quot;;
       else
-	case $1 in
-        -*)set &quot;./$1&quot;;;
+	case $1 in #(
+	-*)set &quot;./$1&quot;;;
 	esac;
-	case `ls -ld'$as_ls_L_option' &quot;$1&quot; 2&gt;/dev/null` in
+	case `ls -ld'$as_ls_L_option' &quot;$1&quot; 2&gt;/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -6353,13 +5243,19 @@ as_tr_sh=&quot;eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'&quot;
 
 
 exec 6&gt;&amp;1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 &amp;&amp; chmod +x $CONFIG_STATUS || ac_write_fail=1
 
-# Save the log message, to keep $[0] and so on meaningful, and to
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log=&quot;
 This file was extended by ejabberd.erl $as_me version, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -6372,50 +5268,58 @@ on `(hostname || uname -n) 2&gt;/dev/null | sed 1q`
 
 _ACEOF
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
+case $ac_config_files in *&quot;
+&quot;*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files=&quot;$ac_config_files&quot;
 
 _ACEOF
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
 ac_cs_usage=&quot;\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
 
-Usage: $0 [OPTIONS] [FILE]...
+Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
-  -q, --quiet      do not print progress messages
+  -q, --quiet, --silent
+                   do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
 
 Configuration files:
 $config_files
 
-Report bugs to &lt;bug-autoconf@gnu.org&gt;.&quot;
+Report bugs to &lt;ejabberd@process-one.net&gt;.&quot;
 
 _ACEOF
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
 ac_cs_version=&quot;\\
 ejabberd.erl config.status version
-configured by $0, generated by GNU Autoconf 2.61,
-  with options \\&quot;`echo &quot;$ac_configure_args&quot; | sed 's/^ //; s/[\\&quot;&quot;\`\$]/\\\\&amp;/g'`\\&quot;
+configured by $0, generated by GNU Autoconf 2.64,
+  with options \\&quot;`$as_echo &quot;$ac_configure_args&quot; | sed 's/^ //; s/[\\&quot;&quot;\`\$]/\\\\&amp;/g'`\\&quot;
 
-Copyright (C) 2006 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.&quot;
 
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
+test -n &quot;\$AWK&quot; || AWK=awk
 _ACEOF
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
 ac_need_defaults=:
 while test $# != 0
 do
@@ -6437,25 +5341,27 @@ do
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    echo &quot;$ac_cs_version&quot;; exit ;;
+    $as_echo &quot;$ac_cs_version&quot;; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    CONFIG_FILES=&quot;$CONFIG_FILES $ac_optarg&quot;
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo &quot;$ac_optarg&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;` ;;
+    esac
+    as_fn_append CONFIG_FILES &quot; '$ac_optarg'&quot;
     ac_need_defaults=false;;
   --he | --h |  --help | --hel | -h )
-    echo &quot;$ac_cs_usage&quot;; exit ;;
+    $as_echo &quot;$ac_cs_usage&quot;; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { echo &quot;$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information.&quot; &gt;&amp;2
-   { (exit 1); exit 1; }; } ;;
+  -*) as_fn_error &quot;unrecognized option: \`$1'
+Try \`$0 --help' for more information.&quot; ;;
 
-  *) ac_config_targets=&quot;$ac_config_targets $1&quot;
+  *) as_fn_append ac_config_targets &quot; $1&quot;
      ac_need_defaults=false ;;
 
   esac
@@ -6470,30 +5376,32 @@ if $ac_cs_silent; then
 fi
 
 _ACEOF
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  echo &quot;running CONFIG_SHELL=$SHELL $SHELL $0 &quot;$ac_configure_args \$ac_configure_extra_args &quot; --no-create --no-recursion&quot; &gt;&amp;6
-  CONFIG_SHELL=$SHELL
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo &quot;running CONFIG_SHELL=$SHELL \$*&quot; &gt;&amp;6
+  CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
-  exec $SHELL &quot;$0&quot;$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  exec &quot;\$@&quot;
 fi
 
 _ACEOF
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
 exec 5&gt;&gt;config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' &lt;&lt;_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  echo &quot;$ac_log&quot;
+  $as_echo &quot;$ac_log&quot;
 } &gt;&amp;5
 
 _ACEOF
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
 _ACEOF
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
 
 # Handling of arguments.
 for ac_config_target in $ac_config_targets
@@ -6508,13 +5416,12 @@ do
     &quot;$make_pam&quot;) CONFIG_FILES=&quot;$CONFIG_FILES $make_pam&quot; ;;
     &quot;$make_web&quot;) CONFIG_FILES=&quot;$CONFIG_FILES $make_web&quot; ;;
     &quot;stringprep/Makefile&quot;) CONFIG_FILES=&quot;$CONFIG_FILES stringprep/Makefile&quot; ;;
+    &quot;stun/Makefile&quot;) CONFIG_FILES=&quot;$CONFIG_FILES stun/Makefile&quot; ;;
     &quot;$make_tls&quot;) CONFIG_FILES=&quot;$CONFIG_FILES $make_tls&quot; ;;
     &quot;$make_odbc&quot;) CONFIG_FILES=&quot;$CONFIG_FILES $make_odbc&quot; ;;
     &quot;$make_ejabberd_zlib&quot;) CONFIG_FILES=&quot;$CONFIG_FILES $make_ejabberd_zlib&quot; ;;
 
-  *) { { echo &quot;$as_me:$LINENO: error: invalid argument: $ac_config_target&quot; &gt;&amp;5
-echo &quot;$as_me: error: invalid argument: $ac_config_target&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; };;
+  *) as_fn_error &quot;invalid argument: \`$ac_config_target'&quot; &quot;$LINENO&quot; 5;;
   esac
 done
 
@@ -6539,7 +5446,7 @@ $debug ||
   trap 'exit_status=$?
   { test -z &quot;$tmp&quot; || test ! -d &quot;$tmp&quot; || rm -fr &quot;$tmp&quot;; } &amp;&amp; exit $exit_status
 ' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
+  trap 'as_fn_exit 1' 1 2 13 15
 }
 # Create a (secure) tmp directory for tmp files.
 
@@ -6550,157 +5457,140 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 &amp;&amp; mkdir &quot;$tmp&quot;)
-} ||
-{
-   echo &quot;$me: cannot create a temporary directory in .&quot; &gt;&amp;2
-   { (exit 1); exit 1; }
-}
+} || as_fn_error &quot;cannot create a temporary directory in .&quot; &quot;$LINENO&quot; 5
 
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
 if test -n &quot;$CONFIG_FILES&quot;; then
 
-_ACEOF
 
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test &quot;x$ac_cr&quot; = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print &quot;a\rb&quot; }' &lt;/dev/null 2&gt;/dev/null`
+if test &quot;$ac_cs_awk_cr&quot; = &quot;a${ac_cr}b&quot;; then
+  ac_cs_awk_cr='\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' &gt;&quot;$tmp/subs1.awk&quot; &amp;&amp;
+_ACEOF
 
 
+{
+  echo &quot;cat &gt;conf$$subs.awk &lt;&lt;_ACEOF&quot; &amp;&amp;
+  echo &quot;$ac_subst_vars&quot; | sed 's/.*/&amp;!$&amp;$ac_delim/' &amp;&amp;
+  echo &quot;_ACEOF&quot;
+} &gt;conf$$subs.sh ||
+  as_fn_error &quot;could not make $CONFIG_STATUS&quot; &quot;$LINENO&quot; 5
+ac_delim_num=`echo &quot;$ac_subst_vars&quot; | grep -c '$'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
-  cat &gt;conf$$subs.sed &lt;&lt;_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-SET_MAKE!$SET_MAKE$ac_delim
-ERLC!$ERLC$ac_delim
-ERL!$ERL$ac_delim
-ERLANG_CFLAGS!$ERLANG_CFLAGS$ac_delim
-ERLANG_LIBS!$ERLANG_LIBS$ac_delim
-ERLANG_SSL39!$ERLANG_SSL39$ac_delim
-LIBICONV!$LIBICONV$ac_delim
-CPP!$CPP$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-EXPAT_CFLAGS!$EXPAT_CFLAGS$ac_delim
-EXPAT_LIBS!$EXPAT_LIBS$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-mod_irc!$mod_irc$ac_delim
-make_mod_irc!$make_mod_irc$ac_delim
-mod_muc!$mod_muc$ac_delim
-make_mod_muc!$make_mod_muc$ac_delim
-mod_proxy65!$mod_proxy65$ac_delim
-make_mod_proxy65!$make_mod_proxy65$ac_delim
-mod_pubsub!$mod_pubsub$ac_delim
-make_mod_pubsub!$make_mod_pubsub$ac_delim
-eldap!$eldap$ac_delim
-make_eldap!$make_eldap$ac_delim
-odbc!$odbc$ac_delim
-make_odbc!$make_odbc$ac_delim
-tls!$tls$ac_delim
-make_tls!$make_tls$ac_delim
-web!$web$ac_delim
-make_web!$make_web$ac_delim
-ejabberd_zlib!$ejabberd_zlib$ac_delim
-make_ejabberd_zlib!$make_ejabberd_zlib$ac_delim
-ZLIB_CFLAGS!$ZLIB_CFLAGS$ac_delim
-ZLIB_LIBS!$ZLIB_LIBS$ac_delim
-pam!$pam$ac_delim
-make_pam!$make_pam$ac_delim
-PAM_CFLAGS!$PAM_CFLAGS$ac_delim
-PAM_LIBS!$PAM_LIBS$ac_delim
-hipe!$hipe$ac_delim
-roster_gateway_workaround!$roster_gateway_workaround$ac_delim
-db_type!$db_type$ac_delim
-transient_supervisors!$transient_supervisors$ac_delim
-full_xml!$full_xml$ac_delim
-SSL_LIBS!$SSL_LIBS$ac_delim
-SSL_CFLAGS!$SSL_CFLAGS$ac_delim
-INSTALLUSER!$INSTALLUSER$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
+  . ./conf$$subs.sh ||
+    as_fn_error &quot;could not make $CONFIG_STATUS&quot; &quot;$LINENO&quot; 5
 
-  if test `sed -n &quot;s/.*$ac_delim\$/X/p&quot; conf$$subs.sed | grep -c X` = 90; then
+  ac_delim_n=`sed -n &quot;s/.*$ac_delim\$/X/p&quot; conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    { { echo &quot;$as_me:$LINENO: error: could not make $CONFIG_STATUS&quot; &gt;&amp;5
-echo &quot;$as_me: error: could not make $CONFIG_STATUS&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error &quot;could not make $CONFIG_STATUS&quot; &quot;$LINENO&quot; 5
   else
     ac_delim=&quot;$ac_delim!$ac_delim _$ac_delim!! &quot;
   fi
 done
+rm -f conf$$subs.sh
+
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
+cat &gt;&gt;&quot;\$tmp/subs1.awk&quot; &lt;&lt;\\_ACAWK &amp;&amp;
+_ACEOF
+sed -n '
+h
+s/^/S[&quot;/; s/!.*/&quot;]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'&quot;$ac_delim&quot;'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/[&quot;\\]/\\&amp;/g; s/^/&quot;/; s/$/\\n&quot;\\/
+p
+n
+b repl
+:more1
+s/[&quot;\\]/\\&amp;/g; s/^/&quot;/; s/$/&quot;\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/[&quot;\\]/\\&amp;/g; s/^/&quot;/; s/$/&quot;/
+p
+b
+:more2
+s/[&quot;\\]/\\&amp;/g; s/^/&quot;/; s/$/&quot;\\/
+p
+g
+s/.\{148\}//
+t delim
+' &lt;conf$$subs.awk | sed '
+/^[^&quot;&quot;]/{
+  N
+  s/\n//
+}
+' &gt;&gt;$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
+_ACAWK
+cat &gt;&gt;&quot;\$tmp/subs1.awk&quot; &lt;&lt;_ACAWK &amp;&amp;
+  for (key in S) S_is_set[key] = 1
+  FS = &quot;*&quot;
 
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n &quot;$ac_eof&quot;; then
-  ac_eof=`echo &quot;$ac_eof&quot; | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
+}
+{
+  line = $ 0
+  nfields = split(line, field, &quot;@&quot;)
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i &lt; nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) &quot;&quot; value &quot;&quot; substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
-cat &gt;&quot;\$tmp/subs-1.sed&quot; &lt;&lt;\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+  print line
+}
+
+_ACAWK
 _ACEOF
-sed '
-s/[,\\&amp;]/\\&amp;/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'&quot;$ac_delim&quot;'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&amp;]/\\&amp;/g; s/@/@|#_!!_#|/g; b n
-' &gt;&gt;$CONFIG_STATUS &lt;conf$$subs.sed
-rm -f conf$$subs.sed
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
+if sed &quot;s/$ac_cr//&quot; &lt; /dev/null &gt; /dev/null 2&gt;&amp;1; then
+  sed &quot;s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g&quot;
+else
+  cat
+fi &lt; &quot;$tmp/subs1.awk&quot; &gt; &quot;$tmp/subs.awk&quot; \
+  || as_fn_error &quot;could not setup config files machinery&quot; &quot;$LINENO&quot; 5
 _ACEOF
 
-
 # VPATH may cause trouble with some makes, so we remove $(srcdir),
 # ${srcdir} and @srcdir@ from VPATH if srcdir is &quot;.&quot;, strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
@@ -6716,20 +5606,20 @@ s/^[^=]*=[	 ]*$//
 }'
 fi
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
 fi # test -n &quot;$CONFIG_FILES&quot;
 
 
-for ac_tag in  :F $CONFIG_FILES
+eval set X &quot;  :F $CONFIG_FILES      &quot;
+shift
+for ac_tag
 do
   case $ac_tag in
   :[FHLC]) ac_mode=$ac_tag; continue;;
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) { { echo &quot;$as_me:$LINENO: error: Invalid tag $ac_tag.&quot; &gt;&amp;5
-echo &quot;$as_me: error: Invalid tag $ac_tag.&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; };;
+  :L* | :C*:*) as_fn_error &quot;invalid tag \`$ac_tag'&quot; &quot;$LINENO&quot; 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -6757,26 +5647,34 @@ echo &quot;$as_me: error: Invalid tag $ac_tag.&quot; &gt;&amp;2;}
 	   [\\/$]*) false;;
 	   *) test -f &quot;$srcdir/$ac_f&quot; &amp;&amp; ac_f=&quot;$srcdir/$ac_f&quot;;;
 	   esac ||
-	   { { echo &quot;$as_me:$LINENO: error: cannot find input file: $ac_f&quot; &gt;&amp;5
-echo &quot;$as_me: error: cannot find input file: $ac_f&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; };;
+	   as_fn_error &quot;cannot find input file: \`$ac_f'&quot; &quot;$LINENO&quot; 5;;
       esac
-      ac_file_inputs=&quot;$ac_file_inputs $ac_f&quot;
+      case $ac_f in *\'*) ac_f=`$as_echo &quot;$ac_f&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;`;; esac
+      as_fn_append ac_file_inputs &quot; '$ac_f'&quot;
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
-    configure_input=&quot;Generated from &quot;`IFS=:
-	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`&quot; by configure.&quot;
+    configure_input='Generated from '`
+	  $as_echo &quot;$*&quot; | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
     if test x&quot;$ac_file&quot; != x-; then
       configure_input=&quot;$ac_file.  $configure_input&quot;
-      { echo &quot;$as_me:$LINENO: creating $ac_file&quot; &gt;&amp;5
-echo &quot;$as_me: creating $ac_file&quot; &gt;&amp;6;}
+      { $as_echo &quot;$as_me:${as_lineno-$LINENO}: creating $ac_file&quot; &gt;&amp;5
+$as_echo &quot;$as_me: creating $ac_file&quot; &gt;&amp;6;}
     fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&amp;* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo &quot;$configure_input&quot; |
+       sed 's/[\\\\&amp;|]/\\\\&amp;/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
 
     case $ac_tag in
-    *:-:* | *:-) cat &gt;&quot;$tmp/stdin&quot;;;
+    *:-:* | *:-) cat &gt;&quot;$tmp/stdin&quot; \
+      || as_fn_error &quot;could not create $ac_file&quot; &quot;$LINENO&quot; 5 ;;
     esac
     ;;
   esac
@@ -6786,7 +5684,7 @@ $as_expr X&quot;$ac_file&quot; : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X&quot;$ac_file&quot; : 'X\(//\)[^/]' \| \
 	 X&quot;$ac_file&quot; : 'X\(//\)$' \| \
 	 X&quot;$ac_file&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
-echo X&quot;$ac_file&quot; |
+$as_echo X&quot;$ac_file&quot; |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -6804,55 +5702,15 @@ echo X&quot;$ac_file&quot; |
 	    q
 	  }
 	  s/.*/./; q'`
-  { as_dir=&quot;$ac_dir&quot;
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d &quot;$as_dir&quot; || { $as_mkdir_p &amp;&amp; mkdir -p &quot;$as_dir&quot;; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`echo &quot;$as_dir&quot; | sed &quot;s/'/'\\\\\\\\''/g&quot;`;; #(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs=&quot;'$as_qdir' $as_dirs&quot;
-      as_dir=`$as_dirname -- &quot;$as_dir&quot; ||
-$as_expr X&quot;$as_dir&quot; : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X&quot;$as_dir&quot; : 'X\(//\)[^/]' \| \
-	 X&quot;$as_dir&quot; : 'X\(//\)$' \| \
-	 X&quot;$as_dir&quot; : 'X\(/\)' \| . 2&gt;/dev/null ||
-echo X&quot;$as_dir&quot; |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d &quot;$as_dir&quot; &amp;&amp; break
-    done
-    test -z &quot;$as_dirs&quot; || eval &quot;mkdir $as_dirs&quot;
-  } || test -d &quot;$as_dir&quot; || { { echo &quot;$as_me:$LINENO: error: cannot create directory $as_dir&quot; &gt;&amp;5
-echo &quot;$as_me: error: cannot create directory $as_dir&quot; &gt;&amp;2;}
-   { (exit 1); exit 1; }; }; }
+  as_dir=&quot;$ac_dir&quot;; as_fn_mkdir_p
   ac_builddir=.
 
 case &quot;$ac_dir&quot; in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo &quot;$ac_dir&quot; | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo &quot;$ac_dir&quot; | sed 's|^\.[\\/]||'`
   # A &quot;..&quot; for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo &quot;$ac_dir_suffix&quot; | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo &quot;$ac_dir_suffix&quot; | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   &quot;&quot;) ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -6888,12 +5746,12 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
 _ACEOF
 
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
 # If the template does not know about datarootdir, expand it.
 # FIXME: This hack should be removed a few years after 2.60.
 ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
+ac_sed_dataroot='
+/datarootdir/ {
   p
   q
 }
@@ -6901,36 +5759,37 @@ case `sed -n '/datarootdir/ {
 /@docdir@/p
 /@infodir@/p
 /@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
+/@mandir@/p'
+case `eval &quot;sed -n \&quot;\$ac_sed_dataroot\&quot; $ac_file_inputs&quot;` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { echo &quot;$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting&quot; &gt;&amp;2;}
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting&quot; &gt;&amp;2;}
 _ACEOF
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
   s&amp;@datadir@&amp;$datadir&amp;g
   s&amp;@docdir@&amp;$docdir&amp;g
   s&amp;@infodir@&amp;$infodir&amp;g
   s&amp;@localedir@&amp;$localedir&amp;g
   s&amp;@mandir@&amp;$mandir&amp;g
-    s&amp;\\\${datarootdir}&amp;$datarootdir&amp;g' ;;
+  s&amp;\\\${datarootdir}&amp;$datarootdir&amp;g' ;;
 esac
 _ACEOF
 
 # Neutralize VPATH when `$srcdir' = `.'.
 # Shell code in configure.ac might set extrasub.
 # FIXME: do we really want to maintain this feature?
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF
-  sed &quot;$ac_vpsub
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;_ACEOF || ac_write_fail=1
+ac_sed_extra=&quot;$ac_vpsub
 $extrasub
 _ACEOF
-cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF
+cat &gt;&gt;$CONFIG_STATUS &lt;&lt;\_ACEOF || ac_write_fail=1
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&amp;@configure_input@&amp;$configure_input&amp;;t t
+s|@configure_input@|$ac_sed_conf_input|;t t
 s&amp;@top_builddir@&amp;$ac_top_builddir_sub&amp;;t t
+s&amp;@top_build_prefix@&amp;$ac_top_build_prefix&amp;;t t
 s&amp;@srcdir@&amp;$ac_srcdir&amp;;t t
 s&amp;@abs_srcdir@&amp;$ac_abs_srcdir&amp;;t t
 s&amp;@top_srcdir@&amp;$ac_top_srcdir&amp;;t t
@@ -6939,21 +5798,24 @@ s&amp;@builddir@&amp;$ac_builddir&amp;;t t
 s&amp;@abs_builddir@&amp;$ac_abs_builddir&amp;;t t
 s&amp;@abs_top_builddir@&amp;$ac_abs_top_builddir&amp;;t t
 $ac_datarootdir_hack
-&quot; $ac_file_inputs | sed -f &quot;$tmp/subs-1.sed&quot; &gt;$tmp/out
+&quot;
+eval sed \&quot;\$ac_sed_extra\&quot; &quot;$ac_file_inputs&quot; | $AWK -f &quot;$tmp/subs.awk&quot; &gt;$tmp/out \
+  || as_fn_error &quot;could not create $ac_file&quot; &quot;$LINENO&quot; 5
 
 test -z &quot;$ac_datarootdir_hack$ac_datarootdir_seen&quot; &amp;&amp;
   { ac_out=`sed -n '/\${datarootdir}/p' &quot;$tmp/out&quot;`; test -n &quot;$ac_out&quot;; } &amp;&amp;
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' &quot;$tmp/out&quot;`; test -z &quot;$ac_out&quot;; } &amp;&amp;
-  { echo &quot;$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined.&quot; &gt;&amp;5
-echo &quot;$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+$as_echo &quot;$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined.&quot; &gt;&amp;2;}
 
   rm -f &quot;$tmp/stdin&quot;
   case $ac_file in
-  -) cat &quot;$tmp/out&quot;; rm -f &quot;$tmp/out&quot;;;
-  *) rm -f &quot;$ac_file&quot;; mv &quot;$tmp/out&quot; $ac_file;;
-  esac
+  -) cat &quot;$tmp/out&quot; &amp;&amp; rm -f &quot;$tmp/out&quot;;;
+  *) rm -f &quot;$ac_file&quot; &amp;&amp; mv &quot;$tmp/out&quot; &quot;$ac_file&quot;;;
+  esac \
+  || as_fn_error &quot;could not create $ac_file&quot; &quot;$LINENO&quot; 5
  ;;
 
 
@@ -6963,11 +5825,13 @@ which seems to be undefined.  Please make sure it is defined.&quot; &gt;&amp;2;}
 done # for ac_tag
 
 
-{ (exit 0); exit 0; }
+as_fn_exit 0
 _ACEOF
-chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
+test $ac_write_fail = 0 ||
+  as_fn_error &quot;write failure creating $CONFIG_STATUS&quot; &quot;$LINENO&quot; 5
+
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -6987,6 +5851,10 @@ if test &quot;$no_create&quot; != yes; then
   exec 5&gt;&gt;config.log
   # Use ||, not &amp;&amp;, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
+  $ac_cs_success || as_fn_exit $?
+fi
+if test -n &quot;$ac_unrecognized_opts&quot; &amp;&amp; test &quot;$enable_option_checking&quot; != no; then
+  { $as_echo &quot;$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts&quot; &gt;&amp;5
+$as_echo &quot;$as_me: WARNING: unrecognized options: $ac_unrecognized_opts&quot; &gt;&amp;2;}
 fi
 </diff>
      <filename>src/configure</filename>
    </modified>
    <modified>
      <diff>@@ -103,6 +103,7 @@ AC_CONFIG_FILES([Makefile
                  $make_pam
                  $make_web
                  stringprep/Makefile
+                 stun/Makefile
                  $make_tls
                  $make_odbc
                  $make_ejabberd_zlib])</diff>
      <filename>src/configure.ac</filename>
    </modified>
    <modified>
      <diff>@@ -149,10 +149,15 @@
   %%			    }
   %%			   ]},
 
+  %%
+  %% ejabberd_stun: Handles STUN Binding requests
+  %%
+  %%{{3478, udp}, ejabberd_stun, []},
+
   {5280, ejabberd_http, [
 			 %%{request_handlers,
 			 %% [
-			 %%  {[&quot;pub&quot;, &quot;archive&quot;], mod_http_fileserver},
+			 %%  {[&quot;pub&quot;, &quot;archive&quot;], mod_http_fileserver}
 			 %% ]},
 			 captcha,
 			 http_bind,
@@ -496,6 +501,7 @@
 		 ]},
   %%{mod_muc_log,[]},
   {mod_offline,  [{access_max_user_messages, max_user_offline_messages}]},
+  {mod_ping,     []},
   {mod_privacy,  []},
   {mod_private,  []},
   %%{mod_proxy65,[]},
@@ -503,7 +509,7 @@
 		  {access_createnode, pubsub_createnode},
 		  {pep_sendlast_offline, false},
 		  {last_item_cache, false},
-		  {plugins, [&quot;flat&quot;, &quot;pep&quot;]}  % pep requires mod_caps
+		  {plugins, [&quot;flat&quot;, &quot;hometree&quot;, &quot;pep&quot;]}  % pep requires mod_caps
 		 ]},
   {mod_register, [
 		  %%</diff>
      <filename>src/ejabberd.cfg.example</filename>
    </modified>
    <modified>
      <diff>@@ -33,15 +33,15 @@
 	 %% Accounts
 	 register/3, unregister/2,
 	 registered_users/1,
-	 %% Migration
+	 %% Migration jabberd1.4
 	 import_file/1, import_dir/1,
 	 %% Purge DB
 	 delete_expired_messages/0, delete_old_messages/1,
 	 %% Mnesia
 	 backup_mnesia/1, restore_mnesia/1,
-	 dump_mnesia/1, load_mnesia/1,
+	 dump_mnesia/1, dump_table/2, load_mnesia/1,
 	 install_fallback_mnesia/1,
-	 dump_to_textfile/1,
+	 dump_to_textfile/1, dump_to_textfile/2,
 	 mnesia_change_nodename/4,
 	 restore/1 % Still used by some modules
 	]).
@@ -79,6 +79,14 @@ commands() -&gt;
 			desc = &quot;Reopen the log files&quot;,
 			module = ?MODULE, function = reopen_log,
 			args = [], result = {res, rescode}},
+     #ejabberd_commands{name = get_loglevel, tags = [logs, server],
+			desc = &quot;Get the current loglevel&quot;,
+			module = ejabberd_loglevel, function = get,
+			args = [],
+                        result = {leveltuple, {tuple, [{levelnumber, integer},
+                                                       {levelatom, atom},
+                                                       {leveldesc, string}
+                                                      ]}}},
 
      #ejabberd_commands{name = register, tags = [accounts],
 			desc = &quot;Register a user&quot;,
@@ -101,11 +109,24 @@ commands() -&gt;
 			module = ?MODULE, function = import_file,
 			args = [{file, string}], result = {res, restuple}},
      #ejabberd_commands{name = import_dir, tags = [mnesia],
-			desc = &quot;Import user data from jabberd14 spool dir&quot;,
+			desc = &quot;Import users data from jabberd14 spool dir&quot;,
 			module = ?MODULE, function = import_dir,
 			args = [{file, string}],
 			result = {res, restuple}},
 
+     #ejabberd_commands{name = import_piefxis, tags = [mnesia],
+			desc = &quot;Import users data from a PIEFXIS file (XEP-0227)&quot;,
+			module = ejabberd_piefxis, function = import_file,
+			args = [{file, string}], result = {res, rescode}},
+     #ejabberd_commands{name = export_piefxis, tags = [mnesia],
+			desc = &quot;Export data of all users in the server to PIEFXIS files (XEP-0227)&quot;,
+			module = ejabberd_piefxis, function = export_server,
+			args = [{dir, string}], result = {res, rescode}},
+     #ejabberd_commands{name = export_piefxis_host, tags = [mnesia],
+			desc = &quot;Export data of users in a host to PIEFXIS files (XEP-0227)&quot;,
+			module = ejabberd_piefxis, function = export_host,
+			args = [{dir, string}, {host, string}], result = {res, rescode}},
+
      #ejabberd_commands{name = delete_expired_messages, tags = [purge],
 			desc = &quot;Delete expired offline messages from database&quot;,
 			module = ?MODULE, function = delete_expired_messages,
@@ -133,6 +154,10 @@ commands() -&gt;
 			desc = &quot;Dump the database to text file&quot;,
 			module = ?MODULE, function = dump_mnesia,
 			args = [{file, string}], result = {res, restuple}},
+     #ejabberd_commands{name = dump_table, tags = [mnesia],
+			desc = &quot;Dump a table to text file&quot;,
+			module = ?MODULE, function = dump_table,
+			args = [{file, string}, {table, string}], result = {res, restuple}},
      #ejabberd_commands{name = load, tags = [mnesia],
 			desc = &quot;Restore the database from text file&quot;,
 			module = ?MODULE, function = load_mnesia,
@@ -320,8 +345,28 @@ module_tables(mod_shared_roster) -&gt; [sr_group, sr_user];
 module_tables(mod_vcard) -&gt; [vcard, vcard_search];
 module_tables(_Other) -&gt; [].
 
+get_local_tables() -&gt;
+    Tabs1 = lists:delete(schema, mnesia:system_info(local_tables)),
+    Tabs = lists:filter(
+	     fun(T) -&gt;
+		     case mnesia:table_info(T, storage_type) of
+			 disc_copies -&gt; true;
+			 disc_only_copies -&gt; true;
+			 _ -&gt; false
+		     end
+	     end, Tabs1),
+    Tabs.
+
 dump_mnesia(Path) -&gt;
-    case dump_to_textfile(Path) of
+    Tabs = get_local_tables(),
+    dump_tables(Path, Tabs).
+
+dump_table(Path, STable) -&gt;
+    Table = list_to_atom(STable),
+    dump_tables(Path, [Table]).
+
+dump_tables(Path, Tables) -&gt;
+    case dump_to_textfile(Path, Tables) of
 	ok -&gt;
 	    {ok, &quot;&quot;};
 	{error, Reason} -&gt;
@@ -331,17 +376,12 @@ dump_mnesia(Path) -&gt;
     end.
 
 dump_to_textfile(File) -&gt;
-    dump_to_textfile(mnesia:system_info(is_running), file:open(File, [write])).
-dump_to_textfile(yes, {ok, F}) -&gt;
-    Tabs1 = lists:delete(schema, mnesia:system_info(local_tables)),
-    Tabs = lists:filter(
-	     fun(T) -&gt;
-		     case mnesia:table_info(T, storage_type) of
-			 disc_copies -&gt; true;
-			 disc_only_copies -&gt; true;
-			 _ -&gt; false
-		     end
-	     end, Tabs1),
+    Tabs = get_local_tables(),
+    dump_to_textfile(File, Tabs).
+
+dump_to_textfile(File, Tabs) -&gt;
+    dump_to_textfile(mnesia:system_info(is_running), Tabs, file:open(File, [write])).
+dump_to_textfile(yes, Tabs, {ok, F}) -&gt;
     Defs = lists:map(
 	     fun(T) -&gt; {T, [{record_name, mnesia:table_info(T, record_name)},
 			    {attributes, mnesia:table_info(T, attributes)}]}
@@ -350,10 +390,10 @@ dump_to_textfile(yes, {ok, F}) -&gt;
     io:format(F, &quot;~p.~n&quot;, [{tables, Defs}]),
     lists:foreach(fun(T) -&gt; dump_tab(F, T) end, Tabs),
     file:close(F);
-dump_to_textfile(_, {ok, F}) -&gt;
+dump_to_textfile(_, _, {ok, F}) -&gt;
     file:close(F),
     {error, mnesia_not_running};
-dump_to_textfile(_, {error, Reason}) -&gt;
+dump_to_textfile(_, _, {error, Reason}) -&gt;
     {error, Reason}.
 
 dump_tab(F, T) -&gt;</diff>
      <filename>src/ejabberd_admin.erl</filename>
    </modified>
    <modified>
      <diff>@@ -84,7 +84,7 @@ check_password(User, Server, Password) -&gt;
     end.
 
 %% @doc Check if the user and password can login in server.
-%% @spec (User::string(), Server::string(), Password::string()
+%% @spec (User::string(), Server::string(), Password::string(),
 %%        Digest::string(), DigestGen::function()) -&gt;
 %%     true | false
 check_password(User, Server, Password, Digest, DigestGen) -&gt;</diff>
      <filename>src/ejabberd_auth.erl</filename>
    </modified>
    <modified>
      <diff>@@ -49,16 +49,27 @@
 -include(&quot;ejabberd.hrl&quot;).
 
 -record(passwd, {us, password}).
+-record(reg_users_counter, {vhost, count}).
 
 %%%----------------------------------------------------------------------
 %%% API
 %%%----------------------------------------------------------------------
-start(_Host) -&gt;
+start(Host) -&gt;
     mnesia:create_table(passwd, [{disc_copies, [node()]},
 				 {attributes, record_info(fields, passwd)}]),
+    mnesia:create_table(reg_users_counter,
+			[{ram_copies, [node()]},
+			 {attributes, record_info(fields, reg_users_counter)}]),
     update_table(),
+    update_reg_users_counter_table(Host),
     ok.
 
+update_reg_users_counter_table(Server) -&gt;
+    Set = get_vh_registered_users(Server),
+    Size = length(Set),
+    LServer = jlib:nameprep(Server),
+    set_vh_registered_users_counter(LServer, Size).
+
 plain_password_required() -&gt;
     false.
 
@@ -126,6 +137,7 @@ try_register(User, Server, Password) -&gt;
 			    [] -&gt;
 				mnesia:write(#passwd{us = US,
 						     password = Password}),
+				inc_vh_registered_users_counter(LServer),
 				ok;
 			    [_E] -&gt;
 				exists
@@ -193,8 +205,17 @@ get_vh_registered_users(Server, _) -&gt;
     get_vh_registered_users(Server).
 
 get_vh_registered_users_number(Server) -&gt;
-    Set = get_vh_registered_users(Server),
-    length(Set).
+    LServer = jlib:nameprep(Server),
+    Query = mnesia:dirty_select(
+		reg_users_counter,
+		[{#reg_users_counter{vhost = LServer, count = '$1'},
+		  [],
+		  ['$1']}]),
+    case Query of
+	[Count] -&gt;
+	    Count;
+	_ -&gt; 0
+    end.
 
 get_vh_registered_users_number(Server, [{prefix, Prefix}]) when is_list(Prefix) -&gt;
     Set = [{U, S} || {U, S} &lt;- get_vh_registered_users(Server), lists:prefix(Prefix, U)],
@@ -203,6 +224,40 @@ get_vh_registered_users_number(Server, [{prefix, Prefix}]) when is_list(Prefix)
 get_vh_registered_users_number(Server, _) -&gt;
     get_vh_registered_users_number(Server).
 
+inc_vh_registered_users_counter(LServer) -&gt;
+    F = fun() -&gt;
+		case mnesia:wread({reg_users_counter, LServer}) of
+		    [C] -&gt;
+			Count = C#reg_users_counter.count + 1,
+			C2 = C#reg_users_counter{count = Count},
+			mnesia:write(C2);
+		    _ -&gt;
+			mnesia:write(#reg_users_counter{vhost = LServer,
+						      count = 1})
+		end
+	end,
+    mnesia:sync_dirty(F).
+
+dec_vh_registered_users_counter(LServer) -&gt;
+    F = fun() -&gt;
+		case mnesia:wread({reg_users_counter, LServer}) of
+		    [C] -&gt;
+			Count = C#reg_users_counter.count - 1,
+			C2 = C#reg_users_counter{count = Count},
+			mnesia:write(C2);
+		    _ -&gt;
+			error
+		end
+	end,
+    mnesia:sync_dirty(F).
+
+set_vh_registered_users_counter(LServer, Count) -&gt;
+    F = fun() -&gt;
+		mnesia:write(#reg_users_counter{vhost = LServer,
+						count = Count})
+	end,
+    mnesia:sync_dirty(F).
+
 get_password(User, Server) -&gt;
     LUser = jlib:nodeprep(User),
     LServer = jlib:nameprep(Server),
@@ -247,7 +302,8 @@ remove_user(User, Server) -&gt;
     LServer = jlib:nameprep(Server),
     US = {LUser, LServer},
     F = fun() -&gt;
-		mnesia:delete({passwd, US})
+		mnesia:delete({passwd, US}),
+		dec_vh_registered_users_counter(LServer)
         end,
     mnesia:transaction(F),
 	ok.
@@ -262,6 +318,7 @@ remove_user(User, Server, Password) -&gt;
 		case mnesia:read({passwd, US}) of
 		    [#passwd{password = Password}] -&gt;
 			mnesia:delete({passwd, US}),
+			dec_vh_registered_users_counter(LServer),
 			ok;
 		    [_] -&gt;
 			not_allowed;</diff>
      <filename>src/ejabberd_auth_internal.erl</filename>
    </modified>
    <modified>
      <diff>@@ -32,6 +32,7 @@
 
 %% External exports
 -export([start/2,
+	 stop/1,
 	 start_link/2,
 	 send_text/2,
 	 send_element/2,
@@ -151,6 +152,9 @@ socket_type() -&gt;
 get_presence(FsmRef) -&gt;
     gen_fsm:sync_send_all_state_event(FsmRef, {get_presence}, 1000).
 
+stop(FsmRef) -&gt;
+    gen_fsm:send_event(FsmRef, closed).
+
 %%%----------------------------------------------------------------------
 %%% Callback functions from gen_fsm
 %%%----------------------------------------------------------------------
@@ -322,13 +326,15 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) -&gt;
 				_ -&gt;
 				    case StateData#state.resource of
 					&quot;&quot; -&gt;
+					    RosterVersioningFeature = ejabberd_hooks:run_fold(roster_get_versioning_feature, Server, [], [Server]),
+				            StreamFeatures = [{xmlelement, &quot;bind&quot;,
+						 [{&quot;xmlns&quot;, ?NS_BIND}], []},
+						{xmlelement, &quot;session&quot;,
+						 [{&quot;xmlns&quot;, ?NS_SESSION}], []} | RosterVersioningFeature],
 					    send_element(
 					      StateData,
 					      {xmlelement, &quot;stream:features&quot;, [],
-					       [{xmlelement, &quot;bind&quot;,
-						 [{&quot;xmlns&quot;, ?NS_BIND}], []},
-						{xmlelement, &quot;session&quot;,
-						 [{&quot;xmlns&quot;, ?NS_SESSION}], []}]}),
+					       StreamFeatures}),
 					    fsm_next_state(wait_for_bind,
 						       StateData#state{
 							 server = Server,
@@ -1441,7 +1447,13 @@ process_presence_probe(From, To, StateData) -&gt;
 		andalso ?SETS:is_element(LFrom, StateData#state.pres_a),
 	    if
 		Cond1 -&gt;
-		    Packet = StateData#state.pres_last,
+		    Timestamp = StateData#state.pres_timestamp,
+		    Packet = xml:append_subtags(
+			       StateData#state.pres_last,
+			       %% To is the one sending the presence (the target of the probe)
+			       [jlib:timestamp_to_xml(Timestamp, utc, To, &quot;&quot;),
+				%% TODO: Delete the next line once XEP-0091 is Obsolete
+				jlib:timestamp_to_xml(Timestamp)]),
 		    case ejabberd_hooks:run_fold(
 			   privacy_check_packet, StateData#state.server,
 			   allow,
@@ -1495,6 +1507,7 @@ presence_update(From, Packet, StateData) -&gt;
 	    presence_broadcast(StateData, From, StateData#state.pres_a, Packet),
 	    presence_broadcast(StateData, From, StateData#state.pres_i, Packet),
 	    StateData#state{pres_last = undefined,
+			    pres_timestamp = undefined,
 			    pres_a = ?SETS:new(),
 			    pres_i = ?SETS:new(),
 			    pres_invis = false};
@@ -1511,6 +1524,7 @@ presence_update(From, Packet, StateData) -&gt;
 					   StateData#state.pres_i,
 					   Packet),
 			S1 = StateData#state{pres_last = undefined,
+					     pres_timestamp = undefined,
 					     pres_a = ?SETS:new(),
 					     pres_i = ?SETS:new(),
 					     pres_invis = true},
@@ -1539,6 +1553,7 @@ presence_update(From, Packet, StateData) -&gt;
 				  get_priority_from_presence(OldPresence)
 			  end,
 	    NewPriority = get_priority_from_presence(Packet),
+	    Timestamp = calendar:now_to_universal_time(now()),
 	    update_priority(NewPriority, Packet, StateData),
 	    FromUnavail = (StateData#state.pres_last == undefined) or
 		StateData#state.pres_invis,
@@ -1557,7 +1572,8 @@ presence_update(From, Packet, StateData) -&gt;
 			end,
 			presence_broadcast_first(
 			  From, StateData#state{pres_last = Packet,
-						pres_invis = false
+						pres_invis = false,
+						pres_timestamp = Timestamp
 					       }, Packet);
 		    true -&gt;
 			presence_broadcast_to_trusted(StateData,
@@ -1571,7 +1587,8 @@ presence_update(From, Packet, StateData) -&gt;
 				ok
 			end,
 			StateData#state{pres_last = Packet,
-					pres_invis = false
+					pres_invis = false,
+					pres_timestamp = Timestamp
 				       }
 		end,
 	    NewState</diff>
      <filename>src/ejabberd_c2s.erl</filename>
    </modified>
    <modified>
      <diff>@@ -239,7 +239,10 @@ process(_Handlers, #request{method='POST', q=Q, lang=Lang, path=[_, Id]}) -&gt;
 	    ejabberd_web:error(not_allowed);
 	captcha_not_found -&gt;
 	    ejabberd_web:error(not_found)
-    end.
+    end;
+
+process(_Handlers, _Request) -&gt;
+    ejabberd_web:error(not_found).
 
 
 %%====================================================================</diff>
      <filename>src/ejabberd_captcha.erl</filename>
    </modified>
    <modified>
      <diff>@@ -238,7 +238,7 @@ register_commands(Commands) -&gt;
 		  true -&gt;
 		      ok;
 		  false -&gt;
-		      ?WARNING_MSG(&quot;This command is already defined:~n~p&quot;, [Command])
+		      ?DEBUG(&quot;This command is already defined:~n~p&quot;, [Command])
 	      end
       end,
       Commands).
@@ -290,12 +290,12 @@ get_command_definition(Name) -&gt;
 execute_command(Name, Arguments) -&gt;
     execute_command([], noauth, Name, Arguments).
 
-%% @spec (AccessCommands, AuthList, Name::atom(), Arguments) -&gt; ResultTerm | {error, Error}
+%% @spec (AccessCommands, Auth, Name::atom(), Arguments) -&gt; ResultTerm | {error, Error}
 %% where 
 %%       AccessCommands = [{Access, CommandNames, Arguments}]
-%%       Auth = {user, string()}, {server, string()}, {password, string()} | noauth
+%%       Auth = {User::string(), Server::string(), Password::string()} | noauth
 %%       Method = atom()
-%%       Arguments = [...]
+%%       Arguments = [any()]
 %%       Error = command_unknown | account_unprivileged | invalid_account_data | no_auth_provided
 execute_command(AccessCommands, Auth, Name, Arguments) -&gt;
     case ets:lookup(ejabberd_commands, Name) of
@@ -346,14 +346,15 @@ get_tags_commands() -&gt;
 %% Access verification
 %% -----------------------------
 
-%% At least one AccessCommand must be satisfied
 %% @spec (AccessCommands, Auth, Method, Command, Arguments) -&gt; ok
 %% where 
 %%       AccessCommands =  [ {Access, CommandNames, Arguments} ]
-%%       Auth = {User::string(), Server::string(), Password::string()}
+%%       Auth = {User::string(), Server::string(), Password::string()} | noauth
 %%       Method = atom()
-%%       Arguments = [...]
-%% It may throw {error, Error} where
+%%       Arguments = [any()]
+%% @doc Check access is allowed to that command.
+%% At least one AccessCommand must be satisfied.
+%% It may throw {error, Error} where:
 %% Error = account_unprivileged | invalid_account_data | no_auth_provided
 check_access_commands([], _Auth, _Method, _Command, _Arguments) -&gt;
     ok;</diff>
      <filename>src/ejabberd_commands.erl</filename>
    </modified>
    <modified>
      <diff>@@ -331,9 +331,9 @@ process_term(Term, State) -&gt;
 	    Listeners2 =
 		lists:map(
 		  fun({PortIP, Module, Opts}) -&gt;
-			  {Port, IPT, _, _, OptsClean} =
+			  {Port, IPT, _, _, Proto, OptsClean} =
 			      ejabberd_listener:parse_listener_portip(PortIP, Opts),
-			  {{Port, IPT}, Module, OptsClean}
+			  {{Port, IPT, Proto}, Module, OptsClean}
 		  end,
 		  Listeners),
 	    add_option(listen, Listeners2, State);
@@ -343,6 +343,8 @@ process_term(Term, State) -&gt;
 	    add_option(outgoing_s2s_port, Port, State);
 	{outgoing_s2s_options, Methods, Timeout} -&gt;
 	    add_option(outgoing_s2s_options, {Methods, Timeout}, State);
+        {s2s_dns_options, PropList} -&gt;
+            add_option(s2s_dns_options, PropList, State);
 	{s2s_use_starttls, Port} -&gt;
 	    add_option(s2s_use_starttls, Port, State);
 	{s2s_certfile, CertFile} -&gt;</diff>
      <filename>src/ejabberd_config.erl</filename>
    </modified>
    <modified>
      <diff>@@ -275,7 +275,7 @@ try_call_command(Args, Auth, AccessCommands) -&gt;
 	    {io_lib:format(&quot;Problem '~p ~p' occurred executing the command.~nStacktrace: ~p&quot;, [A, Why, Stack]), ?STATUS_ERROR}
     end.
 
-%% @spec (Args::[string()], Auth) -&gt; string() | integer() | {string(), integer()} | {error, ErrorType}
+%% @spec (Args::[string()], Auth, AccessCommands) -&gt; string() | integer() | {string(), integer()} | {error, ErrorType}
 call_command([CmdString | Args], Auth, AccessCommands) -&gt;
     {ok, CmdStringU, _} = regexp:gsub(CmdString, &quot;-&quot;, &quot;_&quot;),
     Command = list_to_atom(CmdStringU),</diff>
      <filename>src/ejabberd_ctl.erl</filename>
    </modified>
    <modified>
      <diff>@@ -96,8 +96,8 @@ start_dependent(Port, Module, Opts) -&gt;
 	    {error, Error}
     end.
 
-init(PortIP, Module, Opts1) -&gt;
-    {Port, IPT, IPS, IPV, OptsClean} = parse_listener_portip(PortIP, Opts1),
+init(PortIP, Module, RawOpts) -&gt;
+    {Port, IPT, IPS, IPV, Proto, OptsClean} = parse_listener_portip(PortIP, RawOpts),
     %% The first inet|inet6 and the last {ip, _} work,
     %% so overriding those in Opts
     Opts = [IPV | OptsClean] ++ [{ip, IPT}],
@@ -106,6 +106,26 @@ init(PortIP, Module, Opts1) -&gt;
 			       (inet) -&gt; true;
 			       (_) -&gt; false
 			    end, Opts),
+    if Proto == udp -&gt;
+	    init_udp(PortIP, Module, Opts, SockOpts, Port, IPS);
+       true -&gt;
+	    init_tcp(PortIP, Module, Opts, SockOpts, Port, IPS)
+    end.
+
+init_udp(PortIP, Module, Opts, SockOpts, Port, IPS) -&gt;
+    case gen_udp:open(Port, [binary,
+			     {active, false},
+			     {reuseaddr, true} |
+			     SockOpts]) of
+	{ok, Socket} -&gt;
+	    %% Inform my parent that this port was opened succesfully
+	    proc_lib:init_ack({ok, self()}),
+	    udp_recv(Socket, Module, Opts);
+	{error, Reason} -&gt;
+	    socket_error(Reason, PortIP, Module, SockOpts, Port, IPS)
+    end.
+
+init_tcp(PortIP, Module, Opts, SockOpts, Port, IPS) -&gt;
     Res = gen_tcp:listen(Port, [binary,
 				{packet, 0},
 				{active, false},
@@ -116,19 +136,12 @@ init(PortIP, Module, Opts1) -&gt;
 				SockOpts]),
     case Res of
 	{ok, ListenSocket} -&gt;
-		%% Inform my parent that this port was opened succesfully
-		proc_lib:init_ack({ok, self()}),
-		%% And now start accepting connection attempts
+	    %% Inform my parent that this port was opened succesfully
+	    proc_lib:init_ack({ok, self()}),
+	    %% And now start accepting connection attempts
 	    accept(ListenSocket, Module, Opts);
 	{error, Reason} -&gt;
-	    ReasonT = case Reason of
-			  eaddrnotavail -&gt; &quot;IP address not available: &quot; ++ IPS;
-			  eaddrinuse -&gt; &quot;IP address and port number already used: &quot;++IPS++&quot; &quot;++integer_to_list(Port);
-			  _ -&gt; atom_to_list(Reason)
-		      end,
-	    ?ERROR_MSG(&quot;Failed to open socket:~n  ~p~nReason: ~s&quot;,
-		       [{Port, Module, SockOpts}, ReasonT]),
-	    throw({Reason, PortIP})
+	    socket_error(Reason, PortIP, Module, SockOpts, Port, IPS)
     end.
 
 %% @spec (PortIP, Opts) -&gt; {Port, IPT, IPS, IPV, OptsClean}
@@ -153,24 +166,34 @@ parse_listener_portip(PortIP, Opts) -&gt;
 			      true -&gt; {inet6, Opts2 -- [inet6]};
 			      false -&gt; {inet, Opts2}
 			  end,
-    {Port, IPT, IPS} = case PortIP of
-			   P when is_integer(P) -&gt;
-			       T = get_ip_tuple(IPOpt, IPVOpt),
-			       S = inet_parse:ntoa(T),
-			       {P, T, S};
-			   {P, T} when is_integer(P) and is_tuple(T) -&gt;
-			       S = inet_parse:ntoa(T),
-			       {P, T, S};
-			   {P, S} when is_integer(P) and is_list(S) -&gt;
-			       [S | _] = string:tokens(S, &quot;/&quot;),
-			       {ok, T} = inet_parse:address(S),
-			       {P, T, S}
-		       end,
+    {Port, IPT, IPS, Proto} =
+	case add_proto(PortIP, Opts) of
+	    {P, Prot} -&gt;
+		T = get_ip_tuple(IPOpt, IPVOpt),
+		S = inet_parse:ntoa(T),
+		{P, T, S, Prot};
+	    {P, T, Prot} when is_integer(P) and is_tuple(T) -&gt;
+		S = inet_parse:ntoa(T),
+		{P, T, S, Prot};
+	    {P, S, Prot} when is_integer(P) and is_list(S) -&gt;
+		[S | _] = string:tokens(S, &quot;/&quot;),
+		{ok, T} = inet_parse:address(S),
+		{P, T, S, Prot}
+	end,
     IPV = case size(IPT) of
 	      4 -&gt; inet;
 	      8 -&gt; inet6
 	  end,
-    {Port, IPT, IPS, IPV, OptsClean}.
+    {Port, IPT, IPS, IPV, Proto, OptsClean}.
+
+add_proto(Port, Opts) when is_integer(Port) -&gt;
+    {Port, get_proto(Opts)};
+add_proto({Port, Proto}, _Opts) when is_atom(Proto) -&gt;
+    {Port, normalize_proto(Proto)};
+add_proto({Port, Addr}, Opts) -&gt;
+    {Port, Addr, get_proto(Opts)};
+add_proto({Port, Addr, Proto}, _Opts) -&gt;
+    {Port, Addr, normalize_proto(Proto)}.
 
 strip_ip_option(Opts) -&gt;
     {IPL, OptsNoIP} = lists:partition(
@@ -215,6 +238,24 @@ accept(ListenSocket, Module, Opts) -&gt;
 	    accept(ListenSocket, Module, Opts)
     end.
 
+udp_recv(Socket, Module, Opts) -&gt;
+    case gen_udp:recv(Socket, 0) of
+	{ok, {Addr, Port, Packet}} -&gt;
+	    case catch Module:udp_recv(Socket, Addr, Port, Packet, Opts) of
+		{'EXIT', Reason} -&gt;
+		    ?ERROR_MSG(&quot;failed to process UDP packet:~n&quot;
+			       &quot;** Source: {~p, ~p}~n&quot;
+			       &quot;** Reason: ~p~n** Packet: ~p&quot;,
+			       [Addr, Port, Reason, Packet]);
+		_ -&gt;
+		    ok
+	    end,
+	    udp_recv(Socket, Module, Opts);
+	{error, Reason} -&gt;
+	    ?ERROR_MSG(&quot;unexpected UDP error: ~s&quot;, [format_error(Reason)]),
+	    throw({error, Reason})
+    end.
+
 %% @spec (Port, Module, Opts) -&gt; {ok, Pid} | {error, Error}
 start_listener(Port, Module, Opts) -&gt;
     case start_listener2(Port, Module, Opts) of
@@ -280,7 +321,9 @@ stop_listener(PortIP, _Module) -&gt;
 %%      Opts = [IPV | {ip, IPT} | atom() | tuple()]
 %% @doc Add a listener and store in config if success
 add_listener(PortIP, Module, Opts) -&gt;
-    case start_listener(PortIP, Module, Opts) of
+    {Port, IPT, _, _, Proto, _} = parse_listener_portip(PortIP, Opts),
+    PortIP1 = {Port, IPT, Proto},
+    case start_listener(PortIP1, Module, Opts) of
 	{ok, _Pid} -&gt;
 	    Ports = case ejabberd_config:get_local_option(listen) of
 			undefined -&gt;
@@ -288,33 +331,39 @@ add_listener(PortIP, Module, Opts) -&gt;
 			Ls -&gt;
 			    Ls
 		    end,
-	    Ports1 = lists:keydelete(PortIP, 1, Ports),
-	    Ports2 = [{PortIP, Module, Opts} | Ports1],
+	    Ports1 = lists:keydelete(PortIP1, 1, Ports),
+	    Ports2 = [{PortIP1, Module, Opts} | Ports1],
 	    ejabberd_config:add_local_option(listen, Ports2),
-		ok;
+	    ok;
 	{error, {already_started, _Pid}} -&gt;
 	    {error, {already_started, PortIP}};
 	{error, Error} -&gt;
 	    {error, Error}
     end.
-  
-%% @spec (PortIP, Module) -&gt; ok
+
+delete_listener(PortIP, Module) -&gt;
+    delete_listener(PortIP, Module, []).
+
+%% @spec (PortIP, Module, Opts) -&gt; ok
 %% where
 %%      PortIP = {Port, IPT | IPS}
 %%      Port = integer()
 %%      IPT = tuple()
 %%      IPS = string()
 %%      Module = atom()
-delete_listener(PortIP, Module) -&gt;
+%%      Opts = [term()]
+delete_listener(PortIP, Module, Opts) -&gt;
+    {Port, IPT, _, _, Proto, _} = parse_listener_portip(PortIP, Opts),
+    PortIP1 = {Port, IPT, Proto},
     Ports = case ejabberd_config:get_local_option(listen) of
 		undefined -&gt;
 		    [];
 		Ls -&gt;
 		    Ls
 	    end,
-    Ports1 = lists:keydelete(PortIP, 1, Ports),
+    Ports1 = lists:keydelete(PortIP1, 1, Ports),
     ejabberd_config:add_local_option(listen, Ports1),
-    stop_listener(PortIP, Module).
+    stop_listener(PortIP1, Module).
 
 is_frontend({frontend, _Module}) -&gt; true;
 is_frontend(_) -&gt; false.
@@ -368,3 +417,41 @@ certfile_readable(Opts) -&gt;
 		false -&gt; {false, Path}
 	    end
     end.
+
+get_proto(Opts) -&gt;
+    case proplists:get_value(proto, Opts) of
+	undefined -&gt;
+	    tcp;
+	Proto -&gt;
+	    normalize_proto(Proto)
+    end.
+
+normalize_proto(tcp) -&gt; tcp;
+normalize_proto(udp) -&gt; udp;
+normalize_proto(UnknownProto) -&gt;
+    ?WARNING_MSG(&quot;There is a problem in the configuration: &quot;
+		 &quot;~p is an unknown IP protocol. Using tcp as fallback&quot;,
+		 [UnknownProto]),
+    tcp.
+
+socket_error(Reason, PortIP, Module, SockOpts, Port, IPS) -&gt;
+    ReasonT = case Reason of
+		  eaddrnotavail -&gt;
+		      &quot;IP address not available: &quot; ++ IPS;
+		  eaddrinuse -&gt;
+		      &quot;IP address and port number already used: &quot;
+			  ++IPS++&quot; &quot;++integer_to_list(Port);
+		  _ -&gt;
+		      format_error(Reason)
+	      end,
+    ?ERROR_MSG(&quot;Failed to open socket:~n  ~p~nReason: ~s&quot;,
+	       [{Port, Module, SockOpts}, ReasonT]),
+    throw({Reason, PortIP}).
+
+format_error(Reason) -&gt;
+    case inet:format_error(Reason) of
+	&quot;unknown POSIX error&quot; -&gt;
+	    atom_to_list(Reason);
+	ReasonStr -&gt;
+	    ReasonStr
+    end.</diff>
      <filename>src/ejabberd_listener.erl</filename>
    </modified>
    <modified>
      <diff>@@ -33,6 +33,8 @@
 -export([start_link/0]).
 
 -export([route/3,
+	 route_iq/4,
+	 process_iq_reply/3,
 	 register_iq_handler/4,
 	 register_iq_handler/5,
 	 register_iq_response_handler/4,
@@ -51,10 +53,13 @@
 
 -record(state, {}).
 
--record(iq_response, {id, module, function}).
+-record(iq_response, {id, module, function, timer}).
 
 -define(IQTABLE, local_iqtable).
 
+%% This value is used in SIP and Megaco for a transaction lifetime.
+-define(IQ_TIMEOUT, 32000).
+
 %%====================================================================
 %% API
 %%====================================================================
@@ -89,36 +94,24 @@ process_iq(From, To, Packet) -&gt;
 		    ejabberd_router:route(To, From, Err)
 	    end;
 	reply -&gt;
-	    process_iq_reply(From, To, Packet);
+	    IQReply = jlib:iq_query_or_response_info(Packet),
+	    process_iq_reply(From, To, IQReply);
 	_ -&gt;
 	    Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST),
 	    ejabberd_router:route(To, From, Err),
 	    ok
     end.
 
-process_iq_reply(From, To, Packet) -&gt;
-    IQ = jlib:iq_query_or_response_info(Packet),
-    #iq{id = ID} = IQ,
-    case catch mnesia:dirty_read(iq_response, ID) of
-	[] -&gt;
+process_iq_reply(From, To, #iq{id = ID} = IQ) -&gt;
+    case get_iq_callback(ID) of
+	{ok, undefined, Function} -&gt;
+	    Function(IQ),
+	    ok;
+	{ok, Module, Function} -&gt;
+	    Module:Function(From, To, IQ),
 	    ok;
 	_ -&gt;
-	    F = fun() -&gt;
-			case mnesia:read({iq_response, ID}) of
-			    [] -&gt;
-				nothing;
-			    [#iq_response{module = Module,
-					  function = Function}] -&gt;
-				mnesia:delete({iq_response, ID}),
-				{Module, Function}
-			end
-		end,
-	    case mnesia:transaction(F) of
-		{atomic, {Module, Function}} -&gt;
-		    Module:Function(From, To, IQ);
-		_ -&gt;
-		    ok
-	    end
+	    nothing
     end.
 
 route(From, To, Packet) -&gt;
@@ -130,8 +123,23 @@ route(From, To, Packet) -&gt;
 	    ok
     end.
 
-register_iq_response_handler(Host, ID, Module, Fun) -&gt;
-    ejabberd_local ! {register_iq_response_handler, Host, ID, Module, Fun}.
+route_iq(From, To, #iq{type = Type} = IQ, F) when is_function(F) -&gt;
+    Packet = if Type == set; Type == get -&gt;
+		     ID = randoms:get_string(),
+		     Host = From#jid.lserver,
+		     register_iq_response_handler(Host, ID, undefined, F),
+		     jlib:iq_to_xml(IQ#iq{id = ID});
+		true -&gt;
+		     jlib:iq_to_xml(IQ)
+	     end,
+    ejabberd_router:route(From, To, Packet).
+
+register_iq_response_handler(_Host, ID, Module, Function) -&gt;
+    TRef = erlang:start_timer(?IQ_TIMEOUT, ejabberd_local, ID),
+    mnesia:dirty_write(#iq_response{id = ID,
+				    module = Module,
+				    function = Function,
+				    timer = TRef}).
 
 register_iq_handler(Host, XMLNS, Module, Fun) -&gt;
     ejabberd_local ! {register_iq_handler, Host, XMLNS, Module, Fun}.
@@ -139,8 +147,9 @@ register_iq_handler(Host, XMLNS, Module, Fun) -&gt;
 register_iq_handler(Host, XMLNS, Module, Fun, Opts) -&gt;
     ejabberd_local ! {register_iq_handler, Host, XMLNS, Module, Fun, Opts}.
 
-unregister_iq_response_handler(Host, ID) -&gt;
-    ejabberd_local ! {unregister_iq_response_handler, Host, ID}.
+unregister_iq_response_handler(_Host, ID) -&gt;
+    catch get_iq_callback(ID),
+    ok.
 
 unregister_iq_handler(Host, XMLNS) -&gt;
     ejabberd_local ! {unregister_iq_handler, Host, XMLNS}.
@@ -172,6 +181,7 @@ init([]) -&gt;
 				 ?MODULE, bounce_resource_packet, 100)
       end, ?MYHOSTS),
     catch ets:new(?IQTABLE, [named_table, public]),
+    update_table(),
     mnesia:create_table(iq_response,
 			[{ram_copies, [node()]},
 			 {attributes, record_info(fields, iq_response)}]),
@@ -215,12 +225,6 @@ handle_info({route, From, To, Packet}, State) -&gt;
 	    ok
     end,
     {noreply, State};
-handle_info({register_iq_response_handler, _Host, ID, Module, Function}, State) -&gt;
-    mnesia:dirty_write(#iq_response{id = ID, module = Module, function = Function}),
-    {noreply, State};
-handle_info({unregister_iq_response_handler, _Host, ID}, State) -&gt;
-    mnesia:dirty_delete({iq_response, ID}),
-    {noreply, State};
 handle_info({register_iq_handler, Host, XMLNS, Module, Function}, State) -&gt;
     ets:insert(?IQTABLE, {{XMLNS, Host}, Module, Function}),
     catch mod_disco:register_feature(Host, XMLNS),
@@ -252,6 +256,9 @@ handle_info(refresh_iq_handlers, State) -&gt;
 	      end
       end, ets:tab2list(?IQTABLE)),
     {noreply, State};
+handle_info({timeout, _TRef, ID}, State) -&gt;
+    process_iq_timeout(ID),
+    {noreply, State};
 handle_info(_Info, State) -&gt;
     {noreply, State}.
 
@@ -305,3 +312,52 @@ do_route(From, To, Packet) -&gt;
 	    end
 	end.
 
+update_table() -&gt;
+    case catch mnesia:table_info(iq_response, attributes) of
+	[id, module, function] -&gt;
+	    mnesia:delete_table(iq_response);
+	[id, module, function, timer] -&gt;
+	    ok;
+	{'EXIT', _} -&gt;
+	    ok
+    end.
+
+get_iq_callback(ID) -&gt;
+    case mnesia:dirty_read(iq_response, ID) of
+	[#iq_response{module = Module, timer = TRef,
+		      function = Function}] -&gt;
+	    cancel_timer(TRef),
+	    mnesia:dirty_delete(iq_response, ID),
+	    {ok, Module, Function};
+	_ -&gt;
+	    error
+    end.
+
+process_iq_timeout(ID) -&gt;
+    spawn(fun process_iq_timeout/0) ! ID.
+
+process_iq_timeout() -&gt;
+    receive
+	ID -&gt;
+	    case get_iq_callback(ID) of
+		{ok, undefined, Function} -&gt;
+		    Function(timeout);
+		_ -&gt;
+		    ok
+	    end
+    after 5000 -&gt;
+	    ok
+    end.
+
+cancel_timer(TRef) -&gt;
+    case erlang:cancel_timer(TRef) of
+	false -&gt;
+	    receive
+                {timeout, TRef, _} -&gt;
+                    ok
+            after 0 -&gt;
+                    ok
+            end;
+        _ -&gt;
+            ok
+    end.</diff>
      <filename>src/ejabberd_local.erl</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,7 @@
 -module(ejabberd_loglevel).
 -author('mickael.remond@process-one.net').
 
--export([set/1]).
+-export([set/1, get/0]).
 
 -include(&quot;ejabberd.hrl&quot;).
 
@@ -46,6 +46,14 @@
                     ,{5, debug, &quot;Debug&quot;}
                     ]).
 
+get() -&gt;
+    Level = ejabberd_logger:get(),
+    case lists:keysearch(Level, 1, ?LOG_LEVELS) of
+        {value, Result} -&gt; Result;
+        _ -&gt; erlang:error({no_such_loglevel, Level})
+    end.
+
+
 set(LogLevel) when is_atom(LogLevel) -&gt;
     set(level_to_integer(LogLevel));
 set(Loglevel) when is_integer(Loglevel) -&gt;
@@ -67,7 +75,7 @@ level_to_integer(Level) -&gt;
 %% --------------------------------------------------------------
 %% Code of the ejabberd logger, dynamically compiled and loaded
 %% This allows to dynamically change log level while keeping a
-%% very efficient code.        
+%% very efficient code.
 ejabberd_logger_src(Loglevel) -&gt;
     L = integer_to_list(Loglevel),
     &quot;-module(ejabberd_logger).
@@ -77,7 +85,10 @@ ejabberd_logger_src(Loglevel) -&gt;
              info_msg/4,
              warning_msg/4,
              error_msg/4,
-             critical_msg/4]).
+             critical_msg/4,
+             get/0]).
+
+   get() -&gt; &quot;++ L ++&quot;.
 
     %% Helper functions
     debug_msg(Module, Line, Format, Args) when &quot; ++ L ++ &quot; &gt;= 5 -&gt;</diff>
      <filename>src/ejabberd_loglevel.erl</filename>
    </modified>
    <modified>
      <diff>@@ -532,6 +532,14 @@ handle_sync_event(get_state_infos, _From, StateName, StateData) -&gt;
 		  catch
 		      _:_ -&gt; {unknown,unknown}
 		  end,
+    Domains =	case StateData#state.authenticated of
+		    true -&gt; 
+			[StateData#state.auth_domain];
+		    false -&gt;
+			Connections = StateData#state.connections,
+			[D || {{D, _}, established} &lt;- 
+			    dict:to_list(Connections)]
+		end,
     Infos = [
 	     {direction, in},
 	     {statename, StateName},
@@ -543,7 +551,8 @@ handle_sync_event(get_state_infos, _From, StateName, StateData) -&gt;
 	     {tls_options, StateData#state.tls_options},
 	     {authenticated, StateData#state.authenticated},
 	     {shaper, StateData#state.shaper},
-	     {sockmod, SockMod}
+	     {sockmod, SockMod},
+	     {domains, Domains}
 	    ],
     Reply = {state_infos, Infos},
     {reply,Reply,StateName,StateData};</diff>
      <filename>src/ejabberd_s2s_in.erl</filename>
    </modified>
    <modified>
      <diff>@@ -995,11 +995,7 @@ is_verify_res(_) -&gt;
 -include_lib(&quot;kernel/include/inet.hrl&quot;).
 
 get_addr_port(Server) -&gt;
-    Res = case inet_res:getbyname(&quot;_xmpp-server._tcp.&quot; ++ Server, srv) of
-	      {error, _Reason1} -&gt;
-		  inet_res:getbyname(&quot;_jabber._tcp.&quot; ++ Server, srv);
-	      {ok, _HEnt} = R -&gt; R
-	  end,
+    Res = srv_lookup(Server),
     case Res of
 	{error, Reason} -&gt;
 	    ?DEBUG(&quot;srv lookup of '~s' failed: ~p~n&quot;, [Server, Reason]),
@@ -1036,6 +1032,34 @@ get_addr_port(Server) -&gt;
 	    end
     end.
 
+srv_lookup(Server) -&gt;
+    Options = case ejabberd_config:get_local_option(s2s_dns_options) of
+                  L when is_list(L) -&gt; L;
+                  _ -&gt; []
+              end,
+    TimeoutMs = timer:seconds(proplists:get_value(timeout, Options, 10)),
+    Retries = proplists:get_value(retries, Options, 2),
+    srv_lookup(Server, TimeoutMs, Retries).
+
+%% XXX - this behaviour is suboptimal in the case that the domain
+%% has a &quot;_xmpp-server._tcp.&quot; but not a &quot;_jabber._tcp.&quot; record and
+%% we don't get a DNS reply for the &quot;_xmpp-server._tcp.&quot; lookup. In this
+%% case we'll give up when we get the &quot;_jabber._tcp.&quot; nxdomain reply.
+srv_lookup(_Server, _Timeout, Retries) when Retries &lt; 1 -&gt;
+    {error, timeout};
+srv_lookup(Server, Timeout, Retries) -&gt;
+    case inet_res:getbyname(&quot;_xmpp-server._tcp.&quot; ++ Server, srv, Timeout) of
+        {error, _Reason} -&gt;
+            case inet_res:getbyname(&quot;_jabber._tcp.&quot; ++ Server, srv, Timeout) of
+                {error, timeout} -&gt;
+                    ?ERROR_MSG(&quot;Couldn't resolve SRV records for ~p via nameservers ~p.&quot;,
+                               [Server, inet_db:res_option(nameserver)]),
+                    srv_lookup(Server, Timeout, Retries - 1);
+                R -&gt; R
+            end;
+        {ok, _HEnt} = R -&gt; R
+    end.
+
 test_get_addr_port(Server) -&gt;
     lists:foldl(
       fun(_, Acc) -&gt;</diff>
      <filename>src/ejabberd_s2s_out.erl</filename>
    </modified>
    <modified>
      <diff>@@ -43,6 +43,7 @@
 	 dirty_get_sessions_list/0,
 	 dirty_get_my_sessions_list/0,
 	 get_vh_session_list/1,
+	 get_vh_session_number/1,
 	 register_iq_handler/4,
 	 register_iq_handler/5,
 	 unregister_iq_handler/2,
@@ -64,6 +65,7 @@
 -include(&quot;mod_privacy.hrl&quot;).
 
 -record(session, {sid, usr, us, priority, info}).
+-record(session_counter, {vhost, count}).
 -record(state, {}).
 
 %% default value for the maximum number of user connections
@@ -90,6 +92,7 @@ route(From, To, Packet) -&gt;
 
 open_session(SID, User, Server, Resource, Info) -&gt;
     set_session(SID, User, Server, Resource, undefined, Info),
+    inc_session_counter(jlib:nameprep(Server)),
     check_for_sessions_to_replace(User, Server, Resource),
     JID = jlib:make_jid(User, Server, Resource),
     ejabberd_hooks:run(sm_register_connection_hook, JID#jid.lserver,
@@ -101,7 +104,8 @@ close_session(SID, User, Server, Resource) -&gt;
 	[#session{info=I}] -&gt; I
     end,
     F = fun() -&gt;
-		mnesia:delete({session, SID})
+		mnesia:delete({session, SID}),
+		dec_session_counter(jlib:nameprep(Server))
 	end,
     mnesia:sync_dirty(F),
     JID = jlib:make_jid(User, Server, Resource),
@@ -214,6 +218,19 @@ get_vh_session_list(Server) -&gt;
 	[{'==', {element, 2, '$1'}, LServer}],
 	['$1']}]).
 
+get_vh_session_number(Server) -&gt;
+    LServer = jlib:nameprep(Server),
+    Query = mnesia:dirty_select(
+		session_counter,
+		[{#session_counter{vhost = LServer, count = '$1'},
+		  [],
+		  ['$1']}]),
+    case Query of
+	[Count] -&gt;
+	    Count;
+	_ -&gt; 0
+    end.
+    
 register_iq_handler(Host, XMLNS, Module, Fun) -&gt;
     ejabberd_sm ! {register_iq_handler, Host, XMLNS, Module, Fun}.
 
@@ -240,6 +257,9 @@ init([]) -&gt;
     mnesia:create_table(session,
 			[{ram_copies, [node()]},
 			 {attributes, record_info(fields, session)}]),
+    mnesia:create_table(session_counter,
+			[{ram_copies, [node()]},
+			 {attributes, record_info(fields, session_counter)}]),
     mnesia:add_table_index(session, usr),
     mnesia:add_table_index(session, us),
     mnesia:add_table_copy(session, node(), ram_copies),
@@ -361,6 +381,8 @@ clean_table_from_bad_node(Node) -&gt;
 			 [{'==', {node, '$1'}, Node}],
 			 ['$_']}]),
 		lists:foreach(fun(E) -&gt;
+				      {_, LServer} = E#session.us,
+				      dec_session_counter(LServer),
 				      mnesia:delete({session, E#session.sid})
 			      end, Es)
 	end,
@@ -641,6 +663,33 @@ get_max_user_sessions(LUser, Host) -&gt;
 	_ -&gt; ?MAX_USER_SESSIONS
     end.
 
+inc_session_counter(LServer) -&gt;
+    F = fun() -&gt;
+		case mnesia:wread({session_counter, LServer}) of
+		    [C] -&gt;
+			Count = C#session_counter.count + 1,
+			C2 = C#session_counter{count = Count},
+			mnesia:write(C2);
+		    _ -&gt;
+			mnesia:write(#session_counter{vhost = LServer,
+						      count = 1})
+		end
+	end,
+    mnesia:sync_dirty(F).
+
+dec_session_counter(LServer) -&gt;
+    F = fun() -&gt;
+		case mnesia:wread({session_counter, LServer}) of
+		    [C] -&gt;
+			Count = C#session_counter.count - 1,
+			C2 = C#session_counter{count = Count},
+			mnesia:write(C2);
+		    _ -&gt;
+			error
+		end
+	end,
+    mnesia:sync_dirty(F).
+
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 </diff>
      <filename>src/ejabberd_sm.erl</filename>
    </modified>
    <modified>
      <diff>@@ -169,6 +169,14 @@ init([]) -&gt;
 	 infinity,
 	 supervisor,
 	 [ejabberd_tmp_sup]},
+    STUNSupervisor =
+	{ejabberd_stun_sup,
+	 {ejabberd_tmp_sup, start_link,
+	  [ejabberd_stun_sup, ejabberd_stun]},
+	 permanent,
+	 infinity,
+	 supervisor,
+	 [ejabberd_tmp_sup]},
     {ok, {{one_for_one, 10, 1},
 	  [Hooks,
 	   NodeGroups,
@@ -186,6 +194,7 @@ init([]) -&gt;
 	   HTTPSupervisor,
 	   HTTPPollSupervisor,
 	   IQSupervisor,
+	   STUNSupervisor,
 	   FrontendSocketSupervisor,
 	   Listener]}}.
 </diff>
      <filename>src/ejabberd_sup.erl</filename>
    </modified>
    <modified>
      <diff>@@ -162,8 +162,9 @@ debug ()
     read foo
     echo &quot;&quot;
     $EXEC_CMD &quot;$ERL \
-      $NAME ${NODE}debug \
+      $NAME debug-${ERLANG_NODE} \
       -remsh $ERLANG_NODE \
+      -hidden \
       $ERLANG_OPTS $ARGS \&quot;$@\&quot;&quot;
 }
 
@@ -216,8 +217,9 @@ ctl ()
 {
     COMMAND=$@
     $EXEC_CMD &quot;$ERL \
-      $NAME ejabberdctl \
+      $NAME ctl-${ERLANG_NODE} \
       -noinput \
+      -hidden \
       -pa $EJABBERD_EBIN_PATH \
       -s ejabberd_ctl -extra $ERLANG_NODE $COMMAND&quot;
     result=$?</diff>
      <filename>src/ejabberdctl.template</filename>
    </modified>
    <modified>
      <diff>@@ -131,7 +131,14 @@ export_offline(Server, Output) -&gt;
 	      NewPacket = {xmlelement, Name, Attrs2,
 			   Els ++
 			   [jlib:timestamp_to_xml(
-			      calendar:now_to_universal_time(TimeStamp))]},
+			      calendar:now_to_universal_time(TimeStamp),
+			      utc,
+			      jlib:make_jid(&quot;&quot;, Server, &quot;&quot;),
+			      &quot;Offline Storage&quot;),
+			    %% TODO: Delete the next three lines once XEP-0091 is Obsolete
+			    jlib:timestamp_to_xml(
+			      calendar:now_to_universal_time(
+				TimeStamp))]},
 	      XML =
 		  ejabberd_odbc:escape(
 		    lists:flatten(</diff>
      <filename>src/ejd2odbc.erl</filename>
    </modified>
    <modified>
      <diff>@@ -55,8 +55,10 @@
 	 is_iq_request_type/1,
 	 iq_to_xml/1,
 	 parse_xdata_submit/1,
-	 timestamp_to_iso/1,
-	 timestamp_to_xml/1,
+	 timestamp_to_iso/1, % TODO: Remove once XEP-0091 is Obsolete
+	 timestamp_to_iso/2,
+	 timestamp_to_xml/4,
+	 timestamp_to_xml/1, % TODO: Remove once XEP-0091 is Obsolete
 	 now_to_utc_string/1,
 	 now_to_local_string/1,
 	 datetime_string_to_timestamp/1,
@@ -553,14 +555,45 @@ rsm_encode_count(Count, Arr)-&gt;
 i2l(I) when is_integer(I) -&gt; integer_to_list(I);
 i2l(L) when is_list(L)    -&gt; L.
 
+%% Timezone = utc | {Hours, Minutes}
+%% Hours = integer()
+%% Minutes = integer()
+timestamp_to_iso({{Year, Month, Day}, {Hour, Minute, Second}}, Timezone) -&gt;
+    Timestamp_string =
+	lists:flatten(
+	  io_lib:format(&quot;~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w&quot;,
+			[Year, Month, Day, Hour, Minute, Second])),
+    Timezone_string =
+	case Timezone of
+	    utc -&gt; &quot;Z&quot;;
+	    {TZh, TZm} -&gt;
+		Sign = case TZh &gt;= 0 of
+			   true -&gt; &quot;+&quot;;
+			   false -&gt; &quot;-&quot;
+		       end,
+		io_lib:format(&quot;~s~2..0w:~2..0w&quot;, [Sign, abs(TZh),TZm])
+	end,
+    {Timestamp_string, Timezone_string}.
+
 timestamp_to_iso({{Year, Month, Day}, {Hour, Minute, Second}}) -&gt;
     lists:flatten(
       io_lib:format(&quot;~4..0w~2..0w~2..0wT~2..0w:~2..0w:~2..0w&quot;,
 		    [Year, Month, Day, Hour, Minute, Second])).
 
+timestamp_to_xml(DateTime, Timezone, FromJID, Desc) -&gt;
+    {T_string, Tz_string} = timestamp_to_iso(DateTime, Timezone),
+    Text = [{xmlcdata, Desc}],
+    From = jlib:jid_to_string(FromJID),
+    {xmlelement, &quot;delay&quot;,
+     [{&quot;xmlns&quot;, ?NS_DELAY},
+      {&quot;from&quot;, From},
+      {&quot;stamp&quot;, T_string ++ Tz_string}],
+     Text}.
+
+%% TODO: Remove this function once XEP-0091 is Obsolete
 timestamp_to_xml({{Year, Month, Day}, {Hour, Minute, Second}}) -&gt;
     {xmlelement, &quot;x&quot;,
-     [{&quot;xmlns&quot;, ?NS_DELAY},
+     [{&quot;xmlns&quot;, ?NS_DELAY91},
       {&quot;stamp&quot;, lists:flatten(
 		  io_lib:format(&quot;~4..0w~2..0w~2..0wT~2..0w:~2..0w:~2..0w&quot;,
 				[Year, Month, Day, Hour, Minute, Second]))}],</diff>
      <filename>src/jlib.erl</filename>
    </modified>
    <modified>
      <diff>@@ -27,16 +27,20 @@
 -define(NS_REGISTER,     &quot;jabber:iq:register&quot;).
 -define(NS_SEARCH,       &quot;jabber:iq:search&quot;).
 -define(NS_ROSTER,       &quot;jabber:iq:roster&quot;).
+-define(NS_ROSTER_VER,   &quot;urn:xmpp:features:rosterver&quot;).
 -define(NS_PRIVACY,      &quot;jabber:iq:privacy&quot;).
 -define(NS_PRIVATE,      &quot;jabber:iq:private&quot;).
 -define(NS_VERSION,      &quot;jabber:iq:version&quot;).
--define(NS_TIME,         &quot;jabber:iq:time&quot;).
+-define(NS_TIME90,       &quot;jabber:iq:time&quot;). % TODO: Remove once XEP-0090 is Obsolete
+-define(NS_TIME,         &quot;urn:xmpp:time&quot;).
 -define(NS_LAST,         &quot;jabber:iq:last&quot;).
 -define(NS_XDATA,        &quot;jabber:x:data&quot;).
 -define(NS_IQDATA,       &quot;jabber:iq:data&quot;).
--define(NS_DELAY,        &quot;jabber:x:delay&quot;).
+-define(NS_DELAY91,      &quot;jabber:x:delay&quot;). % TODO: Remove once XEP-0091 is Obsolete
+-define(NS_DELAY,        &quot;urn:xmpp:delay&quot;).
 -define(NS_EXPIRE,       &quot;jabber:x:expire&quot;).
 -define(NS_EVENT,        &quot;jabber:x:event&quot;).
+-define(NS_CHATSTATES,   &quot;http://jabber.org/protocol/chatstates&quot;).
 -define(NS_XCONFERENCE,  &quot;jabber:x:conference&quot;).
 -define(NS_STATS,        &quot;http://jabber.org/protocol/stats&quot;).
 -define(NS_MUC,          &quot;http://jabber.org/protocol/muc&quot;).
@@ -51,9 +55,11 @@
 -define(NS_PUBSUB_NODE_CONFIG, &quot;http://jabber.org/protocol/pubsub#node_config&quot;).
 -define(NS_PUBSUB_SUB_OPTIONS, &quot;http://jabber.org/protocol/pubsub#subscribe_options&quot;).
 -define(NS_PUBSUB_SUB_AUTH, &quot;http://jabber.org/protocol/pubsub#subscribe_authorization&quot;).
+-define(NS_PUBSUB_GET_PENDING, &quot;http://jabber.org/protocol/pubsub#get-pending&quot;).
 -define(NS_COMMANDS,     &quot;http://jabber.org/protocol/commands&quot;).
 -define(NS_BYTESTREAMS,  &quot;http://jabber.org/protocol/bytestreams&quot;).
 -define(NS_ADMIN,        &quot;http://jabber.org/protocol/admin&quot;).
+-define(NS_SERVERINFO,   &quot;http://jabber.org/network/serverinfo&quot;).
 
 -define(NS_RSM,          &quot;http://jabber.org/protocol/rsm&quot;).
 -define(NS_EJABBERD_CONFIG, &quot;ejabberd:config&quot;).
@@ -71,6 +77,7 @@
 -define(NS_FEATURE_IQAUTH, &quot;http://jabber.org/features/iq-auth&quot;).
 -define(NS_FEATURE_IQREGISTER, &quot;http://jabber.org/features/iq-register&quot;).
 -define(NS_FEATURE_COMPRESS, &quot;http://jabber.org/features/compress&quot;).
+-define(NS_FEATURE_MSGOFFLINE, &quot;msgoffline&quot;).
 
 -define(NS_COMPRESS,     &quot;http://jabber.org/protocol/compress&quot;).
 </diff>
      <filename>src/jlib.hrl</filename>
    </modified>
    <modified>
      <diff>@@ -240,7 +240,8 @@ remove_connection(_SID, JID, _Info) -&gt;
     clear_caps(JID).
 
 jid_to_binary(JID) -&gt;
-    list_to_binary(jlib:jid_to_string(JID)).
+    {U, S, R} = jlib:jid_tolower(JID),
+    list_to_binary(jlib:jid_to_string({U, S, R})).
 
 caps_to_binary(#caps{node = Node, version = Version, exts = Exts}) -&gt;
     BExts = [list_to_binary(Ext) || Ext &lt;- Exts],</diff>
      <filename>src/mod_caps.erl</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 %%%----------------------------------------------------------------------
 %%% File    : mod_disco.erl
 %%% Author  : Alexey Shchepin &lt;alexey@process-one.net&gt;
-%%% Purpose : Service Discovery (JEP-0030) support
+%%% Purpose : Service Discovery (XEP-0030) support
 %%% Created :  1 Jan 2003 by Alexey Shchepin &lt;alexey@process-one.net&gt;
 %%%
 %%%
@@ -41,6 +41,7 @@
 	 get_sm_identity/5,
 	 get_sm_features/5,
 	 get_sm_items/5,
+	 get_info/5,
 	 register_feature/2,
 	 unregister_feature/2,
 	 register_extra_domain/2,
@@ -79,6 +80,7 @@ start(Host, Opts) -&gt;
     ejabberd_hooks:add(disco_sm_items, Host, ?MODULE, get_sm_items, 100),
     ejabberd_hooks:add(disco_sm_features, Host, ?MODULE, get_sm_features, 100),
     ejabberd_hooks:add(disco_sm_identity, Host, ?MODULE, get_sm_identity, 100),
+    ejabberd_hooks:add(disco_info, Host, ?MODULE, get_info, 100),
     ok.
 
 stop(Host) -&gt;
@@ -88,6 +90,7 @@ stop(Host) -&gt;
     ejabberd_hooks:delete(disco_local_identity, Host, ?MODULE, get_local_identity, 100),
     ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, get_local_features, 100),
     ejabberd_hooks:delete(disco_local_items, Host, ?MODULE, get_local_services, 100),
+    ejabberd_hooks:delete(disco_info, Host, ?MODULE, get_info, 100),
     gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_DISCO_ITEMS),
     gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_DISCO_INFO),
     gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_DISCO_ITEMS),
@@ -153,6 +156,8 @@ process_local_iq_info(From, To, #iq{type = Type, lang = Lang,
 					       Host,
 					       [],
 					       [From, To, Node, Lang]),
+	    Info = ejabberd_hooks:run_fold(disco_info, Host, [],
+					   [Host, ?MODULE, Node, Lang]),
 	    case ejabberd_hooks:run_fold(disco_local_features,
 					 Host,
 					 empty,
@@ -166,6 +171,7 @@ process_local_iq_info(From, To, #iq{type = Type, lang = Lang,
 			  sub_el = [{xmlelement, &quot;query&quot;,
 				     [{&quot;xmlns&quot;, ?NS_DISCO_INFO} | ANode],
 				     Identity ++ 
+				     Info ++
 				     lists:map(fun feature_to_xml/1, Features)
 				    }]};
 		{error, Error} -&gt;
@@ -362,3 +368,60 @@ get_user_resources(User, Server) -&gt;
 		       [{&quot;jid&quot;, User ++ &quot;@&quot; ++ Server ++ &quot;/&quot; ++ R},
 			{&quot;name&quot;, User}], []}
 	      end, lists:sort(Rs)).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Support for: XEP-0157 Contact Addresses for XMPP Services
+
+get_info(_A, Host, Module, Node, _Lang) when Node == [] -&gt;
+    Serverinfo_fields = get_fields_xml(Host, Module),
+    [{xmlelement, &quot;x&quot;,
+      [{&quot;xmlns&quot;, ?NS_XDATA}, {&quot;type&quot;, &quot;result&quot;}],
+      [{xmlelement, &quot;field&quot;,
+	[{&quot;var&quot;, &quot;FORM_TYPE&quot;}, {&quot;type&quot;, &quot;hidden&quot;}],
+	[{xmlelement, &quot;value&quot;,
+	  [],
+	  [{xmlcdata, ?NS_SERVERINFO}]
+	 }]
+       }]
+      ++ Serverinfo_fields
+     }];
+
+get_info(_, _, _, _Node, _) -&gt;
+    [].
+
+get_fields_xml(Host, Module) -&gt;
+    Fields = gen_mod:get_module_opt(Host, ?MODULE, server_info, []),
+
+    %% filter, and get only the ones allowed for this module
+    Fields_good = lists:filter(
+		    fun({Modules, _, _}) -&gt;
+			    case Modules of
+				all -&gt; true;
+				Modules -&gt; lists:member(Module, Modules)
+			    end
+		    end,
+		    Fields),
+
+    fields_to_xml(Fields_good).
+
+fields_to_xml(Fields) -&gt;
+    [ field_to_xml(Field) || Field &lt;- Fields].
+
+field_to_xml({_, Var, Values}) -&gt;
+    Values_xml = values_to_xml(Values),
+    {xmlelement, &quot;field&quot;,
+     [{&quot;var&quot;, Var}],
+     Values_xml
+    }.
+
+values_to_xml(Values) -&gt;
+    lists:map(
+      fun(Value) -&gt;
+	      {xmlelement, &quot;value&quot;,
+	       [],
+	       [{xmlcdata, Value}]
+	      }
+      end,
+      Values
+     ).</diff>
      <filename>src/mod_disco.erl</filename>
    </modified>
    <modified>
      <diff>@@ -35,7 +35,7 @@
 	 start/2,
 	 stop/1,
 	 closed_connection/3,
-	 get_user_and_encoding/3]).
+	 get_connection_params/3]).
 
 %% gen_server callbacks
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -46,6 +46,7 @@
 -include(&quot;adhoc.hrl&quot;).
 
 -define(DEFAULT_IRC_ENCODING, &quot;iso8859-1&quot;).
+-define(DEFAULT_IRC_PORT, 6667).
 -define(POSSIBLE_ENCODINGS, [&quot;koi8-r&quot;, &quot;iso8859-1&quot;, &quot;iso8859-2&quot;, &quot;utf-8&quot;, &quot;utf-8+latin-1&quot;]).
 
 -record(irc_connection, {jid_server_host, pid}).
@@ -214,6 +215,9 @@ do_route1(Host, ServerHost, From, To, Packet) -&gt;
 			#iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS,
 			    sub_el = SubEl, lang = Lang} = IQ -&gt;
 			    Node = xml:get_tag_attr_s(&quot;node&quot;, SubEl),
+			    Info = ejabberd_hooks:run_fold(
+				     disco_info, ServerHost, [],
+				     [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
 			    case iq_disco(Node, Lang) of
 				[] -&gt;
 				    Res = IQ#iq{type = result,
@@ -227,7 +231,7 @@ do_route1(Host, ServerHost, From, To, Packet) -&gt;
 				    Res = IQ#iq{type = result,
 						sub_el = [{xmlelement, &quot;query&quot;,
 							   [{&quot;xmlns&quot;, XMLNS}],
-							   DiscoInfo}]},
+							   DiscoInfo ++ Info}]},
 				    ejabberd_router:route(To,
 							  From,
 							  jlib:iq_to_xml(Res))
@@ -325,7 +329,7 @@ do_route1(Host, ServerHost, From, To, Packet) -&gt;
 		    case ets:lookup(irc_connection, {From, Server, Host}) of
 			[] -&gt;
 			    ?DEBUG(&quot;open new connection~n&quot;, []),
-			    {Username, Encoding} = get_user_and_encoding(
+			    {Username, Encoding, Port, Password} = get_connection_params(
 						     Host, From, Server),
 			    ConnectionUsername =
 				case Packet of
@@ -344,7 +348,7 @@ do_route1(Host, ServerHost, From, To, Packet) -&gt;
 				end,
 			    {ok, Pid} = mod_irc_connection:start(
 					  From, Host, ServerHost, Server,
-					  ConnectionUsername, Encoding),
+					  ConnectionUsername, Encoding, Port, Password),
 			    ets:insert(
 			      irc_connection,
 			      #irc_connection{jid_server_host = {From, Server, Host},
@@ -433,7 +437,7 @@ command_items(Host, Lang) -&gt;
 
 commands() -&gt;
     [{&quot;join&quot;, &quot;Join channel&quot;, fun adhoc_join/3},
-     {&quot;register&quot;, &quot;Configure username and encoding&quot;, fun adhoc_register/3}].
+     {&quot;register&quot;, &quot;Configure username, encoding, port and password&quot;, fun adhoc_register/3}].
 
 process_register(Host, From, To, #iq{} = IQ) -&gt;
     case catch process_irc_register(Host, From, To, IQ) of
@@ -539,12 +543,12 @@ get_form(Host, From, [], Lang) -&gt;
 		{User, []};
 	    [#irc_custom{data = Data}] -&gt;
 		{xml:get_attr_s(username, Data),
-		 xml:get_attr_s(encodings, Data)}
+		 xml:get_attr_s(connections_params, Data)}
 	end,
     case Customs of
 	{error, _Error} -&gt;
 	    Customs;
-	{Username, Encodings} -&gt;
+	{Username, ConnectionsParams} -&gt;
 	    {result,
 	     [{xmlelement, &quot;instructions&quot;, [],
 	       [{xmlcdata,
@@ -562,7 +566,7 @@ get_form(Host, From, [], Lang) -&gt;
 	               [{xmlcdata,
 	                 translate:translate(
 	                   Lang,
-			   &quot;Enter username and encodings you wish to use for &quot;
+			   &quot;Enter username, encodings, ports and passwords you wish to use for &quot;
 			   &quot;connecting to IRC servers&quot;)}]},
 	        {xmlelement, &quot;field&quot;, [{&quot;type&quot;, &quot;text-single&quot;},
 				       {&quot;label&quot;,
@@ -577,30 +581,32 @@ get_form(Host, From, [], Lang) -&gt;
 		       io_lib:format(
 		         translate:translate(
 			   Lang,
-			   &quot;If you want to specify different encodings &quot;
-			   &quot;for IRC servers, fill this list with values &quot;
-			   &quot;in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;}'.  &quot;
-			   &quot;By default this service use \&quot;~s\&quot; encoding.&quot;),
-		         [?DEFAULT_IRC_ENCODING]))}]}]},
+			   &quot;If you want to specify different ports, &quot;
+			   &quot;passwords, encodings for IRC servers, fill &quot;
+			   &quot;this list with values in format &quot;
+			   &quot;'{\&quot;irc server\&quot;, \&quot;encoding\&quot;, port, \&quot;password\&quot;}'.  &quot;
+			   &quot;By default this service use \&quot;~s\&quot; encoding, port ~p, &quot;
+			   &quot;empty password.&quot;),
+		         [?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT]))}]}]},
 	        {xmlelement, &quot;field&quot;, [{&quot;type&quot;, &quot;fixed&quot;}],
 	         [{xmlelement, &quot;value&quot;, [],
 		   [{xmlcdata,
 		     translate:translate(
 		       Lang,
-		       &quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, &quot;
-		       &quot;{\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;}].&quot;
+		       &quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;, 6667, \&quot;secret\&quot;}, &quot;
+		       &quot;{\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;, 7000}, {\&quot;irc.sometestserver.net\&quot;, \&quot;utf-8\&quot;}].&quot;
 		    )}]}]},
 	        {xmlelement, &quot;field&quot;, [{&quot;type&quot;, &quot;text-multi&quot;},
 				       {&quot;label&quot;,
-				        translate:translate(Lang, &quot;Encodings&quot;)},
-				       {&quot;var&quot;, &quot;encodings&quot;}],
+				        translate:translate(Lang, &quot;Connections parameters&quot;)},
+				       {&quot;var&quot;, &quot;connections_params&quot;}],
 		         lists:map(
 			   fun(S) -&gt;
 				   {xmlelement, &quot;value&quot;, [], [{xmlcdata, S}]}
 			   end,
 			   string:tokens(
 			     lists:flatten(
-			       io_lib:format(&quot;~p.&quot;, [Encodings])),
+			       io_lib:format(&quot;~p.&quot;, [ConnectionsParams])),
 			     &quot;\n&quot;))
 	        }
 	       ]}]}
@@ -616,7 +622,7 @@ set_form(Host, From, [], _Lang, XData) -&gt;
     {LUser, LServer, _} = jlib:jid_tolower(From),
     US = {LUser, LServer},
     case {lists:keysearch(&quot;username&quot;, 1, XData),
-	  lists:keysearch(&quot;encodings&quot;, 1, XData)} of
+	  lists:keysearch(&quot;connections_params&quot;, 1, XData)} of
 	{{value, {_, [Username]}}, {value, {_, Strings}}} -&gt;
 	    EncString = lists:foldl(fun(S, Res) -&gt;
 					    Res ++ S ++ &quot;\n&quot;
@@ -624,7 +630,7 @@ set_form(Host, From, [], _Lang, XData) -&gt;
 	    case erl_scan:string(EncString) of
 		{ok, Tokens, _} -&gt;
 		    case erl_parse:parse_term(Tokens) of
-			{ok, Encodings} -&gt;
+			{ok, ConnectionsParams} -&gt;
 			    case mnesia:transaction(
 				   fun() -&gt;
 					   mnesia:write(
@@ -633,8 +639,8 @@ set_form(Host, From, [], _Lang, XData) -&gt;
 							 data =
 							 [{username,
 							   Username},
-							  {encodings,
-							   Encodings}]})
+							  {connections_params,
+							   ConnectionsParams}]})
 				   end) of
 				{atomic, _} -&gt;
 				    {result, []};
@@ -656,22 +662,38 @@ set_form(_Host, _, _, _Lang, _XData) -&gt;
     {error, ?ERR_SERVICE_UNAVAILABLE}.
 
 
-get_user_and_encoding(Host, From, IRCServer) -&gt;
+get_connection_params(Host, From, IRCServer) -&gt;
     #jid{user = User, server = _Server,
 	 luser = LUser, lserver = LServer} = From,
     US = {LUser, LServer},
     case catch mnesia:dirty_read({irc_custom, {US, Host}}) of
 	{'EXIT', _Reason} -&gt;
-	    {User, ?DEFAULT_IRC_ENCODING};
+	    {User, ?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT, &quot;&quot;};
 	[] -&gt;
-	    {User, ?DEFAULT_IRC_ENCODING};
+	    {User, ?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT, &quot;&quot;};
 	[#irc_custom{data = Data}] -&gt;
-	    {xml:get_attr_s(username, Data),
-	     case xml:get_attr_s(IRCServer, xml:get_attr_s(encodings, Data)) of
-		&quot;&quot; -&gt; ?DEFAULT_IRC_ENCODING;
-		E -&gt; E
-	     end}
-    end.
+	    Username = xml:get_attr_s(username, Data),
+	    {NewUsername, NewEncoding, NewPort, NewPassword} = 
+    		case lists:keysearch(IRCServer, 1, xml:get_attr_s(connections_params, Data)) of
+	    	    {value, {_, Encoding, Port, Password}} -&gt;
+		        {Username, Encoding, Port, Password};
+		    {value, {_, Encoding, Port}} -&gt;
+			{Username, Encoding, Port, &quot;&quot;};
+		    {value, {_, Encoding}} -&gt;
+			{Username, Encoding, ?DEFAULT_IRC_PORT, &quot;&quot;};
+		    _ -&gt;
+			{Username, ?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT, &quot;&quot;}
+    		end,
+	    {NewUsername, 
+	     NewEncoding, 
+	     if 
+	        NewPort &gt;= 0 andalso NewPort =&lt; 65535 -&gt; 
+		    NewPort; 
+		true -&gt; 
+		    ?DEFAULT_IRC_PORT
+	     end,
+	     NewPassword}
+      end.
 
 adhoc_join(_From, _To, #adhoc_request{action = &quot;cancel&quot;} = Request) -&gt;
     adhoc:produce_response(Request,
@@ -763,13 +785,13 @@ adhoc_register(From, To, #adhoc_request{lang = Lang,
 	    case catch mnesia:dirty_read({irc_custom, {US, Host}}) of
 		{'EXIT', _Reason} -&gt;
 		    Username = User,
-		    Encodings = [];
+		    ConnectionsParams = [];
 		[] -&gt;
 		    Username = User,
-		    Encodings = [];
+		    ConnectionsParams = [];
 		[#irc_custom{data = Data}] -&gt;
 		    Username = xml:get_attr_s(username, Data),
-		    Encodings = xml:get_attr_s(encodings, Data)
+		    ConnectionsParams = xml:get_attr_s(connections_params, Data)
 	    end,
 	    Error = false;
        true -&gt;
@@ -777,7 +799,7 @@ adhoc_register(From, To, #adhoc_request{lang = Lang,
 		invalid -&gt;
 		    Error = {error, ?ERR_BAD_REQUEST},
 		    Username = false,
-		    Encodings = false;
+		    ConnectionsParams = false;
 		Fields -&gt;
 		    Username = case lists:keysearch(&quot;username&quot;, 1, Fields) of
 				   {value, {&quot;username&quot;, U}} -&gt;
@@ -785,7 +807,7 @@ adhoc_register(From, To, #adhoc_request{lang = Lang,
 				   _ -&gt;
 				       User
 			       end,
-		    Encodings = parse_encodings(Fields),
+		    ConnectionsParams = parse_connections_params(Fields),
 		    Error = false
 	    end
     end,
@@ -801,8 +823,8 @@ adhoc_register(From, To, #adhoc_request{lang = Lang,
 					 data =
 					 [{username,
 					   Username},
-					  {encodings,
-					   Encodings}]})
+					  {connections_params,
+					   ConnectionsParams}]})
 		   end) of
 		{atomic, _} -&gt;
 		    adhoc:produce_response(Request, #adhoc_response{status = completed});
@@ -810,14 +832,14 @@ adhoc_register(From, To, #adhoc_request{lang = Lang,
 		    {error, ?ERR_INTERNAL_SERVER_ERROR}
 	    end;
        true -&gt;
-	    Form = generate_adhoc_register_form(Lang, Username, Encodings),
+	    Form = generate_adhoc_register_form(Lang, Username, ConnectionsParams),
 	    adhoc:produce_response(Request,
 				   #adhoc_response{status = executing,
 						   elements = [Form],
 						   actions = [&quot;next&quot;, &quot;complete&quot;]})
     end.
 
-generate_adhoc_register_form(Lang, Username, Encodings) -&gt;
+generate_adhoc_register_form(Lang, Username, ConnectionsParams) -&gt;
     {xmlelement, &quot;x&quot;,
      [{&quot;xmlns&quot;, ?NS_XDATA},
       {&quot;type&quot;, &quot;form&quot;}],
@@ -835,25 +857,61 @@ generate_adhoc_register_form(Lang, Username, Encodings) -&gt;
 	{&quot;label&quot;, translate:translate(Lang, &quot;IRC username&quot;)}], 
        [{xmlelement, &quot;required&quot;, [], []},
 	{xmlelement, &quot;value&quot;, [], [{xmlcdata, Username}]}]}] ++
-    generate_encoding_fields(Lang, Encodings, 1, [])}.
+    generate_connection_params_fields(Lang, ConnectionsParams, 1, [])}.
 
-generate_encoding_fields(Lang, [], Number, Acc) -&gt;
-    Field = generate_encoding_field(Lang, &quot;&quot;, &quot;&quot;, Number),
+generate_connection_params_fields(Lang, [], Number, Acc) -&gt;
+    Field = generate_connection_params_field(Lang, &quot;&quot;, &quot;&quot;, -1, &quot;&quot;, Number),
     lists:reverse(Field ++ Acc);
-generate_encoding_fields(Lang, [{Server, Encoding} | Encodings], Number, Acc) -&gt;
-    Field = generate_encoding_field(Lang, Server, Encoding, Number),
-    generate_encoding_fields(Lang, Encodings, Number + 1, Field ++ Acc).
+    
+generate_connection_params_fields(Lang, [ConnectionParams | ConnectionsParams], Number, Acc) -&gt;
+    case ConnectionParams of
+	{Server, Encoding, Port, Password} -&gt;
+	    Field = generate_connection_params_field(Lang, Server, Encoding, Port, Password, Number),
+	    generate_connection_params_fields(Lang, ConnectionsParams, Number + 1, Field ++ Acc);	
+	{Server, Encoding, Port} -&gt;	    
+	    Field = generate_connection_params_field(Lang, Server, Encoding, Port, [], Number),
+	    generate_connection_params_fields(Lang, ConnectionsParams, Number + 1, Field ++ Acc);
+	{Server, Encoding} -&gt;	
+	    Field = generate_connection_params_field(Lang, Server, Encoding, [], [], Number),
+	    generate_connection_params_fields(Lang, ConnectionsParams, Number + 1, Field ++ Acc);
+	_ -&gt; 
+	    []
+    end.
 
-generate_encoding_field(Lang, Server, Encoding, Number) -&gt;
+generate_connection_params_field(Lang, Server, Encoding, Port, Password, Number) -&gt;
     EncodingUsed = case Encoding of
 		       [] -&gt;
 			   ?DEFAULT_IRC_ENCODING;
 		       _ -&gt;
 			   Encoding
 		   end,
+    PortUsedInt = if
+		    Port &gt;= 0 andalso Port =&lt; 65535 -&gt;
+			Port;
+		    true -&gt;
+			?DEFAULT_IRC_PORT
+	       end,	
+    PortUsed = integer_to_list(PortUsedInt),
+    PasswordUsed = case Password of
+		    [] -&gt; 
+			&quot;&quot;;
+		    _ -&gt; 
+			Password
+		   end,	      		
+    NumberString = integer_to_list(Number),
     %% Fields are in reverse order, as they will be reversed again later.
     [{xmlelement, &quot;field&quot;,
-      [{&quot;var&quot;, &quot;encoding&quot; ++ io_lib:format(&quot;~b&quot;, [Number])},
+      [{&quot;var&quot;, &quot;password&quot; ++ NumberString},
+       {&quot;type&quot;, &quot;text-single&quot;},
+       {&quot;label&quot;, io_lib:format(translate:translate(Lang, &quot;Password ~b&quot;), [Number])}],
+      [{xmlelement, &quot;value&quot;, [], [{xmlcdata, PasswordUsed}]}]},
+     {xmlelement, &quot;field&quot;,
+      [{&quot;var&quot;, &quot;port&quot; ++ NumberString},
+       {&quot;type&quot;, &quot;text-single&quot;},
+       {&quot;label&quot;, io_lib:format(translate:translate(Lang, &quot;Port ~b&quot;), [Number])}],
+      [{xmlelement, &quot;value&quot;, [], [{xmlcdata, PortUsed}]}]},    
+     {xmlelement, &quot;field&quot;,
+      [{&quot;var&quot;, &quot;encoding&quot; ++ NumberString},
        {&quot;type&quot;, &quot;list-single&quot;},
        {&quot;label&quot;, io_lib:format(translate:translate(Lang, &quot;Encoding for server ~b&quot;), [Number])}],
       [{xmlelement, &quot;value&quot;, [], [{xmlcdata, EncodingUsed}]} |
@@ -862,13 +920,13 @@ generate_encoding_field(Lang, Server, Encoding, Number) -&gt;
 			  [{xmlelement, &quot;value&quot;, [], [{xmlcdata, E}]}]}
 		 end, ?POSSIBLE_ENCODINGS)]},
      {xmlelement, &quot;field&quot;,
-      [{&quot;var&quot;, &quot;server&quot; ++ io_lib:format(&quot;~b&quot;, [Number])},
+      [{&quot;var&quot;, &quot;server&quot; ++ NumberString},
        {&quot;type&quot;, &quot;text-single&quot;},
        {&quot;label&quot;, io_lib:format(translate:translate(Lang, &quot;Server ~b&quot;), [Number])}],
       [{xmlelement, &quot;value&quot;, [], [{xmlcdata, Server}]}]}].
 
-parse_encodings(Fields) -&gt;
-    %% Find all fields staring with serverN and encodingN, for any values
+parse_connections_params(Fields) -&gt;
+    %% Find all fields staring with serverN, encodingN, portN and passwordN for any values
     %% of N, and generate lists of {&quot;N&quot;, Value}.
     Servers = lists:sort(
 		[{lists:nthtail(6, Var), lists:flatten(Value)} || {Var, Value} &lt;- Fields,
@@ -876,25 +934,46 @@ parse_encodings(Fields) -&gt;
     Encodings = lists:sort(
 		  [{lists:nthtail(8, Var), lists:flatten(Value)} || {Var, Value} &lt;- Fields,
 								    lists:prefix(&quot;encoding&quot;, Var)]),
+								    
+    Ports = lists:sort(
+	      [{lists:nthtail(4, Var), lists:flatten(Value)} || {Var, Value} &lt;- Fields,
+								lists:prefix(&quot;port&quot;, Var)]),
+								  
+    Passwords = lists:sort(
+		  [{lists:nthtail(8, Var), lists:flatten(Value)} || {Var, Value} &lt;- Fields,
+								    lists:prefix(&quot;password&quot;, Var)]),
     
     %% Now sort the lists, and find the corresponding pairs.
-    parse_encodings(Servers, Encodings).
-
-parse_encodings([{ServerN, Server} | Servers], [{EncodingN, Encoding} | Encodings]) -&gt;
-    %% Try to match pairs of servers and encodings, no matter what fields
-    %% the client might have left out.
-    if ServerN == EncodingN -&gt;
-	    [{Server, Encoding} | parse_encodings(Servers, Encodings)];
-       ServerN &lt; EncodingN -&gt;
-	    parse_encodings(Servers, [{EncodingN, Encoding} | Encodings]);
-       ServerN &gt; EncodingN -&gt;
-	    parse_encodings([{ServerN, Server} | Servers], Encodings)
-    end;
-parse_encodings([], _) -&gt;
+    parse_connections_params(Servers, Encodings, Ports, Passwords).
+    
+retrieve_connections_params(ConnectionParams, ServerN) -&gt;
+    case ConnectionParams of
+        [{ConnectionParamN, ConnectionParam} | ConnectionParamsTail] -&gt;	    
+    	    if 
+		ServerN == ConnectionParamN -&gt;
+	    	    {ConnectionParam, ConnectionParamsTail};		
+	        ServerN &lt; ConnectionParamN -&gt;
+		    {[], [{ConnectionParamN, ConnectionParam} | ConnectionParamsTail]};
+		ServerN &gt; ConnectionParamN -&gt;    
+		    {[], ConnectionParamsTail}
+	    end;
+	    _ -&gt;
+		{[], []}
+	end.
+	
+parse_connections_params([], _, _, _) -&gt;
     [];
-parse_encodings(_, []) -&gt;
-    [].
+parse_connections_params(_, [], [], []) -&gt;
+    [];	
 
+parse_connections_params([{ServerN, Server} | Servers], Encodings, Ports, Passwords) -&gt;
+    %% Try to match matches of servers, ports, passwords and encodings, no matter what fields
+    %% the client might have left out.
+    {NewEncoding, NewEncodings} = retrieve_connections_params(Encodings, ServerN),
+    {NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN),
+    {NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN),
+    [{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)].
+	    
 update_table(Host) -&gt;
     Fields = record_info(fields, irc_custom),
     case mnesia:table_info(irc_custom, attributes) of</diff>
      <filename>src/mod_irc/mod_irc.erl</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@
 -behaviour(gen_fsm).
 
 %% External exports
--export([start_link/5, start/6, route_chan/4, route_nick/3]).
+-export([start_link/7, start/8, route_chan/4, route_nick/3]).
 
 %% gen_fsm callbacks
 -export([init/1,
@@ -48,8 +48,8 @@
 
 -define(SETS, gb_sets).
 
--record(state, {socket, encoding, queue,
-		user, host, server, nick,
+-record(state, {socket, encoding, port, password, 
+		queue, user, host, server, nick,
 		channels = dict:new(),
 		nickchannel,
 		inbuf = &quot;&quot;, outbuf = &quot;&quot;}).
@@ -65,13 +65,13 @@
 %%%----------------------------------------------------------------------
 %%% API
 %%%----------------------------------------------------------------------
-start(From, Host, ServerHost, Server, Username, Encoding) -&gt;
+start(From, Host, ServerHost, Server, Username, Encoding, Port, Password) -&gt;
     Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_irc_sup),
     supervisor:start_child(
-      Supervisor, [From, Host, Server, Username, Encoding]).
+      Supervisor, [From, Host, Server, Username, Encoding, Port, Password]).
 
-start_link(From, Host, Server, Username, Encoding) -&gt;
-    gen_fsm:start_link(?MODULE, [From, Host, Server, Username, Encoding],
+start_link(From, Host, Server, Username, Encoding, Port, Password) -&gt;
+    gen_fsm:start_link(?MODULE, [From, Host, Server, Username, Encoding, Port, Password],
 		       ?FSMOPTS).
 
 %%%----------------------------------------------------------------------
@@ -85,10 +85,12 @@ start_link(From, Host, Server, Username, Encoding) -&gt;
 %%          ignore                              |
 %%          {stop, StopReason}                   
 %%----------------------------------------------------------------------
-init([From, Host, Server, Username, Encoding]) -&gt;
+init([From, Host, Server, Username, Encoding, Port, Password]) -&gt;
     gen_fsm:send_event(self(), init),
     {ok, open_socket, #state{queue = queue:new(),
 			     encoding = Encoding,
+			     port = Port,
+			     password = Password,
 			     user = From,
 			     nick = Username,
 			     host = Host,
@@ -102,11 +104,17 @@ init([From, Host, Server, Username, Encoding]) -&gt;
 %%----------------------------------------------------------------------
 open_socket(init, StateData) -&gt;
     Addr = StateData#state.server,
-    Port = 6667,
+    Port = StateData#state.port,
     ?DEBUG(&quot;connecting to ~s:~p~n&quot;, [Addr, Port]),
     case gen_tcp:connect(Addr, Port, [binary, {packet, 0}]) of
 	{ok, Socket} -&gt;
 	    NewStateData = StateData#state{socket = Socket},
+	    if 
+		StateData#state.password /= &quot;&quot; -&gt; 
+		    send_text(NewStateData,
+			      io_lib:format(&quot;PASS ~s\r\n&quot;, [StateData#state.password]));
+		true -&gt; true
+	    end,
 	    send_text(NewStateData,
 		      io_lib:format(&quot;NICK ~s\r\n&quot;, [StateData#state.nick])),
 	    send_text(NewStateData,</diff>
      <filename>src/mod_irc/mod_irc_connection.erl</filename>
    </modified>
    <modified>
      <diff>@@ -421,10 +421,14 @@ do_route1(Host, ServerHost, Access, HistorySize, RoomShaper,
 			    case jlib:iq_query_info(Packet) of
 				#iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS,
  				    sub_el = _SubEl, lang = Lang} = IQ -&gt;
+				    Info = ejabberd_hooks:run_fold(
+					     disco_info, ServerHost, [],
+					     [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
 				    Res = IQ#iq{type = result,
 						sub_el = [{xmlelement, &quot;query&quot;,
 							   [{&quot;xmlns&quot;, XMLNS}],
-							   iq_disco_info(Lang)}]},
+							   iq_disco_info(Lang)
+							   ++Info}]},
 				    ejabberd_router:route(To,
 							  From,
 							  jlib:iq_to_xml(Res));
@@ -844,11 +848,11 @@ process_iq_register_set(Host, From, SubEl, Lang) -&gt;
 				    {error, ?ERR_BAD_REQUEST};
 				_ -&gt;
 				    case lists:keysearch(&quot;nick&quot;, 1, XData) of
-					false -&gt;
+					{value, {_, [Nick]}} when Nick /= &quot;&quot; -&gt;
+					    iq_set_register_info(Host, From, Nick, Lang);
+					_ -&gt;
 					    ErrText = &quot;You must fill in field \&quot;Nickname\&quot; in the form&quot;,
-					    {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)};
-					{value, {_, [Nick]}} -&gt;
-					    iq_set_register_info(Host, From, Nick, Lang)
+					    {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}
 				    end
 			    end;
 			_ -&gt;</diff>
      <filename>src/mod_muc/mod_muc.erl</filename>
    </modified>
    <modified>
      <diff>@@ -43,13 +43,17 @@
 
 -include(&quot;ejabberd.hrl&quot;).
 -include(&quot;jlib.hrl&quot;).
+-include(&quot;mod_muc_room.hrl&quot;).
+
+%% Copied from mod_muc/mod_muc.erl
+-record(muc_online_room, {name_host, pid}).
 
 -define(T(Text), translate:translate(Lang, Text)).
 -define(PROCNAME, ejabberd_mod_muc_log).
 -record(room, {jid, title, subject, subject_author, config}).
 
 
--record(state, {host,
+-record(logstate, {host,
 		out_dir,
 		dir_type,
 		dir_name,
@@ -130,7 +134,7 @@ init([Host, Opts]) -&gt;
 		   end;
 	       L -&gt; L
 	   end,
-    {ok, #state{host = Host,
+    {ok, #logstate{host = Host,
 		out_dir = OutDir,
 		dir_type = DirType,
 		dir_name = DirName,
@@ -152,7 +156,7 @@ init([Host, Opts]) -&gt;
 %% Description: Handling call messages
 %%--------------------------------------------------------------------
 handle_call({check_access_log, ServerHost, FromJID}, _From, State) -&gt;
-    Reply = acl:match_rule(ServerHost, State#state.access, FromJID),
+    Reply = acl:match_rule(ServerHost, State#logstate.access, FromJID),
     {reply, Reply, State};
 handle_call(stop, _From, State) -&gt;
     {stop, normal, ok, State}.
@@ -215,9 +219,12 @@ add_to_log2(text, {Nick, Packet}, Room, Opts, State) -&gt;
 	    add_message_to_log(Nick, Message, Room, Opts, State)
     end;
 
-add_to_log2(roomconfig_change, _, Room, Opts, State) -&gt;
+add_to_log2(roomconfig_change, _Occupants, Room, Opts, State) -&gt;
     add_message_to_log(&quot;&quot;, roomconfig_change, Room, Opts, State);
 
+add_to_log2(roomconfig_change_enabledlogging, Occupants, Room, Opts, State) -&gt;
+    add_message_to_log(&quot;&quot;, {roomconfig_change, Occupants}, Room, Opts, State);
+
 add_to_log2(nickchange, {OldNick, NewNick}, Room, Opts, State) -&gt;
     add_message_to_log(NewNick, {nickchange, OldNick}, Room, Opts, State);
 
@@ -302,7 +309,7 @@ write_last_lines(F, Images_dir, _FileFormat) -&gt;
     fw(F, &quot;&lt;/span&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;&quot;).
 
 add_message_to_log(Nick1, Message, RoomJID, Opts, State) -&gt;
-    #state{out_dir = OutDir,
+    #logstate{out_dir = OutDir,
 	   dir_type = DirType,
 	   dir_name = DirName,
 	   file_format = FileFormat,
@@ -362,6 +369,13 @@ add_message_to_log(Nick1, Message, RoomJID, Opts, State) -&gt;
 		   put_room_config(F, RoomConfig, Lang, FileFormat),
 		   io_lib:format(&quot;&lt;font class=\&quot;mrcm\&quot;&gt;~s&lt;/font&gt;&lt;br/&gt;&quot;, 
 				 [?T(&quot;Chatroom configuration modified&quot;)]);
+	       {roomconfig_change, Occupants} -&gt;
+		   RoomConfig = roomconfig_to_string(Room#room.config, Lang, FileFormat),
+		   put_room_config(F, RoomConfig, Lang, FileFormat),
+		   RoomOccupants = roomoccupants_to_string(Occupants, FileFormat),
+		   put_room_occupants(F, RoomOccupants, Lang, FileFormat),
+		   io_lib:format(&quot;&lt;font class=\&quot;mrcm\&quot;&gt;~s&lt;/font&gt;&lt;br/&gt;&quot;, 
+				 [?T(&quot;Chatroom configuration modified&quot;)]);
 	       join -&gt;  
 		   io_lib:format(&quot;&lt;font class=\&quot;mj\&quot;&gt;~s ~s&lt;/font&gt;&lt;br/&gt;&quot;, 
 				 [Nick, ?T(&quot;joins the room&quot;)]);
@@ -399,11 +413,14 @@ add_message_to_log(Nick1, Message, RoomJID, Opts, State) -&gt;
 		   io_lib:format(&quot;&lt;font class=\&quot;msc\&quot;&gt;~s~s~s&lt;/font&gt;&lt;br/&gt;&quot;, 
 				 [Nick, ?T(&quot; has set the subject to: &quot;), htmlize(T,NoFollow,FileFormat)]);
 	       {body, T} -&gt;  
-		   case regexp:first_match(T, &quot;^/me\s&quot;) of
-		       {match, _, _} -&gt;
+		   case {regexp:first_match(T, &quot;^/me\s&quot;), Nick} of
+		       {_, &quot;&quot;} -&gt;
+			   io_lib:format(&quot;&lt;font class=\&quot;msm\&quot;&gt;~s&lt;/font&gt;&lt;br/&gt;&quot;,
+					 [htmlize(T,NoFollow,FileFormat)]);
+		       {{match, _, _}, _} -&gt;
 			   io_lib:format(&quot;&lt;font class=\&quot;mne\&quot;&gt;~s ~s&lt;/font&gt;&lt;br/&gt;&quot;, 
 					 [Nick, string:substr(htmlize(T,FileFormat), 5)]);
-		       nomatch -&gt;
+		       {nomatch, _} -&gt;
 			   io_lib:format(&quot;&lt;font class=\&quot;mn\&quot;&gt;~s&lt;/font&gt; ~s&lt;br/&gt;&quot;,
 					 [Nick2, htmlize(T,NoFollow,FileFormat)])
 		   end
@@ -662,6 +679,9 @@ put_header(F, Room, Date, CSSFile, Lang, Hour_offset, Date_prev, Date_next, Top_
     end,
     RoomConfig = roomconfig_to_string(Room#room.config, Lang, FileFormat),
     put_room_config(F, RoomConfig, Lang, FileFormat),
+    Occupants = get_room_occupants(Room#room.jid),
+    RoomOccupants = roomoccupants_to_string(Occupants, FileFormat),
+    put_room_occupants(F, RoomOccupants, Lang, FileFormat),
     Time_offset_str = case Hour_offset&lt;0 of
 			  true -&gt; io_lib:format(&quot;~p&quot;, [Hour_offset]);
 			  false -&gt; io_lib:format(&quot;+~p&quot;, [Hour_offset])
@@ -674,6 +694,7 @@ put_header_css(F, false) -&gt;
     fw(F, &quot;.ts {color: #AAAAAA; text-decoration: none;}&quot;),
     fw(F, &quot;.mrcm {color: #009900; font-style: italic; font-weight: bold;}&quot;),
     fw(F, &quot;.msc {color: #009900; font-style: italic; font-weight: bold;}&quot;),
+    fw(F, &quot;.msm {color: #000099; font-style: italic; font-weight: bold;}&quot;),
     fw(F, &quot;.mj {color: #009900; font-style: italic;}&quot;),
     fw(F, &quot;.ml {color: #009900; font-style: italic;}&quot;),
     fw(F, &quot;.mk {color: #009900; font-style: italic;}&quot;),
@@ -720,6 +741,15 @@ put_room_config(F, RoomConfig, Lang, _FileFormat) -&gt;
     fw(F,   &quot;&lt;div class=\&quot;rcos\&quot; id=\&quot;a~p\&quot; style=\&quot;display: none;\&quot; &gt;&lt;br/&gt;~s&lt;/div&gt;&quot;, [Now2, RoomConfig]),
     fw(F, &quot;&lt;/div&gt;&quot;).
 
+put_room_occupants(_F, _RoomOccupants, _Lang, plaintext) -&gt;
+    ok;
+put_room_occupants(F, RoomOccupants, Lang, _FileFormat) -&gt;
+    {_, Now2, _} = now(),
+    fw(F, &quot;&lt;div class=\&quot;rc\&quot;&gt;&quot;),
+    fw(F,   &quot;&lt;div class=\&quot;rct\&quot; onclick=\&quot;sh('o~p');return false;\&quot;&gt;~s&lt;/div&gt;&quot;, [Now2, ?T(&quot;Room Occupants&quot;)]),
+    fw(F,   &quot;&lt;div class=\&quot;rcos\&quot; id=\&quot;o~p\&quot; style=\&quot;display: none;\&quot; &gt;&lt;br/&gt;~s&lt;/div&gt;&quot;, [Now2, RoomOccupants]),
+    fw(F, &quot;&lt;/div&gt;&quot;).
+
 %% htmlize
 %% The default behaviour is to ignore the nofollow spam prevention on links
 %% (NoFollow=false)
@@ -755,7 +785,9 @@ htmlize2(S1, NoFollow) -&gt;
     S5 = element(2, regexp:gsub(S4, &quot;((http|https|ftp)://|(mailto|xmpp):)[^] )\'\&quot;}]+&quot;,
 				link_regexp(NoFollow))),
     %% Remove 'right-to-left override' unicode character 0x202e
-    element(2, regexp:gsub(S5, [226,128,174], &quot;[RLO]&quot;)).
+    S6 = element(2, regexp:gsub(S5, &quot;  &quot;, &quot;\\&amp;nbsp;\\&amp;nbsp;&quot;)),
+    S7 = element(2, regexp:gsub(S6, &quot;\\t&quot;, &quot;\\&amp;nbsp;\\&amp;nbsp;\\&amp;nbsp;\\&amp;nbsp;&quot;)),
+    element(2, regexp:gsub(S7, [226,128,174], &quot;[RLO]&quot;)).
 
 %% Regexp link
 %% Add the nofollow rel attribute when required
@@ -844,6 +876,60 @@ get_roomconfig_text(allow_user_invites) -&gt; &quot;Allow users to send invites&quot;;
 get_roomconfig_text(logging) -&gt;  &quot;Enable logging&quot;;
 get_roomconfig_text(_) -&gt; undefined.
 
+%% Users = [{JID, Nick, Role}]
+roomoccupants_to_string(Users, _FileFormat) -&gt;
+    Res = [role_users_to_string(RoleS, Users1)
+	   || {RoleS, Users1} &lt;- group_by_role(Users), Users1 /= []],
+    lists:flatten([&quot;&lt;div class=\&quot;rcot\&quot;&gt;&quot;, Res, &quot;&lt;/div&gt;&quot;]).
+
+%% Users = [{JID, Nick, Role}]
+group_by_role(Users) -&gt;
+    {Ms, Ps, Vs, Ns} =
+	lists:foldl(
+	  fun({JID, Nick, moderator}, {Mod, Par, Vis, Non}) -&gt;
+		  {[{JID, Nick}]++Mod, Par, Vis, Non};
+	     ({JID, Nick, participant}, {Mod, Par, Vis, Non}) -&gt;
+		  {Mod, [{JID, Nick}]++Par, Vis, Non};
+	     ({JID, Nick, visitor}, {Mod, Par, Vis, Non}) -&gt;
+		  {Mod, Par, [{JID, Nick}]++Vis, Non};
+	     ({JID, Nick, none}, {Mod, Par, Vis, Non}) -&gt;
+		  {Mod, Par, Vis, [{JID, Nick}]++Non}
+	  end,
+	  {[], [], [], []},
+	  Users),
+    case Ms of [] -&gt; []; _ -&gt; [{&quot;Moderator&quot;, Ms}] end
+	++ case Ms of [] -&gt; []; _ -&gt; [{&quot;Participant&quot;, Ps}] end
+	++ case Ms of [] -&gt; []; _ -&gt; [{&quot;Visitor&quot;, Vs}] end
+	++ case Ms of [] -&gt; []; _ -&gt; [{&quot;None&quot;, Ns}] end.
+
+%% Role = atom()
+%% Users = [{JID, Nick}]
+role_users_to_string(RoleS, Users) -&gt;
+    SortedUsers = lists:keysort(2, Users),
+    UsersString = [[Nick, &quot;&lt;br/&gt;&quot;] || {_JID, Nick} &lt;- SortedUsers],
+    [RoleS, &quot;: &quot;, UsersString].
+
+get_room_occupants(RoomJIDString) -&gt;
+    RoomJID = jlib:string_to_jid(RoomJIDString),
+    RoomName = RoomJID#jid.luser,
+    MucService = RoomJID#jid.lserver,
+    StateData = get_room_state(RoomName, MucService),
+    [{U#user.jid, U#user.nick, U#user.role}
+     || {_, U} &lt;- ?DICT:to_list(StateData#state.users)].
+
+get_room_state(RoomName, MucService) -&gt;
+    case mnesia:dirty_read(muc_online_room, {RoomName, MucService}) of
+        [R] -&gt;
+	    RoomPid = R#muc_online_room.pid,
+	    get_room_state(RoomPid);
+	[] -&gt;
+	    room_not_found
+    end.
+
+get_room_state(RoomPid) -&gt;
+    {ok, R} = gen_fsm:sync_send_all_state_event(RoomPid, get_state),
+    R.
+
 get_proc_name(Host) -&gt; gen_mod:get_module_proc(Host, ?PROCNAME).
 
 calc_hour_offset(TimeHere) -&gt;</diff>
      <filename>src/mod_muc/mod_muc_log.erl</filename>
    </modified>
    <modified>
      <diff>@@ -557,6 +557,7 @@ handle_event({service_message, Msg}, _StateName, StateData) -&gt;
       end,
       ?DICT:to_list(StateData#state.users)),
     NSD = add_message_to_history(&quot;&quot;,
+				 StateData#state.jid,
 				 MessagePkt,
 				 StateData),
     {next_state, normal_state, NSD};
@@ -1921,7 +1922,6 @@ extract_history([{xmlelement, _Name, Attrs, _SubEls} = El | Els], Type) -&gt;
 extract_history([_ | Els], Type) -&gt;
     extract_history(Els, Type).
 
-
 send_update_presence(JID, StateData) -&gt;
     send_update_presence(JID, &quot;&quot;, StateData).
 send_update_presence(JID, Reason, Headers) when is_record(Headers, headers)-&gt;
@@ -2251,7 +2251,6 @@ send_kickban_presence1(UJID, Reason, Code, Headers) -&gt;
 		jlib:jid_replace_resource(Headers#headers.jid, Nick),
 		Info#user.jid,
 		Packet)
-
       end, ?DICT:to_list(Headers#headers.users)).
 
 destroy_room(DEl, #headers{}=Headers) -&gt;
@@ -2497,8 +2496,13 @@ send_error_only_occupants(Packet, Lang, RoomJID, From) -&gt;
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Logging
-add_to_log(Type, Data, Headers) when is_record(Headers, headers) -&gt;
-    add_to_log(Type, Data, headers_to_state(Headers));
+
+add_to_log(Type, Data, StateData)
+  when Type == roomconfig_change_disabledlogging -&gt;
+    %% When logging is disabled, the config change message must be logged:
+    add_to_log(
+      StateData#state.server_host, roomconfig_change, Data,
+      StateData#state.jid, make_opts(StateData));
 add_to_log(Type, Data, StateData) -&gt;
     case handler_call(should_log, [], StateData) of
 	{result, true, _} -&gt;</diff>
      <filename>src/mod_muc/mod_muc_room.erl</filename>
    </modified>
    <modified>
      <diff>@@ -35,6 +35,7 @@
 	 store_packet/3,
 	 resend_offline_messages/2,
 	 pop_offline_messages/3,
+	 get_sm_features/5,
 	 remove_expired_messages/0,
 	 remove_old_messages/1,
 	 remove_user/2,
@@ -69,6 +70,10 @@ start(Host, Opts) -&gt;
 		       ?MODULE, remove_user, 50),
     ejabberd_hooks:add(anonymous_purge_hook, Host,
 		       ?MODULE, remove_user, 50),
+    ejabberd_hooks:add(disco_sm_features, Host,
+		       ?MODULE, get_sm_features, 50),
+    ejabberd_hooks:add(disco_local_features, Host,
+		       ?MODULE, get_sm_features, 50),
     ejabberd_hooks:add(webadmin_page_host, Host,
 		       ?MODULE, webadmin_page, 50),
     ejabberd_hooks:add(webadmin_user, Host,
@@ -144,6 +149,8 @@ stop(Host) -&gt;
 			  ?MODULE, remove_user, 50),
     ejabberd_hooks:delete(anonymous_purge_hook, Host,
 			  ?MODULE, remove_user, 50),
+    ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, get_sm_features, 50),
+    ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, get_sm_features, 50),
     ejabberd_hooks:delete(webadmin_page_host, Host,
 			  ?MODULE, webadmin_page, 50),
     ejabberd_hooks:delete(webadmin_user, Host,
@@ -154,12 +161,27 @@ stop(Host) -&gt;
     exit(whereis(Proc), stop),
     {wait, Proc}.
 
+get_sm_features(Acc, _From, _To, &quot;&quot;, _Lang) -&gt;
+    Feats = case Acc of
+		{result, I} -&gt; I;
+		_ -&gt; []
+	    end,
+    {result, Feats ++ [?NS_FEATURE_MSGOFFLINE]};
+
+get_sm_features(_Acc, _From, _To, ?NS_FEATURE_MSGOFFLINE, _Lang) -&gt;
+    %% override all lesser features...
+    {result, []};
+
+get_sm_features(Acc, _From, _To, _Node, _Lang) -&gt;
+    Acc.
+
+
 store_packet(From, To, Packet) -&gt;
     Type = xml:get_tag_attr_s(&quot;type&quot;, Packet),
     if
 	(Type /= &quot;error&quot;) and (Type /= &quot;groupchat&quot;) and
 	(Type /= &quot;headline&quot;) -&gt;
-	    case check_event(From, To, Packet) of
+	    case check_event_chatstates(From, To, Packet) of
 		true -&gt;
 		    #jid{luser = LUser, lserver = LServer} = To,
 		    TimeStamp = now(),
@@ -180,12 +202,22 @@ store_packet(From, To, Packet) -&gt;
 	    ok
     end.
 
-check_event(From, To, Packet) -&gt;
+%% Check if the packet has any content about XEP-0022 or XEP-0085
+check_event_chatstates(From, To, Packet) -&gt;
     {xmlelement, Name, Attrs, Els} = Packet,
-    case find_x_event(Els) of
-	false -&gt;
+    case find_x_event_chatstates(Els, {false, false, false}) of
+	%% There wasn't any x:event or chatstates subelements
+	{false, false, _} -&gt;
+	    true;
+	%% There a chatstates subelement and other stuff, but no x:event
+	{false, CEl, true} when CEl /= false -&gt;
 	    true;
-	El -&gt;
+	%% There was only a subelement: a chatstates
+	{false, CEl, false} when CEl /= false -&gt;
+	    %% Don't allow offline storage
+	    false;
+	%% There was an x:event element, and maybe also other stuff
+	{El, _, _} when El /= false -&gt;
 	    case xml:get_subtag(El, &quot;id&quot;) of
 		false -&gt;
 		    case xml:get_subtag(El, &quot;offline&quot;) of
@@ -213,16 +245,19 @@ check_event(From, To, Packet) -&gt;
 	    end
     end.
 
-find_x_event([]) -&gt;
-    false;
-find_x_event([{xmlcdata, _} | Els]) -&gt;
-    find_x_event(Els);
-find_x_event([El | Els]) -&gt;
+%% Check if the packet has subelements about XEP-0022, XEP-0085 or other
+find_x_event_chatstates([], Res) -&gt;
+    Res;
+find_x_event_chatstates([{xmlcdata, _} | Els], Res) -&gt;
+    find_x_event_chatstates(Els, Res);
+find_x_event_chatstates([El | Els], {A, B, C}) -&gt;
     case xml:get_tag_attr_s(&quot;xmlns&quot;, El) of
 	?NS_EVENT -&gt;
-	    El;
+	    find_x_event_chatstates(Els, {El, B, C});
+	?NS_CHATSTATES -&gt;
+	    find_x_event_chatstates(Els, {A, El, C});
 	_ -&gt;
-	    find_x_event(Els)
+	    find_x_event_chatstates(Els, {A, B, true})
     end.
 
 find_x_expire(_, []) -&gt;
@@ -272,6 +307,13 @@ resend_offline_messages(User, Server) -&gt;
 			    Els ++
 			    [jlib:timestamp_to_xml(
 			       calendar:now_to_universal_time(
+				 R#offline_msg.timestamp),
+			       utc,
+			       jlib:make_jid(&quot;&quot;, Server, &quot;&quot;),
+			       &quot;Offline Storage&quot;),
+			     %% TODO: Delete the next three lines once XEP-0091 is Obsolete
+			     jlib:timestamp_to_xml(
+			       calendar:now_to_universal_time(
 				 R#offline_msg.timestamp))]}}
 	      end,
 	      lists:keysort(#offline_msg.timestamp, Rs));
@@ -300,7 +342,14 @@ pop_offline_messages(Ls, User, Server) -&gt;
 			     {xmlelement, Name, Attrs,
 			      Els ++
 			      [jlib:timestamp_to_xml(
-				 calendar:now_to_universal_time(
+			         calendar:now_to_universal_time(
+				   R#offline_msg.timestamp),
+				 utc,
+				 jlib:make_jid(&quot;&quot;, Server, &quot;&quot;),
+				 &quot;Offline Storage&quot;),
+			       %% TODO: Delete the next three lines once XEP-0091 is Obsolete
+			       jlib:timestamp_to_xml(
+			         calendar:now_to_universal_time(
 				   R#offline_msg.timestamp))]}}
 		    end,
 		    lists:filter(
@@ -317,6 +366,7 @@ pop_offline_messages(Ls, User, Server) -&gt;
 	    Ls
     end.
 
+
 remove_expired_messages() -&gt;
     TimeStamp = now(),
     F = fun() -&gt;</diff>
      <filename>src/mod_offline.erl</filename>
    </modified>
    <modified>
      <diff>@@ -36,6 +36,7 @@
 	 stop/1,
 	 store_packet/3,
 	 pop_offline_messages/3,
+	 get_sm_features/5,
 	 remove_user/2,
 	 webadmin_page/3,
 	 webadmin_user/4,
@@ -63,6 +64,10 @@ start(Host, Opts) -&gt;
 		       ?MODULE, remove_user, 50),
     ejabberd_hooks:add(anonymous_purge_hook, Host,
 		       ?MODULE, remove_user, 50),
+    ejabberd_hooks:add(disco_sm_features, Host,
+		       ?MODULE, get_sm_features, 50),
+    ejabberd_hooks:add(disco_local_features, Host,
+		       ?MODULE, get_sm_features, 50),
     ejabberd_hooks:add(webadmin_page_host, Host,
 		       ?MODULE, webadmin_page, 50),
     ejabberd_hooks:add(webadmin_user, Host,
@@ -107,6 +112,13 @@ loop(Host, AccessMaxOfflineMsgs) -&gt;
 						Els ++
 						[jlib:timestamp_to_xml(
 						   calendar:now_to_universal_time(
+					     M#offline_msg.timestamp),
+					   utc,
+					   jlib:make_jid(&quot;&quot;, Host, &quot;&quot;),
+					   &quot;Offline Storage&quot;),
+					 %% TODO: Delete the next three lines once XEP-0091 is Obsolete
+					 jlib:timestamp_to_xml( 
+					   calendar:now_to_universal_time(
 						     M#offline_msg.timestamp))]},
 				      XML =
 					  ejabberd_odbc:escape(
@@ -155,6 +167,8 @@ stop(Host) -&gt;
 			  ?MODULE, remove_user, 50),
     ejabberd_hooks:delete(anonymous_purge_hook, Host,
 			  ?MODULE, remove_user, 50),
+    ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, get_sm_features, 50),
+    ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, get_sm_features, 50),
     ejabberd_hooks:delete(webadmin_page_host, Host,
 			  ?MODULE, webadmin_page, 50),
     ejabberd_hooks:delete(webadmin_user, Host,
@@ -165,12 +179,27 @@ stop(Host) -&gt;
     exit(whereis(Proc), stop),
     ok.
 
+get_sm_features(Acc, _From, _To, &quot;&quot;, _Lang) -&gt;
+    Feats = case Acc of
+		{result, I} -&gt; I;
+		_ -&gt; []
+	    end,
+    {result, Feats ++ [?NS_FEATURE_MSGOFFLINE]};
+
+get_sm_features(_Acc, _From, _To, ?NS_FEATURE_MSGOFFLINE, _Lang) -&gt;
+    %% override all lesser features...
+    {result, []};
+
+get_sm_features(Acc, _From, _To, _Node, _Lang) -&gt;
+    Acc.
+
+
 store_packet(From, To, Packet) -&gt;
     Type = xml:get_tag_attr_s(&quot;type&quot;, Packet),
     if
 	(Type /= &quot;error&quot;) and (Type /= &quot;groupchat&quot;) and
 	(Type /= &quot;headline&quot;) -&gt;
-	    case check_event(From, To, Packet) of
+	    case check_event_chatstates(From, To, Packet) of
 		true -&gt;
 		    #jid{luser = LUser} = To,
 		    TimeStamp = now(),
@@ -191,12 +220,22 @@ store_packet(From, To, Packet) -&gt;
 	    ok
     end.
 
-check_event(From, To, Packet) -&gt;
+%% Check if the packet has any content about XEP-0022 or XEP-0085
+check_event_chatstates(From, To, Packet) -&gt;
     {xmlelement, Name, Attrs, Els} = Packet,
-    case find_x_event(Els) of
-	false -&gt;
+    case find_x_event_chatstates(Els, {false, false, false}) of
+	%% There wasn't any x:event or chatstates subelements
+	{false, false, _} -&gt;
+	    true;
+	%% There a chatstates subelement and other stuff, but no x:event
+	{false, CEl, true} when CEl /= false -&gt;
 	    true;
-	El -&gt;
+	%% There was only a subelement: a chatstates
+	{false, CEl, false} when CEl /= false -&gt;
+	    %% Don't allow offline storage
+	    false;
+	%% There was an x:event element, and maybe also other stuff
+	{El, _, _} when El /= false -&gt;
 	    case xml:get_subtag(El, &quot;id&quot;) of
 		false -&gt;
 		    case xml:get_subtag(El, &quot;offline&quot;) of
@@ -218,22 +257,25 @@ check_event(From, To, Packet) -&gt;
 					    {xmlelement, &quot;offline&quot;, [], []}]}]
 					}),
 			    true
-			end;
+		    end;
 		_ -&gt;
 		    false
 	    end
     end.
 
-find_x_event([]) -&gt;
-    false;
-find_x_event([{xmlcdata, _} | Els]) -&gt;
-    find_x_event(Els);
-find_x_event([El | Els]) -&gt;
+%% Check if the packet has subelements about XEP-0022, XEP-0085 or other
+find_x_event_chatstates([], Res) -&gt;
+    Res;
+find_x_event_chatstates([{xmlcdata, _} | Els], Res) -&gt;
+    find_x_event_chatstates(Els, Res);
+find_x_event_chatstates([El | Els], {A, B, C}) -&gt;
     case xml:get_tag_attr_s(&quot;xmlns&quot;, El) of
 	?NS_EVENT -&gt;
-	    El;
+	    find_x_event_chatstates(Els, {El, B, C});
+	?NS_CHATSTATES -&gt;
+	    find_x_event_chatstates(Els, {A, El, C});
 	_ -&gt;
-	    find_x_event(Els)
+	    find_x_event_chatstates(Els, {A, B, true})
     end.
 
 find_x_expire(_, []) -&gt;</diff>
      <filename>src/mod_offline_odbc.erl</filename>
    </modified>
    <modified>
      <diff>@@ -120,9 +120,13 @@ delete_listener(Host) -&gt;
 %%%------------------------
 
 %% disco#info request
-process_iq(_, #iq{type = get, xmlns = ?NS_DISCO_INFO, lang = Lang} = IQ, #state{name=Name}) -&gt;
+process_iq(_, #iq{type = get, xmlns = ?NS_DISCO_INFO, lang = Lang} = IQ,
+	   #state{name=Name, serverhost=ServerHost}) -&gt;
+    Info = ejabberd_hooks:run_fold(
+	     disco_info, ServerHost, [], [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
     IQ#iq{type = result, sub_el =
-	  [{xmlelement, &quot;query&quot;, [{&quot;xmlns&quot;, ?NS_DISCO_INFO}], iq_disco_info(Lang, Name)}]};
+	  [{xmlelement, &quot;query&quot;, [{&quot;xmlns&quot;, ?NS_DISCO_INFO}],
+	    iq_disco_info(Lang, Name) ++ Info}]};
 
 %% disco#items request
 process_iq(_, #iq{type = get, xmlns = ?NS_DISCO_ITEMS} = IQ, _) -&gt;</diff>
      <filename>src/mod_proxy65/mod_proxy65_service.erl</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,7 @@ ERLBEHAVBEAMS = $(addprefix $(OUTDIR)/,$(ERLBEHAVS:.erl=.beam))
 BEAMS = $(addprefix $(OUTDIR)/,$(SOURCES:.erl=.beam))
 
 
-all:    $(ERLBEHAVBEAMS) $(BEAMS)
+all: mod_pubsub_odbc.erl $(ERLBEHAVBEAMS) $(BEAMS)
 
 $(BEAMS): $(ERLBEHAVBEAMS)
 
@@ -38,6 +38,9 @@ clean:
 distclean: clean
 	rm -f Makefile
 
+mod_pubsub_odbc.erl:
+	patch -o mod_pubsub_odbc.erl mod_pubsub.erl pubsub_odbc.patch
+
 TAGS:
 	etags *.erl
 </diff>
      <filename>src/mod_pubsub/Makefile.in</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ include ..\Makefile.inc
 EFLAGS = -I .. -pz ..
 
 OUTDIR = ..
-BEAMS = ..\gen_pubsub_node.beam ..\gen_pubsub_nodetree.beam ..\mod_pubsub.beam ..\nodetree_tree.beam ..\nodetree_virtual.beam ..\node_buddy.beam ..\node_club.beam ..\node_hometree.beam ..\node_dispatch.beam ..\node_pep.beam ..\node_private.beam ..\node_public.beam
+BEAMS =  ..\gen_pubsub_node.beam ..\gen_pubsub_nodetree.beam ..\mod_pubsub.beam ..\mod_pubsub_odbc.beam ..\node_buddy.beam ..\node_club.beam ..\node_dag.beam ..\node_dispatch.beam ..\node_flat.beam ..\node_flat_odbc.beam ..\node_hometree.beam ..\node_hometree_odbc.beam ..\node_mb.beam ..\node_pep.beam ..\node_pep_odbc.beam ..\node_private.beam ..\node_public.beam ..\nodetree_dag.beam ..\nodetree_tree.beam ..\nodetree_tree_odbc.beam ..\nodetree_virtual.beam ..\pubsub_db_odbc.beam ..\pubsub_index.beam ..\pubsub_subscription.beam ..\pubsub_subscription_odbc.beam
 
 ALL : $(BEAMS)
 
@@ -20,11 +20,8 @@ $(OUTDIR)\gen_pubsub_nodetree.beam : gen_pubsub_nodetree.erl
 $(OUTDIR)\mod_pubsub.beam : mod_pubsub.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) mod_pubsub.erl
 
-$(OUTDIR)\nodetree_tree.beam : nodetree_tree.erl
-	erlc -W $(EFLAGS) -o $(OUTDIR) nodetree_tree.erl
-
-$(OUTDIR)\nodetree_virtual.beam : nodetree_virtual.erl
-	erlc -W $(EFLAGS) -o $(OUTDIR) nodetree_virtual.erl
+$(OUTDIR)\mod_pubsub_odbc.beam : mod_pubsub_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) mod_pubsub_odbc.erl
 
 $(OUTDIR)\node_buddy.beam : node_buddy.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) node_buddy.erl
@@ -32,17 +29,59 @@ $(OUTDIR)\node_buddy.beam : node_buddy.erl
 $(OUTDIR)\node_club.beam : node_club.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) node_club.erl
 
-$(OUTDIR)\node_hometree.beam : node_hometree.erl
-	erlc -W $(EFLAGS) -o $(OUTDIR) node_hometree.erl
+$(OUTDIR)\node_dag.beam : node_dag.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_dag.erl
 
 $(OUTDIR)\node_dispatch.beam : node_dispatch.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) node_dispatch.erl
 
+$(OUTDIR)\node_flat.beam : node_flat.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_flat.erl
+
+$(OUTDIR)\node_flat_odbc.beam : node_flat_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_flat_odbc.erl
+
+$(OUTDIR)\node_hometree.beam : node_hometree.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_hometree.erl
+
+$(OUTDIR)\node_hometree_odbc.beam : node_hometree_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_hometree_odbc.erl
+
+$(OUTDIR)\node_mb.beam : node_mb.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_mb.erl
+
 $(OUTDIR)\node_pep.beam : node_pep.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) node_pep.erl
 
+$(OUTDIR)\node_pep_odbc.beam : node_pep_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) node_pep_odbc.erl
+
 $(OUTDIR)\node_private.beam : node_private.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) node_private.erl
 
 $(OUTDIR)\node_public.beam : node_public.erl
 	erlc -W $(EFLAGS) -o $(OUTDIR) node_public.erl
+
+$(OUTDIR)\nodetree_dag.beam : nodetree_dag.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) nodetree_dag.erl
+
+$(OUTDIR)\nodetree_tree.beam : nodetree_tree.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) nodetree_tree.erl
+
+$(OUTDIR)\nodetree_tree_odbc.beam : nodetree_tree_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) nodetree_tree_odbc.erl
+
+$(OUTDIR)\nodetree_virtual.beam : nodetree_virtual.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) nodetree_virtual.erl
+
+$(OUTDIR)\pubsub_db_odbc.beam : pubsub_db_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) pubsub_db_odbc.erl
+
+$(OUTDIR)\pubsub_index.beam : pubsub_index.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) pubsub_index.erl
+
+$(OUTDIR)\pubsub_subscription.beam : pubsub_subscription.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) pubsub_subscription.erl
+
+$(OUTDIR)\pubsub_subscription_odbc.beam : pubsub_subscription_odbc.erl
+	erlc -W $(EFLAGS) -o $(OUTDIR) pubsub_subscription_odbc.erl</diff>
      <filename>src/mod_pubsub/Makefile.win32</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,8 @@ behaviour_info(callbacks) -&gt;
      {get_node_subscriptions, 1},
      {get_entity_subscriptions, 2},
      {get_subscriptions, 2},
-     {set_subscriptions, 3},
+     {set_subscriptions, 4},
+     {get_pending_nodes, 2},
      {get_states, 1},
      {get_state, 2},
      {set_state, 1},</diff>
      <filename>src/mod_pubsub/gen_pubsub_node.erl</filename>
    </modified>
    <modified>
      <diff>@@ -35,7 +35,7 @@
 %%% Functions concerning configuration should be rewritten.
 %%%
 %%% Support for subscription-options and multi-subscribe features was
-%%% added by Brian Cully &lt;bjc@kublai.com&gt;. Subscriptions and options are
+%%% added by Brian Cully (bjc AT kublai.com). Subscriptions and options are
 %%% stored in the pubsub_subscription table, with a link to them provided
 %%% by the subscriptions field of pubsub_state. For information on
 %%% subscription-options and mulit-subscribe see XEP-0060 sections 6.1.6,
@@ -53,6 +53,7 @@
 -behaviour(gen_mod).
 
 -include(&quot;ejabberd.hrl&quot;).
+-include(&quot;adhoc.hrl&quot;).
 -include(&quot;jlib.hrl&quot;).
 -include(&quot;pubsub.hrl&quot;).
 
@@ -166,9 +167,9 @@ stop(Host) -&gt;
 
 %%--------------------------------------------------------------------
 %% Function: init(Args) -&gt; {ok, State} |
-%%                         {ok, State, Timeout} |
-%%                         ignore               |
-%%                         {stop, Reason}
+%%			 {ok, State, Timeout} |
+%%			 ignore	       |
+%%			 {stop, Reason}
 %% Description: Initiates the server
 %%--------------------------------------------------------------------
 init([ServerHost, Opts]) -&gt;
@@ -264,8 +265,8 @@ terminate_plugins(Host, ServerHost, Plugins, TreePlugin) -&gt;
     ok.
 
 init_nodes(Host, ServerHost) -&gt;
-    create_node(Host, ServerHost, [&quot;home&quot;], service_jid(Host), ?STDNODE),
-    create_node(Host, ServerHost, [&quot;home&quot;, ServerHost], service_jid(Host), ?STDNODE),
+    create_node(Host, ServerHost, [&quot;home&quot;], service_jid(Host), &quot;hometree&quot;),
+    create_node(Host, ServerHost, [&quot;home&quot;, ServerHost], service_jid(Host), &quot;hometree&quot;),
     ok.
 
 update_node_database(Host, ServerHost) -&gt;
@@ -275,7 +276,7 @@ update_node_database(Host, ServerHost) -&gt;
 	[host_node, host_parent, info] -&gt;
 	    ?INFO_MSG(&quot;upgrade node pubsub tables&quot;,[]),
 	    F = fun() -&gt;
-			lists:foldl(
+			{Result, LastIdx} = lists:foldl(
 			  fun({pubsub_node, NodeId, ParentId, {nodeinfo, Items, Options, Entities}}, {RecList, NodeIdx}) -&gt;
 				  ItemsList =
 				      lists:foldl(
@@ -319,7 +320,9 @@ update_node_database(Host, ServerHost) -&gt;
 				   RecList], NodeIdx + 1}
 			  end, {[], 1},
 			  mnesia:match_object(
-			    {pubsub_node, {Host, '_'}, '_', '_'}))
+			    {pubsub_node, {Host, '_'}, '_', '_'})),
+			mnesia:write(#pubsub_index{index = node, last = LastIdx, free = []}),
+			Result
 		end,
 	    {atomic, NewRecords} = mnesia:transaction(F),
 	    {atomic, ok} = mnesia:delete_table(pubsub_node),
@@ -350,7 +353,7 @@ update_node_database(Host, ServerHost) -&gt;
 		end,
 	    mnesia:transform_table(pubsub_node, F, [nodeid, id, parents, type, owners, options]),
 	    FNew = fun() -&gt;
-		lists:foldl(fun(#pubsub_node{nodeid = NodeId} = PubsubNode, NodeIdx) -&gt;
+		LastIdx = lists:foldl(fun(#pubsub_node{nodeid = NodeId} = PubsubNode, NodeIdx) -&gt;
 		    mnesia:write(PubsubNode#pubsub_node{id = NodeIdx}),
 		    lists:foreach(fun(#pubsub_state{stateid = StateId} = State) -&gt;
 			{JID, _} = StateId,
@@ -370,7 +373,8 @@ update_node_database(Host, ServerHost) -&gt;
 		end, 1, mnesia:match_object(
 			{pubsub_node, {Host, '_'}, '_', '_', '_', '_', '_'})
 		    ++  mnesia:match_object(
-			{pubsub_node, {{'_', ServerHost, '_'}, '_'}, '_', '_', '_', '_', '_'}))
+			{pubsub_node, {{'_', ServerHost, '_'}, '_'}, '_', '_', '_', '_', '_'})),
+		mnesia:write(#pubsub_index{index = node, last = LastIdx, free = []})
 		end,
 	    case mnesia:transaction(FNew) of
 		{atomic, Result} -&gt;
@@ -458,7 +462,7 @@ send_loop(State) -&gt;
 	lists:foreach(fun(PType) -&gt;
 	    {result, Subscriptions} = node_action(Host, PType, get_entity_subscriptions, [Host, JID]),
 	    lists:foreach(
-		fun({Node, subscribed, SubJID}) -&gt; 
+		fun({Node, subscribed, _, SubJID}) -&gt; 
 		    if (SubJID == LJID) or (SubJID == BJID) -&gt;
 			#pubsub_node{options = Options, type = Type, id = NodeId} = Node,
 			case get_option(Options, send_last_published_item) of
@@ -726,11 +730,11 @@ remove_user(User, Server) -&gt;
 %%--------------------------------------------------------------------
 %% Function:
 %% handle_call(Request, From, State) -&gt; {reply, Reply, State} |
-%%                                      {reply, Reply, State, Timeout} |
-%%                                      {noreply, State} |
-%%                                      {noreply, State, Timeout} |
-%%                                      {stop, Reason, Reply, State} |
-%%                                      {stop, Reason, State}
+%%				      {reply, Reply, State, Timeout} |
+%%				      {noreply, State} |
+%%				      {noreply, State, Timeout} |
+%%				      {stop, Reason, Reply, State} |
+%%				      {stop, Reason, State}
 %% Description: Handling call messages
 %%--------------------------------------------------------------------
 %% @private
@@ -747,8 +751,8 @@ handle_call(stop, _From, State) -&gt;
 
 %%--------------------------------------------------------------------
 %% Function: handle_cast(Msg, State) -&gt; {noreply, State} |
-%%                                      {noreply, State, Timeout} |
-%%                                      {stop, Reason, State}
+%%				      {noreply, State, Timeout} |
+%%				      {stop, Reason, State}
 %% Description: Handling cast messages
 %%--------------------------------------------------------------------
 %% @private
@@ -767,7 +771,7 @@ handle_cast({remove_user, LUser, LServer}, State) -&gt;
     lists:foreach(fun(PType) -&gt;
 	{result, Subscriptions} = node_action(Host, PType, get_entity_subscriptions, [Host, Owner]),
 	lists:foreach(fun
-	    ({#pubsub_node{nodeid = {H, N}}, subscribed, JID}) -&gt;
+	    ({#pubsub_node{nodeid = {H, N}}, subscribed, _, JID}) -&gt;
 		unsubscribe_node(H, N, Owner, JID, all);
 	    (_) -&gt;
 		ok
@@ -788,7 +792,7 @@ handle_cast({unsubscribe, Subscriber, Owner}, State) -&gt;
     lists:foreach(fun(PType) -&gt;
 	{result, Subscriptions} = node_action(Host, PType, get_entity_subscriptions, [Host, Subscriber]),
 	lists:foreach(fun
-	    ({Node, subscribed, JID}) -&gt;
+	    ({Node, subscribed, _, JID}) -&gt;
 		#pubsub_node{options = Options, owners = Owners, type = Type, id = NodeId} = Node,
 		case get_option(Options, access_model) of
 		    presence -&gt;
@@ -812,8 +816,8 @@ handle_cast(_Msg, State) -&gt;
 
 %%--------------------------------------------------------------------
 %% Function: handle_info(Info, State) -&gt; {noreply, State} |
-%%                                       {noreply, State, Timeout} |
-%%                                       {stop, Reason, State}
+%%				       {noreply, State, Timeout} |
+%%				       {stop, Reason, State}
 %% Description: Handling all non call/cast messages
 %%--------------------------------------------------------------------
 %% @private
@@ -889,12 +893,15 @@ do_route(ServerHost, Access, Plugins, Host, From, To, Packet) -&gt;
 			    sub_el = SubEl, lang = Lang} = IQ -&gt;
 			    {xmlelement, _, QAttrs, _} = SubEl,
 			    Node = xml:get_attr_s(&quot;node&quot;, QAttrs),
+			    Info = ejabberd_hooks:run_fold(
+				     disco_info, ServerHost, [],
+				     [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
 			    Res = case iq_disco_info(Host, Node, From, Lang) of
 				      {result, IQRes} -&gt;
 					  jlib:iq_to_xml(
 					    IQ#iq{type = result,
 						  sub_el = [{xmlelement, &quot;query&quot;,
-							     QAttrs, IQRes}]});
+							     QAttrs, IQRes++Info}]});
 				      {error, Error} -&gt;
 					  jlib:make_error_reply(Packet, Error)
 				  end,
@@ -943,6 +950,15 @@ do_route(ServerHost, Access, Plugins, Host, From, To, Packet) -&gt;
 					sub_el = [{xmlelement, &quot;vCard&quot;, [{&quot;xmlns&quot;, XMLNS}],
 						   iq_get_vcard(Lang)}]},
 			    ejabberd_router:route(To, From, jlib:iq_to_xml(Res));
+			#iq{type = set, xmlns = ?NS_COMMANDS} = IQ -&gt;
+			    Res = case iq_command(Host, ServerHost, From, IQ, Access, Plugins) of
+				      {error, Error} -&gt;
+					  jlib:make_error_reply(Packet, Error);
+				      {result, IQRes} -&gt;
+					  jlib:iq_to_xml(IQ#iq{type = result,
+							       sub_el = IQRes})
+				  end,
+			    ejabberd_router:route(To, From, Res);
 			#iq{} -&gt;
 			    Err = jlib:make_error_reply(
 				    Packet,
@@ -1280,6 +1296,140 @@ iq_pubsub_owner(Host, ServerHost, From, IQType, SubEl, Lang) -&gt;
 	    {error, ?ERR_BAD_REQUEST}
     end.
 
+iq_command(Host, ServerHost, From, IQ, Access, Plugins) -&gt;
+    case adhoc:parse_request(IQ) of
+	Req when is_record(Req, adhoc_request) -&gt;
+	    case adhoc_request(Host, ServerHost, From, Req, Access, Plugins) of
+		Resp when is_record(Resp, adhoc_response) -&gt;
+		    {result, [adhoc:produce_response(Req, Resp)]};
+		Error -&gt;
+		    Error
+	    end;
+	Err -&gt;
+	    Err
+    end.
+
+%% @doc &lt;p&gt;Processes an Ad Hoc Command.&lt;/p&gt;
+adhoc_request(Host, _ServerHost, Owner,
+	      #adhoc_request{node   = ?NS_PUBSUB_GET_PENDING,
+			     lang   = Lang,
+			     action = &quot;execute&quot;,
+			     xdata  = false},
+	     _Access, Plugins) -&gt;
+    send_pending_node_form(Host, Owner, Lang, Plugins);
+adhoc_request(Host, _ServerHost, Owner,
+	      #adhoc_request{node   = ?NS_PUBSUB_GET_PENDING,
+			     action = &quot;execute&quot;,
+			     xdata  = XData},
+	     _Access, _Plugins) -&gt;
+    ParseOptions = case XData of
+		       {xmlelement, &quot;x&quot;, _Attrs, _SubEls} = XEl -&gt;
+			   case jlib:parse_xdata_submit(XEl) of
+			       invalid -&gt;
+				   {error, ?ERR_BAD_REQUEST};
+			       XData2 -&gt;
+				   case set_xoption(XData2, []) of
+				       NewOpts when is_list(NewOpts) -&gt;
+					   {result, NewOpts};
+				       Err -&gt;
+					   Err
+				   end
+			   end;
+		       _ -&gt;
+			   ?INFO_MSG(&quot;Bad XForm: ~p&quot;, [XData]),
+			   {error, ?ERR_BAD_REQUEST}
+		   end,
+    case ParseOptions of
+	{result, XForm} -&gt;
+	    case lists:keysearch(node, 1, XForm) of
+		{value, {_, Node}} -&gt;
+		    send_pending_auth_events(Host, Node, Owner);
+		false -&gt;
+		    {error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, &quot;bad-payload&quot;)}
+	    end;
+	Error -&gt;
+	    Error
+    end;
+adhoc_request(_Host, _ServerHost, _Owner, Other, _Access, _Plugins) -&gt;
+    ?DEBUG(&quot;Couldn't process ad hoc command:~n~p&quot;, [Other]),
+    {error, ?ERR_ITEM_NOT_FOUND}.
+
+%% @spec (Host, Owner, Lang, Plugins) -&gt; iqRes()
+%% @doc &lt;p&gt;Sends the process pending subscriptions XForm for Host to
+%% Owner.&lt;/p&gt;
+send_pending_node_form(Host, Owner, _Lang, Plugins) -&gt;
+    Filter =
+	fun (Plugin) -&gt;
+		lists:member(&quot;get-pending&quot;, features(Plugin))
+	end,
+    case lists:filter(Filter, Plugins) of
+	[] -&gt;
+	    {error, ?ERR_FEATURE_NOT_IMPLEMENTED};
+	Ps -&gt;
+	    XOpts = lists:map(fun (Node) -&gt;
+				      {xmlelement, &quot;option&quot;, [],
+				       [{xmlelement, &quot;value&quot;, [],
+					 [{xmlcdata, node_to_string(Node)}]}]}
+			      end, get_pending_nodes(Host, Owner, Ps)),
+	    XForm = {xmlelement, &quot;x&quot;, [{&quot;xmlns&quot;, ?NS_XDATA}, {&quot;type&quot;, &quot;form&quot;}],
+		     [{xmlelement, &quot;field&quot;,
+		       [{&quot;type&quot;, &quot;list-single&quot;}, {&quot;var&quot;, &quot;pubsub#node&quot;}],
+		       lists:usort(XOpts)}]},
+	    #adhoc_response{status = executing,
+			    defaultaction = &quot;execute&quot;,
+			    elements = [XForm]}
+    end.
+
+get_pending_nodes(Host, Owner, Plugins) -&gt;
+    Tr =
+	fun (Type) -&gt;
+		case node_call(Type, get_pending_nodes, [Host, Owner]) of
+		    {result, Nodes} -&gt; Nodes;
+		    _	       -&gt; []
+		end
+	end,
+    case transaction(fun () -&gt; {result, lists:flatmap(Tr, Plugins)} end,
+		     sync_dirty) of
+	{result, Res} -&gt; Res;
+	Err	   -&gt; Err
+    end.
+
+%% @spec (Host, Node, Owner) -&gt; iqRes()
+%% @doc &lt;p&gt;Send a subscription approval form to Owner for all pending
+%% subscriptions on Host and Node.&lt;/p&gt;
+send_pending_auth_events(Host, Node, Owner) -&gt;
+    ?DEBUG(&quot;Sending pending auth events for ~s on ~s:~s&quot;,
+	   [jlib:jid_to_string(Owner), Host, node_to_string(Node)]),
+    Action =
+	fun (#pubsub_node{id = NodeID, type = Type} = N) -&gt;
+		case lists:member(&quot;get-pending&quot;, features(Type)) of
+		    true -&gt;
+			case node_call(Type, get_affiliation, [NodeID, Owner]) of
+			    {result, owner} -&gt;
+				broadcast_pending_auth_events(N),
+				{result, ok};
+			    _ -&gt;
+				{error, ?ERR_FORBIDDEN}
+			end;
+		    false -&gt;
+			{error, ?ERR_FEATURE_NOT_IMPLEMENTED}
+		end
+	end,
+    case transaction(Host, Node, Action, sync_dirty) of
+	{result, _} -&gt;
+	    #adhoc_response{};
+	Err -&gt;
+	    Err
+    end.
+
+broadcast_pending_auth_events(#pubsub_node{type = Type, id = NodeID} = Node) -&gt;
+    {result, Subscriptions} = node_call(Type, get_node_subscriptions, [NodeID]),
+    lists:foreach(fun ({J, pending, _SubID}) -&gt;
+			  send_authorization_request(Node, jlib:make_jid(J));
+		      ({J, pending}) -&gt;
+			  send_authorization_request(Node, jlib:make_jid(J))
+		  end, Subscriptions).
+
 %%% authorization handling
 
 send_authorization_request(#pubsub_node{owners = Owners, nodeid = {Host, Node}}, Subscriber) -&gt;
@@ -1417,18 +1567,11 @@ update_auth(Host, Node, Type, NodeId, Subscriber,
     case Subscription of
 	[{pending, SubID}] -&gt; %% TODO does not work if several pending
 	    NewSubscription = case Allow of
-				  true  -&gt;
-				      node_call(Type, set_subscriptions,
-						[NodeId, Subscriber,
-						 replace_subscription({subscribed, SubID},
-								      Subscriptions)]),
-				      {subscribed, SubID};
-				  false -&gt;
-				      node_call(Type, unsubscribe_node,
-						[NodeId, Subscriber, Subscriber,
-						 SubID]),
-				      none
+				  true  -&gt; subscribed;
+				  false -&gt; none
 			      end,
+	    node_call(Type, set_subscriptions,
+		      [NodeId, Subscriber, NewSubscription, SubID]),
 	    send_authorization_approval(Host, Subscriber, Node,
 					NewSubscription),
 	    {result, ok};
@@ -1436,17 +1579,6 @@ update_auth(Host, Node, Type, NodeId, Subscriber,
 	    {error, ?ERR_UNEXPECTED_REQUEST}
     end.
 
-replace_subscription(NewSub, Subs) -&gt;
-    lists:foldl(fun(S, A) -&gt; replace_subscription_helper(NewSub, S, A) end,
-		[], Subs).
-
-replace_subscription_helper({none, SubID}, {_, SubID}, Acc) -&gt;
-    Acc;
-replace_subscription_helper({NewSub, SubID}, {_, SubID}, Acc) -&gt;
-    [{NewSub, SubID} | Acc];
-replace_subscription_helper(_, OldSub, Acc) -&gt;
-    [OldSub | Acc].
-
 -define(XFIELD(Type, Label, Var, Val),
 	{xmlelement, &quot;field&quot;, [{&quot;type&quot;, Type},
 			       {&quot;label&quot;, translate:translate(Lang, Label)},
@@ -1667,7 +1799,7 @@ delete_node(Host, Node, Owner) -&gt;
 	    Error
     end.
 
-%% @spec (Host, Node, From, JID) -&gt;
+%% @spec (Host, Node, From, JID, Configuration) -&gt;
 %%		  {error, Reason::stanzaError()} |
 %%		  {result, []}
 %%	 Host = host()
@@ -1834,7 +1966,7 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload) -&gt;
 		    Features = features(Type),
 		    PublishFeature = lists:member(&quot;publish&quot;, Features),
 		    PublishModel = get_option(Options, publish_model),
-		    MaxItems = max_items(Options),
+		    MaxItems = max_items(Host, Options),
 		    DeliverPayloads = get_option(Options, deliver_payloads),
 		    PersistItems = get_option(Options, persist_items),
 		    PayloadCount = payload_xmlelements(Payload),
@@ -2117,7 +2249,7 @@ get_item(Host, Node, ItemId) -&gt;
 	Error -&gt; Error
     end.
 
-%% @spec (Host, Node, NodeId, Type LJID, Number) -&gt; any()
+%% @spec (Host, Node, NodeId, Type, LJID, Number) -&gt; any()
 %%	 Host = pubsubHost()
 %%	 Node = pubsubNode()
 %%	 NodeId = pubsubNodeId()
@@ -2428,19 +2560,19 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) -&gt;
 				end;
 			    ({_, none, _}) -&gt;
 				[];
-			    ({#pubsub_node{nodeid = {_, SubsNode}}, subscribed, SubID, SubJID}) -&gt;
+			    ({#pubsub_node{nodeid = {_, SubsNode}}, Subscription, SubID, SubJID}) -&gt;
 				case Node of
 				[] -&gt;
 				 [{xmlelement, &quot;subscription&quot;,
 				   [{&quot;jid&quot;, jlib:jid_to_string(SubJID)},
 				    {&quot;subid&quot;, SubID},
-				    {&quot;subscription&quot;, subscription_to_string(subscribed)}|nodeAttr(SubsNode)],
+				    {&quot;subscription&quot;, subscription_to_string(Subscription)}|nodeAttr(SubsNode)],
 				   []}];
 				SubsNode -&gt;
 				 [{xmlelement, &quot;subscription&quot;,
 				   [{&quot;jid&quot;, jlib:jid_to_string(SubJID)},
 				    {&quot;subid&quot;, SubID},
-				    {&quot;subscription&quot;, subscription_to_string(subscribed)}],
+				    {&quot;subscription&quot;, subscription_to_string(Subscription)}],
 				   []}];
 				_ -&gt;
 				 []
@@ -2484,11 +2616,10 @@ get_subscriptions(Host, Node, JID) -&gt;
 		     end
 	     end,
     case transaction(Host, Node, Action, sync_dirty) of
-	{result, {_, []}} -&gt;
-	    {error, ?ERR_ITEM_NOT_FOUND};
 	{result, {_, Subscriptions}} -&gt;
 	    Entities = lists:flatmap(
 			 fun({_, none}) -&gt; [];
+			    ({_, pending, _}) -&gt; [];
 			    ({AJID, Subscription}) -&gt;
 				 [{xmlelement, &quot;subscription&quot;,
 				   [{&quot;jid&quot;, jlib:jid_to_string(AJID)},
@@ -2523,12 +2654,13 @@ set_subscriptions(Host, Node, From, EntitiesEls) -&gt;
 					  xml:get_attr_s(&quot;jid&quot;, Attrs)),
 				  Subscription = string_to_subscription(
 						   xml:get_attr_s(&quot;subscription&quot;, Attrs)),
+				  SubId = xml:get_attr_s(&quot;subid&quot;, Attrs),
 				  if
 				      (JID == error) or
 				      (Subscription == false) -&gt;
 					  error;
 				      true -&gt;
-					  [{jlib:jid_tolower(JID), Subscription} | Acc]
+					  [{jlib:jid_tolower(JID), Subscription, SubId} | Acc]
 				  end
 			  end
 		  end
@@ -2540,8 +2672,8 @@ set_subscriptions(Host, Node, From, EntitiesEls) -&gt;
 	    Action = fun(#pubsub_node{owners = Owners, type = Type, id = NodeId}) -&gt;
 			     case lists:member(Owner, Owners) of
 				 true -&gt;
-				     lists:foreach(fun({JID, Subscription}) -&gt;
-							   node_call(Type, set_subscriptions, [NodeId, JID, Subscription])
+				     lists:foreach(fun({JID, Subscription, SubId}) -&gt;
+							   node_call(Type, set_subscriptions, [NodeId, JID, Subscription, SubId])
 						   end, Entities),
 				     {result, []};
 				 _ -&gt;
@@ -2554,7 +2686,6 @@ set_subscriptions(Host, Node, From, EntitiesEls) -&gt;
 	    end
     end.
 
-
 %% @spec (OwnerUser, OwnerServer, {SubscriberUser, SubscriberServer, SubscriberResource}, AllowedGroups)
 %%    -&gt; {PresenceSubscription, RosterGroup}
 get_roster_info(OwnerUser, OwnerServer, {SubscriberUser, SubscriberServer, _}, AllowedGroups) -&gt;
@@ -2632,7 +2763,7 @@ service_jid(Host) -&gt;
     _ -&gt; {jid, &quot;&quot;, Host, &quot;&quot;, &quot;&quot;, Host, &quot;&quot;}
     end.
 
-%% @spec (LJID, PresenceDelivery) -&gt; boolean()
+%% @spec (LJID, NotifyType, Depth, NodeOptions, SubOptions) -&gt; boolean()
 %%	LJID = jid()
 %%	NotifyType = items | nodes
 %%	Depth = integer()
@@ -2652,7 +2783,7 @@ sub_to_deliver(_LJID, NotifyType, Depth, SubOptions) -&gt;
 sub_option_can_deliver(items, _, {subscription_type, nodes}) -&gt; false;
 sub_option_can_deliver(nodes, _, {subscription_type, items}) -&gt; false;
 sub_option_can_deliver(_, _, {subscription_depth, all})      -&gt; true;
-sub_option_can_deliver(_, Depth, {subscription_depth, D})    -&gt; Depth &lt; D;
+sub_option_can_deliver(_, Depth, {subscription_depth, D})    -&gt; Depth =&lt; D;
 sub_option_can_deliver(_, _, {deliver, false})	       -&gt; false;
 sub_option_can_deliver(_, _, {expire, When})		 -&gt; now() &lt; When;
 sub_option_can_deliver(_, _, _)			      -&gt; true.
@@ -2668,7 +2799,7 @@ presence_can_deliver({User, Server, _}, true) -&gt;
     [] -&gt; false;
     Ss -&gt;
 	lists:foldl(fun({session, _, _, _, undefined, _}, Acc) -&gt; Acc;
-	               ({session, _, _, _, _Priority, _}, _Acc) -&gt; true
+		       ({session, _, _, _, _Priority, _}, _Acc) -&gt; true
 	end, false, Ss)
     end.
 
@@ -2793,14 +2924,13 @@ broadcast_config_notification(Host, Node, NodeId, Type, NodeOptions, Lang) -&gt;
 		SubsByDepth when is_list(SubsByDepth) -&gt;
 		    Content = case get_option(NodeOptions, deliver_payloads) of
 			true -&gt;
-			    [{xmlelement, &quot;x&quot;, [{&quot;xmlns&quot;, ?NS_XDATA}, {&quot;type&quot;, &quot;form&quot;}],
+			    [{xmlelement, &quot;x&quot;, [{&quot;xmlns&quot;, ?NS_XDATA}, {&quot;type&quot;, &quot;result&quot;}],
 				get_configure_xfields(Type, NodeOptions, Lang, [])}];
 			false -&gt;
 			    []
 		    end,
 		    Stanza = event_stanza(
-			[{xmlelement, &quot;items&quot;, nodeAttr(Node),
-			    [{xmlelement, &quot;item&quot;, itemAttr(&quot;configuration&quot;), Content}]}]),
+			[{xmlelement, &quot;configuration&quot;, nodeAttr(Node), Content}]),
 		    broadcast_stanza(Host, Node, NodeId, Type,
 				     NodeOptions, SubsByDepth, nodes, Stanza),
 		    {result, true};
@@ -2812,16 +2942,9 @@ broadcast_config_notification(Host, Node, NodeId, Type, NodeOptions, Lang) -&gt;
     end.
 
 get_collection_subscriptions(Host, Node) -&gt;
-    case mnesia:transaction(fun tree_call/3,
-			    [Host, get_parentnodes_tree,
-			     [Host, Node, service_jid(Host)]]) of
-	{atomic, NodesByDepth} when is_list(NodesByDepth) -&gt;
-	    lists:map(fun ({Depth, Nodes}) -&gt;
-			      {Depth, [{N, get_node_subs(N)} || N &lt;- Nodes]}
-		      end, NodesByDepth);
-	Other -&gt;
-	    Other
-    end.
+    lists:map(fun ({Depth, Nodes}) -&gt;
+		{Depth, [{N, get_node_subs(N)} || N &lt;- Nodes]}
+	    end, tree_action(Host, get_parentnodes_tree, [Host, Node, service_jid(Host)])).
 
 get_node_subs(#pubsub_node{type   = Type,
 			   nodeid = {Host, Node},
@@ -2833,6 +2956,16 @@ get_node_subs(#pubsub_node{type   = Type,
 	    Other
     end.
 
+get_options_for_subs(_Host, Node, NodeID, Subs) -&gt;
+    lists:foldl(fun({JID, subscribed, SubID}, Acc) -&gt;
+			case pubsub_subscription:get_subscription(JID, NodeID, SubID) of
+			    {result, #pubsub_subscription{options = Options}} -&gt; [{JID, Node, Options} | Acc];
+			    _ -&gt; Acc
+			end;
+		    (_, Acc) -&gt;
+			Acc
+		end, [], Subs).
+
 % TODO: merge broadcast code that way
 %broadcast(Host, Node, NodeId, Type, NodeOptions, Feature, Force, ElName, SubEls) -&gt;
 %    case (get_option(NodeOptions, Feature) or Force) of
@@ -3005,7 +3138,7 @@ get_default(Host, Node, _From, Lang) -&gt;
     {result, [{xmlelement, &quot;pubsub&quot;, [{&quot;xmlns&quot;, ?NS_PUBSUB_OWNER}],
 		[{xmlelement, &quot;default&quot;, [],
 		    [{xmlelement, &quot;x&quot;, [{&quot;xmlns&quot;, ?NS_XDATA}, {&quot;type&quot;, &quot;form&quot;}],
-		        get_configure_xfields(Type, Options, Lang, [])
+			get_configure_xfields(Type, Options, Lang, [])
 		}]}]}]}.
 
 %% Get node option
@@ -3030,7 +3163,8 @@ node_options(Type) -&gt;
 	    Result
     end.
 
-%% @spec (Options) -&gt; MaxItems
+%% @spec (Host, Options) -&gt; MaxItems
+%%	 Host = host()
 %%	 Options = [Option]
 %%	 Option = {Key::atom(), Value::term()}
 %%	 MaxItems = integer() | unlimited
@@ -3040,7 +3174,7 @@ node_options(Type) -&gt;
 %% @todo In practice, the current data structure means that we cannot manage
 %% millions of items on a given node. This should be addressed in a new
 %% version.
-max_items(Options) -&gt;
+max_items(Host, Options) -&gt;
     case get_option(Options, persist_items) of
 	true -&gt;
 	    case get_option(Options, max_items) of
@@ -3050,8 +3184,13 @@ max_items(Options) -&gt;
 	    end;
 	false -&gt;
 	    case get_option(Options, send_last_published_item) of
-		never -&gt; 0;
-		_ -&gt; 1
+		never -&gt;
+		    0;
+		_ -&gt;
+		    case is_last_item_cache_enabled(Host) of
+		    true -&gt; 0;
+		    false -&gt; 1
+		    end
 	    end
     end.
 
@@ -3083,7 +3222,7 @@ max_items(Options) -&gt;
 
 -define(NLIST_CONFIG_FIELD(Label, Var),
 	?STRINGMXFIELD(Label, &quot;pubsub#&quot; ++ atom_to_list(Var),
-		       [node_to_string(N) || N &lt;- get_option(Options, Var)])).
+		       [node_to_string(N) || N &lt;- get_option(Options, Var, [])])).
 
 get_configure_xfields(_Type, Options, Lang, Groups) -&gt;
     [?XFIELD(&quot;hidden&quot;, &quot;&quot;, &quot;FORM_TYPE&quot;, ?NS_PUBSUB_NODE_CONFIG),
@@ -3167,14 +3306,6 @@ set_configure(Host, Node, From, Els, Lang) -&gt;
 	    {error, ?ERR_BAD_REQUEST}
     end.
 
-get_options_for_subs(_Host, Node, NodeID, Subs) -&gt;
-    lists:foldl(fun({JID, subscribed, SubID}, Acc) -&gt;
-			{result, #pubsub_subscription{options = Options}} = pubsub_subscription:get_subscription(JID, NodeID, SubID),
-			[{JID, Node, Options} | Acc];
-		    (_, Acc) -&gt;
-			Acc
-		end, [], Subs).
-
 add_opt(Key, Value, Opts) -&gt;
     Opts1 = lists:keydelete(Key, 1, Opts),
     [{Key, Value} | Opts1].
@@ -3257,35 +3388,42 @@ set_xoption([{&quot;pubsub#body_xslt&quot;, Value} | Opts], NewOpts) -&gt;
 set_xoption([{&quot;pubsub#collection&quot;, Value} | Opts], NewOpts) -&gt;
     NewValue = [string_to_node(V) || V &lt;- Value],
     ?SET_LIST_XOPT(collection, NewValue);
+set_xoption([{&quot;pubsub#node&quot;, [Value]} | Opts], NewOpts) -&gt;
+    NewValue = string_to_node(Value),
+    ?SET_LIST_XOPT(node, NewValue);
 set_xoption([_ | Opts], NewOpts) -&gt;
     % skip unknown field
     set_xoption(Opts, NewOpts).
 
 %%%% last item cache handling
 
+is_last_item_cache_enabled({_, ServerHost, _}) -&gt;
+    is_last_item_cache_enabled(ServerHost);
+is_last_item_cache_enabled(Host) -&gt;
+    case ets:lookup(gen_mod:get_module_proc(Host, config), last_item_cache) of
+    [{last_item_cache, true}] -&gt; true;
+    _ -&gt; false
+    end.
+
 set_cached_item({_, ServerHost, _}, NodeId, ItemId, Payload) -&gt;
     set_cached_item(ServerHost, NodeId, ItemId, Payload);
 set_cached_item(Host, NodeId, ItemId, Payload) -&gt;
-    case ets:lookup(gen_mod:get_module_proc(Host, config), last_item_cache) of
-    [{last_item_cache, true}] -&gt;
-	ets:insert(gen_mod:get_module_proc(Host, last_items), {NodeId, {ItemId, Payload}});
-    _ -&gt;
-	ok
+    case is_last_item_cache_enabled(Host) of
+    true -&gt; ets:insert(gen_mod:get_module_proc(Host, last_items), {NodeId, {ItemId, Payload}});
+    _ -&gt; ok
     end.
 unset_cached_item({_, ServerHost, _}, NodeId) -&gt;
     unset_cached_item(ServerHost, NodeId);
 unset_cached_item(Host, NodeId) -&gt;
-    case ets:lookup(gen_mod:get_module_proc(Host, config), last_item_cache) of
-    [{last_item_cache, true}] -&gt;
-	ets:delete(gen_mod:get_module_proc(Host, last_items), NodeId);
-    _ -&gt;
-	ok
+    case is_last_item_cache_enabled(Host) of
+    true -&gt; ets:delete(gen_mod:get_module_proc(Host, last_items), NodeId);
+    _ -&gt; ok
     end.
 get_cached_item({_, ServerHost, _}, NodeId) -&gt;
     get_cached_item(ServerHost, NodeId);
 get_cached_item(Host, NodeId) -&gt;
-    case ets:lookup(gen_mod:get_module_proc(Host, config), last_item_cache) of
-    [{last_item_cache, true}] -&gt;
+    case is_last_item_cache_enabled(Host) of
+    true -&gt;
 	case ets:lookup(gen_mod:get_module_proc(Host, last_items), NodeId) of
 	[{NodeId, {ItemId, Payload}}] -&gt;
 	    #pubsub_item{itemid = {ItemId, NodeId}, payload = Payload};
@@ -3338,7 +3476,7 @@ features() -&gt;
 	 % see plugin &quot;delete-items&quot;,   % RECOMMENDED
 	 % see plugin &quot;delete-nodes&quot;,   % RECOMMENDED
 	 % see plugin &quot;filtered-notifications&quot;,   % RECOMMENDED
-	 %TODO &quot;get-pending&quot;,   % OPTIONAL
+	 % see plugin &quot;get-pending&quot;,   % OPTIONAL
 	 % see plugin &quot;instant-nodes&quot;,   % RECOMMENDED
 	 &quot;item-ids&quot;,   % RECOMMENDED
 	 &quot;last-published&quot;,   % RECOMMENDED</diff>
      <filename>src/mod_pubsub/mod_pubsub.erl</filename>
    </modified>
    <modified>
      <diff>@@ -57,7 +57,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -157,8 +158,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscriptions) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscriptions).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node.template</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -159,8 +160,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscriptions) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscriptions).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_buddy.erl</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -158,8 +159,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_club.erl</filename>
    </modified>
    <modified>
      <diff>@@ -42,7 +42,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -86,8 +87,25 @@ unsubscribe_node(NodeID, Sender, Subscriber, SubID) -&gt;
     node_hometree:unsubscribe_node(NodeID, Sender, Subscriber, SubID).
 
 publish_item(NodeID, Publisher, Model, MaxItems, ItemID, Payload) -&gt;
-    node_hometree:publish_item(NodeID, Publisher, Model, MaxItems,
-			      ItemID, Payload).
+    %% TODO: should look up the NodeTree plugin here. There's no
+    %% access to the Host of the request at this level, so for now we
+    %% just use nodetree_dag.
+    case nodetree_dag:get_node(NodeID) of
+        #pubsub_node{options = Options} -&gt;
+            case find_opt(node_type, Options) of
+                collection -&gt;
+                    {error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, &quot;publish&quot;)};
+                _ -&gt;
+                    node_hometree:publish_item(NodeID, Publisher, Model,
+                                               MaxItems, ItemID, Payload)
+            end;
+        Err -&gt;
+            Err
+    end.
+
+find_opt(_,      [])                    -&gt; false;
+find_opt(Option, [{Option, Value} | _]) -&gt; Value;
+find_opt(Option, [_ | T])               -&gt; find_opt(Option, T).
 
 remove_extra_items(NodeID, MaxItems, ItemIDs) -&gt;
     node_hometree:remove_extra_items(NodeID, MaxItems, ItemIDs).
@@ -119,8 +137,11 @@ get_node_subscriptions(NodeID) -&gt;
 get_subscriptions(NodeID, Owner) -&gt;
     node_hometree:get_subscriptions(NodeID, Owner).
 
-set_subscriptions(NodeID, Owner, Subscriptions) -&gt;
-    node_hometree:set_subscriptions(NodeID, Owner, Subscriptions).
+set_subscriptions(NodeID, Owner, Subscription, SubID) -&gt;
+    node_hometree:set_subscriptions(NodeID, Owner, Subscription, SubID).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeID) -&gt;
     node_hometree:get_states(NodeID).</diff>
      <filename>src/mod_pubsub/node_dag.erl</filename>
    </modified>
    <modified>
      <diff>@@ -56,7 +56,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -162,8 +163,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(_NodeId, _Owner) -&gt;
     {result, []}.
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_dispatch.erl</filename>
    </modified>
    <modified>
      <diff>@@ -49,7 +49,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -145,8 +146,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_flat.erl</filename>
    </modified>
    <modified>
      <diff>@@ -65,7 +65,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -93,6 +94,7 @@
 %% plugin. It can be used for example by the developer to create the specific
 %% module database schema if it does not exists yet.&lt;/p&gt;
 init(Host, ServerHost, Opts) -&gt;
+    pubsub_subscription:init(),
     erlsdb:start(),
     Bucket = gen_mod:get_opt(s3_tree_bucket, Opts, ServerHost),
     s3:start(),
@@ -163,6 +165,7 @@ features() -&gt;
      &quot;access-authorize&quot;,
      &quot;delete-nodes&quot;,
      &quot;delete-items&quot;,
+     &quot;get-pending&quot;,
      &quot;instant-nodes&quot;,
      &quot;manage-subscriptions&quot;,
      &quot;modify-affiliations&quot;,
@@ -250,7 +253,7 @@ delete_node(Removed) -&gt;
 	end, Removed),
     {result, {default, broadcast, Reply}}.
 
-%% @spec (NodeId, Sender, Subscriber, AccessModel, SendLast, PresenceSubscription, RosterGroup) -&gt;
+%% @spec (NodeId, Sender, Subscriber, AccessModel, SendLast, PresenceSubscription, RosterGroup, Options) -&gt;
 %%		 {error, Reason} | {result, Result}
 %% @doc &lt;p&gt;Accepts or rejects subcription requests on a PubSub node.&lt;/p&gt;
 %% &lt;p&gt;The mechanism works as follow:
@@ -318,8 +321,9 @@ subscribe_node(NodeId, Sender, Subscriber, AccessModel,
 	(AccessModel == whitelist) and (not Whitelisted) -&gt;
 	    %% Node has whitelist access model and entity lacks required affiliation
 	    {error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, &quot;closed-node&quot;)};
-	PendingSubscription -&gt;
-	    {error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, &quot;pending-subscription&quot;)};
+	(AccessModel == authorize) -&gt; % TODO: to be done
+	    %% Node has authorize access model
+	    {error, ?ERR_FORBIDDEN};
 	%%MustPay -&gt;
 	%%	% Payment is required for a subscription
 	%%	{error, ?ERR_PAYMENT_REQUIRED};
@@ -327,33 +331,32 @@ subscribe_node(NodeId, Sender, Subscriber, AccessModel,
 	%%	% Requesting entity is anonymous
 	%%	{error, ?ERR_FORBIDDEN};
 	true -&gt;
-	    case pubsub_subscription:subscribe_node(Subscriber,
-						    NodeId, Options) of
-		{result, SubID} -&gt;
+	    case pubsub_subscription:add_subscription(Subscriber, NodeId, Options) of
+		SubId when is_list(SubId) -&gt;
 		    NewSub = case AccessModel of
 				 authorize -&gt; pending;
-				 _	 -&gt; subscribed
+				 _ -&gt; subscribed
 			     end,
-		    set_state(SubState#pubsub_state{subscriptions = [{NewSub, SubID} | Subscriptions]}),
+		    set_state(SubState#pubsub_state{subscriptions = [{NewSub, SubId} | Subscriptions]}),
 		    case {NewSub, SendLast} of
 			{subscribed, never} -&gt;
-			    {result, {default, subscribed, SubID}};
+			    {result, {default, subscribed, SubId}};
 			{subscribed, _} -&gt;
-			    {result, {default, subscribed, SubID, send_last}};
+			    {result, {default, subscribed, SubId, send_last}};
 			{_, _} -&gt;
-			    {result, {default, pending, SubID}}
+			    {result, {default, pending, SubId}}
 		    end;
 		_ -&gt;
 		    {error, ?ERR_INTERNAL_SERVER_ERROR}
 	    end
     end.
 
-%% @spec (NodeId, Sender, Subscriber, SubID) -&gt;
+%% @spec (NodeId, Sender, Subscriber, SubId) -&gt;
 %%			{error, Reason} | {result, []}
 %%	 NodeId = mod_pubsub:pubsubNodeId()
 %%	 Sender = mod_pubsub:jid()
 %%	 Subscriber = mod_pubsub:jid()
-%%	 SubID = mod_pubsub:subid()
+%%	 SubId = mod_pubsub:subid()
 %%	 Reason = mod_pubsub:stanzaError()
 %% @doc &lt;p&gt;Unsubscribe the &lt;tt&gt;Subscriber&lt;/tt&gt; from the &lt;tt&gt;Node&lt;/tt&gt;.&lt;/p&gt;
 unsubscribe_node(NodeId, Sender, Subscriber, SubId) -&gt;
@@ -365,8 +368,8 @@ unsubscribe_node(NodeId, Sender, Subscriber, SubId) -&gt;
 	GenKey -&gt; GenState;
 	_ -&gt; get_state(NodeId, SubKey)
 	end,
-    Subscriptions = lists:filter(fun({_Sub, _SubID}) -&gt; true;
-				     (_SubID)	 -&gt; false
+    Subscriptions = lists:filter(fun({_Sub, _SubId}) -&gt; true;
+				     (_SubId)	 -&gt; false
 				 end, SubState#pubsub_state.subscriptions),
     SubIdExists = case SubId of
 		      []		      -&gt; false;
@@ -377,11 +380,11 @@ unsubscribe_node(NodeId, Sender, Subscriber, SubId) -&gt;
 	%% Requesting entity is prohibited from unsubscribing entity
 	not Authorized -&gt;
 	    {error, ?ERR_FORBIDDEN};
-	%% Entity did not specify SubID
-	%%SubID == &quot;&quot;, ?? -&gt;
+	%% Entity did not specify SubId
+	%%SubId == &quot;&quot;, ?? -&gt;
 	%%	{error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, &quot;subid-required&quot;)};
 	%% Invalid subscription identifier
-	%%InvalidSubID -&gt;
+	%%InvalidSubId -&gt;
 	%%	{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, &quot;invalid-subid&quot;)};
 	%% Requesting entity is not a subscriber
 	Subscriptions == [] -&gt;
@@ -412,11 +415,11 @@ unsubscribe_node(NodeId, Sender, Subscriber, SubId) -&gt;
 	    {error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, &quot;subid-required&quot;)}
     end.
 
-delete_subscription(SubKey, NodeID, {Subscription, SubID}, SubState) -&gt;
+delete_subscription(SubKey, NodeID, {Subscription, SubId}, SubState) -&gt;
     Affiliation = SubState#pubsub_state.affiliation,
     AllSubs = SubState#pubsub_state.subscriptions,
-    NewSubs = AllSubs -- [{Subscription, SubID}],
-    pubsub_subscription:unsubscribe_node(SubKey, NodeID, SubID),
+    NewSubs = AllSubs -- [{Subscription, SubId}],
+    pubsub_subscription:delete_subscription(SubKey, NodeID, SubId),
     case {Affiliation, NewSubs} of
 	{none, []} -&gt;
 	    % Just a regular subscriber, and this is final item, so
@@ -474,13 +477,15 @@ publish_item(NodeId, Publisher, PublishModel, MaxItems, ItemId, Payload) -&gt;
 	_ -&gt; get_state(NodeId, SubKey)
 	end,
     Affiliation = GenState#pubsub_state.affiliation,
-    Subscription = SubState#pubsub_state.subscriptions,
+    Subscribed = case PublishModel of
+	subscribers -&gt; is_subscribed(SubState#pubsub_state.subscriptions);
+	_ -&gt; undefined
+    end,
     if
 	not ((PublishModel == open)
 	     or ((PublishModel == publishers)
 		 and ((Affiliation == owner) or (Affiliation == publisher)))
-	     or ((PublishModel == subscribers)
-		 and (Subscription == subscribed))) -&gt;
+	     or (Subscribed == true)) -&gt;
 	    %% Entity does not have sufficient privileges to publish to node
 	    {error, ?ERR_FORBIDDEN};
 	true -&gt;
@@ -667,10 +672,8 @@ get_entity_subscriptions(Host, Owner) -&gt;
 	#pubsub_state{stateid = {J, N}, subscriptions = Ss} = sdb_to_record(Record),
 	case NodeTree:get_node(N) of
 	    #pubsub_node{nodeid = {Host, _}} = Node -&gt;
-			lists:foldl(fun({subscribed, SubID}, Acc2) -&gt;
-					    [{Node, subscribed, SubID, J} | Acc2];
-					({pending, _SubID}, Acc2) -&gt;
-					    [{Node, pending, J} | Acc2];
+			lists:foldl(fun({Sub, SubId}, Acc2) -&gt;
+					    [{Node, Sub, SubId, J} | Acc2];
 					(S, Acc2) -&gt;
 					    [{Node, S, J} | Acc2]
 				    end, Acc, Ss);
@@ -685,12 +688,15 @@ get_node_subscriptions(NodeId) -&gt;
 		 %% TODO: get rid of cases to handle non-list subscriptions
 		 case Subscriptions of
 		    [_|_] -&gt;
-			lists:map(fun({subscribed, SubID}) -&gt; {J, subscribed, SubID};
-				     ({pending, _SubID}) -&gt; {J, pending};
-				     (S) -&gt; {J, S}
-				end, Subscriptions);
+			lists:foldl(fun({S, SubId}, Acc) -&gt;
+					    [{J, S, SubId} | Acc];
+					(S, Acc) -&gt;
+					    [{J, S} | Acc]
+				end, [], Subscriptions);
+		    [] -&gt;
+			[];
 		    _ -&gt;
-			 [{J, none}]
+			[{J, none}]
 		 end
 	 end,
     {result, lists:flatmap(Tr, States)}.
@@ -700,23 +706,93 @@ get_subscriptions(NodeId, Owner) -&gt;
     SubState = get_state(NodeId, SubKey),
     {result, SubState#pubsub_state.subscriptions}.
 
-set_subscriptions(NodeId, Owner, Subscriptions) -&gt;
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
     SubKey = jlib:jid_tolower(Owner),
     SubState = get_state(NodeId, SubKey),
+    case {SubId, SubState#pubsub_state.subscriptions} of
+	{_, []} -&gt;
+	    {error, ?ERR_ITEM_NOT_FOUND};
+	{&quot;&quot;, [{_, SID}]} -&gt;
+	    case Subscription of
+		none -&gt; unsub_with_subid(NodeId, SID, SubState);
+		_ -&gt; replace_subscription({Subscription, SID}, SubState)
+	    end;
+	{&quot;&quot;, [_|_]} -&gt;
+	    {error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, &quot;subid-required&quot;)};
+	_ -&gt;
+	    case Subscription of
+		none -&gt; unsub_with_subid(NodeId, SubId, SubState);
+		_ -&gt; replace_subscription({Subscription, SubId}, SubState)
+	    end
+    end.
+
+replace_subscription(NewSub, SubState) -&gt;
+    NewSubs = replace_subscription(NewSub,
+				   SubState#pubsub_state.subscriptions, []),
+    set_state(SubState#pubsub_state{subscriptions = NewSubs}).
 
-    OSIDs = [SID || {_, SID} &lt;- SubState#pubsub_state.subscriptions],
-    NSIDs = [SID || {_, SID} &lt;- Subscriptions],
-    RSIDs = OSIDs -- NSIDs,
+replace_subscription(_, [], Acc) -&gt;
+    Acc;
+replace_subscription({Sub, SubId}, [{_, SubID} | T], Acc) -&gt;
+    replace_subscription({Sub, SubId}, T, [{Sub, SubID} | Acc]).
 
-    lists:foreach(fun(SubID) -&gt;
-			  pubsub_subscription:unsubscribe_node(SubKey, NodeId,
-							       SubID)
-		  end, RSIDs),
-    case {Subscriptions, SubState#pubsub_state.affiliation} of
+unsub_with_subid(NodeId, SubId, SubState) -&gt;
+    pubsub_subscription:delete_subscription(SubState#pubsub_state.stateid,
+					 NodeId, SubId),
+    NewSubs = lists:filter(fun ({_, SID}) -&gt; SubId =/= SID end,
+			   SubState#pubsub_state.subscriptions),
+    case {NewSubs, SubState#pubsub_state.affiliation} of
 	{[], none} -&gt;
-	    del_state(NodeId, SubKey);
+	    del_state(NodeId, element(1, SubState#pubsub_state.stateid));
 	_ -&gt;
-	    set_state(SubState#pubsub_state{subscriptions = Subscriptions})
+	    set_state(SubState#pubsub_state{subscriptions = NewSubs})
+    end.
+
+%% @spec (Host, Owner) -&gt; {result, [Node]} | {error, Reason}
+%%       Host = host()
+%%       Owner = jid()
+%%       Node = pubsubNode()
+%% @doc &lt;p&gt;Returns a list of Owner's nodes on Host with pending
+%% subscriptions.&lt;/p&gt;
+get_pending_nodes(Host, Owner) -&gt;
+    GenKey = jlib:jid_remove_resource(jlib:jid_tolower(Owner)),
+    States = mnesia:match_object(#pubsub_state{stateid     = {GenKey, '_'},
+					       affiliation = owner,
+					       _           = '_'}),
+    NodeIDs = [ID || #pubsub_state{stateid = {_, ID}} &lt;- States],
+    NodeTree = case ets:lookup(gen_mod:get_module_proc(Host, config), nodetree) of
+		    [{nodetree, N}] -&gt; N;
+		    _               -&gt; nodetree_tree
+	       end,
+    Reply = mnesia:foldl(fun(#pubsub_state{stateid = {_, NID}} = S, Acc) -&gt;
+		case lists:member(NID, NodeIDs) of
+		    true -&gt;
+			case get_nodes_helper(NodeTree, S) of
+			    {value, Node} -&gt; [Node | Acc];
+			    false         -&gt; Acc
+			end;
+		    false -&gt;
+			Acc
+		end
+	    end, [], pubsub_state),
+    {result, Reply}.
+
+get_nodes_helper(NodeTree,
+		 #pubsub_state{stateid = {_, N}, subscriptions = Subs}) -&gt;
+    HasPending = fun ({pending, _}) -&gt; true;
+		     (pending)      -&gt; true;
+		     (_)            -&gt; false
+		 end,
+    case lists:any(HasPending, Subs) of
+	true -&gt;
+	    case NodeTree:get_node(N) of
+		#pubsub_node{nodeid = {_, Node}} -&gt;
+		    {value, Node};
+		_ -&gt;
+		    false
+	    end;
+	false -&gt;
+	    false
     end.
 
 sdb_to_record({_Key, Attrs})-&gt;
@@ -753,13 +829,12 @@ str([{_, _ }|Rest], S)-&gt;str(Rest, S).
 %% they can implement this function like this:
 %% ```get_states(NodeId) -&gt;
 %%	   node_default:get_states(NodeId).'''&lt;/p&gt;
-get_states({Host, Node}) -&gt;
-    SHost = host_to_string(Host),
-    SNode = mod_pubsub:node_to_string(Node),
-    {ok, R} = erlsdb:s_all(&quot;select * from pubsub where host='&quot;++ SHost ++ &quot;'  and node = '&quot; ++ SNode ++ &quot;'&quot;),
-    States = lists:map(fun(S)-&gt;
-        sdb_to_record(S)
-    end,R),
+get_states(NodeId) -&gt;
+    States = case catch mnesia:match_object(
+	       #pubsub_state{stateid = {'_', NodeId}, _ = '_'}) of
+	List when is_list(List) -&gt; List;
+	_ -&gt; []
+    end,
     {result, States}.
 
 %% @spec (NodeId, JID) -&gt; [State] | []
@@ -781,6 +856,7 @@ make_key({JID, {Host, Node}})-&gt;
     SJID = jlib:jid_to_string(JID),
     {SJID, SHost, SNode, SHost ++ &quot;:&quot; ++ SNode ++ &quot;:&quot; ++ SJID}.
 
+
 %% @spec (State) -&gt; ok | {error, Reason::stanzaError()}
 %%	 State = mod_pubsub:pubsubStates()
 %% @doc &lt;p&gt;Write a state into database.&lt;/p&gt;
@@ -804,7 +880,7 @@ set_state(_) -&gt;
 
 %% @spec (NodeId, JID) -&gt; ok | {error, Reason::stanzaError()}
 %%	 NodeId = mod_pubsub:pubsubNodeId()
-%%   JID = mod_pubsub:Jid()
+%%	 JID = mod_pubsub:jid()
 %% @doc &lt;p&gt;Delete a state from database.&lt;/p&gt;
 del_state(NodeId, JID) -&gt;
     {_SJID, _SHost, _SNode, Key} = make_key({JID, NodeId}),
@@ -840,10 +916,10 @@ get_items(NodeId, JID, AccessModel, PresenceSubscription, RosterGroup, _SubId) -
     Subscriptions = SubState#pubsub_state.subscriptions,
     Whitelisted = can_fetch_item(Affiliation, Subscriptions),
     if
-	%%SubID == &quot;&quot;, ?? -&gt;
+	%%SubId == &quot;&quot;, ?? -&gt;
 	    %% Entity has multiple subscriptions to the node but does not specify a subscription ID
 	    %{error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, &quot;subid-required&quot;)};
-	%%InvalidSubID -&gt;
+	%%InvalidSubId -&gt;
 	    %% Entity is subscribed but specifies an invalid subscription ID
 	    %{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, &quot;invalid-subid&quot;)};
 	GenState#pubsub_state.affiliation == outcast -&gt;
@@ -858,7 +934,7 @@ get_items(NodeId, JID, AccessModel, PresenceSubscription, RosterGroup, _SubId) -
 	(AccessModel == whitelist) and (not Whitelisted) -&gt;
 	    %% Node has whitelist access model and entity lacks required affiliation
 	    {error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, &quot;closed-node&quot;)};
-	(AccessModel == authorize) and (not Whitelisted) -&gt;
+	(AccessModel == authorize) -&gt; % TODO: to be done
 	    %% Node has authorize access model
 	    {error, ?ERR_FORBIDDEN};
 	%%MustPay -&gt;
@@ -893,13 +969,13 @@ get_item(NodeId, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, _S
     GenKey = jlib:jid_remove_resource(SubKey),
     GenState = get_state(NodeId, GenKey),
     Affiliation = GenState#pubsub_state.affiliation,
-    Subscription = GenState#pubsub_state.subscriptions,
-    Whitelisted = can_fetch_item(Affiliation, Subscription),
+    Subscriptions = GenState#pubsub_state.subscriptions,
+    Whitelisted = can_fetch_item(Affiliation, Subscriptions),
     if
-	%%SubID == &quot;&quot;, ?? -&gt;
+	%%SubId == &quot;&quot;, ?? -&gt;
 	    %% Entity has multiple subscriptions to the node but does not specify a subscription ID
 	    %{error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, &quot;subid-required&quot;)};
-	%%InvalidSubID -&gt;
+	%%InvalidSubId -&gt;
 	    %% Entity is subscribed but specifies an invalid subscription ID
 	    %{error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, &quot;invalid-subid&quot;)};
 	GenState#pubsub_state.affiliation == outcast -&gt;
@@ -963,10 +1039,7 @@ can_fetch_item(owner,        _)             -&gt; true;
 can_fetch_item(member,       _)             -&gt; true;
 can_fetch_item(publisher,    _)             -&gt; true;
 can_fetch_item(outcast,      _)             -&gt; false;
-can_fetch_item(none, Subscriptions) -&gt;
-    lists:any(fun ({subscribed, _SubID}) -&gt; true;
-                  (_)                    -&gt; false
-              end, Subscriptions);
+can_fetch_item(none, Subscriptions) -&gt; is_subscribed(Subscriptions);
 can_fetch_item(_Affiliation, _Subscription) -&gt; false.
 
 %% @spec (NodeId) -&gt; Node
@@ -1007,6 +1080,11 @@ get_bucket(Host) when is_list(Host)-&gt;
 get_bucket(Host)-&gt;
     ?ERROR_MSG(&quot;Unsupported host format : ~p&quot;, [Host]).
 
+is_subscribed(Subscriptions) -&gt;
+    lists:any(fun ({subscribed, _SubId}) -&gt; true;
+                  (_)                    -&gt; false
+              end, Subscriptions).
+
 %% Returns the first item where Pred() is true in List
 first_in_list(_Pred, []) -&gt;
     false;</diff>
      <filename>src/mod_pubsub/node_hometree.erl</filename>
    </modified>
    <modified>
      <diff>@@ -61,7 +61,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -166,8 +167,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_pep:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_pep:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_pep:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_pep:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_mb.erl</filename>
    </modified>
    <modified>
      <diff>@@ -54,7 +54,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -233,8 +234,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_pep.erl</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -162,8 +163,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_private.erl</filename>
    </modified>
    <modified>
      <diff>@@ -58,7 +58,8 @@
 	 get_entity_subscriptions/2,
 	 get_node_subscriptions/1,
 	 get_subscriptions/2,
-	 set_subscriptions/3,
+	 set_subscriptions/4,
+	 get_pending_nodes/2,
 	 get_states/1,
 	 get_state/2,
 	 set_state/1,
@@ -158,8 +159,11 @@ get_node_subscriptions(NodeId) -&gt;
 get_subscriptions(NodeId, Owner) -&gt;
     node_hometree:get_subscriptions(NodeId, Owner).
 
-set_subscriptions(NodeId, Owner, Subscription) -&gt;
-    node_hometree:set_subscriptions(NodeId, Owner, Subscription).
+set_subscriptions(NodeId, Owner, Subscription, SubId) -&gt;
+    node_hometree:set_subscriptions(NodeId, Owner, Subscription, SubId).
+
+get_pending_nodes(Host, Owner) -&gt;
+    node_hometree:get_pending_nodes(Host, Owner).
 
 get_states(NodeId) -&gt;
     node_hometree:get_states(NodeId).</diff>
      <filename>src/mod_pubsub/node_public.erl</filename>
    </modified>
    <modified>
      <diff>@@ -108,6 +108,7 @@ delete_node(Key, NodeID) -&gt;
 			  end, get_subnodes(Key, NodeID)),
 
 	    %% Remove and return the requested node.
+	    pubsub_index:free(node, Node#pubsub_node.id),
 	    mnesia:delete_object(pubsub_node, Node, write),
 	    [Node]
     end.
@@ -165,12 +166,13 @@ get_subnodes(Host, NodeID) -&gt;
 	    qlc:e(Q)
     end.
 
-get_subnodes_tree(Host, NodeID, _From) -&gt;
+get_subnodes_tree(Host, NodeID, From) -&gt;
     Pred = fun (NID, #pubsub_node{parents = Parents}) -&gt;
 		   lists:member(NID, Parents)
 	   end,
-    Tr = fun (#pubsub_node{nodeid = {_, N}}) -&gt; N end,
-    traversal_helper(Pred, Tr, Host, [NodeID]).
+    Tr = fun (#pubsub_node{nodeid = {_, N}}) -&gt; [N] end,
+    traversal_helper(Pred, Tr, 1, Host, [NodeID],
+                     [{0, [get_node(Host, NodeID, From)]}]).
 
 %%====================================================================
 %% Internal functions
@@ -231,8 +233,9 @@ validate_parentage(Key, Owners, [ParentID | T]) -&gt;
 	    MutualOwners = [O || O &lt;- Owners, PO &lt;- POwners,
 				 O == PO],
 	    case {MutualOwners, NodeType} of
-		{[], _}	 -&gt; {error, ?ERR_NOT_ALLOWED};
-		{_, collection} -&gt; validate_parentage(Key, Owners, T)
+		{[], _}	 -&gt; {error, ?ERR_FORBIDDEN};
+		{_, collection} -&gt; validate_parentage(Key, Owners, T);
+		{_, _} -&gt; {error, ?ERR_NOT_ALLOWED}
 	    end
     end.
 </diff>
      <filename>src/mod_pubsub/nodetree_dag.erl</filename>
    </modified>
    <modified>
      <diff>@@ -107,6 +107,7 @@ set_node(#pubsub_node{nodeid = NodeId}=N)-&gt;
     
 set_node(_) -&gt;
     {error, ?ERR_INTERNAL_SERVER_ERROR}.
+
 make_key({{_U, _S, _R}=JID, []})-&gt;
     SHost = jlib:jid_to_string(JID),
     ?PREFIX++SHost ++ &quot;:&quot;;
@@ -138,6 +139,7 @@ get_bucket(Host)-&gt;
     
 get_node(Host, Node, _From) -&gt;
     get_node(Host, Node).
+
 %% @spec (Host, Node) -&gt; pubsubNode() | {error, Reason}
 %%     Host = mod_pubsub:host()
 %%     Node = mod_pubsub:pubsubNode()
@@ -157,14 +159,15 @@ get_node({Host, Node}) -&gt;
 get_nodes(Key, _From) -&gt;
     get_nodes(Key).
 
-%% @spec (Key) -&gt; [pubsubNode()] | {error, Reason}
+
+%% @spec (Host) -&gt; [pubsubNode()] | {error, Reason}
 %%     Key = mod_pubsub:host() | mod_pubsub:jid()
-get_nodes(Key) -&gt;
-    K=make_key({Key, []}),
-    ?DEBUG(&quot;Key : ~s&quot;, [K]),
-    Nodes =  s3:get_objects(get_bucket(Key), [{prefix, K}]),
+get_nodes(Host) -&gt;
+    K=make_key({Host, []}),
+    Nodes =  s3:get_objects(get_bucket(Host), [{prefix, K}]),
     lists:map(fun({_K, Bin, _H})-&gt; binary_to_term(list_to_binary(Bin)) end, Nodes).
 
+
 %% @spec (Host, Node, From) -&gt; [{Depth, Record}] | {error, Reason}
 %%     Host   = mod_pubsub:host() | mod_pubsub:jid()
 %%     Node   = mod_pubsub:pubsubNode()
@@ -185,10 +188,8 @@ get_parentnodes(_Host, _Node, _From) -&gt;
 %% containing just this node.&lt;/p&gt;
 get_parentnodes_tree(Host, Node, From) -&gt;
     case get_node(Host, Node, From) of
-	N when is_record(N, pubsub_node) -&gt;
-	    [{0, mnesia:read(pubsub_node, {Host, Node})}];
-	Error -&gt;
-	    Error
+	N when is_record(N, pubsub_node) -&gt; [{0, [N]}];
+	Error -&gt; Error
     end.
 
 %% @spec (Host, Node, From) -&gt; [pubsubNode()] | {error, Reason}
@@ -228,7 +229,7 @@ get_subnodes_tree(Host, Node)-&gt;
 %%     Owner = mod_pubsub:jid()
 %%     Options = list()
 create_node(Key, Node, Type, Owner, Options) -&gt;
-    OwnerKey = jlib:jid_tolower(jlib:jid_remove_resource(Owner)),
+    BJID = jlib:jid_tolower(jlib:jid_remove_resource(Owner)),
     case get_node(Key, Node) of
 	{error, ?ERR_ITEM_NOT_FOUND} -&gt;
 	    {ParentNode, ParentExists} =
@@ -238,8 +239,7 @@ create_node(Key, Node, Type, Owner, Options) -&gt;
 			%% PEP does not uses hierarchy
 			{[], true};
 		    _ -&gt;
-			Parent = lists:sublist(Node, length(Node) - 1),
-			case Parent of
+			case lists:sublist(Node, length(Node) - 1) of
 			[] -&gt; 
 			    {[], true};
 			_ -&gt;</diff>
      <filename>src/mod_pubsub/nodetree_tree.erl</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,7 @@
 %%% @doc The module &lt;strong&gt;{@module}&lt;/strong&gt; is the PubSub node tree plugin that
 %%% allow virtual nodes handling.
 %%% &lt;p&gt;PubSub node tree plugins are using the {@link gen_nodetree} behaviour.&lt;/p&gt;
-%%% This plugin development is still a work in progress. Due to optimizations in
+%%% &lt;p&gt;This plugin development is still a work in progress. Due to optimizations in
 %%% mod_pubsub, this plugin can not work anymore without altering functioning.
 %%% Please, send us comments, feedback and improvements.&lt;/p&gt;
 
@@ -85,20 +85,26 @@ options() -&gt;
 set_node(_NodeRecord) -&gt;
     ok.
 
-%% @spec (Host, Node) -&gt; pubsubNode()
+%% @spec (Host, Node, From) -&gt; pubsubNode()
 %%     Host = mod_pubsub:host()
 %%     Node = mod_pubsub:pubsubNode()
+%%     From = mod_pubsub:jid()
 %% @doc &lt;p&gt;Virtual node tree does not handle a node database. Any node is considered
 %% as existing. Node record contains default values.&lt;/p&gt;
 get_node(Host, Node, _From) -&gt;
     get_node(Host, Node).
 get_node(Host, Node) -&gt;
-    #pubsub_node{nodeid = {Host, Node}, id = {Host, Node}, owners = [{&quot;&quot;,Host,&quot;&quot;}]}.
+    get_node({Host, Node}).
 get_node({Host, _} = NodeId) -&gt;
-    #pubsub_node{nodeid = NodeId, id = NodeId, owners = [{&quot;&quot;,Host,&quot;&quot;}]}.
+    Record = #pubsub_node{nodeid = NodeId, id = NodeId},
+    Module = list_to_atom(&quot;node_&quot; ++ Record#pubsub_node.type),
+    Options = Module:options(),
+    Owners = [{&quot;&quot;, Host, &quot;&quot;}],
+    Record#pubsub_node{owners = Owners, options = Options}.
 
-%% @spec (Host) -&gt; [pubsubNode()]
+%% @spec (Host, From) -&gt; [pubsubNode()]
 %%     Host = mod_pubsub:host() | mod_pubsub:jid()
+%%     From = mod_pubsub:jid()
 %% @doc &lt;p&gt;Virtual node tree does not handle a node database. Any node is considered
 %% as existing. Nodes list can not be determined.&lt;/p&gt;
 get_nodes(Host, _From) -&gt;
@@ -132,9 +138,10 @@ get_subnodes(Host, Node, _From) -&gt;
 get_subnodes(_Host, _Node) -&gt;
     [].
 
-%% @spec (Host, Index) -&gt; [pubsubNode()]
+%% @spec (Host, Node, From) -&gt; [pubsubNode()]
 %%     Host = mod_pubsub:host()
 %%     Node = mod_pubsub:pubsubNode()
+%%     From = mod_pubsub:jid()
 %% @doc &lt;p&gt;Virtual node tree does not handle parent/child. Child list is empty.&lt;/p&gt;
 get_subnodes_tree(Host, Node, _From) -&gt;
     get_subnodes_tree(Host, Node).
@@ -150,13 +157,8 @@ get_subnodes_tree(_Host, _Node) -&gt;
 %% @doc &lt;p&gt;No node record is stored on database. Any valid node
 %% is considered as already created.&lt;/p&gt;
 %% &lt;p&gt;default allowed nodes: /home/host/user/any/node/name&lt;/p&gt;
-create_node(Host, Node, _Type, Owner, _Options) -&gt;
-    UserName = Owner#jid.luser,
-    UserHost = Owner#jid.lserver,
-    case Node of
-	[&quot;home&quot;, UserHost, UserName | _] -&gt; {error, {virtual, {Host, Node}}};
-	_ -&gt; {error, ?ERR_NOT_ALLOWED}
-    end.
+create_node(Host, Node, _Type, _Owner, _Options) -&gt;
+	{error, {virtual, {Host, Node}}}.
 
 %% @spec (Host, Node) -&gt; [mod_pubsub:node()]
 %%     Host = mod_pubsub:host()</diff>
      <filename>src/mod_pubsub/nodetree_virtual.erl</filename>
    </modified>
    <modified>
      <diff>@@ -83,12 +83,13 @@
 %%% @type pubsubNode() = #pubsub_node{
 %%%    nodeid = {Host::host(), Node::pubsubNode()},
 %%%    parentid = Node::pubsubNode(),
-%%%    nodeidx = int(). % can be anything you want
+%%%    nodeidx = int(),
 %%%    type = nodeType(),
-%%%    options = [nodeOption()]}
+%%%    options = [nodeOption()]}.
 %%% &lt;p&gt;This is the format of the &lt;tt&gt;nodes&lt;/tt&gt; table. The type of the table
 %%% is: &lt;tt&gt;set&lt;/tt&gt;,&lt;tt&gt;ram/disc&lt;/tt&gt;.&lt;/p&gt;
 %%% &lt;p&gt;The &lt;tt&gt;parentid&lt;/tt&gt; and &lt;tt&gt;type&lt;/tt&gt; fields are indexed.&lt;/p&gt;
+%%% nodeidx can be anything you want.
 -record(pubsub_node, {nodeid,
 		      id,
 		      parents = [],
@@ -98,7 +99,7 @@
 		     }).
 
 %%% @type pubsubState() = #pubsub_state{
-%%%    stateid = {ljid(), nodeidx()}},
+%%%    stateid = {ljid(), nodeidx()},
 %%%    items = [ItemId::string()],
 %%%    affiliation = affiliation(),
 %%%    subscriptions = [subscription()]}.
@@ -111,7 +112,7 @@
 }).
 
 %%% @type pubsubItem() = #pubsub_item{
-%%%    itemid = {ItemId::string(), nodeidx()}},
+%%%    itemid = {ItemId::string(), nodeidx()},
 %%%    creation = {now(), ljid()},
 %%%    modification = {now(), ljid()},
 %%%    payload = XMLContent::string()}.</diff>
      <filename>src/mod_pubsub/pubsub.hrl</filename>
    </modified>
    <modified>
      <diff>@@ -32,6 +32,12 @@
 	 get_options_xform/2,
 	 parse_options_xform/1]).
 
+% Internal function also exported for use in transactional bloc from pubsub plugins
+-export([add_subscription/3,
+	 delete_subscription/3,
+	 read_subscription/3,
+	 write_subscription/4]).
+
 -include_lib(&quot;stdlib/include/qlc.hrl&quot;).
 
 -include(&quot;pubsub.hrl&quot;).
@@ -86,31 +92,31 @@ init() -&gt;
     ok = create_table().
 
 subscribe_node(JID, NodeID, Options) -&gt;
-    case mnesia:transaction(fun add_subscription/3,
+    case catch mnesia:sync_dirty(fun add_subscription/3,
 			    [JID, NodeID, Options]) of
-	{atomic, Result} -&gt; {result, Result};
-	{aborted, Error} -&gt; Error
+	{'EXIT', {aborted, Error}} -&gt; Error;
+	Result -&gt; {result, Result}
     end.
 
 unsubscribe_node(JID, NodeID, SubID) -&gt;
-    case mnesia:transaction(fun delete_subscription/3,
+    case catch mnesia:sync_dirty(fun delete_subscription/3,
 			    [JID, NodeID, SubID]) of
-	{atomic, Result} -&gt; {result, Result};
-	{aborted, Error} -&gt; Error
+	{'EXIT', {aborted, Error}} -&gt; Error;
+	Result -&gt; {result, Result}
     end.
 
 get_subscription(JID, NodeID, SubID) -&gt;
-    case mnesia:transaction(fun read_subscription/3,
+    case catch mnesia:sync_dirty(fun read_subscription/3,
 			    [JID, NodeID, SubID]) of
-	{atomic, Result} -&gt; {result, Result};
-	{aborted, Error} -&gt; Error
+	{'EXIT', {aborted, Error}} -&gt; Error;
+	Result -&gt; {result, Result}
     end.
 
 set_subscription(JID, NodeID, SubID, Options) -&gt;
-    case mnesia:transaction(fun write_subscription/4,
+    case catch mnesia:sync_dirty(fun write_subscription/4,
 			    [JID, NodeID, SubID, Options]) of
-	{atomic, Result} -&gt; {result, Result};
-	{aborted, Error} -&gt; Error
+	{'EXIT', {aborted, Error}} -&gt; Error;
+	Result -&gt; {result, Result}
     end.
 
 get_options_xform(Lang, Options) -&gt;</diff>
      <filename>src/mod_pubsub/pubsub_subscription.erl</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,15 @@
 %%%
 %%%----------------------------------------------------------------------
 
+%%% @doc Roster management (Mnesia storage).
+%%%
+%%% Includes support for XEP-0237: Roster Versioning.
+%%% The roster versioning follows an all-or-nothing strategy:
+%%%  - If the version supplied by the client is the latest, return an empty response.
+%%%  - If not, return the entire new roster (with updated version string).
+%%% Roster version is a hash digest of the entire roster.
+%%% No additional data is stored in DB.
+
 -module(mod_roster).
 -author('alexey@process-one.net').
 
@@ -42,7 +51,10 @@
 	 get_jid_info/4,
 	 item_to_xml/1,
 	 webadmin_page/3,
-	 webadmin_user/4]).
+	 webadmin_user/4,
+	 get_versioning_feature/2,
+	 roster_versioning_enabled/1,
+	 roster_version/2]).
 
 -include(&quot;ejabberd.hrl&quot;).
 -include(&quot;jlib.hrl&quot;).
@@ -55,8 +67,12 @@ start(Host, Opts) -&gt;
     IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
     mnesia:create_table(roster,[{disc_copies, [node()]},
 				{attributes, record_info(fields, roster)}]),
+    mnesia:create_table(roster_version, [{disc_copies, [node()]},
+    				{attributes, record_info(fields, roster_version)}]),
+
     update_table(),
     mnesia:add_table_index(roster, us),
+    mnesia:add_table_index(roster_version, us),
     ejabberd_hooks:add(roster_get, Host,
 		       ?MODULE, get_user_roster, 50),
     ejabberd_hooks:add(roster_in_subscription, Host,
@@ -73,6 +89,8 @@ start(Host, Opts) -&gt;
 		       ?MODULE, remove_user, 50),
     ejabberd_hooks:add(resend_subscription_requests_hook, Host,
 		       ?MODULE, get_in_pending_subscriptions, 50),
+    ejabberd_hooks:add(roster_get_versioning_feature, Host,
+		       ?MODULE, get_versioning_feature, 50),
     ejabberd_hooks:add(webadmin_page_host, Host,
 		       ?MODULE, webadmin_page, 50),
     ejabberd_hooks:add(webadmin_user, Host,
@@ -97,6 +115,8 @@ stop(Host) -&gt;
 			  ?MODULE, remove_user, 50),
     ejabberd_hooks:delete(resend_subscription_requests_hook, Host,
 			  ?MODULE, get_in_pending_subscriptions, 50),
+    ejabberd_hooks:delete(roster_get_versioning_feature, Host,
+		          ?MODULE, get_versioning_feature, 50),
     ejabberd_hooks:delete(webadmin_page_host, Host,
 			  ?MODULE, webadmin_page, 50),
     ejabberd_hooks:delete(webadmin_user, Host,
@@ -122,23 +142,97 @@ process_local_iq(From, To, #iq{type = Type} = IQ) -&gt;
 	    process_iq_get(From, To, IQ)
     end.
 
+roster_hash(Items) -&gt;
+	sha:sha(term_to_binary(
+		lists:sort(
+			[R#roster{groups = lists:sort(Grs)} || 
+				R = #roster{groups = Grs} &lt;- Items]))).
+		
+roster_versioning_enabled(Host) -&gt;
+    gen_mod:get_module_opt(Host, ?MODULE, versioning, false).
+
+roster_version_on_db(Host) -&gt;
+    gen_mod:get_module_opt(Host, ?MODULE, store_current_id, false).
+
+%% Returns a list that may contain an xmlelement with the XEP-237 feature if it's enabled.
+get_versioning_feature(Acc, Host) -&gt;
+    case roster_versioning_enabled(Host) of
+	true -&gt;
+	    Feature = {xmlelement,
+		       &quot;ver&quot;,
+		       [{&quot;xmlns&quot;, ?NS_ROSTER_VER}],
+		       [{xmlelement, &quot;optional&quot;, [], []}]},
+	    [Feature | Acc];
+	false -&gt; []
+    end.
 
-
+roster_version(LServer ,LUser) -&gt;
+	US = {LUser, LServer},
+	case roster_version_on_db(LServer) of
+		true -&gt;
+			case mnesia:dirty_read(roster_version, US) of
+				[#roster_version{version = V}] -&gt; V;
+				[] -&gt; not_found
+			end;
+		false -&gt;
+			roster_hash(ejabberd_hooks:run_fold(roster_get, LServer, [], [US]))
+	end.
+
+%% Load roster from DB only if neccesary. 
+%% It is neccesary if
+%%     - roster versioning is disabled in server OR
+%%     - roster versioning is not used by the client OR
+%%     - roster versioning is used by server and client, BUT the server isn't storing versions on db OR
+%%     - the roster version from client don't match current version.
 process_iq_get(From, To, #iq{sub_el = SubEl} = IQ) -&gt;
     LUser = From#jid.luser,
     LServer = From#jid.lserver,
     US = {LUser, LServer},
-    case catch ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US]) of
-	Items when is_list(Items) -&gt;
-	    XItems = lists:map(fun item_to_xml/1, Items),
-	    IQ#iq{type = result,
-		  sub_el = [{xmlelement, &quot;query&quot;,
-			     [{&quot;xmlns&quot;, ?NS_ROSTER}],
-			     XItems}]};
-	_ -&gt;
-	    IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
+    try
+	    {ItemsToSend, VersionToSend} = 
+		case {xml:get_tag_attr(&quot;ver&quot;, SubEl), 
+		      roster_versioning_enabled(LServer),
+		      roster_version_on_db(LServer)} of
+		{{value, RequestedVersion}, true, true} -&gt;
+			%% Retrieve version from DB. Only load entire roster
+			%% when neccesary.
+			case mnesia:dirty_read(roster_version, US) of
+				[#roster_version{version = RequestedVersion}] -&gt;
+					{false, false};
+				[#roster_version{version = NewVersion}] -&gt;
+					{lists:map(fun item_to_xml/1, 
+						ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US])), NewVersion};
+				[] -&gt;
+					RosterVersion = sha:sha(term_to_binary(now())),
+					mnesia:dirty_write(#roster_version{us = US, version = RosterVersion}),
+					{lists:map(fun item_to_xml/1,
+						ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US])), RosterVersion}
+			end;
+
+		{{value, RequestedVersion}, true, false} -&gt;
+			RosterItems = ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [] , [US]),
+			case roster_hash(RosterItems) of
+				RequestedVersion -&gt;
+					{false, false};
+				New -&gt;
+					{lists:map(fun item_to_xml/1, RosterItems), New}
+			end;
+			
+		_ -&gt;
+			{lists:map(fun item_to_xml/1, 
+					ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US])), false}
+		end,
+		IQ#iq{type = result, sub_el = case {ItemsToSend, VersionToSend} of
+					 	 {false, false} -&gt;  [];
+						 {Items, false} -&gt; [{xmlelement, &quot;query&quot;, [{&quot;xmlns&quot;, ?NS_ROSTER}], Items}];
+						 {Items, Version} -&gt; [{xmlelement, &quot;query&quot;, [{&quot;xmlns&quot;, ?NS_ROSTER}, {&quot;ver&quot;, Version}], Items}]
+						end}
+    catch 
+    	_:_ -&gt;  
+		IQ#iq{type =error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
     end.
 
+
 get_user_roster(Acc, US) -&gt;
     case catch mnesia:dirty_index_read(roster, US, #roster.us) of
 	Items when is_list(Items) -&gt;
@@ -226,6 +320,10 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) -&gt;
 			%% subscription information from there:
 			Item3 = ejabberd_hooks:run_fold(roster_process_item,
 							LServer, Item2, [LServer]),
+			case roster_version_on_db(LServer) of
+				true -&gt; mnesia:write(#roster_version{us = {LUser, LServer}, version = sha:sha(term_to_binary(now()))});
+				false -&gt; ok
+			end,
 			{Item, Item3}
 		end,
 	    case mnesia:transaction(F) of
@@ -302,9 +400,14 @@ push_item(User, Server, From, Item) -&gt;
 		       [{item,
 			 Item#roster.jid,
 			 Item#roster.subscription}]}),
-    lists:foreach(fun(Resource) -&gt;
+    case roster_versioning_enabled(Server) of
+	true -&gt;
+		push_item_version(Server, User, From, Item, roster_version(Server, User));
+	false -&gt;
+	    lists:foreach(fun(Resource) -&gt;
 			  push_item(User, Server, Resource, From, Item)
-		  end, ejabberd_sm:get_user_resources(User, Server)).
+		  end, ejabberd_sm:get_user_resources(User, Server))
+    end.
 
 % TODO: don't push to those who didn't load roster
 push_item(User, Server, Resource, From, Item) -&gt;
@@ -318,6 +421,25 @@ push_item(User, Server, Resource, From, Item) -&gt;
       jlib:make_jid(User, Server, Resource),
       jlib:iq_to_xml(ResIQ)).
 
+%% @doc Roster push, calculate and include the version attribute.
+%% TODO: don't push to those who didn't load roster
+push_item_version(Server, User, From, Item, RosterVersion)  -&gt;
+    lists:foreach(fun(Resource) -&gt;
+			  push_item_version(User, Server, Resource, From, Item, RosterVersion)
+		end, ejabberd_sm:get_user_resources(User, Server)).
+
+push_item_version(User, Server, Resource, From, Item, RosterVersion) -&gt;
+    IQPush = #iq{type = 'set', xmlns = ?NS_ROSTER,
+		 id = &quot;push&quot; ++ randoms:get_string(),
+		 sub_el = [{xmlelement, &quot;query&quot;,
+			    [{&quot;xmlns&quot;, ?NS_ROSTER},
+			     {&quot;ver&quot;, RosterVersion}],
+			    [item_to_xml(Item)]}]},
+    ejabberd_router:route(
+      From,
+      jlib:make_jid(User, Server, Resource),
+      jlib:iq_to_xml(IQPush)).
+
 get_subscription_lists(_, User, Server) -&gt;
     LUser = jlib:nodeprep(User),
     LServer = jlib:nameprep(Server),
@@ -408,6 +530,10 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) -&gt;
 					      ask = Pending,
 					      askmessage = list_to_binary(AskMessage)},
 			mnesia:write(NewItem),
+			case roster_version_on_db(LServer) of
+				true -&gt; mnesia:write(#roster_version{us = {LUser, LServer}, version = sha:sha(term_to_binary(now()))});
+				false -&gt; ok
+			end,
 			{{push, NewItem}, AutoReply}
 		end
 	end,</diff>
      <filename>src/mod_roster.erl</filename>
    </modified>
    <modified>
      <diff>@@ -29,3 +29,5 @@
 		 askmessage = [],
 		 xs = []}).
 
+-record(roster_version, {us,
+			version}).</diff>
      <filename>src/mod_roster.hrl</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,15 @@
 %%%
 %%%----------------------------------------------------------------------
 
+%%% @doc Roster management (Mnesia storage).
+%%%
+%%% Includes support for XEP-0237: Roster Versioning.
+%%% The roster versioning follows an all-or-nothing strategy:
+%%%  - If the version supplied by the client is the latest, return an empty response.
+%%%  - If not, return the entire new roster (with updated version string).
+%%% Roster version is a hash digest of the entire roster.
+%%% No additional data is stored in DB.
+
 -module(mod_roster_odbc).
 -author('alexey@process-one.net').
 
@@ -41,7 +50,9 @@
 	 remove_user/2,
 	 get_jid_info/4,
 	 webadmin_page/3,
-	 webadmin_user/4]).
+	 webadmin_user/4,
+	 get_versioning_feature/2,
+	 roster_versioning_enabled/1]).
 
 -include(&quot;ejabberd.hrl&quot;).
 -include(&quot;jlib.hrl&quot;).
@@ -68,6 +79,8 @@ start(Host, Opts) -&gt;
 		       ?MODULE, remove_user, 50),
     ejabberd_hooks:add(resend_subscription_requests_hook, Host,
 		       ?MODULE, get_in_pending_subscriptions, 50),
+    ejabberd_hooks:add(roster_get_versioning_feature, Host,
+		       ?MODULE, get_versioning_feature, 50),
     ejabberd_hooks:add(webadmin_page_host, Host,
 		       ?MODULE, webadmin_page, 50),
     ejabberd_hooks:add(webadmin_user, Host,
@@ -92,6 +105,8 @@ stop(Host) -&gt;
 			  ?MODULE, remove_user, 50),
     ejabberd_hooks:delete(resend_subscription_requests_hook, Host,
 		       ?MODULE, get_in_pending_subscriptions, 50),
+    ejabberd_hooks:delete(roster_get_versioning_feature, Host,
+		          ?MODULE, get_versioning_feature, 50),
     ejabberd_hooks:delete(webadmin_page_host, Host,
 			  ?MODULE, webadmin_page, 50),
     ejabberd_hooks:delete(webadmin_user, Host,
@@ -118,22 +133,101 @@ process_local_iq(From, To, #iq{type = Type} = IQ) -&gt;
     end.
 
 
+roster_hash(Items) -&gt;
+	sha:sha(term_to_binary(
+		lists:sort(
+			[R#roster{groups = lists:sort(Grs)} || 
+				R = #roster{groups = Grs} &lt;- Items]))).
+		
+roster_versioning_enabled(Host) -&gt;
+    gen_mod:get_module_opt(Host, ?MODULE, versioning, false).
+
+roster_version_on_db(Host) -&gt;
+    gen_mod:get_module_opt(Host, ?MODULE, store_current_id, false).
+
+%% Returns a list that may contain an xmlelement with the XEP-237 feature if it's enabled.
+get_versioning_feature(Acc, Host) -&gt;
+    case roster_versioning_enabled(Host) of
+	true -&gt;
+	    Feature = {xmlelement,
+		       &quot;ver&quot;,
+		       [{&quot;xmlns&quot;, ?NS_ROSTER_VER}],
+		       [{xmlelement, &quot;optional&quot;, [], []}]},
+	    [Feature | Acc];
+	false -&gt; []
+    end.
 
+roster_version(LServer ,LUser) -&gt;
+	US = {LUser, LServer},
+	case roster_version_on_db(LServer) of
+		true -&gt;
+			case odbc_queries:get_roster_version(ejabberd_odbc:escape(LServer), ejabberd_odbc:escape(LUser)) of
+				{selected, [&quot;version&quot;], [{Version}]} -&gt; Version;
+				{selected, [&quot;version&quot;], []} -&gt; not_found
+			end;
+		false -&gt;
+			roster_hash(ejabberd_hooks:run_fold(roster_get, LServer, [], [US]))
+	end.
+
+%% Load roster from DB only if neccesary. 
+%% It is neccesary if
+%%     - roster versioning is disabled in server OR
+%%     - roster versioning is not used by the client OR
+%%     - roster versioning is used by server and client, BUT the server isn't storing versions on db OR
+%%     - the roster version from client don't match current version.
 process_iq_get(From, To, #iq{sub_el = SubEl} = IQ) -&gt;
     LUser = From#jid.luser,
     LServer = From#jid.lserver,
     US = {LUser, LServer},
-    case catch ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US]) of
-	Items when is_list(Items) -&gt;
-	    XItems = lists:map(fun item_to_xml/1, Items),
-	    IQ#iq{type = result,
-		  sub_el = [{xmlelement, &quot;query&quot;,
-			     [{&quot;xmlns&quot;, ?NS_ROSTER}],
-			     XItems}]};
-	_ -&gt;
-	    IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
+
+    try
+	    {ItemsToSend, VersionToSend} = 
+		case {xml:get_tag_attr(&quot;ver&quot;, SubEl), 
+		      roster_versioning_enabled(LServer),
+		      roster_version_on_db(LServer)} of
+		{{value, RequestedVersion}, true, true} -&gt;
+			%% Retrieve version from DB. Only load entire roster
+			%% when neccesary.
+			case odbc_queries:get_roster_version(ejabberd_odbc:escape(LServer), ejabberd_odbc:escape(LUser)) of
+				{selected, [&quot;version&quot;], [{RequestedVersion}]} -&gt;
+					{false, false};
+				{selected, [&quot;version&quot;], [{NewVersion}]} -&gt;
+					{lists:map(fun item_to_xml/1, 
+						ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US])), NewVersion};
+				{selected, [&quot;version&quot;], []} -&gt;
+					RosterVersion = sha:sha(term_to_binary(now())),
+					{atomic, {updated,1}} = odbc_queries:sql_transaction(LServer, fun() -&gt;
+									odbc_queries:set_roster_version(ejabberd_odbc:escape(LUser), RosterVersion)
+								  end),
+
+					{lists:map(fun item_to_xml/1,
+						ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US])), RosterVersion}
+			end;
+
+		{{value, RequestedVersion}, true, false} -&gt;
+			RosterItems = ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [] , [US]),
+			case roster_hash(RosterItems) of
+				RequestedVersion -&gt;
+					{false, false};
+				New -&gt;
+					{lists:map(fun item_to_xml/1, RosterItems), New}
+			end;
+			
+		_ -&gt;
+			{lists:map(fun item_to_xml/1, 
+					ejabberd_hooks:run_fold(roster_get, To#jid.lserver, [], [US])), false}
+		end,
+		IQ#iq{type = result, sub_el = case {ItemsToSend, VersionToSend} of
+					 	 {false, false} -&gt;  [];
+						 {Items, false} -&gt; [{xmlelement, &quot;query&quot;, [{&quot;xmlns&quot;, ?NS_ROSTER}], Items}];
+						 {Items, Version} -&gt; [{xmlelement, &quot;query&quot;, [{&quot;xmlns&quot;, ?NS_ROSTER}, {&quot;ver&quot;, Version}], Items}]
+						end}
+    catch 
+    	_:_ -&gt;  
+		IQ#iq{type =error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
     end.
 
+
 get_user_roster(Acc, {LUser, LServer}) -&gt;
     Items = get_roster(LUser, LServer),
     lists:filter(fun(#roster{subscription = none, ask = in}) -&gt;
@@ -257,6 +351,7 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) -&gt;
 			Item2 = process_item_els(Item1, Els),
 			case Item2#roster.subscription of
 			    remove -&gt;
+				io:format(&quot;del_roster: ~p ~p ~p \n&quot;, [LServer, Username, SJID]),
                                 odbc_queries:del_roster(LServer, Username, SJID);
 			    _ -&gt;
 				ItemVals = record_to_string(Item2),
@@ -267,6 +362,10 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) -&gt;
 			%% subscription information from there:
 			Item3 = ejabberd_hooks:run_fold(roster_process_item,
 							LServer, Item2, [LServer]),
+			case roster_version_on_db(LServer) of
+				true -&gt; odbc_queries:set_roster_version(ejabberd_odbc:escape(LUser), sha:sha(term_to_binary(now())));
+				false -&gt; ok
+			end,
 			{Item, Item3}
 		end,
 	    case odbc_queries:sql_transaction(LServer, F) of
@@ -337,9 +436,14 @@ push_item(User, Server, From, Item) -&gt;
 		       [{item,
 			 Item#roster.jid,
 			 Item#roster.subscription}]}),
-    lists:foreach(fun(Resource) -&gt;
+    case roster_versioning_enabled(Server) of
+	true -&gt;
+		push_item_version(Server, User, From, Item, roster_version(Server, User));
+	false -&gt;
+	    lists:foreach(fun(Resource) -&gt;
 			  push_item(User, Server, Resource, From, Item)
-		  end, ejabberd_sm:get_user_resources(User, Server)).
+		  end, ejabberd_sm:get_user_resources(User, Server))
+    end.
 
 % TODO: don't push to those who not load roster
 push_item(User, Server, Resource, From, Item) -&gt;
@@ -353,6 +457,25 @@ push_item(User, Server, Resource, From, Item) -&gt;
       jlib:make_jid(User, Server, Resource),
       jlib:iq_to_xml(ResIQ)).
 
+%% @doc Roster push, calculate and include the version attribute.
+%% TODO: don't push to those who didn't load roster
+push_item_version(Server, User, From, Item, RosterVersion)  -&gt;
+    lists:foreach(fun(Resource) -&gt;
+			  push_item_version(User, Server, Resource, From, Item, RosterVersion)
+		end, ejabberd_sm:get_user_resources(User, Server)).
+
+push_item_version(User, Server, Resource, From, Item, RosterVersion) -&gt;
+    IQPush = #iq{type = 'set', xmlns = ?NS_ROSTER,
+		 id = &quot;push&quot; ++ randoms:get_string(),
+		 sub_el = [{xmlelement, &quot;query&quot;,
+			    [{&quot;xmlns&quot;, ?NS_ROSTER},
+			     {&quot;ver&quot;, RosterVersion}],
+			    [item_to_xml(Item)]}]},
+    ejabberd_router:route(
+      From,
+      jlib:make_jid(User, Server, Resource),
+      jlib:iq_to_xml(IQPush)).
+
 get_subscription_lists(_, User, Server) -&gt;
     LUser = jlib:nodeprep(User),
     LServer = jlib:nameprep(Server),
@@ -468,6 +591,10 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) -&gt;
 					      askmessage = AskMessage},
 			ItemVals = record_to_string(NewItem),
 			odbc_queries:roster_subscribe(LServer, Username, SJID, ItemVals),
+			case roster_version_on_db(LServer) of
+				true -&gt; odbc_queries:set_roster_version(ejabberd_odbc:escape(LUser), sha:sha(term_to_binary(now())));
+				false -&gt; ok
+			end,
 			{{push, NewItem}, AutoReply}
 		end
 	end,</diff>
      <filename>src/mod_roster_odbc.erl</filename>
    </modified>
    <modified>
      <diff>@@ -31,6 +31,7 @@
 
 -export([start/2,
 	 stop/1,
+	 process_local_iq90/3, % TODO: Remove once XEP-0090 is Obsolete
 	 process_local_iq/3]).
 
 -include(&quot;ejabberd.hrl&quot;).
@@ -39,13 +40,19 @@
 
 start(Host, Opts) -&gt;
     IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
+    %% TODO: Remove the next two lines once XEP-0090 is Obsolete
+    gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_TIME90,
+				  ?MODULE, process_local_iq90, IQDisc),
     gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?NS_TIME,
 				  ?MODULE, process_local_iq, IQDisc).
 
 stop(Host) -&gt;
+    %% TODO: Remove the next line once XEP-0090 is Obsolete
+    gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_TIME90),
     gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_TIME).
 
-process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) -&gt;
+%% TODO: Remove this function once XEP-0090 is Obsolete
+process_local_iq90(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) -&gt;
     case Type of
 	set -&gt;
 	    IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
@@ -53,9 +60,31 @@ process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) -&gt;
 	    UTC = jlib:timestamp_to_iso(calendar:universal_time()),
 	    IQ#iq{type = result,
 		  sub_el = [{xmlelement, &quot;query&quot;,
-			     [{&quot;xmlns&quot;, ?NS_TIME}],
+			     [{&quot;xmlns&quot;, ?NS_TIME90}],
 			     [{xmlelement, &quot;utc&quot;, [],
 			       [{xmlcdata, UTC}]}]}]}
     end.
 
+process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) -&gt;
+    case Type of
+	set -&gt;
+	    IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
+	get -&gt;
+	    Now = now(),
+	    Now_universal = calendar:now_to_universal_time(Now),
+	    Now_local = calendar:now_to_local_time(Now),
+	    {UTC, UTC_diff} = jlib:timestamp_to_iso(Now_universal, utc),
+	    Seconds_diff = calendar:datetime_to_gregorian_seconds(Now_local)
+	     - calendar:datetime_to_gregorian_seconds(Now_universal),
+	    {Hd, Md, _} = calendar:seconds_to_time(Seconds_diff),
+	    {_, TZO_diff} = jlib:timestamp_to_iso({{0, 0, 0}, {0, 0, 0}}, {Hd, Md}),
+	    IQ#iq{type = result,
+		  sub_el = [{xmlelement, &quot;time&quot;,
+			     [{&quot;xmlns&quot;, ?NS_TIME}],
+			     [{xmlelement, &quot;tzo&quot;, [],
+			       [{xmlcdata, TZO_diff}]},
+			      {xmlelement, &quot;utc&quot;, [],
+			       [{xmlcdata, UTC ++ UTC_diff}]}]}]}
+    end.
+
 </diff>
      <filename>src/mod_time.erl</filename>
    </modified>
    <modified>
      <diff>@@ -367,6 +367,9 @@ do_route(ServerHost, From, To, Packet) -&gt;
 				    Packet, ?ERR_NOT_ALLOWED),
 			    ejabberd_router:route(To, From, Err);
 			get -&gt;
+			    Info = ejabberd_hooks:run_fold(
+				     disco_info, ServerHost, [],
+				     [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
 			    ResIQ =
 				IQ#iq{type = result,
 				      sub_el = [{xmlelement,
@@ -384,7 +387,7 @@ do_route(ServerHost, From, To, Packet) -&gt;
 						   [{&quot;var&quot;, ?NS_SEARCH}], []},
 						  {xmlelement, &quot;feature&quot;,
 						   [{&quot;var&quot;, ?NS_VCARD}], []}
-						 ]
+						 ] ++ Info
 						}]},
 			    ejabberd_router:route(To,
 						  From,</diff>
      <filename>src/mod_vcard.erl</filename>
    </modified>
    <modified>
      <diff>@@ -406,6 +406,7 @@ do_route(State, From, To, Packet) -&gt;
 
 route(State, From, To, Packet) -&gt;
     #jid{user = User, resource = Resource} = To,
+    ServerHost = State#state.serverhost,
     if
 	(User /= &quot;&quot;) or (Resource /= &quot;&quot;) -&gt;
 	    Err = jlib:make_error_reply(Packet, ?ERR_SERVICE_UNAVAILABLE),
@@ -467,6 +468,9 @@ route(State, From, To, Packet) -&gt;
 				    Packet, ?ERR_NOT_ALLOWED),
 			    ejabberd_router:route(To, From, Err);
 			get -&gt;
+			    Info = ejabberd_hooks:run_fold(
+				     disco_info, ServerHost, [],
+				     [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
 			    ResIQ =
 				IQ#iq{type = result,
 				      sub_el = [{xmlelement,
@@ -482,7 +486,7 @@ route(State, From, To, Packet) -&gt;
 						   [{&quot;var&quot;, ?NS_SEARCH}], []},
 						  {xmlelement, &quot;feature&quot;,
 						   [{&quot;var&quot;, ?NS_VCARD}], []}
-						 ]
+						 ] ++ Info
 						}]},
 			    ejabberd_router:route(To,
 						  From,
@@ -639,8 +643,10 @@ map_vcard_attr(VCardName, Attributes, Pattern, UD) -&gt;
     end.
 
 process_pattern(Str, {User, Domain}, AttrValues) -&gt;
-	eldap_filter:do_sub(Str,
-		[{&quot;%s&quot;, V, 1} || V &lt;- AttrValues] ++ [{&quot;%u&quot;, User},{&quot;%d&quot;, Domain}]).
+    eldap_filter:do_sub(
+      Str,
+      [{&quot;%u&quot;, User},{&quot;%d&quot;, Domain}] ++
+      [{&quot;%s&quot;, V, 1} || V &lt;- AttrValues]).
 
 find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) -&gt;
     find_xdata_el1(SubEls).</diff>
      <filename>src/mod_vcard_ldap.erl</filename>
    </modified>
    <modified>
      <diff>@@ -344,6 +344,9 @@ do_route(ServerHost, From, To, Packet) -&gt;
 				    Packet, ?ERR_NOT_ALLOWED),
 			    ejabberd_router:route(To, From, Err);
 			get -&gt;
+			    Info = ejabberd_hooks:run_fold(
+				     disco_info, ServerHost, [],
+				     [ServerHost, ?MODULE, &quot;&quot;, &quot;&quot;]),
 			    ResIQ =
 				IQ#iq{type = result,
 				      sub_el = [{xmlelement,
@@ -359,7 +362,7 @@ do_route(ServerHost, From, To, Packet) -&gt;
 						   [{&quot;var&quot;, ?NS_SEARCH}], []},
 						  {xmlelement, &quot;feature&quot;,
 						   [{&quot;var&quot;, ?NS_VCARD}], []}
-						 ]
+						 ] ++ Info
 						}]},
 			    ejabberd_router:route(To,
 						  From,</diff>
      <filename>src/mod_vcard_odbc.erl</filename>
    </modified>
    <modified>
      <diff>@@ -73,7 +73,6 @@
 {&quot;ejabberd Web Admin&quot;,&quot;Web d'administraci&#243; del ejabberd&quot;}.
 {&quot;Email&quot;,&quot;Email&quot;}.
 {&quot;Enable logging&quot;,&quot;Habilitar el registre de la conversa&quot;}.
-{&quot;Encodings&quot;,&quot;Codificacions&quot;}.
 {&quot;End User Session&quot;,&quot;Finalitzar Sesi&#243; d'Usuari&quot;}.
 {&quot;Enter list of {Module, [Options]}&quot;,&quot;Introdueix llista de {m&#242;dul, [opcions]}&quot;}.
 {&quot;Enter nickname you want to register&quot;,&quot;Introdueix el nickname que vols registrar&quot;}.
@@ -81,9 +80,7 @@
 {&quot;Enter path to jabberd14 spool dir&quot;,&quot;Introdueix la ruta al directori de jabberd14 spools&quot;}.
 {&quot;Enter path to jabberd14 spool file&quot;,&quot;Introdueix ruta al fitxer jabberd14 spool&quot;}.
 {&quot;Enter path to text file&quot;,&quot;Introdueix ruta al fitxer de text&quot;}.
-{&quot;Enter username and encodings you wish to use for connecting to IRC servers&quot;,&quot;Introdueix el nom d'usuari i les codificacions de car&#224;cters per a utilitzar als servidors de IRC&quot;}.
 {&quot;Erlang Jabber Server&quot;,&quot;Servidor Erlang Jabber&quot;}.
-{&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;}].&quot;,&quot;Exemple: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;}].&quot;}.
 {&quot;Family Name&quot;,&quot;Cognom&quot;}.
 {&quot;February&quot;,&quot;Febrer&quot;}.
 {&quot;Fill in fields to search for any matching Jabber User&quot;,&quot;Emplena camps per a buscar usuaris Jabber que concorden&quot;}.
@@ -106,7 +103,6 @@
 {&quot;has been kicked&quot;,&quot;Has sigut expulsat&quot;}.
 {&quot; has set the subject to: &quot;,&quot; ha posat l'assumpte: &quot;}.
 {&quot;Host&quot;,&quot;Host&quot;}.
-{&quot;If you want to specify different encodings for IRC servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;}'.  By default this service use \&quot;~s\&quot; encoding.&quot;,&quot;Si vols especificar codificacions de car&#224;cters distints per a cada servidor IRC emplena aquesta llista amb els valors amb el format '{\&quot;servidor irc\&quot;, \&quot;codificaci&#243;\&quot;}'.  Aquest servei utilitza per defecte la codificaci&#243; \&quot;~s\&quot;.&quot;}.
 {&quot;Import Directory&quot;,&quot;Importar directori&quot;}.
 {&quot;Import File&quot;,&quot;Importar fitxer&quot;}.
 {&quot;Import User from File at &quot;,&quot;Importa usuari des de fitxer en &quot;}.
@@ -218,7 +214,6 @@
 {&quot;Queries to the conference members are not allowed in this room&quot;,&quot; En aquesta sala no es permeten solicituts als membres de la sala&quot;}.
 {&quot;RAM and disc copy&quot;,&quot;C&#242;pia en RAM i disc&quot;}.
 {&quot;RAM copy&quot;,&quot;C&#242;pia en RAM&quot;}.
-{&quot;(Raw)&quot;,&quot;(en format text)&quot;}.
 {&quot;Raw&quot;,&quot;en format text&quot;}.
 {&quot;Really delete message of the day?&quot;,&quot;Segur que vols eliminar el missatge del dia?&quot;}.
 {&quot;Recipient is not in the conference room&quot;,&quot;El receptor no est&#224; en la sala de confer&#232;ncia&quot;}.
@@ -315,7 +310,6 @@
 {&quot;User&quot;,&quot;Usuari&quot;}.
 {&quot;Validate&quot;,&quot;Validar&quot;}.
 {&quot;vCard User Search&quot;,&quot;Recerca de vCard d'usuari&quot;}.
-{&quot;Virtual Hosts&quot;,&quot;Hosts Virtuals&quot;}.
 {&quot;Visitors are not allowed to change their nicknames in this room&quot;,&quot;Els visitants no tenen perm&#233;s canviar el seus Nicknames en esta sala&quot;}.
 {&quot;Visitors are not allowed to send messages to all occupants&quot;,&quot;Els visitants no poden enviar missatges a tots els ocupants&quot;}.
 {&quot;Wednesday&quot;,&quot;Dimecres&quot;}.</diff>
      <filename>src/msgs/ca.msg</filename>
    </modified>
    <modified>
      <diff>@@ -7,28 +7,28 @@ msgstr &quot;&quot;
 &quot;Content-Transfer-Encoding: 8bit\n&quot;
 &quot;X-Language: Catalan (catal&#224;)\n&quot;
 
-#: ejabberd_c2s.erl:358 ejabberd_c2s.erl:662
+#: ejabberd_c2s.erl:364 ejabberd_c2s.erl:668
 msgid &quot;Use of STARTTLS required&quot;
 msgstr &quot;&#201;s obligatori utilitzar STARTTLS&quot;
 
-#: ejabberd_c2s.erl:442
+#: ejabberd_c2s.erl:448
 msgid &quot;No resource provided&quot;
 msgstr &quot;Recurs no disponible&quot;
 
-#: ejabberd_c2s.erl:1067
+#: ejabberd_c2s.erl:1073
 msgid &quot;Replaced by new connection&quot;
 msgstr &quot;Reempla&#231;at per una nova connexi&#243;&quot;
 
-#: ejabberd_captcha.erl:74 ejabberd_captcha.erl:106
+#: ejabberd_captcha.erl:93 ejabberd_captcha.erl:125
 #, fuzzy
 msgid &quot;Enter the text you see&quot;
 msgstr &quot;Introdueix ruta al fitxer de text&quot;
 
-#: ejabberd_captcha.erl:78
+#: ejabberd_captcha.erl:97
 msgid &quot;Your messages to ~s are being blocked. To unblock them, visit ~s&quot;
 msgstr &quot;&quot;
 
-#: ejabberd_captcha.erl:212
+#: ejabberd_captcha.erl:235
 msgid &quot;The captcha is valid.&quot;
 msgstr &quot;&quot;
 
@@ -110,7 +110,7 @@ msgstr &quot;Elimina el missatge del dis de tots els hosts&quot;
 msgid &quot;Configuration&quot;
 msgstr &quot;Configuraci&#243;&quot;
 
-#: mod_configure.erl:125 mod_configure.erl:544 web/ejabberd_web_admin.erl:1721
+#: mod_configure.erl:125 mod_configure.erl:544 web/ejabberd_web_admin.erl:1862
 msgid &quot;Database&quot;
 msgstr &quot;Base de dades&quot;
 
@@ -122,7 +122,7 @@ msgstr &quot;Iniciar m&#242;duls&quot;
 msgid &quot;Stop Modules&quot;
 msgstr &quot;Parar m&#242;duls&quot;
 
-#: mod_configure.erl:131 mod_configure.erl:572 web/ejabberd_web_admin.erl:1722
+#: mod_configure.erl:131 mod_configure.erl:572 web/ejabberd_web_admin.erl:1863
 msgid &quot;Backup&quot;
 msgstr &quot;Guardar c&#242;pia de seguretat&quot;
 
@@ -151,7 +151,7 @@ msgid &quot;Shut Down Service&quot;
 msgstr &quot;Apager el Servei&quot;
 
 #: mod_configure.erl:145 mod_configure.erl:486 mod_configure.erl:1165
-#: web/ejabberd_web_admin.erl:1371
+#: web/ejabberd_web_admin.erl:1508
 msgid &quot;Add User&quot;
 msgstr &quot;Afegir usuari&quot;
 
@@ -188,15 +188,13 @@ msgstr &quot;Obtenir N&#250;mero d'Usuaris Registrats&quot;
 msgid &quot;Get Number of Online Users&quot;
 msgstr &quot;Obtenir N&#250;mero d'Usuaris Connectats&quot;
 
-#: mod_configure.erl:163 mod_configure.erl:477 web/ejabberd_web_admin.erl:631
-#: web/ejabberd_web_admin.erl:649 web/ejabberd_web_admin.erl:706
-#: web/ejabberd_web_admin.erl:746
+#: mod_configure.erl:163 mod_configure.erl:477 web/ejabberd_web_admin.erl:811
+#: web/ejabberd_web_admin.erl:852
 msgid &quot;Access Control Lists&quot;
 msgstr &quot;Llista de Control d'Acc&#233;s&quot;
 
-#: mod_configure.erl:165 mod_configure.erl:478 web/ejabberd_web_admin.erl:633
-#: web/ejabberd_web_admin.erl:651 web/ejabberd_web_admin.erl:813
-#: web/ejabberd_web_admin.erl:848
+#: mod_configure.erl:165 mod_configure.erl:478 web/ejabberd_web_admin.erl:920
+#: web/ejabberd_web_admin.erl:956
 msgid &quot;Access Rules&quot;
 msgstr &quot;Regles d'Acc&#233;s&quot;
 
@@ -204,8 +202,8 @@ msgstr &quot;Regles d'Acc&#233;s&quot;
 msgid &quot;User Management&quot;
 msgstr &quot;Gesti&#243; d'Usuaris&quot;
 
-#: mod_configure.erl:468 web/ejabberd_web_admin.erl:654
-#: web/ejabberd_web_admin.erl:925 web/ejabberd_web_admin.erl:1308
+#: mod_configure.erl:468 web/ejabberd_web_admin.erl:1038
+#: web/ejabberd_web_admin.erl:1443
 msgid &quot;Online Users&quot;
 msgstr &quot;Usuaris conectats&quot;
 
@@ -217,15 +215,15 @@ msgstr &quot;Tots els usuaris&quot;
 msgid &quot;Outgoing s2s Connections&quot;
 msgstr &quot;Connexions s2s d'eixida&quot;
 
-#: mod_configure.erl:471 web/ejabberd_web_admin.erl:1692
+#: mod_configure.erl:471 web/ejabberd_web_admin.erl:1833
 msgid &quot;Running Nodes&quot;
 msgstr &quot;Nodes funcionant&quot;
 
-#: mod_configure.erl:472 web/ejabberd_web_admin.erl:1694
+#: mod_configure.erl:472 web/ejabberd_web_admin.erl:1835
 msgid &quot;Stopped Nodes&quot;
 msgstr &quot;Nodes parats&quot;
 
-#: mod_configure.erl:545 mod_configure.erl:555 web/ejabberd_web_admin.erl:1738
+#: mod_configure.erl:545 mod_configure.erl:555 web/ejabberd_web_admin.erl:1879
 msgid &quot;Modules&quot;
 msgstr &quot;M&#242;duls&quot;
 
@@ -357,14 +355,14 @@ msgstr &quot;Regles d'acc&#233;s&quot;
 #: mod_configure.erl:1168 mod_configure.erl:1190 mod_configure.erl:1202
 #: mod_configure.erl:1214 mod_configure.erl:1226 mod_configure.erl:1243
 #: mod_configure.erl:1255 mod_configure.erl:1620 mod_configure.erl:1670
-#: mod_configure.erl:1691 mod_roster.erl:822 mod_roster_odbc.erl:922
-#: mod_vcard.erl:462 mod_vcard_ldap.erl:546 mod_vcard_odbc.erl:437
+#: mod_configure.erl:1691 mod_roster.erl:948 mod_roster_odbc.erl:1049
+#: mod_vcard.erl:465 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:440
 msgid &quot;Jabber ID&quot;
 msgstr &quot;ID Jabber&quot;
 
 #: mod_configure.erl:1173 mod_configure.erl:1231 mod_configure.erl:1621
-#: mod_configure.erl:1833 mod_muc/mod_muc_room.erl:2801
-#: web/ejabberd_web_admin.erl:1364
+#: mod_configure.erl:1833 mod_muc/mod_muc_room.erl:2849
+#: web/ejabberd_web_admin.erl:1501
 msgid &quot;Password&quot;
 msgstr &quot;Password&quot;
 
@@ -380,11 +378,11 @@ msgstr &quot;N&#250;mero d'Usuaris Registrats&quot;
 msgid &quot;Number of online users&quot;
 msgstr &quot;N&#250;mero d'usuaris connectats&quot;
 
-#: mod_configure.erl:1652 web/ejabberd_web_admin.erl:1430
+#: mod_configure.erl:1652 web/ejabberd_web_admin.erl:1567
 msgid &quot;Never&quot;
 msgstr &quot;Mai&quot;
 
-#: mod_configure.erl:1666 web/ejabberd_web_admin.erl:1444
+#: mod_configure.erl:1666 web/ejabberd_web_admin.erl:1581
 msgid &quot;Online&quot;
 msgstr &quot;Connectat&quot;
 
@@ -416,238 +414,306 @@ msgstr &quot;Acci&#243; en l'usuari&quot;
 msgid &quot;Edit Properties&quot;
 msgstr &quot;Editar propietats&quot;
 
-#: mod_configure.erl:1830 web/ejabberd_web_admin.erl:1556
+#: mod_configure.erl:1830 web/ejabberd_web_admin.erl:1695
 msgid &quot;Remove User&quot;
 msgstr &quot;Eliminar usuari&quot;
 
-#: mod_irc/mod_irc.erl:198 mod_muc/mod_muc.erl:335
+#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:335
 msgid &quot;Access denied by service policy&quot;
 msgstr &quot;Acc&#233;s denegat per la pol&#237;tica del servei&quot;
 
-#: mod_irc/mod_irc.erl:311
+#: mod_irc/mod_irc.erl:400
 msgid &quot;IRC Transport&quot;
 msgstr &quot;Transport a IRC&quot;
 
-#: mod_irc/mod_irc.erl:323
+#: mod_irc/mod_irc.erl:427
 msgid &quot;ejabberd IRC module&quot;
 msgstr &quot;m&#242;dul ejabberd IRC&quot;
 
-#: mod_irc/mod_irc.erl:441
+#: mod_irc/mod_irc.erl:557
 msgid &quot;You need an x:data capable client to configure mod_irc settings&quot;
 msgstr &quot;&quot;
 &quot;Necessites un client amb suport x:data per a configurar les opcions de &quot;
 &quot;mod_irc&quot;
 
-#: mod_irc/mod_irc.erl:448
+#: mod_irc/mod_irc.erl:564
 msgid &quot;Registration in mod_irc for &quot;
 msgstr &quot;Registre en mod_irc per a&quot;
 
-#: mod_irc/mod_irc.erl:453
+#: mod_irc/mod_irc.erl:569
+#, fuzzy
 msgid &quot;&quot;
-&quot;Enter username and encodings you wish to use for connecting to IRC servers&quot;
+&quot;Enter username, encodings, ports and passwords you wish to use for &quot;
+&quot;connecting to IRC servers&quot;
 msgstr &quot;&quot;
 &quot;Introdueix el nom d'usuari i les codificacions de car&#224;cters per a utilitzar &quot;
 &quot;als servidors de IRC&quot;
 
-#: mod_irc/mod_irc.erl:458
+#: mod_irc/mod_irc.erl:574
 msgid &quot;IRC Username&quot;
 msgstr &quot;Nom d'usuari al IRC&quot;
 
-#: mod_irc/mod_irc.erl:468
+#: mod_irc/mod_irc.erl:584
+#, fuzzy
 msgid &quot;&quot;
-&quot;If you want to specify different encodings for IRC servers, fill this list &quot;
-&quot;with values in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;}'.  By default this &quot;
-&quot;service use \&quot;~s\&quot; encoding.&quot;
+&quot;If you want to specify different ports, passwords, encodings for IRC &quot;
+&quot;servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding&quot;
+&quot;\&quot;, port, \&quot;password\&quot;}'.  By default this service use \&quot;~s\&quot; encoding, port &quot;
+&quot;~p, empty password.&quot;
 msgstr &quot;&quot;
 &quot;Si vols especificar codificacions de car&#224;cters distints per a cada servidor &quot;
 &quot;IRC emplena aquesta llista amb els valors amb el format '{\&quot;servidor irc\&quot;, &quot;
 &quot;\&quot;codificaci&#243;\&quot;}'.  Aquest servei utilitza per defecte la codificaci&#243; \&quot;~s\&quot;.&quot;
 
-#: mod_irc/mod_irc.erl:478
+#: mod_irc/mod_irc.erl:596
+#, fuzzy
 msgid &quot;&quot;
-&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1&quot;
-&quot;\&quot;}].&quot;
+&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;, 6667, \&quot;secret\&quot;}, {\&quot;vendetta.fef.&quot;
+&quot;net\&quot;, \&quot;iso8859-1\&quot;, 7000}, {\&quot;irc.sometestserver.net\&quot;, \&quot;utf-8\&quot;}].&quot;
 msgstr &quot;&quot;
 &quot;Exemple: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1&quot;
 &quot;\&quot;}].&quot;
 
-#: mod_irc/mod_irc.erl:483
-msgid &quot;Encodings&quot;
-msgstr &quot;Codificacions&quot;
+#: mod_irc/mod_irc.erl:601
+msgid &quot;Connections parameters&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:711
+msgid &quot;Join IRC channel&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:715
+msgid &quot;IRC channel (don't put the first #)&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:720
+#, fuzzy
+msgid &quot;IRC server&quot;
+msgstr &quot;Nom d'usuari al IRC&quot;
+
+#: mod_irc/mod_irc.erl:753 mod_irc/mod_irc.erl:757
+msgid &quot;Join the IRC channel here.&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:761
+msgid &quot;Join the IRC channel in this Jabber ID: ~s&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:846
+msgid &quot;IRC settings&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:851
+#, fuzzy
+msgid &quot;&quot;
+&quot;Enter username and encodings you wish to use for connecting to IRC servers.  &quot;
+&quot;Press 'Next' to get more fields to fill in.  Press 'Complete' to save &quot;
+&quot;settings.&quot;
+msgstr &quot;&quot;
+&quot;Introdueix el nom d'usuari i les codificacions de car&#224;cters per a utilitzar &quot;
+&quot;als servidors de IRC&quot;
+
+#: mod_irc/mod_irc.erl:857
+#, fuzzy
+msgid &quot;IRC username&quot;
+msgstr &quot;Nom d'usuari al IRC&quot;
+
+#: mod_irc/mod_irc.erl:906
+#, fuzzy
+msgid &quot;Password ~b&quot;
+msgstr &quot;Password&quot;
+
+#: mod_irc/mod_irc.erl:911
+#, fuzzy
+msgid &quot;Port ~b&quot;
+msgstr &quot;Port&quot;
+
+#: mod_irc/mod_irc.erl:916
+msgid &quot;Encoding for server ~b&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:925
+msgid &quot;Server ~b&quot;
+msgstr &quot;&quot;
 
-#: mod_muc/mod_muc.erl:433
+#: mod_muc/mod_muc.erl:437
 msgid &quot;Only service administrators are allowed to send service messages&quot;
 msgstr &quot;&quot;
 &quot;Sols els administradors del servei tenen perm&#237;s per a enviar missatges de &quot;
 &quot;servei&quot;
 
-#: mod_muc/mod_muc.erl:478
+#: mod_muc/mod_muc.erl:482
 msgid &quot;Room creation is denied by service policy&quot;
 msgstr &quot;Se t'ha denegat el crear la sala per pol&#237;tica del servei&quot;
 
-#: mod_muc/mod_muc.erl:485
+#: mod_muc/mod_muc.erl:489
 msgid &quot;Conference room does not exist&quot;
 msgstr &quot;La sala de confer&#232;ncies no existeix&quot;
 
-#: mod_muc/mod_muc.erl:549
+#: mod_muc/mod_muc.erl:553
 msgid &quot;Chatrooms&quot;
 msgstr &quot;Sales de xat&quot;
 
-#: mod_muc/mod_muc.erl:668
+#: mod_muc/mod_muc.erl:672
 msgid &quot;You need an x:data capable client to register nickname&quot;
 msgstr &quot;&quot;
 &quot;Necessites un client amb suport x:data per a poder registrar el Nickname&quot;
 
-#: mod_muc/mod_muc.erl:674
+#: mod_muc/mod_muc.erl:678
 msgid &quot;Nickname Registration at &quot;
 msgstr &quot;Registre del Nickname en &quot;
 
-#: mod_muc/mod_muc.erl:678
+#: mod_muc/mod_muc.erl:682
 msgid &quot;Enter nickname you want to register&quot;
 msgstr &quot;Introdueix el nickname que vols registrar&quot;
 
-#: mod_muc/mod_muc.erl:679 mod_roster.erl:823 mod_roster_odbc.erl:923
-#: mod_vcard.erl:357 mod_vcard.erl:467 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:442
+#: mod_muc/mod_muc.erl:683 mod_roster.erl:949 mod_roster_odbc.erl:1050
+#: mod_vcard.erl:357 mod_vcard.erl:470 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:445
 msgid &quot;Nickname&quot;
 msgstr &quot;Nickname&quot;
 
-#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_room.erl:924
-#: mod_muc/mod_muc_room.erl:1511
+#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_room.erl:926
+#: mod_muc/mod_muc_room.erl:1513
 #, fuzzy
 msgid &quot;That nickname is registered by another person&quot;
 msgstr &quot;El Nickname ja est&#224; registrat per una altra persona&quot;
 
-#: mod_muc/mod_muc.erl:742
+#: mod_muc/mod_muc.erl:748
 msgid &quot;You must fill in field \&quot;Nickname\&quot; in the form&quot;
 msgstr &quot;Deus d'omplir el camp \&quot;Nickname\&quot; al formulari&quot;
 
-#: mod_muc/mod_muc.erl:764
+#: mod_muc/mod_muc.erl:768
 msgid &quot;ejabberd MUC module&quot;
 msgstr &quot;m&#242;dul ejabberd MUC&quot;
 
-#: mod_muc/mod_muc_log.erl:364
+#: mod_muc/mod_muc_log.erl:371 mod_muc/mod_muc_log.erl:378
 msgid &quot;Chatroom configuration modified&quot;
 msgstr &quot;Configuraci&#243; de la sala de xat modificada&quot;
 
-#: mod_muc/mod_muc_log.erl:367
+#: mod_muc/mod_muc_log.erl:381
 msgid &quot;joins the room&quot;
 msgstr &quot;Entrar a la sala&quot;
 
-#: mod_muc/mod_muc_log.erl:370 mod_muc/mod_muc_log.erl:373
+#: mod_muc/mod_muc_log.erl:384 mod_muc/mod_muc_log.erl:387
 msgid &quot;leaves the room&quot;
 msgstr &quot;Deixar la sala&quot;
 
-#: mod_muc/mod_muc_log.erl:376 mod_muc/mod_muc_log.erl:379
+#: mod_muc/mod_muc_log.erl:390 mod_muc/mod_muc_log.erl:393
 msgid &quot;has been banned&quot;
 msgstr &quot;Has sigut banejat&quot;
 
-#: mod_muc/mod_muc_log.erl:382 mod_muc/mod_muc_log.erl:385
+#: mod_muc/mod_muc_log.erl:396 mod_muc/mod_muc_log.erl:399
 msgid &quot;has been kicked&quot;
 msgstr &quot;Has sigut expulsat&quot;
 
-#: mod_muc/mod_muc_log.erl:388
+#: mod_muc/mod_muc_log.erl:402
 msgid &quot;has been kicked because of an affiliation change&quot;
 msgstr &quot;Has sigut expulsat a causa d'un canvi d'afiliaci&#243;&quot;
 
-#: mod_muc/mod_muc_log.erl:391
+#: mod_muc/mod_muc_log.erl:405
 msgid &quot;has been kicked because the room has been changed to members-only&quot;
 msgstr &quot;Has sigut expulsat perqu&#232; la sala ha canviat a sols membres&quot;
 
-#: mod_muc/mod_muc_log.erl:394
+#: mod_muc/mod_muc_log.erl:408
 msgid &quot;has been kicked because of a system shutdown&quot;
 msgstr &quot;Has sigut expulsat perqu&#232; el sistema s'ha apagat&quot;
 
-#: mod_muc/mod_muc_log.erl:397
+#: mod_muc/mod_muc_log.erl:411
 msgid &quot;is now known as&quot;
 msgstr &quot;ara es conegut com&quot;
 
-#: mod_muc/mod_muc_log.erl:400 mod_muc/mod_muc_log.erl:661
-#: mod_muc/mod_muc_room.erl:2032
+#: mod_muc/mod_muc_log.erl:414 mod_muc/mod_muc_log.erl:678
+#: mod_muc/mod_muc_room.erl:2040
 msgid &quot; has set the subject to: &quot;
 msgstr &quot; ha posat l'assumpte: &quot;
 
-#: mod_muc/mod_muc_log.erl:431
+#: mod_muc/mod_muc_log.erl:448
 msgid &quot;Monday&quot;
 msgstr &quot;Dilluns&quot;
 
-#: mod_muc/mod_muc_log.erl:432
+#: mod_muc/mod_muc_log.erl:449
 msgid &quot;Tuesday&quot;
 msgstr &quot;Dimarts&quot;
 
-#: mod_muc/mod_muc_log.erl:433
+#: mod_muc/mod_muc_log.erl:450
 msgid &quot;Wednesday&quot;
 msgstr &quot;Dimecres&quot;
 
-#: mod_muc/mod_muc_log.erl:434
+#: mod_muc/mod_muc_log.erl:451
 msgid &quot;Thursday&quot;
 msgstr &quot;Dijous&quot;
 
-#: mod_muc/mod_muc_log.erl:435
+#: mod_muc/mod_muc_log.erl:452
 msgid &quot;Friday&quot;
 msgstr &quot;Divendres&quot;
 
-#: mod_muc/mod_muc_log.erl:436
+#: mod_muc/mod_muc_log.erl:453
 msgid &quot;Saturday&quot;
 msgstr &quot;Dissabte&quot;
 
-#: mod_muc/mod_muc_log.erl:437
+#: mod_muc/mod_muc_log.erl:454
 msgid &quot;Sunday&quot;
 msgstr &quot;Diumenge&quot;
 
-#: mod_muc/mod_muc_log.erl:441
+#: mod_muc/mod_muc_log.erl:458
 msgid &quot;January&quot;
 msgstr &quot;Gener&quot;
 
-#: mod_muc/mod_muc_log.erl:442
+#: mod_muc/mod_muc_log.erl:459
 msgid &quot;February&quot;
 msgstr &quot;Febrer&quot;
 
-#: mod_muc/mod_muc_log.erl:443
+#: mod_muc/mod_muc_log.erl:460
 msgid &quot;March&quot;
 msgstr &quot;Mar&#231;&quot;
 
-#: mod_muc/mod_muc_log.erl:444
+#: mod_muc/mod_muc_log.erl:461
 msgid &quot;April&quot;
 msgstr &quot;Abril&quot;
 
-#: mod_muc/mod_muc_log.erl:445
+#: mod_muc/mod_muc_log.erl:462
 msgid &quot;May&quot;
 msgstr &quot;Maig&quot;
 
-#: mod_muc/mod_muc_log.erl:446
+#: mod_muc/mod_muc_log.erl:463
 msgid &quot;June&quot;
 msgstr &quot;Juny&quot;
 
-#: mod_muc/mod_muc_log.erl:447
+#: mod_muc/mod_muc_log.erl:464
 msgid &quot;July&quot;
 msgstr &quot;Juliol&quot;
 
-#: mod_muc/mod_muc_log.erl:448
+#: mod_muc/mod_muc_log.erl:465
 msgid &quot;August&quot;
 msgstr &quot;Agost&quot;
 
-#: mod_muc/mod_muc_log.erl:449
+#: mod_muc/mod_muc_log.erl:466
 msgid &quot;September&quot;
 msgstr &quot;Setembre&quot;
 
-#: mod_muc/mod_muc_log.erl:450
+#: mod_muc/mod_muc_log.erl:467
 msgid &quot;October&quot;
 msgstr &quot;Octubre&quot;
 
-#: mod_muc/mod_muc_log.erl:451
+#: mod_muc/mod_muc_log.erl:468
 msgid &quot;November&quot;
 msgstr &quot;Novembre&quot;
 
-#: mod_muc/mod_muc_log.erl:452
+#: mod_muc/mod_muc_log.erl:469
 msgid &quot;December&quot;
 msgstr &quot;Decembre&quot;
 
-#: mod_muc/mod_muc_log.erl:719
+#: mod_muc/mod_muc_log.erl:740
 msgid &quot;Room Configuration&quot;
 msgstr &quot;Configuraci&#243; de la sala&quot;
 
-#: mod_muc/mod_muc_log.erl:820 mod_muc/mod_muc_room.erl:2777
+#: mod_muc/mod_muc_log.erl:749
+#, fuzzy
+msgid &quot;Room Occupants&quot;
+msgstr &quot;N&#250;mero d'ocupants&quot;
+
+#: mod_muc/mod_muc_log.erl:852 mod_muc/mod_muc_room.erl:2825
 msgid &quot;Room title&quot;
 msgstr &quot;T&#237;tol de la sala&quot;
 
@@ -686,8 +752,8 @@ msgstr &quot;No est&#224; perm&#233;s enviar missatges del tipus \&quot;groupchat\&quot;&quot;
 msgid &quot;Recipient is not in the conference room&quot;
 msgstr &quot;El receptor no est&#224; en la sala de confer&#232;ncia&quot;
 
-#: mod_muc/mod_muc_room.erl:448 mod_muc/mod_muc_room.erl:823
-#: mod_muc/mod_muc_room.erl:3388
+#: mod_muc/mod_muc_room.erl:448 mod_muc/mod_muc_room.erl:825
+#: mod_muc/mod_muc_room.erl:3447
 msgid &quot;Only occupants are allowed to send messages to the conference&quot;
 msgstr &quot;Sols els ocupants poden enviar missatges a la sala&quot;
 
@@ -703,11 +769,11 @@ msgstr &quot;Sols els ocupants poden enviar solicituts a la sala&quot;
 msgid &quot;Queries to the conference members are not allowed in this room&quot;
 msgstr &quot; En aquesta sala no es permeten solicituts als membres de la sala&quot;
 
-#: mod_muc/mod_muc_room.erl:600
+#: mod_muc/mod_muc_room.erl:601
 msgid &quot;private, &quot;
 msgstr &quot;privat&quot;
 
-#: mod_muc/mod_muc_room.erl:799
+#: mod_muc/mod_muc_room.erl:801
 #, fuzzy
 msgid &quot;&quot;
 &quot;Only moderators and participants are allowed to change the subject in this &quot;
@@ -715,338 +781,342 @@ msgid &quot;&quot;
 msgstr &quot;&quot;
 &quot;Sols els moderadors i participants poden canviar l'assumpte d'aquesta sala&quot;
 
-#: mod_muc/mod_muc_room.erl:804
+#: mod_muc/mod_muc_room.erl:806
 #, fuzzy
 msgid &quot;Only moderators are allowed to change the subject in this room&quot;
 msgstr &quot;Sols els moderadors poden canviar l'assumpte d'aquesta sala&quot;
 
-#: mod_muc/mod_muc_room.erl:814
+#: mod_muc/mod_muc_room.erl:816
 msgid &quot;Visitors are not allowed to send messages to all occupants&quot;
 msgstr &quot;Els visitants no poden enviar missatges a tots els ocupants&quot;
 
-#: mod_muc/mod_muc_room.erl:882
+#: mod_muc/mod_muc_room.erl:884
 msgid &quot;&quot;
 &quot;This participant is kicked from the room because he sent an error presence&quot;
 msgstr &quot;&quot;
 &quot;Aquest participant ha sigut expulsat de la sala perque ha enviat un error de &quot;
 &quot;presencia&quot;
 
-#: mod_muc/mod_muc_room.erl:900
+#: mod_muc/mod_muc_room.erl:902
 msgid &quot;Visitors are not allowed to change their nicknames in this room&quot;
 msgstr &quot;Els visitants no tenen perm&#233;s canviar el seus Nicknames en esta sala&quot;
 
-#: mod_muc/mod_muc_room.erl:913 mod_muc/mod_muc_room.erl:1503
+#: mod_muc/mod_muc_room.erl:915 mod_muc/mod_muc_room.erl:1505
 #, fuzzy
 msgid &quot;That nickname is already in use by another occupant&quot;
 msgstr &quot;El Nickname est&#224; siguent utilitzat per una altra persona&quot;
 
-#: mod_muc/mod_muc_room.erl:1492
+#: mod_muc/mod_muc_room.erl:1494
 msgid &quot;You have been banned from this room&quot;
 msgstr &quot;Has sigut bloquejat en aquesta sala&quot;
 
-#: mod_muc/mod_muc_room.erl:1495
+#: mod_muc/mod_muc_room.erl:1497
 #, fuzzy
 msgid &quot;Membership is required to enter this room&quot;
 msgstr &quot;Necessites ser membre d'aquesta sala per a poder entrar&quot;
 
-#: mod_muc/mod_muc_room.erl:1531
+#: mod_muc/mod_muc_room.erl:1533
 msgid &quot;This room is not anonymous&quot;
 msgstr &quot;Aquesta sala no &#233;s an&#242;nima&quot;
 
-#: mod_muc/mod_muc_room.erl:1557
+#: mod_muc/mod_muc_room.erl:1559
 #, fuzzy
 msgid &quot;A password is required to enter this room&quot;
 msgstr &quot;Es necessita password per a entrar en aquesta sala&quot;
 
-#: mod_muc/mod_muc_room.erl:1579
+#: mod_muc/mod_muc_room.erl:1581
 msgid &quot;Unable to generate a captcha&quot;
 msgstr &quot;&quot;
 
-#: mod_muc/mod_muc_room.erl:1589
+#: mod_muc/mod_muc_room.erl:1591
 msgid &quot;Incorrect password&quot;
 msgstr &quot;Password incorrecte&quot;
 
-#: mod_muc/mod_muc_room.erl:2087
+#: mod_muc/mod_muc_room.erl:2095
 msgid &quot;Administrator privileges required&quot;
 msgstr &quot;Es necessita tenir privilegis d'administrador&quot;
 
-#: mod_muc/mod_muc_room.erl:2102
+#: mod_muc/mod_muc_room.erl:2110
 msgid &quot;Moderator privileges required&quot;
 msgstr &quot;Es necessita tenir privilegis de moderador&quot;
 
-#: mod_muc/mod_muc_room.erl:2257
+#: mod_muc/mod_muc_room.erl:2265
 msgid &quot;Jabber ID ~s is invalid&quot;
 msgstr &quot;El Jabber ID ~s no &#233;s v&#224;lid&quot;
 
-#: mod_muc/mod_muc_room.erl:2271
+#: mod_muc/mod_muc_room.erl:2279
 msgid &quot;Nickname ~s does not exist in the room&quot;
 msgstr &quot;El Nickname ~s no existeix a la sala&quot;
 
-#: mod_muc/mod_muc_room.erl:2297 mod_muc/mod_muc_room.erl:2673
+#: mod_muc/mod_muc_room.erl:2305 mod_muc/mod_muc_room.erl:2683
 msgid &quot;Invalid affiliation: ~s&quot;
 msgstr &quot;Afiliaci&#243; inv&#224;lida: ~s&quot;
 
-#: mod_muc/mod_muc_room.erl:2354
+#: mod_muc/mod_muc_room.erl:2362
 msgid &quot;Invalid role: ~s&quot;
 msgstr &quot;Rol inv&#224;lid: ~s&quot;
 
-#: mod_muc/mod_muc_room.erl:2650 mod_muc/mod_muc_room.erl:2686
+#: mod_muc/mod_muc_room.erl:2660 mod_muc/mod_muc_room.erl:2696
 msgid &quot;Owner privileges required&quot;
 msgstr &quot;Es requerixen privilegis de propietari de la sala&quot;
 
-#: mod_muc/mod_muc_room.erl:2772
+#: mod_muc/mod_muc_room.erl:2820
 #, fuzzy
 msgid &quot;Configuration of room ~s&quot;
 msgstr &quot;Configuraci&#243; per a &quot;
 
-#: mod_muc/mod_muc_room.erl:2780 mod_muc/mod_muc_room.erl:3187
+#: mod_muc/mod_muc_room.erl:2828 mod_muc/mod_muc_room.erl:3246
 #, fuzzy
 msgid &quot;Room description&quot;
 msgstr &quot;Descripci&#243;:&quot;
 
-#: mod_muc/mod_muc_room.erl:2787
+#: mod_muc/mod_muc_room.erl:2835
 msgid &quot;Make room persistent&quot;
 msgstr &quot;Crear una sala persistent&quot;
 
-#: mod_muc/mod_muc_room.erl:2792
+#: mod_muc/mod_muc_room.erl:2840
 msgid &quot;Make room public searchable&quot;
 msgstr &quot;Crear una sala p&#250;blica&quot;
 
-#: mod_muc/mod_muc_room.erl:2795
+#: mod_muc/mod_muc_room.erl:2843
 msgid &quot;Make participants list public&quot;
 msgstr &quot;Crear una llista de participants p&#250;blica&quot;
 
-#: mod_muc/mod_muc_room.erl:2798
+#: mod_muc/mod_muc_room.erl:2846
 msgid &quot;Make room password protected&quot;
 msgstr &quot;Crear una sala amb password&quot;
 
-#: mod_muc/mod_muc_room.erl:2809
+#: mod_muc/mod_muc_room.erl:2857
 msgid &quot;Maximum Number of Occupants&quot;
 msgstr &quot;N&#250;mero m&#224;xim d'ocupants&quot;
 
-#: mod_muc/mod_muc_room.erl:2816
+#: mod_muc/mod_muc_room.erl:2864
 msgid &quot;No limit&quot;
 msgstr &quot;Sense Ll&#237;mit&quot;
 
-#: mod_muc/mod_muc_room.erl:2827
+#: mod_muc/mod_muc_room.erl:2875
 msgid &quot;Present real Jabber IDs to&quot;
 msgstr &quot;Presentar Jabber ID's reals a&quot;
 
-#: mod_muc/mod_muc_room.erl:2835
+#: mod_muc/mod_muc_room.erl:2883
 msgid &quot;moderators only&quot;
 msgstr &quot;sols moderadors&quot;
 
-#: mod_muc/mod_muc_room.erl:2837
+#: mod_muc/mod_muc_room.erl:2885
 msgid &quot;anyone&quot;
 msgstr &quot;qualsevol&quot;
 
-#: mod_muc/mod_muc_room.erl:2839
+#: mod_muc/mod_muc_room.erl:2887
 msgid &quot;Make room members-only&quot;
 msgstr &quot;Crear una sala de \&quot;soles membres\&quot;&quot;
 
-#: mod_muc/mod_muc_room.erl:2842
+#: mod_muc/mod_muc_room.erl:2890
 msgid &quot;Make room moderated&quot;
 msgstr &quot;Crear una sala moderada&quot;
 
-#: mod_muc/mod_muc_room.erl:2845
+#: mod_muc/mod_muc_room.erl:2893
 msgid &quot;Default users as participants&quot;
 msgstr &quot;Els usuaris per defecte s&#243;n els participants&quot;
 
-#: mod_muc/mod_muc_room.erl:2848
+#: mod_muc/mod_muc_room.erl:2896
 #, fuzzy
 msgid &quot;Allow users to change the subject&quot;
 msgstr &quot;Permetre que els usuaris canvien el tema&quot;
 
-#: mod_muc/mod_muc_room.erl:2851
+#: mod_muc/mod_muc_room.erl:2899
 msgid &quot;Allow users to send private messages&quot;
 msgstr &quot;Permetre que els usuaris envien missatges privats&quot;
 
-#: mod_muc/mod_muc_room.erl:2854
+#: mod_muc/mod_muc_room.erl:2902
 msgid &quot;Allow users to query other users&quot;
 msgstr &quot;Permetre que els usuaris fagen peticions a altres usuaris&quot;
 
-#: mod_muc/mod_muc_room.erl:2857
+#: mod_muc/mod_muc_room.erl:2905
 msgid &quot;Allow users to send invites&quot;
 msgstr &quot;Permetre que els usuaris envien invitacions&quot;
 
-#: mod_muc/mod_muc_room.erl:2860
+#: mod_muc/mod_muc_room.erl:2908
 msgid &quot;Allow visitors to send status text in presence updates&quot;
 msgstr &quot;&quot;
 &quot;Permetre als visitants enviar text d'estat en les actualitzacions de &quot;
 &quot;pres&#232;ncia&quot;
 
-#: mod_muc/mod_muc_room.erl:2863
+#: mod_muc/mod_muc_room.erl:2911
 msgid &quot;Allow visitors to change nickname&quot;
 msgstr &quot;Permetre als visitants canviar el Nickname&quot;
 
-#: mod_muc/mod_muc_room.erl:2869
+#: mod_muc/mod_muc_room.erl:2917
 #, fuzzy
 msgid &quot;Make room captcha protected&quot;
 msgstr &quot;Crear una sala amb password&quot;
 
-#: mod_muc/mod_muc_room.erl:2878
+#: mod_muc/mod_muc_room.erl:2926
 msgid &quot;Enable logging&quot;
 msgstr &quot;Habilitar el registre de la conversa&quot;
 
-#: mod_muc/mod_muc_room.erl:2886
+#: mod_muc/mod_muc_room.erl:2934
 msgid &quot;You need an x:data capable client to configure room&quot;
 msgstr &quot;Necessites un client amb suport x:data per a configurar la sala&quot;
 
-#: mod_muc/mod_muc_room.erl:3189
+#: mod_muc/mod_muc_room.erl:3248
 msgid &quot;Number of occupants&quot;
 msgstr &quot;N&#250;mero d'ocupants&quot;
 
-#: mod_muc/mod_muc_room.erl:3308
+#: mod_muc/mod_muc_room.erl:3367
 msgid &quot;~s invites you to the room ~s&quot;
 msgstr &quot;~s et convida a la sala ~s&quot;
 
-#: mod_muc/mod_muc_room.erl:3317
+#: mod_muc/mod_muc_room.erl:3376
 msgid &quot;the password is&quot;
 msgstr &quot;el password &#233;s&quot;
 
-#: mod_offline.erl:451 mod_offline_odbc.erl:303
+#: mod_offline.erl:509 mod_offline_odbc.erl:352
 msgid &quot;&quot;
 &quot;Your contact offline message queue is full. The message has been discarded.&quot;
 msgstr &quot;La cua de missatges offline &#233;s plena. El missatge ha sigut descartat&quot;
 
-#: mod_offline.erl:500 mod_offline_odbc.erl:358
+#: mod_offline.erl:558 mod_offline_odbc.erl:407
 msgid &quot;~s's Offline Messages Queue&quot;
 msgstr &quot;~s's cua de missatges offline&quot;
 
-#: mod_offline.erl:503 mod_offline_odbc.erl:361 mod_roster.erl:866
-#: mod_roster_odbc.erl:966 mod_shared_roster.erl:778 mod_shared_roster.erl:879
-#: web/ejabberd_web_admin.erl:708 web/ejabberd_web_admin.erl:748
-#: web/ejabberd_web_admin.erl:815 web/ejabberd_web_admin.erl:850
-#: web/ejabberd_web_admin.erl:890 web/ejabberd_web_admin.erl:1352
-#: web/ejabberd_web_admin.erl:1548 web/ejabberd_web_admin.erl:1716
-#: web/ejabberd_web_admin.erl:1748 web/ejabberd_web_admin.erl:1810
-#: web/ejabberd_web_admin.erl:1878 web/ejabberd_web_admin.erl:1903
-#: web/ejabberd_web_admin.erl:1991
+#: mod_offline.erl:561 mod_offline_odbc.erl:410 mod_roster.erl:992
+#: mod_roster_odbc.erl:1093 mod_shared_roster.erl:778
+#: mod_shared_roster.erl:879 web/ejabberd_web_admin.erl:813
+#: web/ejabberd_web_admin.erl:854 web/ejabberd_web_admin.erl:922
+#: web/ejabberd_web_admin.erl:958 web/ejabberd_web_admin.erl:999
+#: web/ejabberd_web_admin.erl:1489 web/ejabberd_web_admin.erl:1687
+#: web/ejabberd_web_admin.erl:1857 web/ejabberd_web_admin.erl:1889
+#: web/ejabberd_web_admin.erl:1952 web/ejabberd_web_admin.erl:2056
+#: web/ejabberd_web_admin.erl:2081 web/ejabberd_web_admin.erl:2169
 msgid &quot;Submitted&quot;
 msgstr &quot;Enviat&quot;
 
-#: mod_offline.erl:511
+#: mod_offline.erl:569
 msgid &quot;Time&quot;
 msgstr &quot;Data&quot;
 
-#: mod_offline.erl:512
+#: mod_offline.erl:570
 msgid &quot;From&quot;
 msgstr &quot;De&quot;
 
-#: mod_offline.erl:513
+#: mod_offline.erl:571
 msgid &quot;To&quot;
 msgstr &quot;Per a&quot;
 
-#: mod_offline.erl:514 mod_offline_odbc.erl:369
+#: mod_offline.erl:572 mod_offline_odbc.erl:418
 msgid &quot;Packet&quot;
 msgstr &quot;Paquet&quot;
 
-#: mod_offline.erl:527 mod_offline_odbc.erl:382 mod_shared_roster.erl:785
-#: web/ejabberd_web_admin.erl:756 web/ejabberd_web_admin.erl:858
+#: mod_offline.erl:585 mod_offline_odbc.erl:431 mod_shared_roster.erl:785
+#: web/ejabberd_web_admin.erl:862 web/ejabberd_web_admin.erl:966
 msgid &quot;Delete Selected&quot;
 msgstr &quot;Eliminar els seleccionats&quot;
 
-#: mod_offline.erl:562 mod_offline_odbc.erl:447
+#: mod_offline.erl:620 mod_offline_odbc.erl:496
 msgid &quot;Offline Messages:&quot;
 msgstr &quot;Missatges fora de l&#237;nia:&quot;
 
-#: mod_offline.erl:562 mod_offline_odbc.erl:447
+#: mod_offline.erl:620 mod_offline_odbc.erl:496
 #, fuzzy
 msgid &quot;Remove All Offline Messages&quot;
 msgstr &quot;Missatges offline&quot;
 
-#: mod_proxy65/mod_proxy65_service.erl:209
+#: mod_proxy65/mod_proxy65_service.erl:213
 msgid &quot;ejabberd SOCKS5 Bytestreams module&quot;
 msgstr &quot;m&#242;dul ejabberd SOCKS5 Bytestreams&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1022
+#: mod_pubsub/mod_pubsub.erl:1054 mod_pubsub/mod_pubsub_odbc.erl:1053
 msgid &quot;Publish-Subscribe&quot;
 msgstr &quot;Publicar-subscriure't&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1118
+#: mod_pubsub/mod_pubsub.erl:1150 mod_pubsub/mod_pubsub_odbc.erl:1150
 msgid &quot;ejabberd Publish-Subscribe module&quot;
 msgstr &quot;M&#242;dul ejannerd Publicar-Subscriure&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1271
+#: mod_pubsub/mod_pubsub.erl:1437 mod_pubsub/mod_pubsub_odbc.erl:1442
 msgid &quot;PubSub subscriber request&quot;
 msgstr &quot;Petici&#243; de PubSub subscriure&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1273
+#: mod_pubsub/mod_pubsub.erl:1439 mod_pubsub/mod_pubsub_odbc.erl:1444
 msgid &quot;Choose whether to approve this entity's subscription.&quot;
 msgstr &quot;Tria si aprova aquesta entitat de subscripci&#243;&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1279
+#: mod_pubsub/mod_pubsub.erl:1445 mod_pubsub/mod_pubsub_odbc.erl:1450
 msgid &quot;Node ID&quot;
 msgstr &quot;ID del Node&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1284
+#: mod_pubsub/mod_pubsub.erl:1450 mod_pubsub/mod_pubsub_odbc.erl:1455
 msgid &quot;Subscriber Address&quot;
 msgstr &quot;Adre&#231;a del Subscriptor&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1290
+#: mod_pubsub/mod_pubsub.erl:1456 mod_pubsub/mod_pubsub_odbc.erl:1461
 msgid &quot;Allow this Jabber ID to subscribe to this pubsub node?&quot;
 msgstr &quot;Permetre que aquesta Jabber ID es puga subscriure a aquest node pubsub&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3005
+#: mod_pubsub/mod_pubsub.erl:3220 mod_pubsub/mod_pubsub_odbc.erl:3244
 msgid &quot;Deliver payloads with event notifications&quot;
 msgstr &quot;Enviar payloads junt a les notificacions d'events&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3006
+#: mod_pubsub/mod_pubsub.erl:3221 mod_pubsub/mod_pubsub_odbc.erl:3245
 msgid &quot;Deliver event notifications&quot;
 msgstr &quot;Entrega de notificacions d'events&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3007
+#: mod_pubsub/mod_pubsub.erl:3222 mod_pubsub/mod_pubsub_odbc.erl:3246
 msgid &quot;Notify subscribers when the node configuration changes&quot;
 msgstr &quot;Notificar subscriptors quan canvia la configuraci&#243; del node&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3008
+#: mod_pubsub/mod_pubsub.erl:3223 mod_pubsub/mod_pubsub_odbc.erl:3247
 msgid &quot;Notify subscribers when the node is deleted&quot;
 msgstr &quot;Notificar subscriptors quan el node &#233;s eliminat&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3009
+#: mod_pubsub/mod_pubsub.erl:3224 mod_pubsub/mod_pubsub_odbc.erl:3248
 msgid &quot;Notify subscribers when items are removed from the node&quot;
 msgstr &quot;Notificar subscriptors quan els elements s&#243;n eliminats del node&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3010
+#: mod_pubsub/mod_pubsub.erl:3225 mod_pubsub/mod_pubsub_odbc.erl:3249
 msgid &quot;Persist items to storage&quot;
 msgstr &quot;Persistir elements al guardar&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3011
+#: mod_pubsub/mod_pubsub.erl:3226 mod_pubsub/mod_pubsub_odbc.erl:3250
 msgid &quot;A friendly name for the node&quot;
 msgstr &quot;Un nom per al node&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3012
+#: mod_pubsub/mod_pubsub.erl:3227 mod_pubsub/mod_pubsub_odbc.erl:3251
 msgid &quot;Max # of items to persist&quot;
 msgstr &quot;M&#224;xim # d'elements que persistixen&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3013
+#: mod_pubsub/mod_pubsub.erl:3228 mod_pubsub/mod_pubsub_odbc.erl:3252
 msgid &quot;Whether to allow subscriptions&quot;
 msgstr &quot;Permetre subscripcions&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3014
+#: mod_pubsub/mod_pubsub.erl:3229 mod_pubsub/mod_pubsub_odbc.erl:3253
 msgid &quot;Specify the access model&quot;
 msgstr &quot;Especificar el model d'acc&#233;s&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3017
+#: mod_pubsub/mod_pubsub.erl:3232 mod_pubsub/mod_pubsub_odbc.erl:3256
 msgid &quot;Roster groups allowed to subscribe&quot;
 msgstr &quot;Llista de grups que tenen perm&#233;s subscriures&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3018
+#: mod_pubsub/mod_pubsub.erl:3233 mod_pubsub/mod_pubsub_odbc.erl:3257
 msgid &quot;Specify the publisher model&quot;
 msgstr &quot;Especificar el model del publicant&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3020
+#: mod_pubsub/mod_pubsub.erl:3235 mod_pubsub/mod_pubsub_odbc.erl:3259
 msgid &quot;Max payload size in bytes&quot;
 msgstr &quot;M&#224;xim tamany del payload en bytes&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3021
+#: mod_pubsub/mod_pubsub.erl:3236 mod_pubsub/mod_pubsub_odbc.erl:3260
 msgid &quot;When to send the last published item&quot;
 msgstr &quot;Quan s'ha enviat l'&#250;ltima publicaci&#243;&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3023
+#: mod_pubsub/mod_pubsub.erl:3238 mod_pubsub/mod_pubsub_odbc.erl:3262
 msgid &quot;Only deliver notifications to available users&quot;
 msgstr &quot;Sols enviar notificacions als usuaris disponibles&quot;
 
+#: mod_pubsub/mod_pubsub.erl:3239 mod_pubsub/mod_pubsub_odbc.erl:3263
+msgid &quot;The collections with which a node is affiliated&quot;
+msgstr &quot;&quot;
+
 #: mod_register.erl:190
 msgid &quot;Choose a username and password to register with this server&quot;
 msgstr &quot;Tria nom d'usuari i password per a registrar-te en aquest servidor&quot;
@@ -1056,51 +1126,51 @@ msgstr &quot;Tria nom d'usuari i password per a registrar-te en aquest servidor&quot;
 msgid &quot;Users are not allowed to register accounts so quickly&quot;
 msgstr &quot;Els usuarios no tenen permis per a crear comptes tan apresa&quot;
 
-#: mod_roster.erl:817 mod_roster_odbc.erl:917 web/ejabberd_web_admin.erl:1514
-#: web/ejabberd_web_admin.erl:1671 web/ejabberd_web_admin.erl:1682
-#: web/ejabberd_web_admin.erl:1962
+#: mod_roster.erl:943 mod_roster_odbc.erl:1044 web/ejabberd_web_admin.erl:1653
+#: web/ejabberd_web_admin.erl:1812 web/ejabberd_web_admin.erl:1823
+#: web/ejabberd_web_admin.erl:2140
 msgid &quot;None&quot;
 msgstr &quot;Cap&quot;
 
-#: mod_roster.erl:824 mod_roster_odbc.erl:924
+#: mod_roster.erl:950 mod_roster_odbc.erl:1051
 msgid &quot;Subscription&quot;
 msgstr &quot;Subscripci&#243;&quot;
 
-#: mod_roster.erl:825 mod_roster_odbc.erl:925
+#: mod_roster.erl:951 mod_roster_odbc.erl:1052
 msgid &quot;Pending&quot;
 msgstr &quot;Pendent&quot;
 
-#: mod_roster.erl:826 mod_roster_odbc.erl:926
+#: mod_roster.erl:952 mod_roster_odbc.erl:1053
 msgid &quot;Groups&quot;
 msgstr &quot;Grups&quot;
 
-#: mod_roster.erl:853 mod_roster_odbc.erl:953
+#: mod_roster.erl:979 mod_roster_odbc.erl:1080
 msgid &quot;Validate&quot;
 msgstr &quot;Validar&quot;
 
-#: mod_roster.erl:861 mod_roster_odbc.erl:961
+#: mod_roster.erl:987 mod_roster_odbc.erl:1088
 msgid &quot;Remove&quot;
 msgstr &quot;Borrar&quot;
 
-#: mod_roster.erl:864 mod_roster_odbc.erl:964
+#: mod_roster.erl:990 mod_roster_odbc.erl:1091
 msgid &quot;Roster of &quot;
 msgstr &quot;Llista de contactes de &quot;
 
-#: mod_roster.erl:867 mod_roster_odbc.erl:967 mod_shared_roster.erl:779
-#: mod_shared_roster.erl:880 web/ejabberd_web_admin.erl:709
-#: web/ejabberd_web_admin.erl:749 web/ejabberd_web_admin.erl:816
-#: web/ejabberd_web_admin.erl:851 web/ejabberd_web_admin.erl:891
-#: web/ejabberd_web_admin.erl:1353 web/ejabberd_web_admin.erl:1549
-#: web/ejabberd_web_admin.erl:1717 web/ejabberd_web_admin.erl:1879
-#: web/ejabberd_web_admin.erl:1904 web/ejabberd_web_admin.erl:1992
+#: mod_roster.erl:993 mod_roster_odbc.erl:1094 mod_shared_roster.erl:779
+#: mod_shared_roster.erl:880 web/ejabberd_web_admin.erl:814
+#: web/ejabberd_web_admin.erl:855 web/ejabberd_web_admin.erl:923
+#: web/ejabberd_web_admin.erl:959 web/ejabberd_web_admin.erl:1000
+#: web/ejabberd_web_admin.erl:1490 web/ejabberd_web_admin.erl:1688
+#: web/ejabberd_web_admin.erl:1858 web/ejabberd_web_admin.erl:2057
+#: web/ejabberd_web_admin.erl:2082 web/ejabberd_web_admin.erl:2170
 msgid &quot;Bad format&quot;
 msgstr &quot;Format erroni&quot;
 
-#: mod_roster.erl:874 mod_roster_odbc.erl:974
+#: mod_roster.erl:1000 mod_roster_odbc.erl:1101
 msgid &quot;Add Jabber ID&quot;
 msgstr &quot;Afegir Jabber ID&quot;
 
-#: mod_roster.erl:973 mod_roster_odbc.erl:1073
+#: mod_roster.erl:1099 mod_roster_odbc.erl:1200
 msgid &quot;Roster&quot;
 msgstr &quot;Llista de contactes&quot;
 
@@ -1109,8 +1179,8 @@ msgstr &quot;Llista de contactes&quot;
 msgid &quot;Shared Roster Groups&quot;
 msgstr &quot;Grups de contactes compartits&quot;
 
-#: mod_shared_roster.erl:772 web/ejabberd_web_admin.erl:1222
-#: web/ejabberd_web_admin.erl:2176
+#: mod_shared_roster.erl:772 web/ejabberd_web_admin.erl:1346
+#: web/ejabberd_web_admin.erl:2382
 msgid &quot;Add New&quot;
 msgstr &quot;Afegir nou&quot;
 
@@ -1134,9 +1204,9 @@ msgstr &quot;Mostrar grups:&quot;
 msgid &quot;Group &quot;
 msgstr &quot;Grup &quot;
 
-#: mod_shared_roster.erl:886 web/ejabberd_web_admin.erl:715
-#: web/ejabberd_web_admin.erl:758 web/ejabberd_web_admin.erl:822
-#: web/ejabberd_web_admin.erl:897 web/ejabberd_web_admin.erl:1802
+#: mod_shared_roster.erl:886 web/ejabberd_web_admin.erl:820
+#: web/ejabberd_web_admin.erl:864 web/ejabberd_web_admin.erl:929
+#: web/ejabberd_web_admin.erl:1006 web/ejabberd_web_admin.erl:1943
 msgid &quot;Submit&quot;
 msgstr &quot;Enviar&quot;
 
@@ -1144,28 +1214,28 @@ msgstr &quot;Enviar&quot;
 msgid &quot;Erlang Jabber Server&quot;
 msgstr &quot;Servidor Erlang Jabber&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:468 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:443
+#: mod_vcard.erl:357 mod_vcard.erl:471 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:446
 msgid &quot;Birthday&quot;
 msgstr &quot;Aniversari&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:470 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:445
+#: mod_vcard.erl:357 mod_vcard.erl:473 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:448
 msgid &quot;City&quot;
 msgstr &quot;Ciutat&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:469 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:444
+#: mod_vcard.erl:357 mod_vcard.erl:472 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:447
 msgid &quot;Country&quot;
 msgstr &quot;Pais&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:471 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:446
+#: mod_vcard.erl:357 mod_vcard.erl:474 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:449
 msgid &quot;Email&quot;
 msgstr &quot;Email&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:466 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:441
+#: mod_vcard.erl:357 mod_vcard.erl:469 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:444
 msgid &quot;Family Name&quot;
 msgstr &quot;Cognom&quot;
 
@@ -1177,244 +1247,237 @@ msgstr &quot;&quot;
 &quot;Emplena el formulari per a buscar usuaris Jabber. Afegix * al final d'un &quot;
 &quot;camp per a buscar subcadenes.&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:463 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:438
+#: mod_vcard.erl:357 mod_vcard.erl:466 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:441
 msgid &quot;Full Name&quot;
 msgstr &quot;Nom complet&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:465 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:440
+#: mod_vcard.erl:357 mod_vcard.erl:468 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:443
 msgid &quot;Middle Name&quot;
 msgstr &quot;Segon nom&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:464 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:439 web/ejabberd_web_admin.erl:1791
+#: mod_vcard.erl:357 mod_vcard.erl:467 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:442 web/ejabberd_web_admin.erl:1932
 msgid &quot;Name&quot;
 msgstr &quot;Nom&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:472 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:447
+#: mod_vcard.erl:357 mod_vcard.erl:475 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:450
 msgid &quot;Organization Name&quot;
 msgstr &quot;Nom de la organizaci&#243;&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:473 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:448
+#: mod_vcard.erl:357 mod_vcard.erl:476 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:451
 msgid &quot;Organization Unit&quot;
 msgstr &quot;Unitat de la organizaci&#243;&quot;
 
-#: mod_vcard.erl:357 mod_vcard_ldap.erl:457 mod_vcard_odbc.erl:334
+#: mod_vcard.erl:357 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:334
 msgid &quot;Search users in &quot;
 msgstr &quot;Cerca usuaris en &quot;
 
-#: mod_vcard.erl:357 mod_vcard_odbc.erl:334 web/ejabberd_web_admin.erl:1359
-#: web/ejabberd_web_admin.erl:1414
+#: mod_vcard.erl:357 mod_vcard_odbc.erl:334 web/ejabberd_web_admin.erl:1496
+#: web/ejabberd_web_admin.erl:1551
 msgid &quot;User&quot;
 msgstr &quot;Usuari&quot;
 
-#: mod_vcard.erl:357 mod_vcard_ldap.erl:457 mod_vcard_odbc.erl:334
+#: mod_vcard.erl:357 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:334
 msgid &quot;You need an x:data capable client to search&quot;
 msgstr &quot;Necesites un client amb suport x:data per a poder buscar&quot;
 
-#: mod_vcard.erl:379 mod_vcard_ldap.erl:479 mod_vcard_odbc.erl:356
+#: mod_vcard.erl:382 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:359
 msgid &quot;vCard User Search&quot;
 msgstr &quot;Recerca de vCard d'usuari&quot;
 
-#: mod_vcard.erl:435 mod_vcard_ldap.erl:533 mod_vcard_odbc.erl:410
+#: mod_vcard.erl:438 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:413
 msgid &quot;ejabberd vCard module&quot;
 msgstr &quot;M&#242;dul ejabberd vCard&quot;
 
-#: mod_vcard.erl:459 mod_vcard_ldap.erl:543 mod_vcard_odbc.erl:434
+#: mod_vcard.erl:462 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:437
 msgid &quot;Search Results for &quot;
 msgstr &quot;Resultat de la b&#250;squeda&quot;
 
-#: mod_vcard_ldap.erl:457
+#: mod_vcard_ldap.erl:458
 msgid &quot;Fill in fields to search for any matching Jabber User&quot;
 msgstr &quot;Emplena camps per a buscar usuaris Jabber que concorden&quot;
 
-#: web/ejabberd_web_admin.erl:151 web/ejabberd_web_admin.erl:168
+#: web/ejabberd_web_admin.erl:179 web/ejabberd_web_admin.erl:186
+#: web/ejabberd_web_admin.erl:202 web/ejabberd_web_admin.erl:209
+msgid &quot;Unauthorized&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:266 web/ejabberd_web_admin.erl:283
 msgid &quot;ejabberd Web Admin&quot;
 msgstr &quot;Web d'administraci&#243; del ejabberd&quot;
 
-#: web/ejabberd_web_admin.erl:629 web/ejabberd_web_admin.erl:647
+#: web/ejabberd_web_admin.erl:749 web/ejabberd_web_admin.erl:760
 msgid &quot;Administration&quot;
 msgstr &quot;Administraci&#243;&quot;
 
-#: web/ejabberd_web_admin.erl:632 web/ejabberd_web_admin.erl:634
-#: web/ejabberd_web_admin.erl:650 web/ejabberd_web_admin.erl:652
-msgid &quot;(Raw)&quot;
-msgstr &quot;(en format text)&quot;
-
-#: web/ejabberd_web_admin.erl:635
-msgid &quot;Virtual Hosts&quot;
-msgstr &quot;Hosts Virtuals&quot;
-
-#: web/ejabberd_web_admin.erl:636 web/ejabberd_web_admin.erl:656
-#: web/ejabberd_web_admin.erl:1691
-msgid &quot;Nodes&quot;
-msgstr &quot;Nodes&quot;
-
-#: web/ejabberd_web_admin.erl:637 web/ejabberd_web_admin.erl:657
-#: web/ejabberd_web_admin.erl:970 web/ejabberd_web_admin.erl:1724
-msgid &quot;Statistics&quot;
-msgstr &quot;Estad&#237;stiques&quot;
-
-#: web/ejabberd_web_admin.erl:653 web/ejabberd_web_admin.erl:912
-#: web/ejabberd_web_admin.erl:918
-msgid &quot;Users&quot;
-msgstr &quot;Usuaris&quot;
-
-#: web/ejabberd_web_admin.erl:655 web/ejabberd_web_admin.erl:1416
-msgid &quot;Last Activity&quot;
-msgstr &quot;&#218;ltima activitat&quot;
-
-#: web/ejabberd_web_admin.erl:752 web/ejabberd_web_admin.erl:854
+#: web/ejabberd_web_admin.erl:858 web/ejabberd_web_admin.erl:962
 msgid &quot;Raw&quot;
 msgstr &quot;en format text&quot;
 
-#: web/ejabberd_web_admin.erl:888
+#: web/ejabberd_web_admin.erl:997
 msgid &quot;~s access rule configuration&quot;
 msgstr &quot;Configuraci&#243; de les Regles d'Acc&#233;s ~s&quot;
 
-#: web/ejabberd_web_admin.erl:905
+#: web/ejabberd_web_admin.erl:1015
 msgid &quot;ejabberd virtual hosts&quot;
 msgstr &quot;Hosts virtuals del ejabberd&quot;
 
-#: web/ejabberd_web_admin.erl:944
+#: web/ejabberd_web_admin.erl:1023 web/ejabberd_web_admin.erl:1030
+msgid &quot;Users&quot;
+msgstr &quot;Usuaris&quot;
+
+#: web/ejabberd_web_admin.erl:1058
 msgid &quot;Users Last Activity&quot;
 msgstr &quot;&#218;ltima activitat d'usuari&quot;
 
-#: web/ejabberd_web_admin.erl:946
+#: web/ejabberd_web_admin.erl:1060
 msgid &quot;Period: &quot;
 msgstr &quot;Per&#237;ode: &quot;
 
-#: web/ejabberd_web_admin.erl:956
+#: web/ejabberd_web_admin.erl:1070
 msgid &quot;Last month&quot;
 msgstr &quot;&#218;ltim mes&quot;
 
-#: web/ejabberd_web_admin.erl:957
+#: web/ejabberd_web_admin.erl:1071
 msgid &quot;Last year&quot;
 msgstr &quot;&#218;ltim any&quot;
 
-#: web/ejabberd_web_admin.erl:958
+#: web/ejabberd_web_admin.erl:1072
 msgid &quot;All activity&quot;
 msgstr &quot;Tota l'activitat&quot;
 
-#: web/ejabberd_web_admin.erl:960
+#: web/ejabberd_web_admin.erl:1074
 msgid &quot;Show Ordinary Table&quot;
 msgstr &quot;Mostrar Taula Ordinaria&quot;
 
-#: web/ejabberd_web_admin.erl:962
+#: web/ejabberd_web_admin.erl:1076
 msgid &quot;Show Integral Table&quot;
 msgstr &quot;Mostrar Taula Integral&quot;
 
-#: web/ejabberd_web_admin.erl:981
+#: web/ejabberd_web_admin.erl:1085 web/ejabberd_web_admin.erl:1865
+msgid &quot;Statistics&quot;
+msgstr &quot;Estad&#237;stiques&quot;
+
+#: web/ejabberd_web_admin.erl:1097
 #, fuzzy
 msgid &quot;Not Found&quot;
 msgstr &quot;Node no trobat&quot;
 
-#: web/ejabberd_web_admin.erl:996
+#: web/ejabberd_web_admin.erl:1114
 msgid &quot;Node not found&quot;
 msgstr &quot;Node no trobat&quot;
 
-#: web/ejabberd_web_admin.erl:1306
+#: web/ejabberd_web_admin.erl:1441
 msgid &quot;Host&quot;
 msgstr &quot;Host&quot;
 
-#: web/ejabberd_web_admin.erl:1307
+#: web/ejabberd_web_admin.erl:1442
 msgid &quot;Registered Users&quot;
 msgstr &quot;Usuaris registrats&quot;
 
-#: web/ejabberd_web_admin.erl:1415
+#: web/ejabberd_web_admin.erl:1552
 msgid &quot;Offline Messages&quot;
 msgstr &quot;Missatges offline&quot;
 
-#: web/ejabberd_web_admin.erl:1472 web/ejabberd_web_admin.erl:1488
+#: web/ejabberd_web_admin.erl:1553
+msgid &quot;Last Activity&quot;
+msgstr &quot;&#218;ltima activitat&quot;
+
+#: web/ejabberd_web_admin.erl:1611 web/ejabberd_web_admin.erl:1627
 msgid &quot;Registered Users:&quot;
 msgstr &quot;Usuaris registrats:&quot;
 
-#: web/ejabberd_web_admin.erl:1474 web/ejabberd_web_admin.erl:1490
-#: web/ejabberd_web_admin.erl:1935
+#: web/ejabberd_web_admin.erl:1613 web/ejabberd_web_admin.erl:1629
+#: web/ejabberd_web_admin.erl:2113
 msgid &quot;Online Users:&quot;
 msgstr &quot;Usuaris en l&#237;nia:&quot;
 
-#: web/ejabberd_web_admin.erl:1476
+#: web/ejabberd_web_admin.erl:1615
 msgid &quot;Outgoing s2s Connections:&quot;
 msgstr &quot;Connexions d'eixida s2s&quot;
 
-#: web/ejabberd_web_admin.erl:1478
+#: web/ejabberd_web_admin.erl:1617
 msgid &quot;Outgoing s2s Servers:&quot;
 msgstr &quot;Servidors d'eixida de s2s&quot;
 
-#: web/ejabberd_web_admin.erl:1543
+#: web/ejabberd_web_admin.erl:1682
 msgid &quot;Change Password&quot;
 msgstr &quot;Canviar password&quot;
 
-#: web/ejabberd_web_admin.erl:1546
+#: web/ejabberd_web_admin.erl:1685
 msgid &quot;User &quot;
 msgstr &quot;Usuari &quot;
 
-#: web/ejabberd_web_admin.erl:1553
+#: web/ejabberd_web_admin.erl:1692
 msgid &quot;Connected Resources:&quot;
 msgstr &quot;Recursos connectats:&quot;
 
-#: web/ejabberd_web_admin.erl:1554
+#: web/ejabberd_web_admin.erl:1693
 msgid &quot;Password:&quot;
 msgstr &quot;Password:&quot;
 
-#: web/ejabberd_web_admin.erl:1615
+#: web/ejabberd_web_admin.erl:1754
 msgid &quot;No Data&quot;
 msgstr &quot;No hi ha dades&quot;
 
-#: web/ejabberd_web_admin.erl:1714 web/ejabberd_web_admin.erl:1736
+#: web/ejabberd_web_admin.erl:1832
+msgid &quot;Nodes&quot;
+msgstr &quot;Nodes&quot;
+
+#: web/ejabberd_web_admin.erl:1855 web/ejabberd_web_admin.erl:1877
 msgid &quot;Node &quot;
 msgstr &quot;Node &quot;
 
-#: web/ejabberd_web_admin.erl:1723
+#: web/ejabberd_web_admin.erl:1864
 msgid &quot;Listened Ports&quot;
 msgstr &quot;Ports a l'escolta&quot;
 
-#: web/ejabberd_web_admin.erl:1725 web/ejabberd_web_admin.erl:2003
-#: web/ejabberd_web_admin.erl:2164
+#: web/ejabberd_web_admin.erl:1866 web/ejabberd_web_admin.erl:2181
+#: web/ejabberd_web_admin.erl:2369
 msgid &quot;Update&quot;
 msgstr &quot;Actualitzar&quot;
 
-#: web/ejabberd_web_admin.erl:1728 web/ejabberd_web_admin.erl:2268
+#: web/ejabberd_web_admin.erl:1869 web/ejabberd_web_admin.erl:2490
 msgid &quot;Restart&quot;
 msgstr &quot;Reiniciar&quot;
 
-#: web/ejabberd_web_admin.erl:1730 web/ejabberd_web_admin.erl:2270
+#: web/ejabberd_web_admin.erl:1871 web/ejabberd_web_admin.erl:2492
 msgid &quot;Stop&quot;
 msgstr &quot;Detindre&quot;
 
-#: web/ejabberd_web_admin.erl:1744
+#: web/ejabberd_web_admin.erl:1885
 msgid &quot;RPC Call Error&quot;
 msgstr &quot;Error de cridada RPC&quot;
 
-#: web/ejabberd_web_admin.erl:1785
+#: web/ejabberd_web_admin.erl:1926
 msgid &quot;Database Tables at &quot;
 msgstr &quot;Taules de la base de dades en &quot;
 
-#: web/ejabberd_web_admin.erl:1792
+#: web/ejabberd_web_admin.erl:1933
 msgid &quot;Storage Type&quot;
 msgstr &quot;Tipus d'emmagatzematge&quot;
 
-#: web/ejabberd_web_admin.erl:1793
+#: web/ejabberd_web_admin.erl:1934
 msgid &quot;Elements&quot;
 msgstr &quot;&quot;
 
-#: web/ejabberd_web_admin.erl:1794
+#: web/ejabberd_web_admin.erl:1935
 msgid &quot;Memory&quot;
 msgstr &quot;Mem&#242;ria&quot;
 
-#: web/ejabberd_web_admin.erl:1811 web/ejabberd_web_admin.erl:1880
+#: web/ejabberd_web_admin.erl:1953 web/ejabberd_web_admin.erl:2058
 msgid &quot;Error&quot;
 msgstr &quot;&quot;
 
-#: web/ejabberd_web_admin.erl:1813
+#: web/ejabberd_web_admin.erl:1955
 msgid &quot;Backup of &quot;
 msgstr &quot;C&#242;pia de seguretat de &quot;
 
-#: web/ejabberd_web_admin.erl:1815
+#: web/ejabberd_web_admin.erl:1957
 #, fuzzy
 msgid &quot;&quot;
 &quot;Please note that these options will only backup the builtin Mnesia database. &quot;
@@ -1425,120 +1488,158 @@ msgstr &quot;&quot;
 &quot;Mnesia. Si est&#224;s utilitzant el m&#242;dul d'ODBC tamb&#233; deus de fer una c&#242;pia de &quot;
 &quot;seguretat de la base de dades de SQL a part.&quot;
 
-#: web/ejabberd_web_admin.erl:1820
+#: web/ejabberd_web_admin.erl:1962
 msgid &quot;Store binary backup:&quot;
 msgstr &quot;Guardar una c&#242;pia de seguretat bin&#224;ria:&quot;
 
-#: web/ejabberd_web_admin.erl:1824 web/ejabberd_web_admin.erl:1831
-#: web/ejabberd_web_admin.erl:1839 web/ejabberd_web_admin.erl:1846
-#: web/ejabberd_web_admin.erl:1853
+#: web/ejabberd_web_admin.erl:1966 web/ejabberd_web_admin.erl:1973
+#: web/ejabberd_web_admin.erl:1981 web/ejabberd_web_admin.erl:1988
+#: web/ejabberd_web_admin.erl:1995 web/ejabberd_web_admin.erl:2002
+#: web/ejabberd_web_admin.erl:2009 web/ejabberd_web_admin.erl:2017
+#: web/ejabberd_web_admin.erl:2024 web/ejabberd_web_admin.erl:2031
 msgid &quot;OK&quot;
 msgstr &quot;Acceptar&quot;
 
-#: web/ejabberd_web_admin.erl:1827
+#: web/ejabberd_web_admin.erl:1969
 msgid &quot;Restore binary backup immediately:&quot;
 msgstr &quot;Restaurar una c&#242;pia de seguretat bin&#224;ria ara mateix.&quot;
 
-#: web/ejabberd_web_admin.erl:1835
+#: web/ejabberd_web_admin.erl:1977
 msgid &quot;&quot;
 &quot;Restore binary backup after next ejabberd restart (requires less memory):&quot;
 msgstr &quot;&quot;
 &quot;Restaurar una c&#242;pia de seguretat bin&#224;ria despr&#233;s de reiniciar el ejabberd &quot;
 &quot;(requereix menys mem&#242;ria:&quot;
 
-#: web/ejabberd_web_admin.erl:1842
+#: web/ejabberd_web_admin.erl:1984
 msgid &quot;Store plain text backup:&quot;
 msgstr &quot;Guardar una c&#242;pia de seguretat en format de text pla:&quot;
 
-#: web/ejabberd_web_admin.erl:1849
+#: web/ejabberd_web_admin.erl:1991
 msgid &quot;Restore plain text backup immediately:&quot;
 msgstr &quot;Restaurar una c&#242;pia de seguretat en format de text pla ara mateix:&quot;
 
-#: web/ejabberd_web_admin.erl:1875
+#: web/ejabberd_web_admin.erl:1998
+msgid &quot;Import users data from a PIEFXIS file (XEP-0277):&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:2005
+msgid &quot;Export data of all users in the server to PIEFXIS files (XEP-0277):&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:2012
+msgid &quot;Export data of users in a host to PIEFXIS files (XEP-0277):&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:2020
+#, fuzzy
+msgid &quot;Import user data from jabberd14 spool file:&quot;
+msgstr &quot;Importar usuaris de jabberd14&quot;
+
+#: web/ejabberd_web_admin.erl:2027
+#, fuzzy
+msgid &quot;Import users data from jabberd14 spool directory:&quot;
+msgstr &quot;Importar usuaris de jabberd14&quot;
+
+#: web/ejabberd_web_admin.erl:2053
 msgid &quot;Listened Ports at &quot;
 msgstr &quot;Ports a la escolta en &quot;
 
-#: web/ejabberd_web_admin.erl:1900
+#: web/ejabberd_web_admin.erl:2078
 msgid &quot;Modules at &quot;
 msgstr &quot;M&#242;duls en &quot;
 
-#: web/ejabberd_web_admin.erl:1926
+#: web/ejabberd_web_admin.erl:2104
 msgid &quot;Statistics of ~p&quot;
 msgstr &quot;Estad&#237;stiques de ~p&quot;
 
-#: web/ejabberd_web_admin.erl:1929
+#: web/ejabberd_web_admin.erl:2107
 msgid &quot;Uptime:&quot;
 msgstr &quot;Temps en marxa&quot;
 
-#: web/ejabberd_web_admin.erl:1932
+#: web/ejabberd_web_admin.erl:2110
 msgid &quot;CPU Time:&quot;
 msgstr &quot;Temps de CPU&quot;
 
-#: web/ejabberd_web_admin.erl:1938
+#: web/ejabberd_web_admin.erl:2116
 msgid &quot;Transactions Committed:&quot;
 msgstr &quot;Transaccions Realitzades:&quot;
 
-#: web/ejabberd_web_admin.erl:1941
+#: web/ejabberd_web_admin.erl:2119
 msgid &quot;Transactions Aborted:&quot;
 msgstr &quot;Transaccions Avortades&quot;
 
-#: web/ejabberd_web_admin.erl:1944
+#: web/ejabberd_web_admin.erl:2122
 msgid &quot;Transactions Restarted:&quot;
 msgstr &quot;Transaccions reiniciades&quot;
 
-#: web/ejabberd_web_admin.erl:1947
+#: web/ejabberd_web_admin.erl:2125
 msgid &quot;Transactions Logged:&quot;
 msgstr &quot;Transaccions registrades&quot;
 
-#: web/ejabberd_web_admin.erl:1989
+#: web/ejabberd_web_admin.erl:2167
 msgid &quot;Update &quot;
 msgstr &quot;Actualitzar&quot;
 
-#: web/ejabberd_web_admin.erl:1997
+#: web/ejabberd_web_admin.erl:2175
 msgid &quot;Update plan&quot;
 msgstr &quot;Pla d'actualitzaci&#243;&quot;
 
-#: web/ejabberd_web_admin.erl:1998
+#: web/ejabberd_web_admin.erl:2176
 #, fuzzy
 msgid &quot;Modified modules&quot;
 msgstr &quot;M&#242;duls actualitzats&quot;
 
-#: web/ejabberd_web_admin.erl:1999
+#: web/ejabberd_web_admin.erl:2177
 msgid &quot;Update script&quot;
 msgstr &quot;Script d'actualitzaci&#243;&quot;
 
-#: web/ejabberd_web_admin.erl:2000
+#: web/ejabberd_web_admin.erl:2178
 msgid &quot;Low level update script&quot;
 msgstr &quot;Script d'actualitzaci&#243; de baix nivell&quot;
 
-#: web/ejabberd_web_admin.erl:2001
+#: web/ejabberd_web_admin.erl:2179
 msgid &quot;Script check&quot;
 msgstr &quot;Comprovar script&quot;
 
-#: web/ejabberd_web_admin.erl:2144
+#: web/ejabberd_web_admin.erl:2347
 msgid &quot;Port&quot;
 msgstr &quot;Port&quot;
 
-#: web/ejabberd_web_admin.erl:2145
+#: web/ejabberd_web_admin.erl:2348
 msgid &quot;IP&quot;
 msgstr &quot;&quot;
 
-#: web/ejabberd_web_admin.erl:2146 web/ejabberd_web_admin.erl:2255
+#: web/ejabberd_web_admin.erl:2349
+#, fuzzy
+msgid &quot;Protocol&quot;
+msgstr &quot;Port&quot;
+
+#: web/ejabberd_web_admin.erl:2350 web/ejabberd_web_admin.erl:2477
 msgid &quot;Module&quot;
 msgstr &quot;M&#242;dul&quot;
 
-#: web/ejabberd_web_admin.erl:2147 web/ejabberd_web_admin.erl:2256
+#: web/ejabberd_web_admin.erl:2351 web/ejabberd_web_admin.erl:2478
 msgid &quot;Options&quot;
 msgstr &quot;Opcions&quot;
 
-#: web/ejabberd_web_admin.erl:2166
+#: web/ejabberd_web_admin.erl:2371
 msgid &quot;Delete&quot;
 msgstr &quot;Eliminar&quot;
 
-#: web/ejabberd_web_admin.erl:2278
+#: web/ejabberd_web_admin.erl:2500
 msgid &quot;Start&quot;
 msgstr &quot;Iniciar&quot;
 
+#~ msgid &quot;Encodings&quot;
+#~ msgstr &quot;Codificacions&quot;
+
+#~ msgid &quot;(Raw)&quot;
+#~ msgstr &quot;(en format text)&quot;
+
+#~ msgid &quot;Virtual Hosts&quot;
+#~ msgstr &quot;Hosts Virtuals&quot;
+
 #~ msgid &quot;Specified nickname is already registered&quot;
 #~ msgstr &quot;El Nickname especificat ja est&#224; registrat, busca-te'n un altre&quot;
 </diff>
      <filename>src/msgs/ca.po</filename>
    </modified>
    <modified>
      <diff>@@ -73,7 +73,6 @@
 {&quot;ejabberd Web Admin&quot;,&quot;Webov&#225; administrace ejabberd&quot;}.
 {&quot;Email&quot;,&quot;E-mail&quot;}.
 {&quot;Enable logging&quot;,&quot;Zaznamen&#225;vat konverzace&quot;}.
-{&quot;Encodings&quot;,&quot;K&#243;dov&#225;n&#237;&quot;}.
 {&quot;End User Session&quot;,&quot;Ukon&#269;it sezen&#237; u&#382;ivatele&quot;}.
 {&quot;Enter list of {Module, [Options]}&quot;,&quot;Vlo&#382;te seznam modul&#367; {Modul, [Parametry]}&quot;}.
 {&quot;Enter nickname you want to register&quot;,&quot;Zadejte p&#345;ezd&#237;vku, kterou chcete zaregistrovat&quot;}.
@@ -81,9 +80,7 @@
 {&quot;Enter path to jabberd14 spool dir&quot;,&quot;Zadejte cestu k jabberd14 spool adres&#225;&#345;i&quot;}.
 {&quot;Enter path to jabberd14 spool file&quot;,&quot;Zadejte cestu k spool souboru jabberd14&quot;}.
 {&quot;Enter path to text file&quot;,&quot;Zadajte cestu k textov&#233;mu souboru&quot;}.
-{&quot;Enter username and encodings you wish to use for connecting to IRC servers&quot;,&quot;Vlo&#382;te jm&#233;no u&#382;ivatele a k&#243;dov&#225;n&#237;, kter&#233; chcete pou&#382;&#237;vat p&#345;i p&#345;ipojen&#237; na IRC server&quot;}.
 {&quot;Erlang Jabber Server&quot;,&quot;Erlang Jabber Server&quot;}.
-{&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;}].&quot;,&quot;P&#345;&#237;klad: [{\&quot;irc.freenode.net\&quot;,\&quot;utf-8\&quot;}, {\&quot;irc.freenode.net\&quot;, \&quot;iso8859-2\&quot;}].&quot;}.
 {&quot;Family Name&quot;,&quot;P&#345;&#237;jmen&#237;: &quot;}.
 {&quot;February&quot;,&quot;. &#250;nora&quot;}.
 {&quot;Fill in fields to search for any matching Jabber User&quot;,&quot;Vypl&#328;te pol&#237;&#269;ka pro vyhled&#225;n&#237; u&#382;ivatele Jabberu&quot;}.
@@ -106,7 +103,6 @@
 {&quot;has been kicked&quot;,&quot;byl(a) vyhozen(a) z m&#237;stnosti&quot;}.
 {&quot; has set the subject to: &quot;,&quot; zm&#283;nil(a) t&#233;ma na: &quot;}.
 {&quot;Host&quot;,&quot;Hostitel&quot;}.
-{&quot;If you want to specify different encodings for IRC servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;}'.  By default this service use \&quot;~s\&quot; encoding.&quot;,&quot;Pokud chcete zadat jin&#233; k&#243;dov&#225;n&#237; pro IRC servery, vypl&#328;te seznam s hodnotami ve form&#225;tu '{\&quot;irc server\&quot;,\&quot;encoding\&quot;}'. P&#345;edvolen&#233; k&#243;dov&#225;n&#237; pro tuto slu&#382;bu je \&quot;~s\&quot;.&quot;}.
 {&quot;Import Directory&quot;,&quot;Import adres&#225;&#345;e&quot;}.
 {&quot;Import File&quot;,&quot;Import souboru&quot;}.
 {&quot;Import User from File at &quot;,&quot;Importovat u&#382;ivatele ze souboru na &quot;}.
@@ -218,7 +214,6 @@
 {&quot;Queries to the conference members are not allowed in this room&quot;,&quot;Po&#382;adavky (queries) na &#269;leny konference nejsou v t&#233;to m&#237;stnosti povolen&#233;&quot;}.
 {&quot;RAM and disc copy&quot;,&quot;Kopie RAM a disku&quot;}.
 {&quot;RAM copy&quot;,&quot;Kopie RAM&quot;}.
-{&quot;(Raw)&quot;,&quot;(Zdroj)&quot;}.
 {&quot;Raw&quot;,&quot;Zdroj&quot;}.
 {&quot;Really delete message of the day?&quot;,&quot;Skute&#269;n&#283; smazat zpr&#225;vu dne?&quot;}.
 {&quot;Recipient is not in the conference room&quot;,&quot;P&#345;&#237;jemce se nenach&#225;z&#237; v konferen&#269;n&#237; m&#237;stnosti&quot;}.
@@ -315,7 +310,6 @@
 {&quot;User&quot;,&quot;U&#382;ivatel: &quot;}.
 {&quot;Validate&quot;,&quot;Ov&#283;&#345;it&quot;}.
 {&quot;vCard User Search&quot;,&quot;Hled&#225;n&#237; u&#382;ivatel&#367; podle vizitek&quot;}.
-{&quot;Virtual Hosts&quot;,&quot;Virtu&#225;ln&#237; hostitel&#233;&quot;}.
 {&quot;Visitors are not allowed to change their nicknames in this room&quot;,&quot;N&#225;v&#353;t&#283;vn&#237;k&#367;m t&#233;to m&#237;stnosti je zak&#225;z&#225;no m&#283;nit p&#345;ezd&#237;vku&quot;}.
 {&quot;Visitors are not allowed to send messages to all occupants&quot;,&quot;N&#225;v&#353;tevn&#237;ci nemaj&#237; povoleno zas&#237;lat zpr&#225;vy v&#353;em p&#345;ihl&#225;&#353;en&#253;m do konference&quot;}.
 {&quot;Wednesday&quot;,&quot;St&#345;eda&quot;}.</diff>
      <filename>src/msgs/cs.msg</filename>
    </modified>
    <modified>
      <diff>@@ -8,28 +8,28 @@ msgstr &quot;&quot;
 &quot;X-Language: Czech (&#269;e&#353;tina)\n&quot;
 &quot;X-Additional-Translator: Milos Svasek [DuxforD] from openheads.net\n&quot;
 
-#: ejabberd_c2s.erl:358 ejabberd_c2s.erl:662
+#: ejabberd_c2s.erl:364 ejabberd_c2s.erl:668
 msgid &quot;Use of STARTTLS required&quot;
 msgstr &quot;Je vy&#382;adov&#225;no STARTTLS.&quot;
 
-#: ejabberd_c2s.erl:442
+#: ejabberd_c2s.erl:448
 msgid &quot;No resource provided&quot;
 msgstr &quot;Nebyl poskytnut &#382;&#225;dn&#253; zdroj&quot;
 
-#: ejabberd_c2s.erl:1067
+#: ejabberd_c2s.erl:1073
 msgid &quot;Replaced by new connection&quot;
 msgstr &quot;Nahrazeno nov&#253;m spojen&#237;m&quot;
 
-#: ejabberd_captcha.erl:74 ejabberd_captcha.erl:106
+#: ejabberd_captcha.erl:93 ejabberd_captcha.erl:125
 #, fuzzy
 msgid &quot;Enter the text you see&quot;
 msgstr &quot;Zadajte cestu k textov&#233;mu souboru&quot;
 
-#: ejabberd_captcha.erl:78
+#: ejabberd_captcha.erl:97
 msgid &quot;Your messages to ~s are being blocked. To unblock them, visit ~s&quot;
 msgstr &quot;&quot;
 
-#: ejabberd_captcha.erl:212
+#: ejabberd_captcha.erl:235
 msgid &quot;The captcha is valid.&quot;
 msgstr &quot;&quot;
 
@@ -110,7 +110,7 @@ msgstr &quot;Smazat zpr&#225;vu dne na v&#353;ech hostitel&#237;ch&quot;
 msgid &quot;Configuration&quot;
 msgstr &quot;Konfigurace&quot;
 
-#: mod_configure.erl:125 mod_configure.erl:544 web/ejabberd_web_admin.erl:1721
+#: mod_configure.erl:125 mod_configure.erl:544 web/ejabberd_web_admin.erl:1862
 msgid &quot;Database&quot;
 msgstr &quot;Datab&#225;ze&quot;
 
@@ -122,7 +122,7 @@ msgstr &quot;Spustit moduly&quot;
 msgid &quot;Stop Modules&quot;
 msgstr &quot;Zastavit moduly&quot;
 
-#: mod_configure.erl:131 mod_configure.erl:572 web/ejabberd_web_admin.erl:1722
+#: mod_configure.erl:131 mod_configure.erl:572 web/ejabberd_web_admin.erl:1863
 msgid &quot;Backup&quot;
 msgstr &quot;Z&#225;lohovat&quot;
 
@@ -151,7 +151,7 @@ msgid &quot;Shut Down Service&quot;
 msgstr &quot;Vypnout slu&#382;bu&quot;
 
 #: mod_configure.erl:145 mod_configure.erl:486 mod_configure.erl:1165
-#: web/ejabberd_web_admin.erl:1371
+#: web/ejabberd_web_admin.erl:1508
 msgid &quot;Add User&quot;
 msgstr &quot;P&#345;idat u&#382;ivatele&quot;
 
@@ -188,15 +188,13 @@ msgstr &quot;Z&#237;skat po&#269;et registrovan&#253;ch u&#382;ivatel&#367;&quot;
 msgid &quot;Get Number of Online Users&quot;
 msgstr &quot;Z&#237;skat po&#269;et online u&#382;ivatel&#367;&quot;
 
-#: mod_configure.erl:163 mod_configure.erl:477 web/ejabberd_web_admin.erl:631
-#: web/ejabberd_web_admin.erl:649 web/ejabberd_web_admin.erl:706
-#: web/ejabberd_web_admin.erl:746
+#: mod_configure.erl:163 mod_configure.erl:477 web/ejabberd_web_admin.erl:811
+#: web/ejabberd_web_admin.erl:852
 msgid &quot;Access Control Lists&quot;
 msgstr &quot;Seznamy p&#345;&#237;stupov&#253;ch pr&#225;v (ACL)&quot;
 
-#: mod_configure.erl:165 mod_configure.erl:478 web/ejabberd_web_admin.erl:633
-#: web/ejabberd_web_admin.erl:651 web/ejabberd_web_admin.erl:813
-#: web/ejabberd_web_admin.erl:848
+#: mod_configure.erl:165 mod_configure.erl:478 web/ejabberd_web_admin.erl:920
+#: web/ejabberd_web_admin.erl:956
 msgid &quot;Access Rules&quot;
 msgstr &quot;Pravidla p&#345;&#237;stup&#367;&quot;
 
@@ -204,8 +202,8 @@ msgstr &quot;Pravidla p&#345;&#237;stup&#367;&quot;
 msgid &quot;User Management&quot;
 msgstr &quot;Spr&#225;va u&#382;ivatel&#367;&quot;
 
-#: mod_configure.erl:468 web/ejabberd_web_admin.erl:654
-#: web/ejabberd_web_admin.erl:925 web/ejabberd_web_admin.erl:1308
+#: mod_configure.erl:468 web/ejabberd_web_admin.erl:1038
+#: web/ejabberd_web_admin.erl:1443
 msgid &quot;Online Users&quot;
 msgstr &quot;Online u&#382;ivatel&#233;&quot;
 
@@ -217,15 +215,15 @@ msgstr &quot;V&#353;ichni u&#382;ivatel&#233;&quot;
 msgid &quot;Outgoing s2s Connections&quot;
 msgstr &quot;Odchoz&#237; s2s spojen&#237;&quot;
 
-#: mod_configure.erl:471 web/ejabberd_web_admin.erl:1692
+#: mod_configure.erl:471 web/ejabberd_web_admin.erl:1833
 msgid &quot;Running Nodes&quot;
 msgstr &quot;B&#283;&#382;&#237;c&#237; uzly&quot;
 
-#: mod_configure.erl:472 web/ejabberd_web_admin.erl:1694
+#: mod_configure.erl:472 web/ejabberd_web_admin.erl:1835
 msgid &quot;Stopped Nodes&quot;
 msgstr &quot;Zastaven&#233; uzly&quot;
 
-#: mod_configure.erl:545 mod_configure.erl:555 web/ejabberd_web_admin.erl:1738
+#: mod_configure.erl:545 mod_configure.erl:555 web/ejabberd_web_admin.erl:1879
 msgid &quot;Modules&quot;
 msgstr &quot;Moduly&quot;
 
@@ -357,14 +355,14 @@ msgstr &quot;Pravidla p&#345;&#237;stup&#367;&quot;
 #: mod_configure.erl:1168 mod_configure.erl:1190 mod_configure.erl:1202
 #: mod_configure.erl:1214 mod_configure.erl:1226 mod_configure.erl:1243
 #: mod_configure.erl:1255 mod_configure.erl:1620 mod_configure.erl:1670
-#: mod_configure.erl:1691 mod_roster.erl:822 mod_roster_odbc.erl:922
-#: mod_vcard.erl:462 mod_vcard_ldap.erl:546 mod_vcard_odbc.erl:437
+#: mod_configure.erl:1691 mod_roster.erl:948 mod_roster_odbc.erl:1049
+#: mod_vcard.erl:465 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:440
 msgid &quot;Jabber ID&quot;
 msgstr &quot;Jabber ID&quot;
 
 #: mod_configure.erl:1173 mod_configure.erl:1231 mod_configure.erl:1621
-#: mod_configure.erl:1833 mod_muc/mod_muc_room.erl:2801
-#: web/ejabberd_web_admin.erl:1364
+#: mod_configure.erl:1833 mod_muc/mod_muc_room.erl:2849
+#: web/ejabberd_web_admin.erl:1501
 msgid &quot;Password&quot;
 msgstr &quot;Heslo&quot;
 
@@ -380,11 +378,11 @@ msgstr &quot;Po&#269;et registrovan&#253;ch u&#382;ivatel&#367;&quot;
 msgid &quot;Number of online users&quot;
 msgstr &quot;Po&#269;et online u&#382;ivatel&#367;&quot;
 
-#: mod_configure.erl:1652 web/ejabberd_web_admin.erl:1430
+#: mod_configure.erl:1652 web/ejabberd_web_admin.erl:1567
 msgid &quot;Never&quot;
 msgstr &quot;Nikdy&quot;
 
-#: mod_configure.erl:1666 web/ejabberd_web_admin.erl:1444
+#: mod_configure.erl:1666 web/ejabberd_web_admin.erl:1581
 msgid &quot;Online&quot;
 msgstr &quot;Online&quot;
 
@@ -416,233 +414,301 @@ msgstr &quot;Akce aplikovan&#225; na u&#382;ivatele&quot;
 msgid &quot;Edit Properties&quot;
 msgstr &quot;Upravit vlastnosti&quot;
 
-#: mod_configure.erl:1830 web/ejabberd_web_admin.erl:1556
+#: mod_configure.erl:1830 web/ejabberd_web_admin.erl:1695
 msgid &quot;Remove User&quot;
 msgstr &quot;Odstranit u&#382;ivatele&quot;
 
-#: mod_irc/mod_irc.erl:198 mod_muc/mod_muc.erl:335
+#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:335
 msgid &quot;Access denied by service policy&quot;
 msgstr &quot;P&#345;&#237;stup byl zam&#237;tnut nastaven&#237;m slu&#382;by&quot;
 
-#: mod_irc/mod_irc.erl:311
+#: mod_irc/mod_irc.erl:400
 msgid &quot;IRC Transport&quot;
 msgstr &quot;IRC transport&quot;
 
-#: mod_irc/mod_irc.erl:323
+#: mod_irc/mod_irc.erl:427
 msgid &quot;ejabberd IRC module&quot;
 msgstr &quot;Ejabberd IRC modul&quot;
 
-#: mod_irc/mod_irc.erl:441
+#: mod_irc/mod_irc.erl:557
 msgid &quot;You need an x:data capable client to configure mod_irc settings&quot;
 msgstr &quot;Pro konfiguraci mod_irc pot&#345;ebujete klienta podporuj&#237;c&#237;ho x:data&quot;
 
-#: mod_irc/mod_irc.erl:448
+#: mod_irc/mod_irc.erl:564
 msgid &quot;Registration in mod_irc for &quot;
 msgstr &quot;Registrace do mod_irc na &quot;
 
-#: mod_irc/mod_irc.erl:453
+#: mod_irc/mod_irc.erl:569
+#, fuzzy
 msgid &quot;&quot;
-&quot;Enter username and encodings you wish to use for connecting to IRC servers&quot;
+&quot;Enter username, encodings, ports and passwords you wish to use for &quot;
+&quot;connecting to IRC servers&quot;
 msgstr &quot;&quot;
 &quot;Vlo&#382;te jm&#233;no u&#382;ivatele a k&#243;dov&#225;n&#237;, kter&#233; chcete pou&#382;&#237;vat p&#345;i p&#345;ipojen&#237; na &quot;
 &quot;IRC server&quot;
 
-#: mod_irc/mod_irc.erl:458
+#: mod_irc/mod_irc.erl:574
 msgid &quot;IRC Username&quot;
 msgstr &quot;IRC p&#345;ezd&#237;vka&quot;
 
-#: mod_irc/mod_irc.erl:468
+#: mod_irc/mod_irc.erl:584
+#, fuzzy
 msgid &quot;&quot;
-&quot;If you want to specify different encodings for IRC servers, fill this list &quot;
-&quot;with values in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;}'.  By default this &quot;
-&quot;service use \&quot;~s\&quot; encoding.&quot;
+&quot;If you want to specify different ports, passwords, encodings for IRC &quot;
+&quot;servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding&quot;
+&quot;\&quot;, port, \&quot;password\&quot;}'.  By default this service use \&quot;~s\&quot; encoding, port &quot;
+&quot;~p, empty password.&quot;
 msgstr &quot;&quot;
 &quot;Pokud chcete zadat jin&#233; k&#243;dov&#225;n&#237; pro IRC servery, vypl&#328;te seznam s hodnotami &quot;
 &quot;ve form&#225;tu '{\&quot;irc server\&quot;,\&quot;encoding\&quot;}'. P&#345;edvolen&#233; k&#243;dov&#225;n&#237; pro tuto &quot;
 &quot;slu&#382;bu je \&quot;~s\&quot;.&quot;
 
-#: mod_irc/mod_irc.erl:478
+#: mod_irc/mod_irc.erl:596
+#, fuzzy
 msgid &quot;&quot;
-&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1&quot;
-&quot;\&quot;}].&quot;
+&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;, 6667, \&quot;secret\&quot;}, {\&quot;vendetta.fef.&quot;
+&quot;net\&quot;, \&quot;iso8859-1\&quot;, 7000}, {\&quot;irc.sometestserver.net\&quot;, \&quot;utf-8\&quot;}].&quot;
 msgstr &quot;&quot;
 &quot;P&#345;&#237;klad: [{\&quot;irc.freenode.net\&quot;,\&quot;utf-8\&quot;}, {\&quot;irc.freenode.net\&quot;, \&quot;iso8859-&quot;
 &quot;2\&quot;}].&quot;
 
-#: mod_irc/mod_irc.erl:483
-msgid &quot;Encodings&quot;
-msgstr &quot;K&#243;dov&#225;n&#237;&quot;
+#: mod_irc/mod_irc.erl:601
+msgid &quot;Connections parameters&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:711
+msgid &quot;Join IRC channel&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:715
+msgid &quot;IRC channel (don't put the first #)&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:720
+#, fuzzy
+msgid &quot;IRC server&quot;
+msgstr &quot;IRC p&#345;ezd&#237;vka&quot;
+
+#: mod_irc/mod_irc.erl:753 mod_irc/mod_irc.erl:757
+msgid &quot;Join the IRC channel here.&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:761
+msgid &quot;Join the IRC channel in this Jabber ID: ~s&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:846
+msgid &quot;IRC settings&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:851
+#, fuzzy
+msgid &quot;&quot;
+&quot;Enter username and encodings you wish to use for connecting to IRC servers.  &quot;
+&quot;Press 'Next' to get more fields to fill in.  Press 'Complete' to save &quot;
+&quot;settings.&quot;
+msgstr &quot;&quot;
+&quot;Vlo&#382;te jm&#233;no u&#382;ivatele a k&#243;dov&#225;n&#237;, kter&#233; chcete pou&#382;&#237;vat p&#345;i p&#345;ipojen&#237; na &quot;
+&quot;IRC server&quot;
 
-#: mod_muc/mod_muc.erl:433
+#: mod_irc/mod_irc.erl:857
+#, fuzzy
+msgid &quot;IRC username&quot;
+msgstr &quot;IRC p&#345;ezd&#237;vka&quot;
+
+#: mod_irc/mod_irc.erl:906
+#, fuzzy
+msgid &quot;Password ~b&quot;
+msgstr &quot;Heslo&quot;
+
+#: mod_irc/mod_irc.erl:911
+#, fuzzy
+msgid &quot;Port ~b&quot;
+msgstr &quot;Port&quot;
+
+#: mod_irc/mod_irc.erl:916
+msgid &quot;Encoding for server ~b&quot;
+msgstr &quot;&quot;
+
+#: mod_irc/mod_irc.erl:925
+msgid &quot;Server ~b&quot;
+msgstr &quot;&quot;
+
+#: mod_muc/mod_muc.erl:437
 msgid &quot;Only service administrators are allowed to send service messages&quot;
 msgstr &quot;Pouze spr&#225;vci slu&#382;by maj&#237; povolen&#233; odes&#237;l&#225;n&#237; servisn&#237;ch zpr&#225;v&quot;
 
-#: mod_muc/mod_muc.erl:478
+#: mod_muc/mod_muc.erl:482
 msgid &quot;Room creation is denied by service policy&quot;
 msgstr &quot;Pravidla slu&#382;by nepovoluj&#237; vytvo&#345;it m&#237;stnost&quot;
 
-#: mod_muc/mod_muc.erl:485
+#: mod_muc/mod_muc.erl:489
 msgid &quot;Conference room does not exist&quot;
 msgstr &quot;Konferen&#269;n&#237; m&#237;stnost neexistuje&quot;
 
-#: mod_muc/mod_muc.erl:549
+#: mod_muc/mod_muc.erl:553
 msgid &quot;Chatrooms&quot;
 msgstr &quot;Konference&quot;
 
-#: mod_muc/mod_muc.erl:668
+#: mod_muc/mod_muc.erl:672
 msgid &quot;You need an x:data capable client to register nickname&quot;
 msgstr &quot;K registraci p&#345;ezd&#237;vky pot&#345;ebujete klienta podporuj&#237;c&#237;ho x:data&quot;
 
-#: mod_muc/mod_muc.erl:674
+#: mod_muc/mod_muc.erl:678
 msgid &quot;Nickname Registration at &quot;
 msgstr &quot;Registrace prezd&#237;vky na &quot;
 
-#: mod_muc/mod_muc.erl:678
+#: mod_muc/mod_muc.erl:682
 msgid &quot;Enter nickname you want to register&quot;
 msgstr &quot;Zadejte p&#345;ezd&#237;vku, kterou chcete zaregistrovat&quot;
 
-#: mod_muc/mod_muc.erl:679 mod_roster.erl:823 mod_roster_odbc.erl:923
-#: mod_vcard.erl:357 mod_vcard.erl:467 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:442
+#: mod_muc/mod_muc.erl:683 mod_roster.erl:949 mod_roster_odbc.erl:1050
+#: mod_vcard.erl:357 mod_vcard.erl:470 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:445
 msgid &quot;Nickname&quot;
 msgstr &quot;Prezd&#237;vka&quot;
 
-#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_room.erl:924
-#: mod_muc/mod_muc_room.erl:1511
+#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_room.erl:926
+#: mod_muc/mod_muc_room.erl:1513
 #, fuzzy
 msgid &quot;That nickname is registered by another person&quot;
 msgstr &quot;P&#345;ezd&#237;vka je zaregistrov&#225;na jinou osobou&quot;
 
-#: mod_muc/mod_muc.erl:742
+#: mod_muc/mod_muc.erl:748
 msgid &quot;You must fill in field \&quot;Nickname\&quot; in the form&quot;
 msgstr &quot;Mus&#237;te vyplnit pol&#237;&#269;ko \&quot;P&#345;ezd&#237;vka\&quot; ve formul&#225;&#345;i&quot;
 
-#: mod_muc/mod_muc.erl:764
+#: mod_muc/mod_muc.erl:768
 msgid &quot;ejabberd MUC module&quot;
 msgstr &quot;Ejabberd MUC modul&quot;
 
-#: mod_muc/mod_muc_log.erl:364
+#: mod_muc/mod_muc_log.erl:371 mod_muc/mod_muc_log.erl:378
 msgid &quot;Chatroom configuration modified&quot;
 msgstr &quot;Nastaven&#237; diskuzn&#237; m&#237;stnosti bylo zm&#283;n&#283;no&quot;
 
-#: mod_muc/mod_muc_log.erl:367
+#: mod_muc/mod_muc_log.erl:381
 msgid &quot;joins the room&quot;
 msgstr &quot;vstoupil(a) do m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_log.erl:370 mod_muc/mod_muc_log.erl:373
+#: mod_muc/mod_muc_log.erl:384 mod_muc/mod_muc_log.erl:387
 msgid &quot;leaves the room&quot;
 msgstr &quot;opustil(a) m&#237;stnost&quot;
 
-#: mod_muc/mod_muc_log.erl:376 mod_muc/mod_muc_log.erl:379
+#: mod_muc/mod_muc_log.erl:390 mod_muc/mod_muc_log.erl:393
 msgid &quot;has been banned&quot;
 msgstr &quot;byl(a) zablokov&#225;n(a)&quot;
 
-#: mod_muc/mod_muc_log.erl:382 mod_muc/mod_muc_log.erl:385
+#: mod_muc/mod_muc_log.erl:396 mod_muc/mod_muc_log.erl:399
 msgid &quot;has been kicked&quot;
 msgstr &quot;byl(a) vyhozen(a) z m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_log.erl:388
+#: mod_muc/mod_muc_log.erl:402
 msgid &quot;has been kicked because of an affiliation change&quot;
 msgstr &quot;byl(a) vyhozen(a) kv&#367;li zm&#283;n&#283; p&#345;i&#345;azen&#237;&quot;
 
-#: mod_muc/mod_muc_log.erl:391
+#: mod_muc/mod_muc_log.erl:405
 msgid &quot;has been kicked because the room has been changed to members-only&quot;
 msgstr &quot;byl(a) vyhozen(a), proto&#382;e m&#237;snost je nyn&#237; pouze pro &#269;leny&quot;
 
-#: mod_muc/mod_muc_log.erl:394
+#: mod_muc/mod_muc_log.erl:408
 msgid &quot;has been kicked because of a system shutdown&quot;
 msgstr &quot;byl(a) vyhozen(a), proto&#382;e dojde k vypnut&#237; syst&#233;mu&quot;
 
-#: mod_muc/mod_muc_log.erl:397
+#: mod_muc/mod_muc_log.erl:411
 msgid &quot;is now known as&quot;
 msgstr &quot;se p&#345;ejmenoval(a) na&quot;
 
-#: mod_muc/mod_muc_log.erl:400 mod_muc/mod_muc_log.erl:661
-#: mod_muc/mod_muc_room.erl:2032
+#: mod_muc/mod_muc_log.erl:414 mod_muc/mod_muc_log.erl:678
+#: mod_muc/mod_muc_room.erl:2040
 msgid &quot; has set the subject to: &quot;
 msgstr &quot; zm&#283;nil(a) t&#233;ma na: &quot;
 
-#: mod_muc/mod_muc_log.erl:431
+#: mod_muc/mod_muc_log.erl:448
 msgid &quot;Monday&quot;
 msgstr &quot;Pond&#283;l&#237;&quot;
 
-#: mod_muc/mod_muc_log.erl:432
+#: mod_muc/mod_muc_log.erl:449
 msgid &quot;Tuesday&quot;
 msgstr &quot;&#218;ter&#253;&quot;
 
-#: mod_muc/mod_muc_log.erl:433
+#: mod_muc/mod_muc_log.erl:450
 msgid &quot;Wednesday&quot;
 msgstr &quot;St&#345;eda&quot;
 
-#: mod_muc/mod_muc_log.erl:434
+#: mod_muc/mod_muc_log.erl:451
 msgid &quot;Thursday&quot;
 msgstr &quot;&#268;tvrtek&quot;
 
-#: mod_muc/mod_muc_log.erl:435
+#: mod_muc/mod_muc_log.erl:452
 msgid &quot;Friday&quot;
 msgstr &quot;P&#225;tek&quot;
 
-#: mod_muc/mod_muc_log.erl:436
+#: mod_muc/mod_muc_log.erl:453
 msgid &quot;Saturday&quot;
 msgstr &quot;Sobota&quot;
 
-#: mod_muc/mod_muc_log.erl:437
+#: mod_muc/mod_muc_log.erl:454
 msgid &quot;Sunday&quot;
 msgstr &quot;Ned&#283;le&quot;
 
-#: mod_muc/mod_muc_log.erl:441
+#: mod_muc/mod_muc_log.erl:458
 msgid &quot;January&quot;
 msgstr &quot;. ledna&quot;
 
-#: mod_muc/mod_muc_log.erl:442
+#: mod_muc/mod_muc_log.erl:459
 msgid &quot;February&quot;
 msgstr &quot;. &#250;nora&quot;
 
-#: mod_muc/mod_muc_log.erl:443
+#: mod_muc/mod_muc_log.erl:460
 msgid &quot;March&quot;
 msgstr &quot;. b&#345;ezna&quot;
 
-#: mod_muc/mod_muc_log.erl:444
+#: mod_muc/mod_muc_log.erl:461
 msgid &quot;April&quot;
 msgstr &quot;. dubna&quot;
 
-#: mod_muc/mod_muc_log.erl:445
+#: mod_muc/mod_muc_log.erl:462
 msgid &quot;May&quot;
 msgstr &quot;. kv&#283;tna&quot;
 
-#: mod_muc/mod_muc_log.erl:446
+#: mod_muc/mod_muc_log.erl:463
 msgid &quot;June&quot;
 msgstr &quot;. &#269;ervna&quot;
 
-#: mod_muc/mod_muc_log.erl:447
+#: mod_muc/mod_muc_log.erl:464
 msgid &quot;July&quot;
 msgstr &quot;. &#269;ervence&quot;
 
-#: mod_muc/mod_muc_log.erl:448
+#: mod_muc/mod_muc_log.erl:465
 msgid &quot;August&quot;
 msgstr &quot;. srpna&quot;
 
-#: mod_muc/mod_muc_log.erl:449
+#: mod_muc/mod_muc_log.erl:466
 msgid &quot;September&quot;
 msgstr &quot;. z&#225;&#345;&#237;&quot;
 
-#: mod_muc/mod_muc_log.erl:450
+#: mod_muc/mod_muc_log.erl:467
 msgid &quot;October&quot;
 msgstr &quot;. &#345;&#237;jna&quot;
 
-#: mod_muc/mod_muc_log.erl:451
+#: mod_muc/mod_muc_log.erl:468
 msgid &quot;November&quot;
 msgstr &quot;. listopadu&quot;
 
-#: mod_muc/mod_muc_log.erl:452
+#: mod_muc/mod_muc_log.erl:469
 msgid &quot;December&quot;
 msgstr &quot;. prosince&quot;
 
-#: mod_muc/mod_muc_log.erl:719
+#: mod_muc/mod_muc_log.erl:740
 msgid &quot;Room Configuration&quot;
 msgstr &quot;Nastaven&#237; m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_log.erl:820 mod_muc/mod_muc_room.erl:2777
+#: mod_muc/mod_muc_log.erl:749
+#, fuzzy
+msgid &quot;Room Occupants&quot;
+msgstr &quot;Po&#269;et &#250;&#269;astn&#237;k&#367;&quot;
+
+#: mod_muc/mod_muc_log.erl:852 mod_muc/mod_muc_room.erl:2825
 msgid &quot;Room title&quot;
 msgstr &quot;N&#225;zev m&#237;stnosti&quot;
 
@@ -679,8 +745,8 @@ msgstr &quot;Nen&#237; dovoleno odesl&#225;n&#237; soukrom&#233; zpr&#225;vy typu \&quot;skupinov&#225; zpr&#225;va\&quot;
 msgid &quot;Recipient is not in the conference room&quot;
 msgstr &quot;P&#345;&#237;jemce se nenach&#225;z&#237; v konferen&#269;n&#237; m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_room.erl:448 mod_muc/mod_muc_room.erl:823
-#: mod_muc/mod_muc_room.erl:3388
+#: mod_muc/mod_muc_room.erl:448 mod_muc/mod_muc_room.erl:825
+#: mod_muc/mod_muc_room.erl:3447
 msgid &quot;Only occupants are allowed to send messages to the conference&quot;
 msgstr &quot;Jen &#269;lenov&#233; maj&#237; povolen&#233; zas&#237;lat spr&#225;vy do konference&quot;
 
@@ -697,346 +763,350 @@ msgid &quot;Queries to the conference members are not allowed in this room&quot;
 msgstr &quot;&quot;
 &quot;Po&#382;adavky (queries) na &#269;leny konference nejsou v t&#233;to m&#237;stnosti povolen&#233;&quot;
 
-#: mod_muc/mod_muc_room.erl:600
+#: mod_muc/mod_muc_room.erl:601
 msgid &quot;private, &quot;
 msgstr &quot;soukrom&#225;, &quot;
 
-#: mod_muc/mod_muc_room.erl:799
+#: mod_muc/mod_muc_room.erl:801
 #, fuzzy
 msgid &quot;&quot;
 &quot;Only moderators and participants are allowed to change the subject in this &quot;
 &quot;room&quot;
 msgstr &quot;Jen moder&#225;to&#345;i a &#250;&#269;astn&#237;ci maj&#237; povoleno m&#283;nit t&#233;ma t&#233;to m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_room.erl:804
+#: mod_muc/mod_muc_room.erl:806
 #, fuzzy
 msgid &quot;Only moderators are allowed to change the subject in this room&quot;
 msgstr &quot;Jen moder&#225;to&#345;i maj&#237; povoleno m&#283;nit t&#233;ma m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_room.erl:814
+#: mod_muc/mod_muc_room.erl:816
 msgid &quot;Visitors are not allowed to send messages to all occupants&quot;
 msgstr &quot;&quot;
 &quot;N&#225;v&#353;tevn&#237;ci nemaj&#237; povoleno zas&#237;lat zpr&#225;vy v&#353;em p&#345;ihl&#225;&#353;en&#253;m do konference&quot;
 
-#: mod_muc/mod_muc_room.erl:882
+#: mod_muc/mod_muc_room.erl:884
 msgid &quot;&quot;
 &quot;This participant is kicked from the room because he sent an error presence&quot;
 msgstr &quot;Tento &#250;&#269;astn&#237;k byl vyhozen, proto&#382;e odeslal chybov&#253; status&quot;
 
-#: mod_muc/mod_muc_room.erl:900
+#: mod_muc/mod_muc_room.erl:902
 msgid &quot;Visitors are not allowed to change their nicknames in this room&quot;
 msgstr &quot;N&#225;v&#353;t&#283;vn&#237;k&#367;m t&#233;to m&#237;stnosti je zak&#225;z&#225;no m&#283;nit p&#345;ezd&#237;vku&quot;
 
-#: mod_muc/mod_muc_room.erl:913 mod_muc/mod_muc_room.erl:1503
+#: mod_muc/mod_muc_room.erl:915 mod_muc/mod_muc_room.erl:1505
 #, fuzzy
 msgid &quot;That nickname is already in use by another occupant&quot;
 msgstr &quot;P&#345;ezd&#237;vka je ji&#382; pou&#382;&#237;v&#225;na jin&#253;m &#269;lenem&quot;
 
-#: mod_muc/mod_muc_room.erl:1492
+#: mod_muc/mod_muc_room.erl:1494
 msgid &quot;You have been banned from this room&quot;
 msgstr &quot;Byl jste vylou&#269;en z t&#233;to m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_room.erl:1495
+#: mod_muc/mod_muc_room.erl:1497
 #, fuzzy
 msgid &quot;Membership is required to enter this room&quot;
 msgstr &quot;Pro vstup do m&#237;stnosti mus&#237;te b&#253;t &#269;lenem&quot;
 
-#: mod_muc/mod_muc_room.erl:1531
+#: mod_muc/mod_muc_room.erl:1533
 msgid &quot;This room is not anonymous&quot;
 msgstr &quot;Tato m&#237;stnost nen&#237; anonymn&#237;&quot;
 
-#: mod_muc/mod_muc_room.erl:1557
+#: mod_muc/mod_muc_room.erl:1559
 #, fuzzy
 msgid &quot;A password is required to enter this room&quot;
 msgstr &quot;Pro vstup do m&#237;stnosti mus&#237;te zadat heslo&quot;
 
-#: mod_muc/mod_muc_room.erl:1579
+#: mod_muc/mod_muc_room.erl:1581
 msgid &quot;Unable to generate a captcha&quot;
 msgstr &quot;&quot;
 
-#: mod_muc/mod_muc_room.erl:1589
+#: mod_muc/mod_muc_room.erl:1591
 msgid &quot;Incorrect password&quot;
 msgstr &quot;Nespr&#225;vn&#233; heslo&quot;
 
-#: mod_muc/mod_muc_room.erl:2087
+#: mod_muc/mod_muc_room.erl:2095
 msgid &quot;Administrator privileges required&quot;
 msgstr &quot;Jsou pot&#345;ebn&#225; pr&#225;va administr&#225;tora&quot;
 
-#: mod_muc/mod_muc_room.erl:2102
+#: mod_muc/mod_muc_room.erl:2110
 msgid &quot;Moderator privileges required&quot;
 msgstr &quot;Jsou pot&#345;ebn&#225; pr&#225;va moder&#225;tora&quot;
 
-#: mod_muc/mod_muc_room.erl:2257
+#: mod_muc/mod_muc_room.erl:2265
 msgid &quot;Jabber ID ~s is invalid&quot;
 msgstr &quot;Jabber ID ~s je neplatn&#233;&quot;
 
-#: mod_muc/mod_muc_room.erl:2271
+#: mod_muc/mod_muc_room.erl:2279
 msgid &quot;Nickname ~s does not exist in the room&quot;
 msgstr &quot;P&#345;ezd&#237;vka ~s v m&#237;stnosti neexistuje&quot;
 
-#: mod_muc/mod_muc_room.erl:2297 mod_muc/mod_muc_room.erl:2673
+#: mod_muc/mod_muc_room.erl:2305 mod_muc/mod_muc_room.erl:2683
 msgid &quot;Invalid affiliation: ~s&quot;
 msgstr &quot;Neplatn&#233; p&#345;i&#345;azen&#237;: ~s&quot;
 
-#: mod_muc/mod_muc_room.erl:2354
+#: mod_muc/mod_muc_room.erl:2362
 msgid &quot;Invalid role: ~s&quot;
 msgstr &quot;Neplatn&#225; role: ~s&quot;
 
-#: mod_muc/mod_muc_room.erl:2650 mod_muc/mod_muc_room.erl:2686
+#: mod_muc/mod_muc_room.erl:2660 mod_muc/mod_muc_room.erl:2696
 msgid &quot;Owner privileges required&quot;
 msgstr &quot;Jsou vy&#382;adov&#225;na pr&#225;va vlastn&#237;ka&quot;
 
-#: mod_muc/mod_muc_room.erl:2772
+#: mod_muc/mod_muc_room.erl:2820
 #, fuzzy
 msgid &quot;Configuration of room ~s&quot;
 msgstr &quot;Konfigurace pro &quot;
 
-#: mod_muc/mod_muc_room.erl:2780 mod_muc/mod_muc_room.erl:3187
+#: mod_muc/mod_muc_room.erl:2828 mod_muc/mod_muc_room.erl:3246
 #, fuzzy
 msgid &quot;Room description&quot;
 msgstr &quot;Popis:&quot;
 
-#: mod_muc/mod_muc_room.erl:2787
+#: mod_muc/mod_muc_room.erl:2835
 msgid &quot;Make room persistent&quot;
 msgstr &quot;Nastavit m&#237;stnost jako st&#225;lou&quot;
 
-#: mod_muc/mod_muc_room.erl:2792
+#: mod_muc/mod_muc_room.erl:2840
 msgid &quot;Make room public searchable&quot;
 msgstr &quot;Nastavit m&#237;stnost jako ve&#345;ejnou&quot;
 
-#: mod_muc/mod_muc_room.erl:2795
+#: mod_muc/mod_muc_room.erl:2843
 msgid &quot;Make participants list public&quot;
 msgstr &quot;Nastavit seznam &#250;&#269;astn&#237;k&#367; jako ve&#345;ejn&#253;&quot;
 
-#: mod_muc/mod_muc_room.erl:2798
+#: mod_muc/mod_muc_room.erl:2846
 msgid &quot;Make room password protected&quot;
 msgstr &quot;Chr&#225;nit m&#237;stnost heslem&quot;
 
-#: mod_muc/mod_muc_room.erl:2809
+#: mod_muc/mod_muc_room.erl:2857
 msgid &quot;Maximum Number of Occupants&quot;
 msgstr &quot;Po&#269;et &#250;&#269;astn&#237;k&#367;&quot;
 
-#: mod_muc/mod_muc_room.erl:2816
+#: mod_muc/mod_muc_room.erl:2864
 msgid &quot;No limit&quot;
 msgstr &quot;Bez limitu&quot;
 
-#: mod_muc/mod_muc_room.erl:2827
+#: mod_muc/mod_muc_room.erl:2875
 msgid &quot;Present real Jabber IDs to&quot;
 msgstr &quot;Odhalovat skute&#269;n&#225; Jabber ID&quot;
 
-#: mod_muc/mod_muc_room.erl:2835
+#: mod_muc/mod_muc_room.erl:2883
 msgid &quot;moderators only&quot;
 msgstr &quot;moder&#225;tor&#367;m&quot;
 
-#: mod_muc/mod_muc_room.erl:2837
+#: mod_muc/mod_muc_room.erl:2885
 msgid &quot;anyone&quot;
 msgstr &quot;ka&#382;d&#233;mu&quot;
 
-#: mod_muc/mod_muc_room.erl:2839
+#: mod_muc/mod_muc_room.erl:2887
 msgid &quot;Make room members-only&quot;
 msgstr &quot;Nastavit m&#237;stnost jen pro &#269;leny&quot;
 
-#: mod_muc/mod_muc_room.erl:2842
+#: mod_muc/mod_muc_room.erl:2890
 msgid &quot;Make room moderated&quot;
 msgstr &quot;Nastavit m&#237;stnost jako moderovanou&quot;
 
-#: mod_muc/mod_muc_room.erl:2845
+#: mod_muc/mod_muc_room.erl:2893
 msgid &quot;Default users as participants&quot;
 msgstr &quot;U&#382;ivatel&#233; jsou implicitn&#283; &#269;leny&quot;
 
-#: mod_muc/mod_muc_room.erl:2848
+#: mod_muc/mod_muc_room.erl:2896
 #, fuzzy
 msgid &quot;Allow users to change the subject&quot;
 msgstr &quot;Povolit u&#382;ivatel&#367;m m&#283;nit t&#233;ma m&#237;stnosti&quot;
 
-#: mod_muc/mod_muc_room.erl:2851
+#: mod_muc/mod_muc_room.erl:2899
 msgid &quot;Allow users to send private messages&quot;
 msgstr &quot;Povolit u&#382;ivatel&#367;m odes&#237;lat soukrom&#233; zpr&#225;vy&quot;
 
-#: mod_muc/mod_muc_room.erl:2854
+#: mod_muc/mod_muc_room.erl:2902
 msgid &quot;Allow users to query other users&quot;
 msgstr &quot;Povolit u&#382;ivatel&#367;m odes&#237;lat po&#382;adavky (query) ostatn&#237;m u&#382;ivatel&#367;m&quot;
 
-#: mod_muc/mod_muc_room.erl:2857
+#: mod_muc/mod_muc_room.erl:2905
 msgid &quot;Allow users to send invites&quot;
 msgstr &quot;Povolit u&#382;ivatel&#367;m pos&#237;l&#225;n&#237; pozv&#225;nek&quot;
 
-#: mod_muc/mod_muc_room.erl:2860
+#: mod_muc/mod_muc_room.erl:2908
 msgid &quot;Allow visitors to send status text in presence updates&quot;
 msgstr &quot;Povolit n&#225;v&#353;t&#283;vn&#237;k&#367;m pos&#237;lat stavov&#233; zpr&#225;vy ve statusu&quot;
 
-#: mod_muc/mod_muc_room.erl:2863
+#: mod_muc/mod_muc_room.erl:2911
 msgid &quot;Allow visitors to change nickname&quot;
 msgstr &quot;Povolit n&#225;v&#353;t&#283;vn&#237;k&#367;m m&#283;nit p&#345;ezd&#237;vku&quot;
 
-#: mod_muc/mod_muc_room.erl:2869
+#: mod_muc/mod_muc_room.erl:2917
 #, fuzzy
 msgid &quot;Make room captcha protected&quot;
 msgstr &quot;Chr&#225;nit m&#237;stnost heslem&quot;
 
-#: mod_muc/mod_muc_room.erl:2878
+#: mod_muc/mod_muc_room.erl:2926
 msgid &quot;Enable logging&quot;
 msgstr &quot;Zaznamen&#225;vat konverzace&quot;
 
-#: mod_muc/mod_muc_room.erl:2886
+#: mod_muc/mod_muc_room.erl:2934
 msgid &quot;You need an x:data capable client to configure room&quot;
 msgstr &quot;Ke konfiguraci m&#237;stnosti pot&#345;ebujete klienta podporuj&#237;c&#237;ho x:data&quot;
 
-#: mod_muc/mod_muc_room.erl:3189
+#: mod_muc/mod_muc_room.erl:3248
 msgid &quot;Number of occupants&quot;
 msgstr &quot;Po&#269;et &#250;&#269;astn&#237;k&#367;&quot;
 
-#: mod_muc/mod_muc_room.erl:3308
+#: mod_muc/mod_muc_room.erl:3367
 msgid &quot;~s invites you to the room ~s&quot;
 msgstr &quot;~s v&#225;s zve do m&#237;stnosti ~s&quot;
 
-#: mod_muc/mod_muc_room.erl:3317
+#: mod_muc/mod_muc_room.erl:3376
 msgid &quot;the password is&quot;
 msgstr &quot;heslo je&quot;
 
-#: mod_offline.erl:451 mod_offline_odbc.erl:303
+#: mod_offline.erl:509 mod_offline_odbc.erl:352
 msgid &quot;&quot;
 &quot;Your contact offline message queue is full. The message has been discarded.&quot;
 msgstr &quot;Fronta offline zpr&#225;v pro v&#225;&#353; kontakt je pln&#225;. Zpr&#225;va byla zahozena.&quot;
 
-#: mod_offline.erl:500 mod_offline_odbc.erl:358
+#: mod_offline.erl:558 mod_offline_odbc.erl:407
 msgid &quot;~s's Offline Messages Queue&quot;
 msgstr &quot;Fronta offline zpr&#225;v u&#382;ivatele ~s&quot;
 
-#: mod_offline.erl:503 mod_offline_odbc.erl:361 mod_roster.erl:866
-#: mod_roster_odbc.erl:966 mod_shared_roster.erl:778 mod_shared_roster.erl:879
-#: web/ejabberd_web_admin.erl:708 web/ejabberd_web_admin.erl:748
-#: web/ejabberd_web_admin.erl:815 web/ejabberd_web_admin.erl:850
-#: web/ejabberd_web_admin.erl:890 web/ejabberd_web_admin.erl:1352
-#: web/ejabberd_web_admin.erl:1548 web/ejabberd_web_admin.erl:1716
-#: web/ejabberd_web_admin.erl:1748 web/ejabberd_web_admin.erl:1810
-#: web/ejabberd_web_admin.erl:1878 web/ejabberd_web_admin.erl:1903
-#: web/ejabberd_web_admin.erl:1991
+#: mod_offline.erl:561 mod_offline_odbc.erl:410 mod_roster.erl:992
+#: mod_roster_odbc.erl:1093 mod_shared_roster.erl:778
+#: mod_shared_roster.erl:879 web/ejabberd_web_admin.erl:813
+#: web/ejabberd_web_admin.erl:854 web/ejabberd_web_admin.erl:922
+#: web/ejabberd_web_admin.erl:958 web/ejabberd_web_admin.erl:999
+#: web/ejabberd_web_admin.erl:1489 web/ejabberd_web_admin.erl:1687
+#: web/ejabberd_web_admin.erl:1857 web/ejabberd_web_admin.erl:1889
+#: web/ejabberd_web_admin.erl:1952 web/ejabberd_web_admin.erl:2056
+#: web/ejabberd_web_admin.erl:2081 web/ejabberd_web_admin.erl:2169
 msgid &quot;Submitted&quot;
 msgstr &quot;Odeslan&#233;&quot;
 
-#: mod_offline.erl:511
+#: mod_offline.erl:569
 msgid &quot;Time&quot;
 msgstr &quot;&#268;as&quot;
 
-#: mod_offline.erl:512
+#: mod_offline.erl:570
 msgid &quot;From&quot;
 msgstr &quot;Od&quot;
 
-#: mod_offline.erl:513
+#: mod_offline.erl:571
 msgid &quot;To&quot;
 msgstr &quot;Pro&quot;
 
-#: mod_offline.erl:514 mod_offline_odbc.erl:369
+#: mod_offline.erl:572 mod_offline_odbc.erl:418
 msgid &quot;Packet&quot;
 msgstr &quot;Paket&quot;
 
-#: mod_offline.erl:527 mod_offline_odbc.erl:382 mod_shared_roster.erl:785
-#: web/ejabberd_web_admin.erl:756 web/ejabberd_web_admin.erl:858
+#: mod_offline.erl:585 mod_offline_odbc.erl:431 mod_shared_roster.erl:785
+#: web/ejabberd_web_admin.erl:862 web/ejabberd_web_admin.erl:966
 msgid &quot;Delete Selected&quot;
 msgstr &quot;Smazat vybran&#233;&quot;
 
-#: mod_offline.erl:562 mod_offline_odbc.erl:447
+#: mod_offline.erl:620 mod_offline_odbc.erl:496
 msgid &quot;Offline Messages:&quot;
 msgstr &quot;Offline zpr&#225;vy&quot;
 
-#: mod_offline.erl:562 mod_offline_odbc.erl:447
+#: mod_offline.erl:620 mod_offline_odbc.erl:496
 #, fuzzy
 msgid &quot;Remove All Offline Messages&quot;
 msgstr &quot;Offline zpr&#225;vy&quot;
 
-#: mod_proxy65/mod_proxy65_service.erl:209
+#: mod_proxy65/mod_proxy65_service.erl:213
 msgid &quot;ejabberd SOCKS5 Bytestreams module&quot;
 msgstr &quot;ejabberd SOCKS5 Bytestreams modul&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1022
+#: mod_pubsub/mod_pubsub.erl:1054 mod_pubsub/mod_pubsub_odbc.erl:1053
 msgid &quot;Publish-Subscribe&quot;
 msgstr &quot;Publish-Subscribe&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1118
+#: mod_pubsub/mod_pubsub.erl:1150 mod_pubsub/mod_pubsub_odbc.erl:1150
 msgid &quot;ejabberd Publish-Subscribe module&quot;
 msgstr &quot;ejabberd Publish-Subscribe modul&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1271
+#: mod_pubsub/mod_pubsub.erl:1437 mod_pubsub/mod_pubsub_odbc.erl:1442
 msgid &quot;PubSub subscriber request&quot;
 msgstr &quot;&#381;&#225;dost odb&#283;ratele PubSub&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1273
+#: mod_pubsub/mod_pubsub.erl:1439 mod_pubsub/mod_pubsub_odbc.erl:1444
 msgid &quot;Choose whether to approve this entity's subscription.&quot;
 msgstr &quot;Zvolte, zda chcete schv&#225;lit odeb&#237;r&#225;n&#237; touto entitou&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1279
+#: mod_pubsub/mod_pubsub.erl:1445 mod_pubsub/mod_pubsub_odbc.erl:1450
 msgid &quot;Node ID&quot;
 msgstr &quot;ID uzlu&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1284
+#: mod_pubsub/mod_pubsub.erl:1450 mod_pubsub/mod_pubsub_odbc.erl:1455
 msgid &quot;Subscriber Address&quot;
 msgstr &quot;Adresa odb&#283;ratele&quot;
 
-#: mod_pubsub/mod_pubsub.erl:1290
+#: mod_pubsub/mod_pubsub.erl:1456 mod_pubsub/mod_pubsub_odbc.erl:1461
 msgid &quot;Allow this Jabber ID to subscribe to this pubsub node?&quot;
 msgstr &quot;Povolit tomuto Jabber ID odeb&#237;rat tento pubsub uzel?&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3005
+#: mod_pubsub/mod_pubsub.erl:3220 mod_pubsub/mod_pubsub_odbc.erl:3244
 msgid &quot;Deliver payloads with event notifications&quot;
 msgstr &quot;Doru&#269;ovat n&#225;klad s upozorn&#283;n&#237;m na ud&#225;lost&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3006
+#: mod_pubsub/mod_pubsub.erl:3221 mod_pubsub/mod_pubsub_odbc.erl:3245
 msgid &quot;Deliver event notifications&quot;
 msgstr &quot;Doru&#269;ovat upozorn&#283;n&#237; na ud&#225;losti&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3007
+#: mod_pubsub/mod_pubsub.erl:3222 mod_pubsub/mod_pubsub_odbc.erl:3246
 msgid &quot;Notify subscribers when the node configuration changes&quot;
 msgstr &quot;Upozornit odb&#283;ratele na zm&#283;nu nastaven&#237; uzlu&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3008
+#: mod_pubsub/mod_pubsub.erl:3223 mod_pubsub/mod_pubsub_odbc.erl:3247
 msgid &quot;Notify subscribers when the node is deleted&quot;
 msgstr &quot;Upozornit odb&#283;ratele na smaz&#225;n&#237; uzlu&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3009
+#: mod_pubsub/mod_pubsub.erl:3224 mod_pubsub/mod_pubsub_odbc.erl:3248
 msgid &quot;Notify subscribers when items are removed from the node&quot;
 msgstr &quot;Upozornit odb&#283;ratele na odstran&#283;n&#237; polo&#382;ek z uzlu&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3010
+#: mod_pubsub/mod_pubsub.erl:3225 mod_pubsub/mod_pubsub_odbc.erl:3249
 msgid &quot;Persist items to storage&quot;
 msgstr &quot;Ulo&#382;it polo&#382;ky natrvalo do &#250;lo&#382;i&#353;t&#283;&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3011
+#: mod_pubsub/mod_pubsub.erl:3226 mod_pubsub/mod_pubsub_odbc.erl:3250
 msgid &quot;A friendly name for the node&quot;
 msgstr &quot;P&#345;&#237;v&#283;tiv&#233; jm&#233;no pro uzel&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3012
+#: mod_pubsub/mod_pubsub.erl:3227 mod_pubsub/mod_pubsub_odbc.erl:3251
 msgid &quot;Max # of items to persist&quot;
 msgstr &quot;Maxim&#225;ln&#237; po&#269;et polo&#382;ek, kter&#233; je mo&#382;n&#233; natrvalo ulo&#382;it&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3013
+#: mod_pubsub/mod_pubsub.erl:3228 mod_pubsub/mod_pubsub_odbc.erl:3252
 msgid &quot;Whether to allow subscriptions&quot;
 msgstr &quot;Povolit odeb&#237;r&#225;n&#237;&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3014
+#: mod_pubsub/mod_pubsub.erl:3229 mod_pubsub/mod_pubsub_odbc.erl:3253
 msgid &quot;Specify the access model&quot;
 msgstr &quot;Uve&#271;te p&#345;&#237;stupov&#253; model&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3017
+#: mod_pubsub/mod_pubsub.erl:3232 mod_pubsub/mod_pubsub_odbc.erl:3256
 msgid &quot;Roster groups allowed to subscribe&quot;
 msgstr &quot;Skupiny kontakt&#367;, kter&#233; mohou odeb&#237;rat&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3018
+#: mod_pubsub/mod_pubsub.erl:3233 mod_pubsub/mod_pubsub_odbc.erl:3257
 msgid &quot;Specify the publisher model&quot;
 msgstr &quot;Specifikovat model pro publikov&#225;n&#237;&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3020
+#: mod_pubsub/mod_pubsub.erl:3235 mod_pubsub/mod_pubsub_odbc.erl:3259
 msgid &quot;Max payload size in bytes&quot;
 msgstr &quot;Maxim&#225;ln&#237; n&#225;klad v bajtech&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3021
+#: mod_pubsub/mod_pubsub.erl:3236 mod_pubsub/mod_pubsub_odbc.erl:3260
 msgid &quot;When to send the last published item&quot;
 msgstr &quot;Kdy odeslat posledn&#237; publikovanou polo&#382;ku&quot;
 
-#: mod_pubsub/mod_pubsub.erl:3023
+#: mod_pubsub/mod_pubsub.erl:3238 mod_pubsub/mod_pubsub_odbc.erl:3262
 msgid &quot;Only deliver notifications to available users&quot;
 msgstr &quot;Doru&#269;ovat upozorn&#283;n&#237; jen pr&#225;v&#283; p&#345;ihl&#225;&#353;en&#253;m u&#382;ivatel&#367;m&quot;
 
+#: mod_pubsub/mod_pubsub.erl:3239 mod_pubsub/mod_pubsub_odbc.erl:3263
+msgid &quot;The collections with which a node is affiliated&quot;
+msgstr &quot;&quot;
+
 #: mod_register.erl:190
 msgid &quot;Choose a username and password to register with this server&quot;
 msgstr &quot;Zadejte jm&#233;no u&#382;ivatele a heslo pro registraci na tomto serveru&quot;
@@ -1046,51 +1116,51 @@ msgstr &quot;Zadejte jm&#233;no u&#382;ivatele a heslo pro registraci na tomto serveru&quot;
 msgid &quot;Users are not allowed to register accounts so quickly&quot;
 msgstr &quot;Je zak&#225;z&#225;no registrovat &#250;&#269;ty v tak rychl&#233;m sledu&quot;
 
-#: mod_roster.erl:817 mod_roster_odbc.erl:917 web/ejabberd_web_admin.erl:1514
-#: web/ejabberd_web_admin.erl:1671 web/ejabberd_web_admin.erl:1682
-#: web/ejabberd_web_admin.erl:1962
+#: mod_roster.erl:943 mod_roster_odbc.erl:1044 web/ejabberd_web_admin.erl:1653
+#: web/ejabberd_web_admin.erl:1812 web/ejabberd_web_admin.erl:1823
+#: web/ejabberd_web_admin.erl:2140
 msgid &quot;None&quot;
 msgstr &quot;Nic&quot;
 
-#: mod_roster.erl:824 mod_roster_odbc.erl:924
+#: mod_roster.erl:950 mod_roster_odbc.erl:1051
 msgid &quot;Subscription&quot;
 msgstr &quot;P&#345;ihl&#225;&#353;en&#237;&quot;
 
-#: mod_roster.erl:825 mod_roster_odbc.erl:925
+#: mod_roster.erl:951 mod_roster_odbc.erl:1052
 msgid &quot;Pending&quot;
 msgstr &quot;&#268;ekaj&#237;c&#237;&quot;
 
-#: mod_roster.erl:826 mod_roster_odbc.erl:926
+#: mod_roster.erl:952 mod_roster_odbc.erl:1053
 msgid &quot;Groups&quot;
 msgstr &quot;Skupiny&quot;
 
-#: mod_roster.erl:853 mod_roster_odbc.erl:953
+#: mod_roster.erl:979 mod_roster_odbc.erl:1080
 msgid &quot;Validate&quot;
 msgstr &quot;Ov&#283;&#345;it&quot;
 
-#: mod_roster.erl:861 mod_roster_odbc.erl:961
+#: mod_roster.erl:987 mod_roster_odbc.erl:1088
 msgid &quot;Remove&quot;
 msgstr &quot;Odstranit&quot;
 
-#: mod_roster.erl:864 mod_roster_odbc.erl:964
+#: mod_roster.erl:990 mod_roster_odbc.erl:1091
 msgid &quot;Roster of &quot;
 msgstr &quot;Seznam kontakt&#367; &quot;
 
-#: mod_roster.erl:867 mod_roster_odbc.erl:967 mod_shared_roster.erl:779
-#: mod_shared_roster.erl:880 web/ejabberd_web_admin.erl:709
-#: web/ejabberd_web_admin.erl:749 web/ejabberd_web_admin.erl:816
-#: web/ejabberd_web_admin.erl:851 web/ejabberd_web_admin.erl:891
-#: web/ejabberd_web_admin.erl:1353 web/ejabberd_web_admin.erl:1549
-#: web/ejabberd_web_admin.erl:1717 web/ejabberd_web_admin.erl:1879
-#: web/ejabberd_web_admin.erl:1904 web/ejabberd_web_admin.erl:1992
+#: mod_roster.erl:993 mod_roster_odbc.erl:1094 mod_shared_roster.erl:779
+#: mod_shared_roster.erl:880 web/ejabberd_web_admin.erl:814
+#: web/ejabberd_web_admin.erl:855 web/ejabberd_web_admin.erl:923
+#: web/ejabberd_web_admin.erl:959 web/ejabberd_web_admin.erl:1000
+#: web/ejabberd_web_admin.erl:1490 web/ejabberd_web_admin.erl:1688
+#: web/ejabberd_web_admin.erl:1858 web/ejabberd_web_admin.erl:2057
+#: web/ejabberd_web_admin.erl:2082 web/ejabberd_web_admin.erl:2170
 msgid &quot;Bad format&quot;
 msgstr &quot;Nespr&#225;vn&#253; form&#225;t&quot;
 
-#: mod_roster.erl:874 mod_roster_odbc.erl:974
+#: mod_roster.erl:1000 mod_roster_odbc.erl:1101
 msgid &quot;Add Jabber ID&quot;
 msgstr &quot;P&#345;idat Jabber ID&quot;
 
-#: mod_roster.erl:973 mod_roster_odbc.erl:1073
+#: mod_roster.erl:1099 mod_roster_odbc.erl:1200
 msgid &quot;Roster&quot;
 msgstr &quot;Seznam kontakt&#367;&quot;
 
@@ -1099,8 +1169,8 @@ msgstr &quot;Seznam kontakt&#367;&quot;
 msgid &quot;Shared Roster Groups&quot;
 msgstr &quot;Skupiny pro sd&#237;len&#253; seznam kontakt&#367;&quot;
 
-#: mod_shared_roster.erl:772 web/ejabberd_web_admin.erl:1222
-#: web/ejabberd_web_admin.erl:2176
+#: mod_shared_roster.erl:772 web/ejabberd_web_admin.erl:1346
+#: web/ejabberd_web_admin.erl:2382
 msgid &quot;Add New&quot;
 msgstr &quot;P&#345;idat nov&#253;&quot;
 
@@ -1124,9 +1194,9 @@ msgstr &quot;Zobrazen&#233; skupiny:&quot;
 msgid &quot;Group &quot;
 msgstr &quot;Skupina &quot;
 
-#: mod_shared_roster.erl:886 web/ejabberd_web_admin.erl:715
-#: web/ejabberd_web_admin.erl:758 web/ejabberd_web_admin.erl:822
-#: web/ejabberd_web_admin.erl:897 web/ejabberd_web_admin.erl:1802
+#: mod_shared_roster.erl:886 web/ejabberd_web_admin.erl:820
+#: web/ejabberd_web_admin.erl:864 web/ejabberd_web_admin.erl:929
+#: web/ejabberd_web_admin.erl:1006 web/ejabberd_web_admin.erl:1943
 msgid &quot;Submit&quot;
 msgstr &quot;Odeslat&quot;
 
@@ -1134,28 +1204,28 @@ msgstr &quot;Odeslat&quot;
 msgid &quot;Erlang Jabber Server&quot;
 msgstr &quot;Erlang Jabber Server&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:468 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:443
+#: mod_vcard.erl:357 mod_vcard.erl:471 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:446
 msgid &quot;Birthday&quot;
 msgstr &quot;Datum narozen&#237;: &quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:470 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:445
+#: mod_vcard.erl:357 mod_vcard.erl:473 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:448
 msgid &quot;City&quot;
 msgstr &quot;M&#283;sto: &quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:469 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:444
+#: mod_vcard.erl:357 mod_vcard.erl:472 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:447
 msgid &quot;Country&quot;
 msgstr &quot;Zem&#283;: &quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:471 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:446
+#: mod_vcard.erl:357 mod_vcard.erl:474 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:449
 msgid &quot;Email&quot;
 msgstr &quot;E-mail&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:466 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:441
+#: mod_vcard.erl:357 mod_vcard.erl:469 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:444
 msgid &quot;Family Name&quot;
 msgstr &quot;P&#345;&#237;jmen&#237;: &quot;
 
@@ -1167,244 +1237,237 @@ msgstr &quot;&quot;
 &quot;Pro vyhled&#225;n&#237; u&#382;ivatele Jabberu vypl&#328;te formul&#225;&#345; (p&#345;idejte znak * na konec, &quot;
 &quot;pro vyhled&#225;n&#237; pod&#345;et&#283;zce)&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:463 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:438
+#: mod_vcard.erl:357 mod_vcard.erl:466 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:441
 msgid &quot;Full Name&quot;
 msgstr &quot;Cel&#233; jm&#233;no: &quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:465 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:440
+#: mod_vcard.erl:357 mod_vcard.erl:468 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:443
 msgid &quot;Middle Name&quot;
 msgstr &quot;Druh&#233; jm&#233;no: &quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:464 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:439 web/ejabberd_web_admin.erl:1791
+#: mod_vcard.erl:357 mod_vcard.erl:467 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:442 web/ejabberd_web_admin.erl:1932
 msgid &quot;Name&quot;
 msgstr &quot;Jm&#233;no&quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:472 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:447
+#: mod_vcard.erl:357 mod_vcard.erl:475 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:450
 msgid &quot;Organization Name&quot;
 msgstr &quot;N&#225;zev firmy: &quot;
 
-#: mod_vcard.erl:357 mod_vcard.erl:473 mod_vcard_odbc.erl:334
-#: mod_vcard_odbc.erl:448
+#: mod_vcard.erl:357 mod_vcard.erl:476 mod_vcard_odbc.erl:334
+#: mod_vcard_odbc.erl:451
 msgid &quot;Organization Unit&quot;
 msgstr &quot;Odd&#283;len&#237;: &quot;
 
-#: mod_vcard.erl:357 mod_vcard_ldap.erl:457 mod_vcard_odbc.erl:334
+#: mod_vcard.erl:357 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:334
 msgid &quot;Search users in &quot;
 msgstr &quot;Hledat u&#382;ivatele v &quot;
 
-#: mod_vcard.erl:357 mod_vcard_odbc.erl:334 web/ejabberd_web_admin.erl:1359
-#: web/ejabberd_web_admin.erl:1414
+#: mod_vcard.erl:357 mod_vcard_odbc.erl:334 web/ejabberd_web_admin.erl:1496
+#: web/ejabberd_web_admin.erl:1551
 msgid &quot;User&quot;
 msgstr &quot;U&#382;ivatel: &quot;
 
-#: mod_vcard.erl:357 mod_vcard_ldap.erl:457 mod_vcard_odbc.erl:334
+#: mod_vcard.erl:357 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:334
 msgid &quot;You need an x:data capable client to search&quot;
 msgstr &quot;K vyhled&#225;v&#225;n&#237; pot&#345;ebujete klienta podporuj&#237;c&#237;ho x:data&quot;
 
-#: mod_vcard.erl:379 mod_vcard_ldap.erl:479 mod_vcard_odbc.erl:356
+#: mod_vcard.erl:382 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:359
 msgid &quot;vCard User Search&quot;
 msgstr &quot;Hled&#225;n&#237; u&#382;ivatel&#367; podle vizitek&quot;
 
-#: mod_vcard.erl:435 mod_vcard_ldap.erl:533 mod_vcard_odbc.erl:410
+#: mod_vcard.erl:438 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:413
 msgid &quot;ejabberd vCard module&quot;
 msgstr &quot;ejabberd vCard modul&quot;
 
-#: mod_vcard.erl:459 mod_vcard_ldap.erl:543 mod_vcard_odbc.erl:434
+#: mod_vcard.erl:462 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:437
 msgid &quot;Search Results for &quot;
 msgstr &quot;V&#253;sledky hled&#225;n&#237; pro &quot;
 
-#: mod_vcard_ldap.erl:457
+#: mod_vcard_ldap.erl:458
 msgid &quot;Fill in fields to search for any matching Jabber User&quot;
 msgstr &quot;Vypl&#328;te pol&#237;&#269;ka pro vyhled&#225;n&#237; u&#382;ivatele Jabberu&quot;
 
-#: web/ejabberd_web_admin.erl:151 web/ejabberd_web_admin.erl:168
+#: web/ejabberd_web_admin.erl:179 web/ejabberd_web_admin.erl:186
+#: web/ejabberd_web_admin.erl:202 web/ejabberd_web_admin.erl:209
+msgid &quot;Unauthorized&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:266 web/ejabberd_web_admin.erl:283
 msgid &quot;ejabberd Web Admin&quot;
 msgstr &quot;Webov&#225; administrace ejabberd&quot;
 
-#: web/ejabberd_web_admin.erl:629 web/ejabberd_web_admin.erl:647
+#: web/ejabberd_web_admin.erl:749 web/ejabberd_web_admin.erl:760
 msgid &quot;Administration&quot;
 msgstr &quot;Administrace&quot;
 
-#: web/ejabberd_web_admin.erl:632 web/ejabberd_web_admin.erl:634
-#: web/ejabberd_web_admin.erl:650 web/ejabberd_web_admin.erl:652
-msgid &quot;(Raw)&quot;
-msgstr &quot;(Zdroj)&quot;
-
-#: web/ejabberd_web_admin.erl:635
-msgid &quot;Virtual Hosts&quot;
-msgstr &quot;Virtu&#225;ln&#237; hostitel&#233;&quot;
-
-#: web/ejabberd_web_admin.erl:636 web/ejabberd_web_admin.erl:656
-#: web/ejabberd_web_admin.erl:1691
-msgid &quot;Nodes&quot;
-msgstr &quot;Uzly&quot;
-
-#: web/ejabberd_web_admin.erl:637 web/ejabberd_web_admin.erl:657
-#: web/ejabberd_web_admin.erl:970 web/ejabberd_web_admin.erl:1724
-msgid &quot;Statistics&quot;
-msgstr &quot;Statistiky&quot;
-
-#: web/ejabberd_web_admin.erl:653 web/ejabberd_web_admin.erl:912
-#: web/ejabberd_web_admin.erl:918
-msgid &quot;Users&quot;
-msgstr &quot;U&#382;ivatel&#233;&quot;
-
-#: web/ejabberd_web_admin.erl:655 web/ejabberd_web_admin.erl:1416
-msgid &quot;Last Activity&quot;
-msgstr &quot;Posledn&#237; aktivita&quot;
-
-#: web/ejabberd_web_admin.erl:752 web/ejabberd_web_admin.erl:854
+#: web/ejabberd_web_admin.erl:858 web/ejabberd_web_admin.erl:962
 msgid &quot;Raw&quot;
 msgstr &quot;Zdroj&quot;
 
-#: web/ejabberd_web_admin.erl:888
+#: web/ejabberd_web_admin.erl:997
 msgid &quot;~s access rule configuration&quot;
 msgstr &quot;~s konfigurace pravidla p&#345;&#237;stupu&quot;
 
-#: web/ejabberd_web_admin.erl:905
+#: web/ejabberd_web_admin.erl:1015
 msgid &quot;ejabberd virtual hosts&quot;
 msgstr &quot;Virtu&#225;ln&#237; hostitel&#233; ejabberd&quot;
 
-#: web/ejabberd_web_admin.erl:944
+#: web/ejabberd_web_admin.erl:1023 web/ejabberd_web_admin.erl:1030
+msgid &quot;Users&quot;
+msgstr &quot;U&#382;ivatel&#233;&quot;
+
+#: web/ejabberd_web_admin.erl:1058
 msgid &quot;Users Last Activity&quot;
 msgstr &quot;Posledn&#237; aktivita u&#382;ivatele&quot;
 
-#: web/ejabberd_web_admin.erl:946
+#: web/ejabberd_web_admin.erl:1060
 msgid &quot;Period: &quot;
 msgstr &quot;&#268;as:&quot;
 
-#: web/ejabberd_web_admin.erl:956
+#: web/ejabberd_web_admin.erl:1070
 msgid &quot;Last month&quot;
 msgstr &quot;Posledn&#237; m&#283;s&#237;c&quot;
 
-#: web/ejabberd_web_admin.erl:957
+#: web/ejabberd_web_admin.erl:1071
 msgid &quot;Last year&quot;
 msgstr &quot;Posledn&#237; rok&quot;
 
-#: web/ejabberd_web_admin.erl:958
+#: web/ejabberd_web_admin.erl:1072
 msgid &quot;All activity&quot;
 msgstr &quot;V&#353;echny aktivity&quot;
 
-#: web/ejabberd_web_admin.erl:960
+#: web/ejabberd_web_admin.erl:1074
 msgid &quot;Show Ordinary Table&quot;
 msgstr &quot;Zobrazit b&#283;&#382;nou tabulku&quot;
 
-#: web/ejabberd_web_admin.erl:962
+#: web/ejabberd_web_admin.erl:1076
 msgid &quot;Show Integral Table&quot;
 msgstr &quot;Zobrazit kompletn&#237; tabulku&quot;
 
-#: web/ejabberd_web_admin.erl:981
+#: web/ejabberd_web_admin.erl:1085 web/ejabberd_web_admin.erl:1865
+msgid &quot;Statistics&quot;
+msgstr &quot;Statistiky&quot;
+
+#: web/ejabberd_web_admin.erl:1097
 #, fuzzy
 msgid &quot;Not Found&quot;
 msgstr &quot;Uzel nenalezen&quot;
 
-#: web/ejabberd_web_admin.erl:996
+#: web/ejabberd_web_admin.erl:1114
 msgid &quot;Node not found&quot;
 msgstr &quot;Uzel nenalezen&quot;
 
-#: web/ejabberd_web_admin.erl:1306
+#: web/ejabberd_web_admin.erl:1441
 msgid &quot;Host&quot;
 msgstr &quot;Hostitel&quot;
 
-#: web/ejabberd_web_admin.erl:1307
+#: web/ejabberd_web_admin.erl:1442
 msgid &quot;Registered Users&quot;
 msgstr &quot;Registrovan&#237; u&#382;ivatel&#233;&quot;
 
-#: web/ejabberd_web_admin.erl:1415
+#: web/ejabberd_web_admin.erl:1552
 msgid &quot;Offline Messages&quot;
 msgstr &quot;Offline zpr&#225;vy&quot;
 
-#: web/ejabberd_web_admin.erl:1472 web/ejabberd_web_admin.erl:1488
+#: web/ejabberd_web_admin.erl:1553
+msgid &quot;Last Activity&quot;
+msgstr &quot;Posledn&#237; aktivita&quot;
+
+#: web/ejabberd_web_admin.erl:1611 web/ejabberd_web_admin.erl:1627
 msgid &quot;Registered Users:&quot;
 msgstr &quot;Registrovan&#237; &#382;ivatel&#233;:&quot;
 
-#: web/ejabberd_web_admin.erl:1474 web/ejabberd_web_admin.erl:1490
-#: web/ejabberd_web_admin.erl:1935
+#: web/ejabberd_web_admin.erl:1613 web/ejabberd_web_admin.erl:1629
+#: web/ejabberd_web_admin.erl:2113
 msgid &quot;Online Users:&quot;
 msgstr &quot;Online u&#382;ivatel&#233;:&quot;
 
-#: web/ejabberd_web_admin.erl:1476
+#: web/ejabberd_web_admin.erl:1615
 msgid &quot;Outgoing s2s Connections:&quot;
 msgstr &quot;Odchoz&#237; s2s spojen&#237;:&quot;
 
-#: web/ejabberd_web_admin.erl:1478
+#: web/ejabberd_web_admin.erl:1617
 msgid &quot;Outgoing s2s Servers:&quot;
 msgstr &quot;Odchoz&#237; s2s servery:&quot;
 
-#: web/ejabberd_web_admin.erl:1543
+#: web/ejabberd_web_admin.erl:1682
 msgid &quot;Change Password&quot;
 msgstr &quot;Zm&#283;nit heslo&quot;
 
-#: web/ejabberd_web_admin.erl:1546
+#: web/ejabberd_web_admin.erl:1685
 msgid &quot;User &quot;
 msgstr &quot;U&#382;ivatel &quot;
 
-#: web/ejabberd_web_admin.erl:1553
+#: web/ejabberd_web_admin.erl:1692
 msgid &quot;Connected Resources:&quot;
 msgstr &quot;P&#345;ipojen&#233; zdroje:&quot;
 
-#: web/ejabberd_web_admin.erl:1554
+#: web/ejabberd_web_admin.erl:1693
 msgid &quot;Password:&quot;
 msgstr &quot;Heslo:&quot;
 
-#: web/ejabberd_web_admin.erl:1615
+#: web/ejabberd_web_admin.erl:1754
 msgid &quot;No Data&quot;
 msgstr &quot;&#381;&#225;dn&#225; data&quot;
 
-#: web/ejabberd_web_admin.erl:1714 web/ejabberd_web_admin.erl:1736
+#: web/ejabberd_web_admin.erl:1832
+msgid &quot;Nodes&quot;
+msgstr &quot;Uzly&quot;
+
+#: web/ejabberd_web_admin.erl:1855 web/ejabberd_web_admin.erl:1877
 msgid &quot;Node &quot;
 msgstr &quot;Uzel &quot;
 
-#: web/ejabberd_web_admin.erl:1723
+#: web/ejabberd_web_admin.erl:1864
 msgid &quot;Listened Ports&quot;
 msgstr &quot;Otev&#345;en&#233; porty&quot;
 
-#: web/ejabberd_web_admin.erl:1725 web/ejabberd_web_admin.erl:2003
-#: web/ejabberd_web_admin.erl:2164
+#: web/ejabberd_web_admin.erl:1866 web/ejabberd_web_admin.erl:2181
+#: web/ejabberd_web_admin.erl:2369
 msgid &quot;Update&quot;
 msgstr &quot;Aktualizovat&quot;
 
-#: web/ejabberd_web_admin.erl:1728 web/ejabberd_web_admin.erl:2268
+#: web/ejabberd_web_admin.erl:1869 web/ejabberd_web_admin.erl:2490
 msgid &quot;Restart&quot;
 msgstr &quot;Restart&quot;
 
-#: web/ejabberd_web_admin.erl:1730 web/ejabberd_web_admin.erl:2270
+#: web/ejabberd_web_admin.erl:1871 web/ejabberd_web_admin.erl:2492
 msgid &quot;Stop&quot;
 msgstr &quot;Stop&quot;
 
-#: web/ejabberd_web_admin.erl:1744
+#: web/ejabberd_web_admin.erl:1885
 msgid &quot;RPC Call Error&quot;
 msgstr &quot;Chyba RPC vol&#225;n&#237;&quot;
 
-#: web/ejabberd_web_admin.erl:1785
+#: web/ejabberd_web_admin.erl:1926
 msgid &quot;Database Tables at &quot;
 msgstr &quot;Datab&#225;zov&#233; tabulky na &quot;
 
-#: web/ejabberd_web_admin.erl:1792
+#: web/ejabberd_web_admin.erl:1933
 msgid &quot;Storage Type&quot;
 msgstr &quot;Typ &#250;lo&#382;i&#353;t&#283;&quot;
 
-#: web/ejabberd_web_admin.erl:1793
+#: web/ejabberd_web_admin.erl:1934
 msgid &quot;Elements&quot;
 msgstr &quot;&quot;
 
-#: web/ejabberd_web_admin.erl:1794
+#: web/ejabberd_web_admin.erl:1935
 msgid &quot;Memory&quot;
 msgstr &quot;Pam&#283;&#357;&quot;
 
-#: web/ejabberd_web_admin.erl:1811 web/ejabberd_web_admin.erl:1880
+#: web/ejabberd_web_admin.erl:1953 web/ejabberd_web_admin.erl:2058
 msgid &quot;Error&quot;
 msgstr &quot;&quot;
 
-#: web/ejabberd_web_admin.erl:1813
+#: web/ejabberd_web_admin.erl:1955
 msgid &quot;Backup of &quot;
 msgstr &quot;Z&#225;loha na &quot;
 
-#: web/ejabberd_web_admin.erl:1815
+#: web/ejabberd_web_admin.erl:1957
 #, fuzzy
 msgid &quot;&quot;
 &quot;Please note that these options will only backup the builtin Mnesia database. &quot;
@@ -1415,120 +1478,158 @@ msgstr &quot;&quot;
 &quot;Mnesia. Pokud pou&#382;&#237;v&#225;te ODBC modul, mus&#237;te z&#225;lohovat svoji SQL datab&#225;zi &quot;
 &quot;samostatn&#283;.&quot;
 
-#: web/ejabberd_web_admin.erl:1820
+#: web/ejabberd_web_admin.erl:1962
 msgid &quot;Store binary backup:&quot;
 msgstr &quot;Ulo&#382;it bin&#225;rn&#237; z&#225;lohu:&quot;
 
-#: web/ejabberd_web_admin.erl:1824 web/ejabberd_web_admin.erl:1831
-#: web/ejabberd_web_admin.erl:1839 web/ejabberd_web_admin.erl:1846
-#: web/ejabberd_web_admin.erl:1853
+#: web/ejabberd_web_admin.erl:1966 web/ejabberd_web_admin.erl:1973
+#: web/ejabberd_web_admin.erl:1981 web/ejabberd_web_admin.erl:1988
+#: web/ejabberd_web_admin.erl:1995 web/ejabberd_web_admin.erl:2002
+#: web/ejabberd_web_admin.erl:2009 web/ejabberd_web_admin.erl:2017
+#: web/ejabberd_web_admin.erl:2024 web/ejabberd_web_admin.erl:2031
 msgid &quot;OK&quot;
 msgstr &quot;OK&quot;
 
-#: web/ejabberd_web_admin.erl:1827
+#: web/ejabberd_web_admin.erl:1969
 msgid &quot;Restore binary backup immediately:&quot;
 msgstr &quot;Okam&#382;it&#283; obnovit bin&#225;rn&#237; z&#225;lohu:&quot;
 
-#: web/ejabberd_web_admin.erl:1835
+#: web/ejabberd_web_admin.erl:1977
 msgid &quot;&quot;
 &quot;Restore binary backup after next ejabberd restart (requires less memory):&quot;
 msgstr &quot;&quot;
 &quot;Obnovit bin&#225;rn&#237; z&#225;lohu p&#345;i n&#225;sleduj&#237;c&#237;m restartu ejabberd (vy&#382;aduje m&#233;n&#283; &quot;
 &quot;pam&#283;ti)&quot;
 
-#: web/ejabberd_web_admin.erl:1842
+#: web/ejabberd_web_admin.erl:1984
 msgid &quot;Store plain text backup:&quot;
 msgstr &quot;Ulo&#382;it z&#225;lohu do textov&#233;ho souboru:&quot;
 
-#: web/ejabberd_web_admin.erl:1849
+#: web/ejabberd_web_admin.erl:1991
 msgid &quot;Restore plain text backup immediately:&quot;
 msgstr &quot;Okam&#382;it&#283; obnovit z&#225;lohu z textov&#233;ho souboru:&quot;
 
-#: web/ejabberd_web_admin.erl:1875
+#: web/ejabberd_web_admin.erl:1998
+msgid &quot;Import users data from a PIEFXIS file (XEP-0277):&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:2005
+msgid &quot;Export data of all users in the server to PIEFXIS files (XEP-0277):&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:2012
+msgid &quot;Export data of users in a host to PIEFXIS files (XEP-0277):&quot;
+msgstr &quot;&quot;
+
+#: web/ejabberd_web_admin.erl:2020
+#, fuzzy
+msgid &quot;Import user data from jabberd14 spool file:&quot;
+msgstr &quot;Importovat u&#382;ivatele z jabberd14 spool soubor&#367;&quot;
+
+#: web/ejabberd_web_admin.erl:2027
+#, fuzzy
+msgid &quot;Import users data from jabberd14 spool directory:&quot;
+msgstr &quot;Importovat u&#382;ivatele z jabberd14 spool soubor&#367;&quot;
+
+#: web/ejabberd_web_admin.erl:2053
 msgid &quot;Listened Ports at &quot;
 msgstr &quot;Otev&#345;en&#233; porty na &quot;
 
-#: web/ejabberd_web_admin.erl:1900
+#: web/ejabberd_web_admin.erl:2078
 msgid &quot;Modules at &quot;
 msgstr &quot;Moduly na &quot;
 
-#: web/ejabberd_web_admin.erl:1926
+#: web/ejabberd_web_admin.erl:2104
 msgid &quot;Statistics of ~p&quot;
 msgstr &quot;Statistiky ~p&quot;
 
-#: web/ejabberd_web_admin.erl:1929
+#: web/ejabberd_web_admin.erl:2107
 msgid &quot;Uptime:&quot;
 msgstr &quot;&#268;as b&#283;hu&quot;
 
-#: web/ejabberd_web_admin.erl:1932
+#: web/ejabberd_web_admin.erl:2110
 msgid &quot;CPU Time:&quot;
 msgstr &quot;&#268;as procesoru&quot;
 
-#: web/ejabberd_web_admin.erl:1938
+#: web/ejabberd_web_admin.erl:2116
 msgid &quot;Transactions Committed:&quot;
 msgstr &quot;Transakce potvrzena&quot;
 
-#: web/ejabberd_web_admin.erl:1941
+#: web/ejabberd_web_admin.erl:2119
 msgid &quot;Transactions Aborted:&quot;
 msgstr &quot;Transakce zru&#353;ena&quot;
 
-#: web/ejabberd_web_admin.erl:1944
+#: web/ejabberd_web_admin.erl:2122
 msgid &quot;Transactions Restarted:&quot;
 msgstr &quot;Transakce restartov&#225;na&quot;
 
-#: web/ejabberd_web_admin.erl:1947
+#: web/ejabberd_web_admin.erl:2125
 msgid &quot;Transactions Logged:&quot;
 msgstr &quot;Transakce zaznamen&#225;na&quot;
 
-#: web/ejabberd_web_admin.erl:1989
+#: web/ejabberd_web_admin.erl:2167
 msgid &quot;Update &quot;
 msgstr &quot;Aktualizovat &quot;
 
-#: web/ejabberd_web_admin.erl:1997
+#: web/ejabberd_web_admin.erl:2175
 msgid &quot;Update plan&quot;
 msgstr &quot;Aktualizovat pl&#225;n&quot;
 
-#: web/ejabberd_web_admin.erl:1998
+#: web/ejabberd_web_admin.erl:2176
 #, fuzzy
 msgid &quot;Modified modules&quot;
 msgstr &quot;Aktualizovan&#233; moduly&quot;
 
-#: web/ejabberd_web_admin.erl:1999
+#: web/ejabberd_web_admin.erl:2177
 msgid &quot;Update script&quot;
 msgstr &quot;Aktualizovan&#233; skripty&quot;
 
-#: web/ejabberd_web_admin.erl:2000
+#: web/ejabberd_web_admin.erl:2178
 msgid &quot;Low level update script&quot;
 msgstr &quot;N&#237;zko&#250;rov&#328;ov&#253; aktualiza&#269;n&#237; skript&quot;
 
-#: web/ejabberd_web_admin.erl:2001
+#: web/ejabberd_web_admin.erl:2179
 msgid &quot;Script check&quot;
 msgstr &quot;Kontrola skriptu&quot;
 
-#: web/ejabberd_web_admin.erl:2144
+#: web/ejabberd_web_admin.erl:2347
 msgid &quot;Port&quot;
 msgstr &quot;Port&quot;
 
-#: web/ejabberd_web_admin.erl:2145
+#: web/ejabberd_web_admin.erl:2348
 msgid &quot;IP&quot;
 msgstr &quot;&quot;
 
-#: web/ejabberd_web_admin.erl:2146 web/ejabberd_web_admin.erl:2255
+#: web/ejabberd_web_admin.erl:2349
+#, fuzzy
+msgid &quot;Protocol&quot;
+msgstr &quot;Port&quot;
+
+#: web/ejabberd_web_admin.erl:2350 web/ejabberd_web_admin.erl:2477
 msgid &quot;Module&quot;
 msgstr &quot;Modul&quot;
 
-#: web/ejabberd_web_admin.erl:2147 web/ejabberd_web_admin.erl:2256
+#: web/ejabberd_web_admin.erl:2351 web/ejabberd_web_admin.erl:2478
 msgid &quot;Options&quot;
 msgstr &quot;Nastaven&#237;&quot;
 
-#: web/ejabberd_web_admin.erl:2166
+#: web/ejabberd_web_admin.erl:2371
 msgid &quot;Delete&quot;
 msgstr &quot;Smazat&quot;
 
-#: web/ejabberd_web_admin.erl:2278
+#: web/ejabberd_web_admin.erl:2500
 msgid &quot;Start&quot;
 msgstr &quot;Start&quot;
 
+#~ msgid &quot;Encodings&quot;
+#~ msgstr &quot;K&#243;dov&#225;n&#237;&quot;
+
+#~ msgid &quot;(Raw)&quot;
+#~ msgstr &quot;(Zdroj)&quot;
+
+#~ msgid &quot;Virtual Hosts&quot;
+#~ msgstr &quot;Virtu&#225;ln&#237; hostitel&#233;&quot;
+
 #~ msgid &quot;Specified nickname is already registered&quot;
 #~ msgstr &quot;Zadan&#225; p&#345;ezd&#237;vka je ji&#382; zaregistrov&#225;na&quot;
 </diff>
      <filename>src/msgs/cs.po</filename>
    </modified>
    <modified>
      <diff>@@ -9,12 +9,13 @@
 {&quot;Add Jabber ID&quot;,&quot;Jabber ID hinzuf&#252;gen&quot;}.
 {&quot;Add New&quot;,&quot;Neuen hinzuf&#252;gen&quot;}.
 {&quot;Add User&quot;,&quot;Benutzer hinzuf&#252;gen&quot;}.
-{&quot;Administration of &quot;,&quot;Administration der &quot;}.
+{&quot;Administration of &quot;,&quot;Administration von &quot;}.
 {&quot;Administration&quot;,&quot;Verwaltung&quot;}.
 {&quot;Administrator privileges required&quot;,&quot;Administratorenrechte ben&#246;tigt&quot;}.
 {&quot;A friendly name for the node&quot;,&quot;Ein passender Name f&#252;r den Knoten&quot;}.
 {&quot;All activity&quot;,&quot;Alle Aktivit&#228;ten&quot;}.
-{&quot;Allow this Jabber ID to subscribe to this pubsub node?&quot;,&quot;Erlauben Sie dieser Jabber ID das Abonnement dieses pubsub Knotens?&quot;}.
+{&quot;Allow this Jabber ID to subscribe to this pubsub node?&quot;,&quot;Erlauben sie dieser Jabber ID das Abonnement dieses pubsub Knotens?&quot;}.
+{&quot;Allow users to change the subject&quot;,&quot;Erlaube Benutzern das Thema zu &#228;ndern&quot;}.
 {&quot;Allow users to query other users&quot;,&quot;Erlaube Benutzern andere Benutzer abzufragen&quot;}.
 {&quot;Allow users to send invites&quot;,&quot;Erlaube Benutzern Einladungen zu senden&quot;}.
 {&quot;Allow users to send private messages&quot;,&quot;Erlaube Benutzern private Nachrichten zu senden&quot;}.
@@ -23,6 +24,7 @@
 {&quot;All Users&quot;,&quot;Alle Benutzer&quot;}.
 {&quot;Announcements&quot;,&quot;Ank&#252;ndigungen&quot;}.
 {&quot;anyone&quot;,&quot;jeder&quot;}.
+{&quot;A password is required to enter this room&quot;,&quot;Sie brauchen ein Passwort um diesen Raum zu betreten&quot;}.
 {&quot;April&quot;,&quot;April&quot;}.
 {&quot;August&quot;,&quot;August&quot;}.
 {&quot;Backup&quot;,&quot;Datensicherung&quot;}.
@@ -35,7 +37,7 @@
 {&quot;Change User Password&quot;,&quot;Benutzer Passwort &#228;ndern&quot;}.
 {&quot;Chatroom configuration modified&quot;,&quot;Chatraum Konfiguration ge&#228;ndert&quot;}.
 {&quot;Chatrooms&quot;,&quot;Chatr&#228;ume&quot;}.
-{&quot;Choose a username and password to register with this server&quot;,&quot;W&#228;hlen Sie zum Registrieren einen Benutzernamen und ein Passwort&quot;}.
+{&quot;Choose a username and password to register with this server&quot;,&quot;W&#228;hlen sie zum Registrieren einen Benutzernamen und ein Passwort&quot;}.
 {&quot;Choose modules to stop&quot;,&quot;W&#228;hle zu stoppende Module&quot;}.
 {&quot;Choose storage type of tables&quot;,&quot;W&#228;hle Speichertyp der Tabellen&quot;}.
 {&quot;Choose whether to approve this entity's subscription.&quot;,&quot;W&#228;hle ob dieses Abonnement best&#228;tigt wird.&quot;}.
@@ -43,7 +45,9 @@
 {&quot;Commands&quot;,&quot;Befehle&quot;}.
 {&quot;Conference room does not exist&quot;,&quot;Konferenzraum existiert nicht&quot;}.
 {&quot;Configuration&quot;,&quot;Konfiguration&quot;}.
+{&quot;Configuration of room ~s&quot;,&quot;Konfiguration f&#252;r Raum ~s&quot;}.
 {&quot;Connected Resources:&quot;,&quot;Verbundene Resourcen&quot;}.
+{&quot;Connections parameters&quot;,&quot;Verbindungsparameter&quot;}.
 {&quot;Country&quot;,&quot;Land&quot;}.
 {&quot;CPU Time:&quot;,&quot;CPU Zeit:&quot;}.
 {&quot;Database&quot;,&quot;Datenbank&quot;}.
@@ -56,8 +60,8 @@
 {&quot;Delete message of the day on all hosts&quot;,&quot;L&#246;sche Nachricht des Tages auf allen Hosts&quot;}.
 {&quot;Delete Selected&quot;,&quot;Markiertes l&#246;schen&quot;}.
 {&quot;Delete User&quot;,&quot;Benutzer l&#246;schen&quot;}.
-{&quot;Deliver event notifications&quot;,&quot;Versende Ereignisbenachrichtigung&quot;}.
-{&quot;Deliver payloads with event notifications&quot;,&quot;Versende Nutzlast mit Ereignis Benachrichtigung&quot;}.
+{&quot;Deliver event notifications&quot;,&quot;Versende Ereignisbenachrichtigungen&quot;}.
+{&quot;Deliver payloads with event notifications&quot;,&quot;Versende Nutzlast mit Ereignisbenachrichtigungen&quot;}.
 {&quot;Description:&quot;,&quot;Beschreibung:&quot;}.
 {&quot;Disc only copy&quot;,&quot;Festplatten Kopie&quot;}.
 {&quot;Displayed Groups:&quot;,&quot;Angezeigte Gruppen:&quot;}.
@@ -71,27 +75,33 @@
 {&quot;ejabberd vCard module&quot;,&quot;ejabberd vCard Modul&quot;}.
 {&quot;ejabberd virtual hosts&quot;,&quot;ejabberd virtuelle Hosts&quot;}.
 {&quot;ejabberd Web Admin&quot;,&quot;ejabberd Web Admin&quot;}.
+{&quot;Elements&quot;,&quot;Elemente&quot;}.
 {&quot;Email&quot;,&quot;E-Mail&quot;}.
 {&quot;Enable logging&quot;,&quot;Log-Funktion aktivieren&quot;}.
-{&quot;Encodings&quot;,&quot;Kodierung&quot;}.
+{&quot;Encoding for server ~b&quot;,&quot;Kodierung f&#252;r Server ~b&quot;}.
 {&quot;End User Session&quot;,&quot;Benutzer Sitzung beenden&quot;}.
-{&quot;Enter list of {Module, [Options]}&quot;,&quot;Geben Sie eine Liste bestehend aus {Modul, [Optionen]} ein&quot;}.
-{&quot;Enter nickname you want to register&quot;,&quot;Geben Sie den zu registrierenden Spitznamen ein&quot;}.
-{&quot;Enter path to backup file&quot;,&quot;Geben Sie den Pfad zur Datensicherung ein&quot;}.
-{&quot;Enter path to jabberd14 spool dir&quot;,&quot;Geben Sie den Pfad zum jabberd14 spool Verzeichnis ein&quot;}.
-{&quot;Enter path to jabberd14 spool file&quot;,&quot;Geben Sie den Pfad zur jabberd14 spool Datei ein&quot;}.
-{&quot;Enter path to text file&quot;,&quot;Geben Sie den Pfad zur Textdatei ein&quot;}.
-{&quot;Enter username and encodings you wish to use for connecting to IRC servers&quot;,&quot;Geben Sie Benutzernamen und Kodierung f&#252;r die Verbindung zum IRC Server an&quot;}.
+{&quot;Enter list of {Module, [Options]}&quot;,&quot;Geben sie eine Liste bestehend aus {Modul, [Optionen]} ein&quot;}.
+{&quot;Enter nickname you want to register&quot;,&quot;Geben sie den zu registrierenden Spitznamen ein&quot;}.
+{&quot;Enter path to backup file&quot;,&quot;Geben sie den Pfad zur Datensicherung ein&quot;}.
+{&quot;Enter path to jabberd14 spool dir&quot;,&quot;Geben sie den Pfad zum jabberd14 spool Verzeichnis ein&quot;}.
+{&quot;Enter path to jabberd14 spool file&quot;,&quot;Geben sie den Pfad zur jabberd14 spool Datei ein&quot;}.
+{&quot;Enter path to text file&quot;,&quot;Geben sie den Pfad zur Textdatei ein&quot;}.
+{&quot;Enter the text you see&quot;,&quot;Geben sie den Text den sie sehen ein&quot;}.
+{&quot;Enter username and encodings you wish to use for connecting to IRC servers.  Press 'Next' to get more fields to fill in.  Press 'Complete' to save settings.&quot;,&quot;Geben sie Benutzernamen und Kodierung f&#252;r Verbindungen zu IRC Servern an. Dr&#252;cken sie 'Mehr' um leere Felder hinzuzuf&#252;gen. Dr&#252;cken sie 'Beenden' um die Einstellungen zu speichern.&quot;}.
+{&quot;Enter username, encodings, ports and passwords you wish to use for connecting to IRC servers&quot;,&quot;Geben sie Benutzernamen, Kodierungen, Ports und Passw&#246;rter f&#252;r die Verbindung zu IRC Servern an&quot;}.
 {&quot;Erlang Jabber Server&quot;,&quot;Erlang Jabber Server&quot;}.
-{&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;}].&quot;,&quot;Beispiel: [{\&quot;irc.lucky.net\&quot;,\&quot;koi8-r\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;}].&quot;}.
+{&quot;Error&quot;,&quot;Fehler&quot;}.
+{&quot;Example: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;, 6667, \&quot;secret\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;, 7000}, {\&quot;irc.sometestserver.net\&quot;, \&quot;utf-8\&quot;}].&quot;,&quot;Beispiel: [{\&quot;irc.lucky.net\&quot;, \&quot;koi8-r\&quot;, 6667, \&quot;secret\&quot;}, {\&quot;vendetta.fef.net\&quot;, \&quot;iso8859-1\&quot;, 7000}, {\&quot;irc.sometestserver.net\&quot;, \&quot;utf-8\&quot;}].&quot;}.
+{&quot;Export data of all users in the server to PIEFXIS files (XEP-0277):&quot;,&quot;Alle Benutzerdaten des Servers in PIEFXIS Dateien (XEP-0277) exportieren:&quot;}.
+{&quot;Export data of users in a host to PIEFXIS files (XEP-0277):&quot;,&quot;Alle Benutzerdaten des Hosts in PIEFXIS Dateien (XEP-0277) exportieren:&quot;}.
 {&quot;Family Name&quot;,&quot;Nachname&quot;}.
 {&quot;February&quot;,&quot;Februar&quot;}.
 {&quot;Fill in fields to search for any matching Jabber User&quot;,&quot;Felder ausf&#252;llen, um nach passenden Jabber Benutzern zu suchen&quot;}.
-{&quot;Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)&quot;,&quot;F&#252;llen Sie die Felder aus, um nach passenden Jabber Benutzern zu suchen (beenden Sie ein Feld mit *, um auch nach Teilzeichenketten zu suchen)&quot;}.
+{&quot;Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)&quot;,&quot;F&#252;llen sie die Felder aus, um nach passenden Jabber Benutzern zu suchen (beenden sie ein Feld mit *, um auch nach Teilzeichenketten zu suchen)&quot;}.
 {&quot;Friday&quot;,&quot;Freitag&quot;}.
-{&quot;From ~s&quot;,&quot;Von  ~s&quot;}.
+{&quot;From ~s&quot;,&quot;Von ~s&quot;}.
 {&quot;From&quot;,&quot;Von&quot;}.
-{&quot;Full Name&quot;,&quot;Ganzer Name&quot;}.
+{&quot;Full Name&quot;,&quot;Gesamter Name&quot;}.
 {&quot;Get Number of Online Users&quot;,&quot;Anzahl der angemeldeten Benutzer abrufen&quot;}.
 {&quot;Get Number of Registered Users&quot;,&quot;Anzahl der registrierten Benutzer abrufen&quot;}.
 {&quot;Get User Last Login Time&quot;,&quot;letzte Anmeldezeit abrufen&quot;}.
@@ -106,10 +116,13 @@
 {&quot;has been kicked&quot;,&quot;wurde gekickt&quot;}.
 {&quot; has set the subject to: &quot;,&quot; hat das Thema ge&#228;ndert auf: &quot;}.
 {&quot;Host&quot;,&quot;Host&quot;}.
-{&quot;If you want to specify different encodings for IRC servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;}'.  By default this service use \&quot;~s\&quot; encoding.&quot;,&quot;Wenn Sie verschiedene Kodierungen f&#252;r IRC Server angeben, schreiben Sie diese im Format '{\&quot;Irc Server\&quot;, \&quot;Kodierung\&quot;}'. Standardm&#228;ssig benutzt der Dienst die \&quot;~s\&quot; Kodierung&quot;}.
+{&quot;If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding\&quot;, port, \&quot;password\&quot;}'.  By default this service use \&quot;~s\&quot; encoding, port ~p, empty password.&quot;,&quot;Wenn sie verschiedene Ports, Passw&#246;rter und Kodierungen f&#252;r IRC Server angeben wollen, erstellen sie die Liste mit folgendem Format '{\&quot;IRC Server\&quot;, \&quot;Kodierung\&quot;, Port, \&quot;Passwort\&quot;}'.  Standardm&#228;ssig benutzt dieser Dienst die \&quot;~s\&quot; Kodierung, den Port ~p und kein Passwort.&quot;}.
 {&quot;Import Directory&quot;,&quot;Verzeichnis importieren&quot;}.
 {&quot;Import File&quot;,&quot;Datei importieren&quot;}.
+{&quot;Import user data from jabberd14 spool file:&quot;,&quot;Importiere Benutzer von jabberd14 Spool Datei:&quot;}.
 {&quot;Import User from File at &quot;,&quot;Benutzer aus dieser Datei importieren &quot;}.
+{&quot;Import users data from a PIEFXIS file (XEP-0277):&quot;,&quot;Benutzerdaten von einer PIEFXIS Datei (XEP-0277) importieren:&quot;}.
+{&quot;Import users data from jabberd14 spool directory:&quot;,&quot;Importiere Benutzer von jabberd14 Spool Verzeichnis:&quot;}.
 {&quot;Import Users from Dir at &quot;,&quot;Benutzer vom Verzeichnis importieren &quot;}.
 {&quot;Import Users From jabberd14 Spool Files&quot;,&quot;Importiere Benutzer von jabberd14 Spool Dateien&quot;}.
 {&quot;Improper message type&quot;,&quot;Unzul&#228;ssiger Nachrichtentyp&quot;}.
@@ -117,7 +130,12 @@
 {&quot;Invalid affiliation: ~s&quot;,&quot;Ung&#252;ltige Mitgliedschaft: ~s&quot;}.
 {&quot;Invalid role: ~s&quot;,&quot;Ung&#252;ltige Rolle: ~s&quot;}.
 {&quot;IP addresses&quot;,&quot;IP Addresse&quot;}.
+{&quot;IP&quot;,&quot;IP&quot;}.
+{&quot;IRC channel (don't put the first #)&quot;,&quot;IRC Channel (ohne dem ersten #)&quot;}.
+{&quot;IRC server&quot;,&quot;IRC Server&quot;}.
+{&quot;IRC settings&quot;,&quot;IRC Einstellungen&quot;}.
 {&quot;IRC Transport&quot;,&quot;IRC Transport&quot;}.
+{&quot;IRC username&quot;,&quot;IRC Benutzername&quot;}.
 {&quot;IRC Username&quot;,&quot;IRC Benutzername&quot;}.
 {&quot;is now known as&quot;,&quot;ist nun bekannt als&quot;}.
 {&quot;It is not allowed to send private messages&quot;,&quot;Es ist nicht erlaubt private Nachrichten zu senden&quot;}.
@@ -126,7 +144,10 @@
 {&quot;Jabber ID&quot;,&quot;Jabber ID&quot;}.
 {&quot;Jabber ID ~s is invalid&quot;,&quot;Jabber ID ~s ist ung&#252;ltig&quot;}.
 {&quot;January&quot;,&quot;Januar&quot;}.
+{&quot;Join IRC channel&quot;,&quot;IRC Channel beitreten&quot;}.
 {&quot;joins the room&quot;,&quot;kommt in den Raum&quot;}.
+{&quot;Join the IRC channel here.&quot;,&quot;Hier den IRC Channel beitreten.&quot;}.
+{&quot;Join the IRC channel in this Jabber ID: ~s&quot;,&quot;Den IRC Channel mit dieser Jabber ID beitreten: ~s&quot;}.
 {&quot;July&quot;,&quot;Juli&quot;}.
 {&quot;June&quot;,&quot;Juni&quot;}.
 {&quot;Last Activity&quot;,&quot;Letzte Aktion&quot;}.
@@ -135,34 +156,37 @@
 {&quot;Last year&quot;,&quot;Letztes Jahr&quot;}.
 {&quot;leaves the room&quot;,&quot;verl&#228;sst den Raum&quot;}.
 {&quot;Listened Ports&quot;,&quot;Aktive Ports&quot;}.
-{&quot;Listened Ports at &quot;,&quot;aktive Ports &quot;}.
+{&quot;Listened Ports at &quot;,&quot;Aktive Ports bei&quot;}.
 {&quot;List of modules to start&quot;,&quot;Liste der zu startenden Module&quot;}.
 {&quot;Low level update script&quot;,&quot;Low level Aktualisierungsscript&quot;}.
 {&quot;Make participants list public&quot;,&quot;Teilnehmerliste &#246;ffentlich machen&quot;}.
+{&quot;Make room captcha protected&quot;,&quot;Raum mit Verifizierung (Captcha) versehen&quot;}.
 {&quot;Make room members-only&quot;,&quot;Raum nur f&#252;r Mitglieder zug&#228;nglich machen&quot;}.
 {&quot;Make room moderated&quot;,&quot;Raum modieriert machen&quot;}.
 {&quot;Make room password protected&quot;,&quot;Raum passwortgesch&#252;tzt machen&quot;}.
 {&quot;Make room persistent&quot;,&quot;Raum persistent machen&quot;}.
 {&quot;Make room public searchable&quot;,&quot;Raum &#246;ffentlich suchbar machen&quot;}.
 {&quot;March&quot;,&quot;M&#228;rz&quot;}.
-{&quot;Maximum Number of Occupants&quot;,&quot;maximale Anzahl von Teilnehmern&quot;}.
+{&quot;Maximum Number of Occupants&quot;,&quot;Maximale Anzahl von Teilnehmern&quot;}.
 {&quot;Max # of items to persist&quot;,&quot;Maximale Anzahl dauerhaft zu speichernder Eintr&#228;ge&quot;}.
 {&quot;Max payload size in bytes&quot;,&quot;Maximale Nutzlastgr&#246;sse in Bytes&quot;}.
 {&quot;May&quot;,&quot;Mai&quot;}.
+{&quot;Membership is required to enter this room&quot;,&quot;Um diesen Raum zu betreten m&#252;ssen sie Mitglied sein&quot;}.
 {&quot;Members:&quot;,&quot;Mitglieder:&quot;}.
 {&quot;Memory&quot;,&quot;Speicher&quot;}.
 {&quot;Message body&quot;,&quot;Nachrichtentext&quot;}.
 {&quot;Middle Name&quot;,&quot;Zweiter Vorname&quot;}.
 {&quot;Moderator privileges required&quot;,&quot;Moderatorrechte ben&#246;tigt&quot;}.
 {&quot;moderators only&quot;,&quot;ausschliesslich Moderatoren&quot;}.
+{&quot;Modified modules&quot;,&quot;Ge&#228;nderte Module&quot;}.
 {&quot;Module&quot;,&quot;Modul&quot;}.
-{&quot;Modules at &quot;,&quot;Module auf &quot;}.
+{&quot;Modules at &quot;,&quot;Module bei &quot;}.
 {&quot;Modules&quot;,&quot;Module&quot;}.
 {&quot;Monday&quot;,&quot;Montag&quot;}.
 {&quot;Name:&quot;,&quot;Name:&quot;}.
 {&quot;Name&quot;,&quot;Vorname&quot;}.
 {&quot;Never&quot;,&quot;Nie&quot;}.
-{&quot;Nickname Registration at &quot;,&quot;Registrieren des Spitznamens &quot;}.
+{&quot;Nickname Registration at &quot;,&quot;Registrieren des Spitznamens bei&quot;}.
 {&quot;Nickname ~s does not exist in the room&quot;,&quot;Spitzname ~s existiert im Raum nicht&quot;}.
 {&quot;Nickname&quot;,&quot;Spitzname&quot;}.
 {&quot;No body provided for announce message&quot;,&quot;Kein Text f&#252;r die Ank&#252;ndigung angegeben&quot;}.
@@ -171,9 +195,10 @@
 {&quot;Node &quot;,&quot;Knoten &quot;}.
 {&quot;Node not found&quot;,&quot;Knoten nicht gefunden&quot;}.
 {&quot;Nodes&quot;,&quot;Knoten&quot;}.
-{&quot;No limit&quot;,&quot;keine Begrenzung&quot;}.
+{&quot;No limit&quot;,&quot;Keine Begrenzung&quot;}.
 {&quot;None&quot;,&quot;Keine&quot;}.
 {&quot;No resource provided&quot;,&quot;Keine Ressource angegeben&quot;}.
+{&quot;Not Found&quot;,&quot;nicht gefunden&quot;}.
 {&quot;Notify subscribers when items are removed from the node&quot;,&quot;Abonnenten benachrichtigen, wenn Eintr&#228;ge vom Knoten entfernt werden&quot;}.
 {&quot;Notify subscribers when the node configuration changes&quot;,&quot;Abonnenten benachrichtigen, wenn die Knotenkonfiguration sich &#228;ndert&quot;}.
 {&quot;Notify subscribers when the node is deleted&quot;,&quot;Abonnenten benachrichtigen, wenn der Knoten gel&#246;scht wird&quot;}.
@@ -189,6 +214,8 @@
 {&quot;Online Users:&quot;,&quot;Angemeldete Benutzer:&quot;}.
 {&quot;Online Users&quot;,&quot;Angemeldete Benutzer&quot;}.
 {&quot;Only deliver notifications to available users&quot;,&quot;Benachrichtigungen nur an verf&#252;gbare Benutzer schicken&quot;}.
+{&quot;Only moderators and participants are allowed to change the subject in this room&quot;,&quot;Nur Moderatoren und Mitglieder d&#252;rfen das Thema in diesem Raum &#228;ndern&quot;}.
+{&quot;Only moderators are allowed to change the subject in this room&quot;,&quot;Nur Moderatoren d&#252;rfen das Thema in diesem Raum &#228;ndern&quot;}.
 {&quot;Only occupants are allowed to send messages to the conference&quot;,&quot;Nur Teilnehmer d&#252;rfen Nachrichten an den Raum schicken&quot;}.
 {&quot;Only occupants are allowed to send queries to the conference&quot;,&quot;Nur Teilnehmer sind berechtig Anfragen an die Konferenz zu senden&quot;}.
 {&quot;Only service administrators are allowed to send service messages&quot;,&quot;Nur Service Administratoren sind berechtigt, Servicenachrichten zu senden&quot;}.
@@ -200,6 +227,7 @@
 {&quot;Outgoing s2s Servers:&quot;,&quot;Ausgehende s2s Server:&quot;}.
 {&quot;Owner privileges required&quot;,&quot;Besitzerrechte ben&#246;tigt&quot;}.
 {&quot;Packet&quot;,&quot;Paket&quot;}.
+{&quot;Password ~b&quot;,&quot;Passwort ~b&quot;}.
 {&quot;Password:&quot;,&quot;Passwort:&quot;}.
 {&quot;Password&quot;,&quot;Passwort&quot;}.
 {&quot;Password Verification&quot;,&quot;Passwort best&#228;tigen&quot;}.
@@ -209,16 +237,18 @@
 {&quot;Period: &quot;,&quot;Zeitraum: &quot;}.
 {&quot;Persist items to storage&quot;,&quot;Eintr&#228;ge dauerhaft speichern&quot;}.
 {&quot;Ping&quot;,&quot;Ping&quot;}.
+{&quot;Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.&quot;,&quot;Beachten sie, das diese Optionen nur die eingebaute Mnesia Datenbank sichert. Wenn sie das ODBC Modul verwenden m&#252;ssen sie die SQL Datenbank zus&#228;tzlich manuell sichern.&quot;}.
 {&quot;Pong&quot;,&quot;Pong&quot;}.
+{&quot;Port ~b&quot;,&quot;Port ~b&quot;}.
 {&quot;Port&quot;,&quot;Port&quot;}.
 {&quot;Present real Jabber IDs to&quot;,&quot;Echte Jabber IDs anzeigen f&#252;r&quot;}.
 {&quot;private, &quot;,&quot;privat, &quot;}.
+{&quot;Protocol&quot;,&quot;Protokoll&quot;}.
 {&quot;Publish-Subscribe&quot;,&quot;Publish-Subscribe&quot;}.
 {&quot;PubSub subscriber request&quot;,&quot;PubSub Abonnenten Anfrage&quot;}.
 {&quot;Queries to the conference members are not allowed in this room&quot;,&quot;Anfragen an die Teilnehmer sind in diesem Raum nicht erlaubt&quot;}.
 {&quot;RAM and disc copy&quot;,&quot;RAM und Festplatten Kopie&quot;}.
 {&quot;RAM copy&quot;,&quot;RAM Kopie&quot;}.
-{&quot;(Raw)&quot;,&quot;(unformatiert)&quot;}.
 {&quot;Raw&quot;,&quot;Unformatiert&quot;}.
 {&quot;Really delete message of the day?&quot;,&quot;Wirklich die Nachricht des Tages l&#246;schen?&quot;}.
 {&quot;Recipient is not in the conference room&quot;,&quot;Der Empf&#228;nger ist nicht im Raum&quot;}.
@@ -226,10 +256,11 @@
 {&quot;Registered Users&quot;,&quot;Registrierte Benutzer&quot;}.
 {&quot;Registration in mod_irc for &quot;,&quot;Registrierung in mod_irc f&#252;r &quot;}.
 {&quot;Remote copy&quot;,&quot;Fernkopie&quot;}.
+{&quot;Remove All Offline Messages&quot;,&quot;Alle Offline Nachrichten l&#246;schen&quot;}.
 {&quot;Remove&quot;,&quot;Entfernen&quot;}.
 {&quot;Remove User&quot;,&quot;Benutzer l&#246;schen&quot;}.
 {&quot;Replaced by new connection&quot;,&quot;Durch neue Verbindung ersetzt&quot;}.
-{&quot;Resources&quot;,&quot;Resource&quot;}.
+{&quot;Resources&quot;,&quot;Ressourcen&quot;}.
 {&quot;Restart&quot;,&quot;Neustart&quot;}.
 {&quot;Restart Service&quot;,&quot;Dienst neustarten&quot;}.
 {&quot;Restore Backup from File at &quot;,&quot;Datenwiederherstellung aus der Datei &quot;}.
@@ -239,11 +270,13 @@
 {&quot;Restore&quot;,&quot;Wiederherstellung&quot;}.
 {&quot;Room Configuration&quot;,&quot;Raum Konfiguration&quot;}.
 {&quot;Room creation is denied by service policy&quot;,&quot;Anlegen des Raumes aufgrund der Dienstrichtlinien verweigert&quot;}.
+{&quot;Room description&quot;,&quot;Raum Beschreibung&quot;}.
+{&quot;Room Occupants&quot;,&quot;Teilnehmer in diesem Raum&quot;}.
 {&quot;Room title&quot;,&quot;Raumname&quot;}.
 {&quot;Roster groups allowed to subscribe&quot;,&quot;Kontaktlisten-Gruppen die abonnieren d&#252;rfen&quot;}.
 {&quot;Roster&quot;,&quot;Kontaktliste&quot;}.
 {&quot;Roster of &quot;,&quot;Kontaktliste von &quot;}.
-{&quot;Roster size&quot;,&quot;Kontaktlistengr&#246;sse&quot;}.
+{&quot;Roster size&quot;,&quot;Kontaktlistengr&#246;&#223;e&quot;}.
 {&quot;RPC Call Error&quot;,&quot;RPC Abruf-Fehler&quot;}.
 {&quot;Running Nodes&quot;,&quot;Aktive Knoten&quot;}.
 {&quot;~s access rule configuration&quot;,&quot;~s Zugangsregel Konfiguration&quot;}.
@@ -256,6 +289,7 @@
 {&quot;Send announcement to all users on all hosts&quot;,&quot;Sende Ank&#252;ndigung an alle Benutzer auf allen Hosts&quot;}.
 {&quot;Send announcement to all users&quot;,&quot;Sende Ank&#252;ndigung an alle Benutzer&quot;}.
 {&quot;September&quot;,&quot;September&quot;}.
+{&quot;Server ~b&quot;,&quot;Server ~b&quot;}.
 {&quot;Set message of the day and send to online users&quot;,&quot;Setze Nachricht des Tages und sende sie an alle angemeldeten Benutzer&quot;}.
 {&quot;Set message of the day on all hosts and send to online users&quot;,&quot;Setze Nachricht des Tages auf allen Hosts und sende sie an alle angemeldeten Benutzer&quot;}.
 {&quot;Shared Roster Groups&quot;,&quot;Gruppen der gemeinsamen Kontaktliste&quot;}.
@@ -263,8 +297,8 @@
 {&quot;Show Ordinary Table&quot;,&quot;Normale Tabelle anzeigen&quot;}.
 {&quot;Shut Down Service&quot;,&quot;Dienst herunterfahren&quot;}.
 {&quot;~s invites you to the room ~s&quot;,&quot;~s l&#228;dt sie in den Raum ~s ein&quot;}.
-{&quot;Specify the access model&quot;,&quot;Geben Sie das Zugangsmodell an&quot;}.
-{&quot;Specify the publisher model&quot;,&quot;Geben Sie das Publikationsmodell an&quot;}.
+{&quot;Specify the access model&quot;,&quot;Geben sie das Zugangsmodell an&quot;}.
+{&quot;Specify the publisher model&quot;,&quot;Geben sie das Publikationsmodell an&quot;}.
 {&quot;~s's Offline Messages Queue&quot;,&quot;~s's Offline Nachrichten Warteschlange&quot;}.
 {&quot;Start&quot;,&quot;Anfang&quot;}.
 {&quot;Start Modules at &quot;,&quot;Starte Module bei &quot;}.
@@ -284,6 +318,10 @@
 {&quot;Subscriber Address&quot;,&quot;Abonnenten Adresse&quot;}.
 {&quot;Subscription&quot;,&quot;Abonnement&quot;}.
 {&quot;Sunday&quot;,&quot;Sonntag&quot;}.
+{&quot;That nickname is already in use by another occupant&quot;,&quot;Dieser Spitzname wird bereits von einem Teilnehmer genutzt&quot;}.
+{&quot;That nickname is registered by another person&quot;,&quot;Dieser Spitzname wurde bereits von jemand anderem registriert&quot;}.
+{&quot;The captcha is valid.&quot;,&quot;Die Verifizierung ist g&#252;ltig.&quot;}.
+{&quot;The collections with which a node is affiliated&quot;,&quot;Sammlungen, mit denen ein Knoten verkn&#252;pft ist&quot;}.
 {&quot;the password is&quot;,&quot;das Passwort ist&quot;}.
 {&quot;This participant is kicked from the room because he sent an error message&quot;,&quot;Dieser Teilnehmer wurde aus dem Raum gekickt, da er eine Fehlernachricht gesendet hat&quot;}.
 {&quot;This participant is kicked from the room because he sent an error message to another participant&quot;,&quot;Dieser Teilnehmer wurde aus dem Raum gekickt, da er eine Fehlernachricht an einen anderen Teilnehmer gesendet hat&quot;}.
@@ -294,12 +332,14 @@
 {&quot;Time&quot;,&quot;Zeit&quot;}.
 {&quot;To ~s&quot;,&quot;An ~s&quot;}.
 {&quot;To&quot;,&quot;Zu&quot;}.
-{&quot;Traffic rate limit is exceeded&quot;,&quot;Datenrate ist zu hoch&quot;}.
+{&quot;Traffic rate limit is exceeded&quot;,&quot;Datenratenlimit wurde &#252;berschritten&quot;}.
 {&quot;Transactions Aborted:&quot;,&quot;Vorg&#228;nge abgebrochen:&quot;}.
 {&quot;Transactions Committed:&quot;,&quot;Vorg&#228;nge durchgef&#252;hrt:&quot;}.
 {&quot;Transactions Logged:&quot;,&quot;Vorg&#228;nge protokolliert:&quot;}.
 {&quot;Transactions Restarted:&quot;,&quot;Vorg&#228;nge neu gestartet:&quot;}.
 {&quot;Tuesday&quot;,&quot;Dienstag&quot;}.
+{&quot;Unable to generate a captcha&quot;,&quot;Konnte Verifizierung nicht erstellen&quot;}.
+{&quot;Unauthorized&quot;,&quot;Nicht berechtigt&quot;}.
 {&quot;Update&quot;,&quot;Aktualisieren&quot;}.
 {&quot;Update &quot;,&quot;Aktualisierung &quot;}.
 {&quot;Update message of the day (don't send)&quot;,&quot;Aktualisiere Nachricht des Tages (nicht senden)&quot;}.
@@ -311,11 +351,11 @@
 {&quot;User &quot;,&quot;Benutzer &quot;}.
 {&quot;User&quot;,&quot;Benutzer&quot;}.
 {&quot;User Management&quot;,&quot;Benutzer Verwaltung&quot;}.
+{&quot;Users are not allowed to register accounts so quickly&quot;,&quot;Benutzer d&#252;rfen Konten nicht so schnell registrieren&quot;}.
 {&quot;Users&quot;,&quot;Benutzer&quot;}.
 {&quot;Users Last Activity&quot;,&quot;Letzte Benutzeraktivit&#228;t&quot;}.
 {&quot;Validate&quot;,&quot;Validieren&quot;}.
 {&quot;vCard User Search&quot;,&quot;vCard Benutzer Suche&quot;}.
-{&quot;Virtual Hosts&quot;,&quot;Virtuelle Hosts&quot;}.
 {&quot;Visitors are not allowed to change their nicknames in this room&quot;,&quot;Besucher d&#252;rfen in diesem Raum ihren Spitznamen nicht &#228;ndern&quot;}.
 {&quot;Visitors are not allowed to send messages to all occupants&quot;,&quot;Besucher d&#252;rfen nicht an alle Teilnehmer Nachrichten verschicken&quot;}.
 {&quot;Wednesday&quot;,&quot;Mittwoch&quot;}.
@@ -328,3 +368,4 @@
 {&quot;You need an x:data capable client to register nickname&quot;,&quot;Sie ben&#246;tigen einen Client, der x:data unterst&#252;tzt, um Ihren Spitznamen zu registrieren&quot;}.
 {&quot;You need an x:data capable client to search&quot;,&quot;Sie ben&#246;tigen einen Client, der x:data unterst&#252;tzt, um suchen zu k&#246;nnen&quot;}.
 {&quot;Your contact offline message queue is full. The message has been discarded.&quot;,&quot;Ihre offline Kontakt Warteschlange ist voll. Die Nachricht wurde verworfen.&quot;}.
+{&quot;Your messages to ~s are being blocked. To unblock them, visit ~s&quot;,&quot;Ihre Nachrichten an ~s werden blockiert. Um dies zu &#228;ndern, besuchen sie ~s&quot;}.</diff>
      <filename>src/msgs/de.msg</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,10 @@
 msgid &quot;&quot;
 msgstr &quot;&quot;
 &quot;Project-Id-Version: 2.1.0-alpha\n&quot;
-&quot;Last-Translator: Nikolaus Polak\n&quot;
+&quot;POT-Creation-Date: \n&quot;
+&quot;PO-Revision-Date: \n&quot;
+&quot;Last-Translator: Nikolaus Polak &lt;nik [at] linuxlovers [dot] at&gt;\n&quot;
+&quot;Language-Team: \n&quot;
 &quot;MIME-Version: 1.0\n&quot;
 &quot;Content-Type: text/plain; charset=UTF-8\n&quot;
 &quot;Content-Transfer-Encoding: 8bit\n&quot;
@@ -12,30 +15,30 @@ msgstr &quot;&quot;
 &quot;X-Additional-Translator: Torsten Werner\n&quot;
 &quot;X-Additional-Translator: Marina Hahn\n&quot;
 
-#: ejabberd_c2s.erl:358 ejabberd_c2s.erl:662
+#: ejabberd_c2s.erl:364 ejabberd_c2s.erl:668
 msgid &quot;Use of STARTTLS required&quot;
 msgstr &quot;Verwendung von STARTTLS erforderlich&quot;
 
-#: ejabberd_c2s.erl:442
+#: ejabberd_c2s.erl:448
 msgid &quot;No resource provided&quot;
 msgstr &quot;Keine Ressource angegeben&quot;
 
-#: ejabberd_c2s.erl:1067
+#: ejabberd_c2s.erl:1073
 msgid &quot;Replaced by new connection&quot;
 msgstr &quot;Durch neue Verbindung ersetzt&quot;
 
-#: ejabberd_captcha.erl:74 ejabberd_captcha.erl:106
-#, fuzzy
+#: ejabberd_captcha.erl:93 ejabberd_captcha.erl:125
 msgid &quot;Enter the text you see&quot;
-msgstr &quot;Geben Sie den Pfad zur Textdatei ein&quot;
+msgstr &quot;Geben sie den Text den sie sehen ein&quot;
 
-#: ejabberd_captcha.erl:78
+#: ejabberd_captcha.erl:97
 msgid &quot;Your messages to ~s are being blocked. To unblock them, visit ~s&quot;
 msgstr &quot;&quot;
+&quot;Ihre Nachrichten an ~s werden blockiert. Um dies zu &#228;ndern, besuchen sie ~s&quot;
 
-#: ejabberd_captcha.erl:212
+#: ejabberd_captcha.erl:235
 msgid &quot;The captcha is valid.&quot;
-msgstr &quot;&quot;
+msgstr &quot;Die Verifizierung ist g&#252;ltig.&quot;
 
 #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161
 msgid &quot;Commands&quot;
@@ -116,7 +119,7 @@ msgstr &quot;L&#246;sche Nachricht des Tages auf allen Hosts&quot;
 msgid &quot;Configuration&quot;
 msgstr &quot;Konfiguration&quot;
 
-#: mod_configure.erl:125 mod_configure.erl:544 web/ejabberd_web_admin.erl:1721
+#: mod_configure.erl:125 mod_configure.erl:544 web/ejabberd_web_admin.erl:1862
 msgid &quot;Database&quot;
 msgstr &quot;Datenbank&quot;
 
@@ -128,7 +131,7 @@ msgstr &quot;Module starten&quot;
 msgid &quot;Stop Modules&quot;
 msgstr &quot;Module stoppen&quot;
 
-#: mod_configure.erl:131 mod_configure.erl:572 web/ejabberd_web_admin.erl:1722
+#: mod_configure.erl:131 mod_configure.erl:572 web/ejabberd_web_admin.erl:1863
 msgid &quot;Backup&quot;
 msgstr &quot;Datensicherung&quot;
 
@@ -157,7 +160,7 @@ msgid &quot;Shut Down Service&quot;
 msgstr &quot;Dienst herunterfahren&quot;
 
 #: mod_configure.erl:145 mod_configure.erl:486 mod_configure.erl:1165
-#: web/ejabberd_web_admin.erl:1371
+#: web/ejabberd_web_admin.erl:1508
 msgid &quot;Add User&quot;
 msgstr &quot;Benutzer hinzuf&#252;gen&quot;
 
@@ -194,15 +197,13 @@ msgstr &quot;Anzahl der registrierten Benutzer abrufen&quot;
 msgid &quot;Get Number of Online Users&quot;
 msgstr &quot;Anzahl der angemeldeten Benutzer abrufen&quot;
 
-#: mod_configure.erl:163 mod_configure.erl:477 web/ejabberd_web_admin.erl:631
-#: web/ejabberd_web_admin.erl:649 web/ejabberd_web_admin.erl:706
-#: web/ejabberd_web_admin.erl:746
+#: mod_configure.erl:163 mod_configure.erl:477 web/ejabberd_web_admin.erl:811
+#: web/ejabberd_web_admin.erl:852
 msgid &quot;Access Control Lists&quot;
 msgstr &quot;Zugangskontroll-Listen (ACL)&quot;
 
-#: mod_configure.erl:165 mod_configure.erl:478 web/ejabberd_web_admin.erl:633
-#: web/ejabberd_web_admin.erl:651 web/ejabberd_web_admin.erl:813
-#: web/ejabberd_web_admin.erl:848
+#: mod_configure.erl:165 mod_configure.erl:478 web/ejabberd_web_admin.erl:920
+#: web/ejabberd_web_admin.erl:956
 msgid &quot;Access Rules&quot;
 msgstr &quot;Zugangsregeln&quot;
 
@@ -210,8 +211,8 @@ msgstr &quot;Zugangsregeln&quot;
 msgid &quot;User Management&quot;
 msgstr &quot;Benutzer Verwaltung&quot;
 
-#: mod_configure.erl:468 web/ejabberd_web_admin.erl:654
-#: web/ejabberd_web_admin.erl:925 web/ejabberd_web_admin.erl:1308
+#: mod_configure.erl:468 web/ejabberd_web_admin.erl:1038
+#: web/ejabberd_web_admin.erl:1443
 msgid &quot;Online Users&quot;
 msgstr &quot;Angemeldete Benutzer&quot;
 
@@ -223,15 +224,15 @@ msgstr &quot;Alle Benutzer&quot;
 msgid &quot;Outgoing s2s Connections&quot;
 msgstr &quot;Ausgehende s2s Verbindungen&quot;
 
-#: mod_configure.erl:471 web/ejabberd_web_admin.erl:1692
+#: mod_configure.erl:471 web/ejabberd_web_admin.erl:1833
 msgid &quot;Running Nodes&quot;
 msgstr &quot;Aktive Knoten&quot;
 
-#: mod_configure.erl:472 web/ejabberd_web_admin.erl:1694
+#: mod_configure.erl:472 web/ejabberd_web_admin.erl:1835
 msgid &quot;Stopped Nodes&quot;
 msgstr &quot;Inaktive Knoten&quot;
 
-#: mod_configure.erl:545 mod_configure.erl:555 web/ejabberd_web_admin.erl:1738
+#: mod_configure.erl:545 mod_configure.erl:555 web/ejabberd_web_admin.erl:1879
 msgid &quot;Modules&quot;
 msgstr &quot;Module&quot;
 
@@ -249,7 +250,7 @@ msgstr &quot;An ~s&quot;
 
 #: mod_configure.erl:685
 msgid &quot;From ~s&quot;
-msgstr &quot;Von  ~s&quot;
+msgstr &quot;Von ~s&quot;
 
 #: mod_configure.erl:881
 msgid &quot;Database Tables Configuration at &quot;
@@ -289,7 +290,7 @@ msgstr &quot;Starte Module bei &quot;
 
 #: mod_configure.erl:941
 msgid &quot;Enter list of {Module, [Options]}&quot;
-msgstr &quot;Geben Sie eine Liste bestehend aus {Modul, [Optionen]} ein&quot;
+msgstr &quot;Geben sie eine Liste bestehend aus {Modul, [Optionen]} ein&quot;
 
 #: mod_configure.erl:942
 msgid &quot;List of modules to start&quot;
@@ -301,7 +302,7 @@ msgstr &quot;Datensicherung in die Datei &quot;
 
 #: mod_configure.erl:955 mod_configure.erl:969
 msgid &quot;Enter path to backup file&quot;
-msgstr &quot;Geben Sie den Pfad zur Datensicherung ein&quot;
+msgstr &quot;Geben sie den Pfad zur Datensicherung ein&quot;
 
 #: mod_configure.erl:956 mod_configure.erl:970 mod_configure.erl:984
 #: mod_configure.erl:998
@@ -318,7 +319,7 @@ msgstr &quot;Ausgabe der Sicherung in diese Textdatei &quot;
 
 #: mod_configure.erl:983
 msgid &quot;Enter path to text file&quot;
-msgstr &quot;Geben Sie den Pfad zur Textdatei ein&quot;
+msgstr &quot;Geben sie den Pfad zur Textdatei ein&quot;
 
 #: mod_configure.erl:993
 msgid &quot;Import User from File at &quot;
@@ -326,7 +327,7 @@ msgstr &quot;Benutzer aus dieser Datei importieren &quot;
 
 #: mod_configure.erl:997
 msgid &quot;Enter path to jabberd14 spool file&quot;
-msgstr &quot;Geben Sie den Pfad zur jabberd14 spool Datei ein&quot;
+msgstr &quot;Geben sie den Pfad zur jabberd14 spool Datei ein&quot;
 
 #: mod_configure.erl:1007
 msgid &quot;Import Users from Dir at &quot;
@@ -334,7 +335,7 @@ msgstr &quot;Benutzer vom Verzeichnis importieren &quot;
 
 #: mod_configure.erl:1011
 msgid &quot;Enter path to jabberd14 spool dir&quot;
-msgstr &quot;Geben Sie den Pfad zum jabberd14 spool Verzeichnis ein&quot;
+msgstr &quot;Geben sie den Pfad zum jabberd14 spool Verzeichnis ein&quot;
 
 #: mod_configure.erl:1012
 msgid &quot;Path to Dir&quot;
@@ -363,14 +364,14 @@ msgstr &quot;Zugangsregeln&quot;
 #: mod_configure.erl:1168 mod_configure.erl:1190 mod_configure.erl:1202
 #: mod_configure.erl:1214 mod_configure.erl:1226 mod_configure.erl:1243
 #: mod_configure.erl:1255 mod_configure.erl:1620 mod_configure.erl:1670
-#: mod_configure.erl:1691 mod_roster.erl:822 mod_roster_odbc.erl:922
-#: mod_vcard.erl:462 mod_vcard_ldap.erl:546 mod_vcard_odbc.erl:437
+#: mod_configure.erl:1691 mod_roster.erl:948 mod_roster_odbc.erl:1049
+#: mod_vcard.erl:465 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:440
 msgid &quot;Jabber ID&quot;
 msgstr &quot;Jabber ID&quot;
 
 #: mod_configure.erl:1173 mod_configure.erl:1231 mod_configure.erl:1621
-#: mod_configure.erl:1833 mod_muc/mod_muc_room.erl:2801
-#: web/ejabberd_web_admin.erl:1364
+#: mod_configure.erl:1833 mod_muc/mod_muc_room.erl:2849
+#: web/ejabberd_web_admin.erl:1501
 msgid &quot;Password&quot;
 msgstr &quot;Passwort&quot;
 
@@ -386,11 +387,11 @@ msgstr &quot;Anzahl der registrierten Benutzer&quot;
 msgid &quot;Number of online users&quot;
 msgstr &quot;Anzahl der angemeldeten Benutzer&quot;
 
-#: mod_configure.erl:1652 web/ejabberd_web_admin.erl:1430
+#: mod_configure.erl:1652 web/ejabberd_web_admin.erl:1567
 msgid &quot;Never&quot;
 msgstr &quot;Nie&quot;
 
-#: mod_configure.erl:1666 web/ejabberd_web_admin.erl:1444
+#: mod_configure.erl:1666 web/ejabberd_web_admin.erl:1581
 msgid &quot;Online&quot;
 msgstr &quot;Angemeldet&quot;
 
@@ -400,7 +401,7 @@ msgstr &quot;Letzte Anmeldung&quot;
 
 #: mod_configure.erl:1692
 msgid &quot;Roster size&quot;
-msgstr &quot;Kontaktlistengr&#246;sse&quot;
+msgstr &quot;Kontaktlistengr&#246;&#223;e&quot;
 
 #: mod_configure.erl:1693
 msgid &quot;IP addresses&quot;
@@ -408,11 +409,11 @@ msgstr &quot;IP Addresse&quot;
 
 #: mod_configure.erl:1694
 msgid &quot;Resources&quot;
-msgstr &quot;Resource&quot;
+msgstr &quot;Ressourcen&quot;
 
 #: mod_configure.erl:1820
 msgid &quot;Administration of &quot;
-msgstr &quot;Administration der &quot;
+msgstr &quot;Administration von &quot;
 
 #: mod_configure.erl:1823
 msgid &quot;Action on user&quot;
@@ -422,243 +423,304 @@ msgstr &quot;Aktion auf Benutzer&quot;
 msgid &quot;Edit Properties&quot;
 msgstr &quot;Einstellungen &#228;ndern&quot;
 
-#: mod_configure.erl:1830 web/ejabberd_web_admin.erl:1556
+#: mod_configure.erl:1830 web/ejabberd_web_admin.erl:1695
 msgid &quot;Remove User&quot;
 msgstr &quot;Benutzer l&#246;schen&quot;
 
-#: mod_irc/mod_irc.erl:198 mod_muc/mod_muc.erl:335
+#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:335
 msgid &quot;Access denied by service policy&quot;
 msgstr &quot;Zugang aufgrund der Dienstrichtlinien verweigert&quot;
 
-#: mod_irc/mod_irc.erl:311
+#: mod_irc/mod_irc.erl:400
 msgid &quot;IRC Transport&quot;
 msgstr &quot;IRC Transport&quot;
 
-#: mod_irc/mod_irc.erl:323
+#: mod_irc/mod_irc.erl:427
 msgid &quot;ejabberd IRC module&quot;
 msgstr &quot;ejabberd IRC Modul&quot;
 
-#: mod_irc/mod_irc.erl:441
+#: mod_irc/mod_irc.erl:557
 msgid &quot;You need an x:data capable client to configure mod_irc settings&quot;
 msgstr &quot;&quot;
 &quot;Sie ben&#246;tigen einen Client, der x:data unterst&#252;tzt, um die mod_irc &quot;
 &quot;Einstellungen zu konfigurieren&quot;
 
-#: mod_irc/mod_irc.erl:448
+#: mod_irc/mod_irc.erl:564
 msgid &quot;Registration in mod_irc for &quot;
 msgstr &quot;Registrierung in mod_irc f&#252;r &quot;
 
-#: mod_irc/mod_irc.erl:453
+#: mod_irc/mod_irc.erl:569
 msgid &quot;&quot;
-&quot;Enter username and encodings you wish to use for connecting to IRC servers&quot;
+&quot;Enter username, encodings, ports and passwords you wish to use for &quot;
+&quot;connecting to IRC servers&quot;
 msgstr &quot;&quot;
-&quot;Geben Sie Benutzernamen und Kodierung f&#252;r die Verbindung zum IRC Server an&quot;
+&quot;Geben sie Benutzernamen, Kodierungen, Ports und Passw&#246;rter f&#252;r die &quot;
+&quot;Verbindung zu IRC Servern an&quot;
 
-#: mod_irc/mod_irc.erl:458
+#: mod_irc/mod_irc.erl:574
 msgid &quot;IRC Username&quot;
 msgstr &quot;IRC Benutzername&quot;
 
-#: mod_irc/mod_irc.erl:468
+#: mod_irc/mod_irc.erl:584
+msgid &quot;&quot;
+&quot;If you want to specify different ports, passwords, encodings for IRC &quot;
+&quot;servers, fill this list with values in format '{\&quot;irc server\&quot;, \&quot;encoding&quot;
+&quot;\&quot;, port, \&quot;password\&quot;}'.  By default this service use \&quot;~s\&quot; encoding, port &