diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..9e54bc21a1af65fea7fdd4c5fa9fd92e20cae753
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,15 @@
+[submodule "libdap"]
+	path = libdap
+	url = https://github.com/kelvinblockchain/libdap
+[submodule "libdap-server-core"]
+	path = libdap-server-core
+	url = https://github.com/kelvinblockchain/libdap-server-core
+[submodule "libdap-server"]
+	path = libdap-server
+	url = https://github.com/kelvinblockchain/libdap-server
+[submodule "libdap-stream"]
+	path = libdap-stream
+	url = https://github.com/kelvinblockchain/libdap-stream
+[submodule "libdap-stream-ch"]
+	path = libdap-stream-ch
+	url = https://github.com/kelvinblockchain/libdap-stream-ch
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bc2c58273ff6b0e91afaf36772c9a14d0f50c41d..b31f29a1c95afd77b9afb836afc2172ff263351e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,35 +1,25 @@
-cmake_minimum_required(VERSION 2.8)
-project (dap_client)
-
-set(DAP_CLIENT_SRCS
-        dap_client.c
-        dap_client_pvt.c
-        dap_client_pool.c
-        dap_events.c
-        dap_events_socket.c
-        )
-
-set(DAP_CLIENT_HEADERS
-    dap_client.h
-    dap_client_pvt.h
-    dap_client_pool.h
-    dap_events.h
-    dap_events_socket.h
-
-    )
+cmake_minimum_required(VERSION 3.0)
 
-add_library(${PROJECT_NAME} STATIC ${DAP_CLIENT_SRCS} ${DAP_CLIENT_HEADERS})
+if(TARGET libdap-client)
+    return() # The project has already been built.
+endif()
+
+project (libdap-client)
+set(CMAKE_C_STANDARD 11)
+
+add_subdirectory(libdap)
+add_subdirectory(libdap-server)
+add_subdirectory(libdap-stream)
+add_subdirectory(libdap-stream-ch)
 
-include_directories("${INCLUDE_DIRECTORIES} ${dap_core_server_INCLUDE_DIRS}")
-include_directories("${INCLUDE_DIRECTORIES} ${dap_server_INCLUDE_DIRS}")
-include_directories("${INCLUDE_DIRECTORIES} ${dap_server_udp_INCLUDE_DIRS}")
-include_directories("${INCLUDE_DIRECTORIES} ${dap_stream_INCLUDE_DIRS}")
-include_directories("${INCLUDE_DIRECTORIES} ${dap_session_INCLUDE_DIRS}")
+file(GLOB DAP_CLIENT_SRCS *.c)
+file(GLOB DAP_CLIENT_HEADERS *.h)
+
+add_library(${PROJECT_NAME} STATIC ${DAP_CLIENT_SRCS} ${DAP_CLIENT_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_core_server  dap_udp_server dap_stream dap_session)
-target_include_directories(dap_client INTERFACE .)
+target_link_libraries(${PROJECT_NAME} dap_crypto dap_core dap_http_server dap_session dap_stream)
 
+#dap_udp_server dap_stream dap_session
 
-set(${PROJECT_NAME}_DEFINITIONS CACHE INTERNAL "${PROJECT_NAME}: Definitions" FORCE)
+target_include_directories(${PROJECT_NAME} INTERFACE .)
 
-set(${PROJECT_NAME}_INCLUDE_DIRS ${PROJECT_SOURCE_DIR} CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)
diff --git a/dap_events.h b/dap_events.h
index 96e13b9903322d6436ca5f72692177de6f71af4c..1b08dfd842a637c6cb998baf6db8ff2d618fcf64 100755
--- a/dap_events.h
+++ b/dap_events.h
@@ -30,14 +30,15 @@
 #include "uthash.h"
 
 #include "dap_events_socket.h"
+#include "dap_server.h"
 
 struct dap_events;
 
 typedef void (*dap_events_callback_t) (struct dap_events *,void * arg); // Callback for specific server's operations
 
-typedef struct dap_thread{
-    pthread_t tid;
-} dap_thread_t;
+//typedef struct dap_thread{
+//    pthread_t tid;
+//} dap_thread_t;
 
 struct dap_worker;
 typedef struct dap_events{
diff --git a/libdap b/libdap
new file mode 160000
index 0000000000000000000000000000000000000000..1b6cbd3934284b71dbafa4d113fd6017e5570217
--- /dev/null
+++ b/libdap
@@ -0,0 +1 @@
+Subproject commit 1b6cbd3934284b71dbafa4d113fd6017e5570217
diff --git a/libdap-server b/libdap-server
new file mode 160000
index 0000000000000000000000000000000000000000..25d61fd2651cbce8239b0548fdc868a727b0e968
--- /dev/null
+++ b/libdap-server
@@ -0,0 +1 @@
+Subproject commit 25d61fd2651cbce8239b0548fdc868a727b0e968
diff --git a/libdap-server-core b/libdap-server-core
new file mode 160000
index 0000000000000000000000000000000000000000..a6d3208969d258a05c1d5435c22869a95ee93fd8
--- /dev/null
+++ b/libdap-server-core
@@ -0,0 +1 @@
+Subproject commit a6d3208969d258a05c1d5435c22869a95ee93fd8
diff --git a/libdap-stream b/libdap-stream
new file mode 160000
index 0000000000000000000000000000000000000000..fa4131ff30b41db6b5c5e945526ab4f1fcd317cc
--- /dev/null
+++ b/libdap-stream
@@ -0,0 +1 @@
+Subproject commit fa4131ff30b41db6b5c5e945526ab4f1fcd317cc
diff --git a/libdap-stream-ch b/libdap-stream-ch
new file mode 160000
index 0000000000000000000000000000000000000000..f5ba302012357d175ff532d11125699bcc8bcc96
--- /dev/null
+++ b/libdap-stream-ch
@@ -0,0 +1 @@
+Subproject commit f5ba302012357d175ff532d11125699bcc8bcc96