diff --git a/README.md b/README.md
index b6db3a9..8174e18 100644
--- a/README.md
+++ b/README.md
@@ -56,4 +56,219 @@ Fixed - unauthorized handshake HTTP code changed to 401
__Breaking api change__ - Configuration.heartbeatThreadPoolSize setting removed
Feature - annotated Spring beans support via _SpringAnnotationScanner_
Feature - common exception listener
-Improvement - _ScheduledExecutorService_ replaced with _HashedWheelT
+Improvement - _ScheduledExecutorService_ replaced with _HashedWheelTimer_
+
+####08-Feb-2014 - version 1.6.2 released (JDK 1.6+ compatible, Netty 4.0.15)
+Fixed - wrong namespace client disconnect handling
+Fixed - exception in onConnect/onDisconnect/isAuthorized methods leads to server hang
+__Breaking api change__ - SocketIOClient.sendEvent methods signature changed
+Improvement - multi type events support via _MultiTypeEventListener_ and _OnEvent_ annotation
+Improvement - multi type events ack support via _MultiTypeAckCallback_
+Improvement - SocketIOClient.getHandshakeData method added
+Improvement - Jedis replaced with [Redisson](https://github.com/mrniko/redisson)
+
+####14-Jan-2014 - version 1.6.1 released (JDK 1.6+ compatible, Netty 4.0.14)
+Fixed - JDK 1.6+ compatibility
+Feature - authorization support
+
+####19-Dec-2013 - version 1.6.0 released (JDK 1.6+ compatible, Netty 4.0.13)
+Fixed - XHR-pooling transport regression
+Fixed - Websocket transport regression
+Fixed - namespace NPE in PacketHandler
+Fixed - executors shutdown during server stop
+Feature - client store (Memory, [Redis](http://redis.io/), [Hazelcast](http://www.hazelcast.com/)) support
+Feature - distributed broadcast across netty-socketio nodes ([Redis](http://redis.io/), [Hazelcast](http://www.hazelcast.com/)) support
+Feature - OSGi support (thanks to rdevera)
+Improvement - XHR-pooling optimization
+Improvement - SocketIOClient.getAllRooms method added
+
+####07-Dec-2013 - version 1.5.4 released (JDK 1.6+ compatible, Netty 4.0.13)
+Fixed - flash policy "request leak" after page reload (thanks to ntrp)
+Fixed - websocket swf loading (thanks to ntrp)
+Fixed - wrong urls causes a potential DDoS
+Fixed - Event.class package visibility changed to avoid direct usage
+Improvement - Simplified Jackson modules registration
+
+####24-Oct-2013 - version 1.5.2 released (JDK 1.6+ compatible, Netty 4.0.11)
+Fixed - NPE during shutdown
+Improvement - isEmpty method added to Namespace
+
+####13-Oct-2013 - version 1.5.1 released (JDK 1.6+ compatible, Netty 4.0.9)
+Fixed - wrong ack timeout callback invocation
+Fixed - bigdecimal serialization for JSON
+Fixed - infinity loop during packet handling exception
+Fixed - 'client not found' handling
+
+####27-Aug-2013 - version 1.5.0 released (JDK 1.6+ compatible, Netty 4.0.7)
+Improvement - encoding buffers allocation optimization.
+Improvement - encoding buffers now pooled in memory to reduce GC pressure (netty 4.x feature).
+
+####03-Aug-2013 - version 1.0.1 released (JDK 1.5+ compatible)
+Fixed - error on unknown property during deserialization.
+Fixed - memory leak in long polling transport.
+Improvement - logging error info with inbound data.
+
+####07-Jun-2013 - version 1.0.0 released (JDK 1.5+ compatible)
+First stable release.
+
+
+### Maven
+
+Include the following to your dependency list:
+
+
+ com.corundumstudio.socketio
+ netty-socketio
+ 1.6.3
+
+
+
+Usage example
+================================
+##Server
+
+Base configuration. More details about Configuration object is [here](https://github.com/mrniko/netty-socketio/wiki/Configuration-details).
+
+ Configuration config = new Configuration();
+ config.setHostname("localhost");
+ config.setPort(81);
+
+ SocketIOServer server = new SocketIOServer(config);
+
+Programmatic handlers binding:
+
+ server.addMessageListener(new DataListener() {
+ @Override
+ public void onData(SocketIOClient client, String message, AckRequest ackRequest) {
+ ...
+ }
+ });
+
+ server.addEventListener("someevent", SomeClass.class, new DataListener() {
+ @Override
+ public void onData(SocketIOClient client, Object data, AckRequest ackRequest) {
+ ...
+ }
+ });
+
+ server.addConnectListener(new ConnectListener() {
+ @Override
+ public void onConnect(SocketIOClient client) {
+ ...
+ }
+ });
+
+ server.addDisconnectListener(new DisconnectListener() {
+ @Override
+ public void onDisconnect(SocketIOClient client) {
+ ...
+ }
+ });
+
+
+ // Don't forget to include type field on javascript side,
+ // it named '@class' by default and should equals to full class name.
+ //
+ // TIP: you can customize type field name via Configuration.jsonTypeFieldName property.
+
+ server.addJsonObjectListener(SomeClass.class, new DataListener() {
+ @Override
+ public void onData(SocketIOClient client, SomeClass data, AckRequest ackRequest) {
+
+ ...
+
+ // send object to socket.io client
+ SampleObject obj = new SampleObject();
+ client.sendJsonObject(obj);
+ }
+ });
+
+Declarative handlers binding. Handlers could be bound via annotations on any object:
+
+ pubic class SomeBusinessService {
+
+ ...
+ // some stuff code
+ ...
+
+ // SocketIOClient, AckRequest and Data could be ommited
+ @OnEvent('someevent')
+ public void onSomeEventHandler(SocketIOClient client, SomeClass data, AckRequest ackRequest) {
+ ...
+ }
+
+ @OnConnect
+ public void onConnectHandler(SocketIOClient client) {
+ ...
+ }
+
+ @OnDisconnect
+ public void onDisconnectHandler(SocketIOClient client) {
+ ...
+ }
+
+ // only data object is required in arguments,
+ // SocketIOClient and AckRequest could be ommited
+ @OnJsonObject
+ public void onSomeEventHandler(SocketIOClient client, SomeClass data, AckRequest ackRequest) {
+ ...
+ }
+
+ // only data object is required in arguments,
+ // SocketIOClient and AckRequest could be ommited
+ @OnMessage
+ public void onSomeEventHandler(SocketIOClient client, String data, AckRequest ackRequest) {
+ ...
+ }
+
+ }
+
+ SomeBusinessService someService = new SomeBusinessService();
+ server.addListeners(someService);
+
+
+ server.start();
+
+ ...
+
+ server.stop();
+
+##Client
+
+
+
+