diff --git a/config.toml b/config.toml
index 166f22c..e930767 100644
--- a/config.toml
+++ b/config.toml
@@ -36,6 +36,7 @@
 version_asyncweb = "2.0.0-SNAPSHOT"
 version_mina_2_0 = "2.0.23"
 version_mina_2_1 = "2.1.6"
+version_mina_2_2 = "2.2.0"
 version_ftpserver_1_1 = "1.1.4"
 version_ftpserver_1_2 = "1.2.0"
 version_sshd = "2.8.0"
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 4bec572..c426597 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -33,6 +33,7 @@
                 <ul>
                     <li><a href="/downloads-mina_2_0.html">Mina {{ .Site.Params.version_mina_2_0 }}</a></li>
                     <li><a href="/downloads-mina_2_1.html">Mina {{ .Site.Params.version_mina_2_1 }}</a></li>
+                    <li><a href="/downloads-mina_2_2.html">Mina {{ .Site.Params.version_mina_2_2 }}</a></li>
                     <li><a href="/downloads-ftpserver_1_1.html">FtpServer {{ .Site.Params.version_ftpserver_1_1 }}</a></li>
                     <li><a href="/downloads-ftpserver_1_2.html">FtpServer {{ .Site.Params.version_ftpserver_1_2 }}</a></li>
                     <li><a href="/downloads-sshd.html">SSHD {{ .Site.Params.version_sshd }}</a></li>
diff --git a/layouts/mina/baseof.html b/layouts/mina/baseof.html
index 8a660c4..05e47a8 100644
--- a/layouts/mina/baseof.html
+++ b/layouts/mina/baseof.html
@@ -33,12 +33,14 @@
                 <ul>
                     <li><a href="/mina-project/downloads_2_0.html">Mina {{ .Site.Params.version_mina_2_0 }}</a></li>
                     <li><a href="/mina-project/downloads_2_1.html">Mina {{ .Site.Params.version_mina_2_1 }}</a></li>
+                    <li><a href="/mina-project/downloads_2_2.html">Mina {{ .Site.Params.version_mina_2_2 }}</a></li>
                     <li><a href="/mina-project/downloads_old.html">Mina old versions</a></li>
                 </ul>
                 <h5>Documentation</h5>
                 <ul>
                     <li><a href="/mina-project/documentation.html" class="external-link" rel="nofollow">Base documentation</a></li>
                     <li><a href="/mina-project/userguide/user-guide-toc.html" class="external-link" rel="nofollow">User guide</a></li>
+                    <li><a href="/mina-project/2.2-vs-2.1.html" class="external-link" rel="nofollow">2.2 vs 2.1</a></li>
                     <li><a href="/mina-project/2.1-vs-2.0.html" class="external-link" rel="nofollow">2.1 vs 2.0</a></li>
                     <li><a href="/mina-project/features.html" class="external-link" rel="nofollow">Features</a></li>
                     <li><a href="/mina-project/road-map.html" class="external-link" rel="nofollow">Road Map</a></li>
@@ -52,8 +54,10 @@
                     <li><a href="/mina-project/sources.html" class="external-link" rel="nofollow">Sources</a></li>
                     <li><a href="/mina-project/gen-docs/latest-2.0/apidocs/index.html" class="external-link" rel="nofollow">API Javadoc {{ .Site.Params.version_mina_2_0 }}</a></li>
                     <li><a href="/mina-project/gen-docs/latest-2.1/apidocs/index.html" class="external-link" rel="nofollow">API Javadoc {{ .Site.Params.version_mina_2_1 }}</a></li>
+                    <li><a href="/mina-project/gen-docs/latest-2.2/apidocs/index.html" class="external-link" rel="nofollow">API Javadoc {{ .Site.Params.version_mina_2_2 }}</a></li>
                     <li><a href="/mina-project/gen-docs/latest-2.0/xref/index.html" class="external-link" rel="nofollow">API xref  {{ .Site.Params.version_mina_2_0 }}</a></li>
                     <li><a href="/mina-project/gen-docs/latest-2.1/xref/index.html" class="external-link" rel="nofollow">API xref {{ .Site.Params.version_mina_2_1 }}</a></li>
+                    <li><a href="/mina-project/gen-docs/latest-2.2/xref/index.html" class="external-link" rel="nofollow">API xref {{ .Site.Params.version_mina_2_2 }}</a></li>
                     <li><a href="/mina-project/performances.html" class="external-link" rel="nofollow">Performances</a></li>
                     <li><a href="/mina-project/testimonials.html" class="external-link" rel="nofollow">Testimonials</a></li>
                     <li><a href="/mina-project/conferences.html" class="external-link" rel="nofollow">Conferences</a></li>
diff --git a/source/mina-project/2.2-vs-2.1.md b/source/mina-project/2.2-vs-2.1.md
new file mode 100644
index 0000000..499feb3
--- /dev/null
+++ b/source/mina-project/2.2-vs-2.1.md
@@ -0,0 +1,70 @@
+---
+type: mina
+title: MINA 2.2.x vs MINA 2.1.x
+---
+
+# 2.2.x vs 2.1.x differences
+
+The **SSL/TLS** handling has been totally rewritten in **MINA 2.2**. This has an impact in many areas.
+
+## Removal of the SslFilter.DISABLE_ENCRYPTION_ONCE attribute
+
+This attribute was used in previous **MINA** versions to insure that we can send some clear text message to the remote peer while establishing the TLS connection when using the **startTLS** command.
+
+The idea is that the **startTLS** command is send by an application (a **LDAP** client, for instance), which tells the server it should establish the **SSL/TLS** layer. But the problem is that the server should be able to inform the clinet that the **SSL/TLS** layer is up and running, in clear text, which is not possible as the **SSL/TLS** layer is already fonctionning...
+
+This kind of chicken/egg problem was solved by giving the opportunity to the **SSL/TLS** layer to send back the **startTLS** response to the client in clear text, assuming it's the first server's message. A kind of a hack.
+
+In **MINA 2.2**, this attribute has been removed and replaced by either a filter to be added, or by encapsulating the message that should not be encrypted into an instance that implements the **DisableEncryptWriteRequest** interface.
+
+Typically, in **Apache Directory**, we use this filter:
+
+
+```java
+public class StartTlsFilter extends IoFilterAdapter 
+{
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest ) throws Exception 
+    {
+        if ( writeRequest.getOriginalMessage() instanceof StartTlsResponse )
+        {
+            // We need to bypass the SslFilter
+            IoFilterChain chain = session.getFilterChain();
+            
+            for ( IoFilterChain.Entry entry : chain.getAll() )
+            {
+                IoFilter filter = entry.getFilter();
+                
+                if ( filter instanceof SslFilter )
+                {
+                    entry.getNextFilter().filterWrite( session, writeRequest );
+                }
+            }
+        }
+        else
+        {
+            nextFilter.filterWrite( session, writeRequest );
+        }
+    }
+}
+
+```
+
+As we can see in this piece of code, we check if the message is a **startTLS** response, and if so, we bypass the **SSLFilter**, which leads to the message to be send in clear text.
+
+## Why is it API incompatible ?
+
+The  removal of the **SslFilter.DISABLE_ENCRYPTION_ONCE** attribute make it impossible for application that leverage the **startTLS** command to work, without some code change.
+
+
+## Migration
+
+This is pretty straightforward :
+
+* Create a filter that bypasses the message that should not be encrypted, or encapsulate it into an inswtance that implements the **DisableEncryptWriteRequest** interface
+
+and that's it !
+
diff --git a/source/mina-project/downloads_2_2.md b/source/mina-project/downloads_2_2.md
new file mode 100644
index 0000000..3786f6c
--- /dev/null
+++ b/source/mina-project/downloads_2_2.md
@@ -0,0 +1,83 @@
+---
+type: mina
+title: MINA 2.1.x Downloads
+---
+
+# Latest MINA Releases
+
+## Apache MINA 2.1.6 <font color="green">stable</font> (Java 8+)
+
+### Binaries
+
+* .tar.gz archive [mina-2.1.6](https://www.apache.org/dyn/closer.lua/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.gz) (signatures : [SHA256](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.gz.sha256) [SHA512](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.gz.sha512) [ASC](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.gz.asc))
+* .tar.bz2 archive [mina-2.1.6](https://www.apache.org/dyn/closer.lua/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.bz2) (signatures : [SHA256](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.bz2.sha256) [SHA512](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.bz2.sha512) [ASC](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.tar.bz2.asc))
+* .zip archive [mina-2.1.6](https://www.apache.org/dyn/closer.lua/mina/mina/2.1.6/apache-mina-2.1.6-bin.zip) (signatures : [SHA256](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.zip.sha256) [SHA512](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.zip.sha512) [ASC](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-bin.zip.asc))
+
+### Sources
+
+* .src.tar.gz archive [mina-2.1.6](https://www.apache.org/dyn/closer.lua/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.gz) (signatures : [SHA256](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.gz.sha256) [SHA512](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.gz.sha512) [ASC](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.gz.asc))
+* .src.tar.bz2 archive [mina-2.1.6](https://www.apache.org/dyn/closer.lua/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.bz2) (signatures : [SHA256](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.bz2.sha256) [SHA512](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.bz2.sha512) [ASC](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.tar.bz2.asc))
+* .src.zip archive [mina-2.1.6](https://www.apache.org/dyn/closer.lua/mina/mina/2.1.6/apache-mina-2.1.6-src.zip) (signatures : [SHA256](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.zip.sha256) [SHA512](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.zip.sha512) [ASC](https://www.apache.org/dist/mina/mina/2.1.6/apache-mina-2.1.6-src.zip.asc))
+
+<div class="note" markdown="1">
+    For people wanting to use the <strong>serial</strong> package, we don't include the <strong>rxtx.jar</strong> library in the releases, as it's under a LGPL license. Please download it from <a href="http://rxtx.qbang.org/wiki/index.php/Download" class="external-link" rel="nofollow">http://rxtx.qbang.org/wiki/index.php/Download</a> or add the associated dependency in your maven pom.xml :
+
+    <dependency>
+        <groupId>org.rxtx</groupId>
+        <artifactId>rxtx</artifactId>
+        <version>2.1.7</version>
+        <scope>provided<scope>
+    </dependency>
+</div>
+
+# Verify the integrity of the files
+
+The PGP signatures can be verified using PGP or GPG. First download the [KEYS](https://downloads.apache.org/mina/KEYS) as well as the asc signature file for the relevant distribution. Then verify the signatures using:
+
+    $ pgpk -a KEYS
+    $ pgpv mina-2.1.6.tar.gz.asc
+
+or
+
+    $ pgp -ka KEYS
+    $ pgp mina-2.1.6.tar.gz.asc
+    
+or
+
+    $ gpg --import KEYS
+    $ gpg --verify mina-2.1.6.tar.gz.asc
+
+
+# Previous Releases
+
+The previous releases can be found [here](https://archive.apache.org/dist/mina/) and [here](https://archive.apache.org/dist/mina/mina/). Please note that the following releases contains a LGPL licensed file, rxtx-2.1.7.jar: 2.0.0-M4, 2.0.0-M5, 2.0.0-M6, 2.0.0-RC1.
+
+# Version Numbering Scheme
+
+The version number of MINA has the following form:
+
+<div class="info" markdown="1">
+    &lt;major>.&lt;minor>.&lt;micro> \[-M&lt;milestone number> or -RC&lt;release candidate number>]
+</div>
+
+This scheme has three number components:
+
+* The __major__ number increases when there are incompatible changes in the API.
+* The __minor__ number increases when a new feature is introduced.
+* The __micro__ number increases when a bug or a trivial change is made.
+
+and an optional label that indicates the maturity of a release:
+
+* __M__ (Milestone) means the feature set can change at any time in the next milestone releases. The last milestone release becomes the first release candidate after a vote.
+* __RC__ (Release Candidate) means the feature set is frozen and the next RC releases will focus on fixing problems unless there is a serious flaw in design. The last release candidate becomes the first GA release after a vote.
+* No label implies __GA__ (General Availability), which means the release is stable enough and therefore ready for production environment.
+
+MINA is not a stand-alone software, so 'the feature set' here also includes the API of the newly introduced features and the overall architecture of the software,
+
+Here's an example that illustrates how MINA version number increases:
+
+<div class="info" markdown="1">
+    2.0.0-M1 -> 2.0.0-M3 -> 2.0.0-M3 -> 2.0.0-M4 ->  2.0.0-RC1 -> 2.0.0-RC2 -> 2.0.0-RC3 -> <strong>2.0.0</strong> -> 2.0.1 -> 2.0.2 -> 2.1.6-M1 ...
+</div>
+
+Please note that we always specify the micro number, even if it's zero.
