diff --git a/.travis.yml b/.travis.yml
index b4f3da7506c3694890d26fa57a9401d8846e3666..87cdc684f359aeb8c7416f0ca055bec25872ca81 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
 sudo: required
-language: cpp
+language: c
 compiler: gcc
 dist: xenial
 notifications:
@@ -7,10 +7,9 @@ notifications:
 
 before_install:
     - git submodule init
-    - git submodule update --recursive
+    - git submodule update
 
 script:
-    - export CC=gcc-5
     - mkdir build
     - cd build 
     - cmake -DBUILD_LIB_DAP_CLIENT_TESTS=ON ../
@@ -22,7 +21,7 @@ addons:
     sources:
     - ubuntu-toolchain-r-test
     packages:
-    - gcc-5
+    - libjson-c-dev
     - libev-dev
     - libmagic-dev
 
diff --git a/dap_client_pvt.c b/dap_client_pvt.c
index b500e1e4fae0b1abcf604a34bb6e70253be705dd..6d721aea1228fa33701bf2aca135c57cdd0d3a45 100644
--- a/dap_client_pvt.c
+++ b/dap_client_pvt.c
@@ -27,6 +27,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
+#include <json-c/json.h>
 
 #include "dap_enc_key.h"
 #include "dap_enc_base64.h"
@@ -455,10 +456,36 @@ void m_request_response(void * a_response,size_t a_response_size,void * a_obj)
 void m_enc_init_response(dap_client_t * a_client, void * a_response,size_t a_response_size)
 {
     dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client);
-    if( a_response_size > 10) {// &&  a_response_size < 50){
-        char l_session_id_b64 [DAP_ENC_BASE64_ENCODE_SIZE(DAP_ENC_KS_KEY_ID_SIZE)+1]={0};
-        char *l_bob_message_b64 = DAP_NEW_Z_SIZE(char,a_response_size- sizeof(l_session_id_b64)+1 );
-        if (sscanf (a_response,"%s %s",l_session_id_b64, l_bob_message_b64) == 2 ){
+    if(a_response_size > 10) { // &&  a_response_size < 50){
+
+        char *l_session_id_b64 = NULL;
+        char *l_bob_message_b64 = NULL;
+        int json_parse_count = 0;
+        struct json_object *jobj = json_tokener_parse((const char *) a_response);
+        if(jobj) {
+            // parse encrypt_id & encrypt_msg
+            json_object_object_foreach(jobj, key, val)
+            {
+                if(json_object_get_type(val) == json_type_string) {
+                    char *str = (char *) json_object_get_string(val);
+                    if(!strcmp(key, "encrypt_id")) {
+                        l_session_id_b64 = DAP_NEW_Z_SIZE(char, strlen(str) + 1);
+                        strcpy(l_session_id_b64, str);
+                        json_parse_count++;
+                    }
+                    if(!strcmp(key, "encrypt_msg")) {
+                        l_bob_message_b64 = DAP_NEW_Z_SIZE(char, strlen(str) + 1);
+                        strcpy(l_bob_message_b64, str);
+                        json_parse_count++;
+                    }
+                }
+            }
+            // free jobj
+            json_object_put(jobj);
+        }
+        //char l_session_id_b64[DAP_ENC_BASE64_ENCODE_SIZE(DAP_ENC_KS_KEY_ID_SIZE) + 1] = { 0 };
+        //char *l_bob_message_b64 = DAP_NEW_Z_SIZE(char, a_response_size - sizeof(l_session_id_b64) + 1);
+        if(json_parse_count == 2) { //if (sscanf (a_response,"%s %s",l_session_id_b64, l_bob_message_b64) == 2 ){
             l_client_pvt->session_key_id = DAP_NEW_Z_SIZE(char,strlen(l_session_id_b64)+1);
             dap_enc_base64_decode(l_session_id_b64,strlen(l_session_id_b64),
                                   l_client_pvt->session_key_id, DAP_ENC_DATA_TYPE_B64);
@@ -490,6 +517,7 @@ void m_enc_init_response(dap_client_t * a_client, void * a_response,size_t a_res
             l_client_pvt->stage_status = STAGE_STATUS_ERROR;
             s_stage_status_after(l_client_pvt);
         }
+        DAP_DELETE(l_session_id_b64);
         DAP_DELETE(l_bob_message_b64);
     }else if( a_response_size>1){
         log_it(L_ERROR, "ENC: Wrong response (size %u data '%s')",a_response_size,(char*) a_response);
diff --git a/libdap b/libdap
index b43597115d5eed7bf24e45635bc35c1889e2fd6f..600ed913252c001580ad0549d27e563c2f68be10 160000
--- a/libdap
+++ b/libdap
@@ -1 +1 @@
-Subproject commit b43597115d5eed7bf24e45635bc35c1889e2fd6f
+Subproject commit 600ed913252c001580ad0549d27e563c2f68be10
diff --git a/libdap-server-core b/libdap-server-core
index 1351d1c1987d6703b8cfd20eb9e053beec0bc625..edf554c77e05146aee6a90a6a15fab28ba38b626 160000
--- a/libdap-server-core
+++ b/libdap-server-core
@@ -1 +1 @@
-Subproject commit 1351d1c1987d6703b8cfd20eb9e053beec0bc625
+Subproject commit edf554c77e05146aee6a90a6a15fab28ba38b626
diff --git a/libdap-stream b/libdap-stream
index 6a13c6314787a04bbb5dd4bec02378d3ff31edb5..9b68cf5b9375e19e2db11a21f7ed0fd9b2b71c7f 160000
--- a/libdap-stream
+++ b/libdap-stream
@@ -1 +1 @@
-Subproject commit 6a13c6314787a04bbb5dd4bec02378d3ff31edb5
+Subproject commit 9b68cf5b9375e19e2db11a21f7ed0fd9b2b71c7f
diff --git a/libdap-stream-ch b/libdap-stream-ch
index e12cd24dfca8b778cf63d1c957d04f7d2471f75c..f5ba302012357d175ff532d11125699bcc8bcc96 160000
--- a/libdap-stream-ch
+++ b/libdap-stream-ch
@@ -1 +1 @@
-Subproject commit e12cd24dfca8b778cf63d1c957d04f7d2471f75c
+Subproject commit f5ba302012357d175ff532d11125699bcc8bcc96