diff --git a/3rdparty/monero_crypto/CMakeLists.txt b/3rdparty/monero_crypto/CMakeLists.txt
index 3f010fd897b9619f86f5b5abbe70fab5fe578179..278ad371273a6b6066794b446b29afcdeba11543 100755
--- a/3rdparty/monero_crypto/CMakeLists.txt
+++ b/3rdparty/monero_crypto/CMakeLists.txt
@@ -72,20 +72,6 @@ else()
   set(OPT_FLAGS_RELEASE "-Ofast")
 endif()
 
-# Check whether we're on a 32-bit or 64-bit system
-if(CMAKE_SIZEOF_VOID_P EQUAL "8")
-  set(DEFAULT_BUILD_64 ON)
-else()
-  set(DEFAULT_BUILD_64 OFF)
-endif()
-option(BUILD_64 "Build for 64-bit? 'OFF' builds for 32-bit." ${DEFAULT_BUILD_64})
-
-if(BUILD_64)
-  set(ARCH_WIDTH "64")
-else()
-  set(ARCH_WIDTH "32")
-endif()
-message(STATUS "Building for a ${ARCH_WIDTH}-bit system")
 
 # Check if we're on FreeBSD so we can exclude the local miniupnpc (it should be installed from ports instead)
 # CMAKE_SYSTEM_NAME checks are commonly known, but specifically taken from libsdl's CMakeLists
@@ -120,7 +106,7 @@ if(MSVC)
   include_directories(SYSTEM src/platform/msc)
 else()
     set(ARCH native CACHE STRING "CPU to build for: -march value or 'default' to not pass -march at all")
-    message(STATUS "Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}")
+    message(STATUS "[*] Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}")
     if(ARCH STREQUAL "default")
       set(ARCH_FLAG "")
     elseif(PPC64LE)
@@ -167,32 +153,32 @@ else()
       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing")
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
 
-      option(NO_AES "Explicitly disable AES support" ${NO_AES})
+      option(NO_AES "[!] Explicitly disable AES support" ${NO_AES})
 
       if(NO_AES)
-        message(STATUS "AES support explicitly disabled")
+        message(STATUS "[!] AES support explicitly disabled")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_AES")
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNO_AES")
       elseif(NOT ARM AND NOT PPC64LE)
-        message(STATUS "AES support enabled")
+        message(STATUS "[ ] AES support enabled")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
       elseif(PPC64LE)
-        message(STATUS "AES support not available on ppc64le")
+        message(STATUS "[!] AES support not available on ppc64le")
       elseif(ARM6)
-        message(STATUS "AES support not available on ARMv6")
+        message(STATUS "[!] AES support not available on ARMv6")
       elseif(ARM7)
-        message(STATUS "AES support not available on ARMv7")
+        message(STATUS "[!] AES support not available on ARMv7")
       elseif(ARM8 AND NOT ANDROID)
         CHECK_CXX_ACCEPTS_FLAG("-march=${ARCH}+crypto" ARCH_PLUS_CRYPTO)
         if(ARCH_PLUS_CRYPTO)
-          message(STATUS "Crypto extensions enabled for ARMv8")
+          message(STATUS "[*] Crypto extensions enabled for ARMv8")
           set(ARCH_FLAG "-march=${ARCH}+crypto")
         else()
-          message(STATUS "Crypto extensions unavailable on your ARMv8 device")
+          message(STATUS "[!] Crypto extensions unavailable on your ARMv8 device")
         endif()
       else()
-        message(STATUS "AES support disabled")
+        message(STATUS "[!] AES support disabled")
       endif()
       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 -D_GNU_SOURCE ${MINGW_FLAG} ${STATIC_ASSERT_FLAG} ${WARNINGS} ${C_WARNINGS} ${ARCH_FLAG} ${COVERAGE_FLAGS} ${PIC_FLAG}")
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -D_GNU_SOURCE ${MINGW_FLAG} ${STATIC_ASSERT_CPP_FLAG} ${WARNINGS} ${CXX_WARNINGS} ${ARCH_FLAG} ${COVERAGE_FLAGS} ${PIC_FLAG}")
@@ -202,7 +188,7 @@ else()
       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing")
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
       if(ARM)
-        message(STATUS "Setting FPU Flags for ARM Processors")
+        message(STATUS "[ ] Setting FPU Flags for ARM Processors")
 
         #NB NEON hardware does not fully implement the IEEE 754 standard for floating-point arithmetic
         #Need custom assembly code to take full advantage of NEON SIMD
@@ -231,44 +217,44 @@ else()
         endif()
 
         if(ARM6)
-          message(STATUS "Selecting VFP for ARMv6")
+          message(STATUS "[ ] Selecting VFP for ARMv6")
           set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp")
           set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfp")
         endif(ARM6)
         if(ARM7)
           if(CXX_ACCEPTS_VFP3_D16 AND NOT CXX_ACCEPTS_VFP4)
-            message(STATUS "Selecting VFP3 for ARMv7")
+            message(STATUS "[ ] Selecting VFP3 for ARMv7")
             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp3-d16")
             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfp3-d16")
           endif()
 
           if(CXX_ACCEPTS_VFP4)
-            message(STATUS "Selecting VFP4 for ARMv7")
+            message(STATUS "[ ] Selecting VFP4 for ARMv7")
             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp4")
             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=vfp4")
           endif()
 
           if(CXX_ACCEPTS_MFLOAT_HARD)
-            message(STATUS "Setting Hardware ABI for Floating Point")
+            message(STATUS "[ ] Setting Hardware ABI for Floating Point")
             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=hard")
             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard")
           endif()
 
           if(CXX_ACCEPTS_MFLOAT_SOFTFP AND NOT CXX_ACCEPTS_MFLOAT_HARD)
-            message(STATUS "Setting Software ABI for Floating Point")
+            message(STATUS "[ ] Setting Software ABI for Floating Point")
             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=softfp")
             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp")
           endif()
         endif(ARM7)
         if(ARM8)
            if(CXX_ACCEPTS_MFIX_CORTEX_A53_835769)
-             message(STATUS "Enabling Cortex-A53 workaround 835769")
+             message(STATUS "[ ] Enabling Cortex-A53 workaround 835769")
              set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfix-cortex-a53-835769")
              set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfix-cortex-a53-835769")
            endif()
 
            if(CXX_ACCEPTS_MFIX_CORTEX_A53_843419)
-             message(STATUS "Enabling Cortex-A53 workaround 843419")
+             message(STATUS "[ ] Enabling Cortex-A53 workaround 843419")
              set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfix-cortex-a53-843419")
              set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfix-cortex-a53-843419")
            endif()
@@ -277,7 +263,7 @@ else()
        endif(ARM)
        if(ANDROID AND NOT BUILD_GUI_DEPS STREQUAL "ON" OR IOS)
          #From Android 5: "only position independent executables (PIE) are supported"
-         message(STATUS "Enabling PIE executable")
+         message(STATUS "[ ] Enabling PIE executable")
          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE")
          set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -pie")
@@ -379,7 +365,7 @@ if (ARM)
   option(NO_OPTIMIZED_MULTIPLY_ON_ARM
 	   "Compute multiply using generic C implementation instead of ARM ASM" OFF)
   if(NO_OPTIMIZED_MULTIPLY_ON_ARM)
-    message(STATUS "Using generic C implementation for multiply")
+    message(STATUS "[ ] Using generic C implementation for multiply")
     set_property(SOURCE slow-hash.c
       PROPERTY COMPILE_DEFINITIONS "NO_OPTIMIZED_MULTIPLY_ON_ARM")
   endif()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4b0b4cfebdd67ef29b3a37bd9db3356ba8643fb0..beeb86ed1cc4119a5f62b607a00957c05d383f5a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 2.8)
 
 set(CMAKE_C_STANDARD 11)
 set(CELLFRAME_SDK_NATIVE_VERSION "2.1-4")
-include(cmake/OS_Detection.cmake)
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 
 set(DAPSDK_MODULES "")
@@ -12,6 +11,7 @@ if (CELLFRAME_MODULES MATCHES "core")
     SET(DAPSDK_MODULES "${DAPSDK_MODULES} core crypto")
 endif()
 
+
 if (CELLFRAME_MODULES MATCHES "network")
     set(DAPSDK_MODULES "${DAPSDK_MODULES} network-core network-client network-server")
 endif()
@@ -26,6 +26,15 @@ if (BUILD_CRYPTO_TESTS)
     set(BUILD_TESTS ON)
 endif()
 
+if(BUILD_TESTS)
+    include(cmake/OS_Detection.cmake)
+endif()
+
+if(DAP_TUN_NEW_WORKER)
+    message("[*] New TUN worker processor enabled")
+    add_definitions ("-DDAP_TUN_IN_WORKER")
+endif()
+
 add_subdirectory(dap-sdk)
 add_subdirectory(3rdparty/monero_crypto)
 add_subdirectory(3rdparty/cuttdb)
diff --git a/cmake/OS_Detection.cmake b/cmake/OS_Detection.cmake
index 285ef67930e9403e85e2d019851436725f2f204d..256ee957fcaa64d365e5a621122e930c5351b464 100644
--- a/cmake/OS_Detection.cmake
+++ b/cmake/OS_Detection.cmake
@@ -6,27 +6,25 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
     EXECUTE_PROCESS( COMMAND cat /etc/os-release COMMAND grep VERSION_ID COMMAND sed s/VERSION_ID=// COMMAND tr -d '\n' COMMAND sed s/\\x22// COMMAND sed s/\\x22// OUTPUT_VARIABLE L_DEBIAN_OS_VERSION)
     SET(DEBIAN_OS_NAME "${L_DEBIAN_OS_NAME}")
     SET(DEBIAN_OS_VERSION ${L_DEBIAN_OS_VERSION})
-    message("Debian OS ${DEBIAN_OS_VERSION} (${DEBIAN_OS_NAME})")
+    message("[ ] Debian OS ${DEBIAN_OS_VERSION} (${DEBIAN_OS_NAME})")
 # check if we're building natively on Android (TERMUX)
     EXECUTE_PROCESS( COMMAND uname -o COMMAND tr -d '\n' OUTPUT_VARIABLE OPERATING_SYSTEM)
 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
-    message("ANDROID")
     set(ANDROID ON)
     set(UNIX ON)
     set(LINUX ON)
     set(OS_TYPE_MOBILE ON)
-    message("ANDROID build")
+    message("[*] ANDROID build")
     add_definitions(-DANDROID -DDAP_OS_ANDROID)
 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Win")
-    message("Win build")
     set(OS_TYPE_DESKTOP ON)
 endif()
 
 if((CMAKE_BUILD_TYPE STREQUAL "Debug") OR (DAP_DEBUG))
-    message("Debug build")
+    message("[!] Debug build")
     SET(DAP_DEBUG ON)
 else()
-    message("Release build")
+    message("[!] Release build")
     SET(DAP_RELEASE ON)
 endif()
 
@@ -42,7 +40,7 @@ if(BUILD_64)
 else()
   set(ARCH_WIDTH "32")
 endif()
-message(STATUS "Building for a ${ARCH_WIDTH}-bit system")
+message(STATUS "[*] Building for a ${ARCH_WIDTH}-bit system")
 
 if(UNIX)
     add_definitions ("-DDAP_OS_LINUX -DDAP_OS_UNIX")
@@ -73,7 +71,7 @@ if(UNIX)
 endif()
 
 if(WIN32)
-    message(STATUS "Building for Windows")
+    message(STATUS "[*] Building for Windows")
     add_definitions("-DHAVE_PREAD")
     add_definitions("-DHAVE_MMAP")
     add_definitions("-DHAVE_STRNDUP")
diff --git a/dap-sdk/core/CMakeLists.txt b/dap-sdk/core/CMakeLists.txt
index 31c0eea678deae9981cbe572f79b2145150b5bc3..57bd4716a4625a13f94bd30ce0306df8d3358cf5 100755
--- a/dap-sdk/core/CMakeLists.txt
+++ b/dap-sdk/core/CMakeLists.txt
@@ -28,53 +28,6 @@ if(WIN32)
   )
 endif()
 
-if(NOT SUBMODULES_NO_BUILD)
-
-  # Check whether we're on a 32-bit or 64-bit system
-  if(CMAKE_SIZEOF_VOID_P EQUAL "8")
-    set(DEFAULT_BUILD_64 ON)
-  else()
-    set(DEFAULT_BUILD_64 OFF)
-  endif()
-  option(BUILD_64 "Build for 64-bit? 'OFF' builds for 32-bit." ${DEFAULT_BUILD_64})
-
-
-	if(WIN32)
-
-	  add_definitions ("-DUNDEBUG")
-	  add_definitions ("-DNDEBUG")
-	  add_definitions ("-DWIN32")
-	  add_definitions ("-D_WINDOWS")
-	  add_definitions ("-D__WINDOWS__")
-	  add_definitions ("-D_CRT_SECURE_NO_WARNINGS")
-
-#	  if(DAP_RELEASE)
-	    set(_CCOPT "-mwindows -static -Wall -O3 -fno-ident -ffast-math -ftree-vectorize -mfpmath=sse -mmmx -msse2 -fno-asynchronous-unwind-tables -ffunction-sections -Wl,--gc-sections -Wl,--strip-all")
-#	  else()
-#	    set(_CCOPT "-mconsole -static -Wall -pg")
-#	    set(_LOPT "-mconsole -static -pg")
-#	  endif()
-
-	  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
-	  set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${_LOPT}")
-  endif()
-
-	if(UNIX)
-	  add_definitions ("-DDAP_OS_LINUX")
-
-	  if(DAP_RELEASE)
-	    set(_CCOPT "-Wall -O3 -fPIC -fno-pie -no-pie -fno-ident -ffast-math -ftree-vectorize -mfpmath=sse -mmmx -msse2 -fno-asynchronous-unwind-tables -ffunction-sections -Wl,--gc-sections -Wl,--strip-all")
-	  else()
-	    set(_CCOPT "-Wall -pg -fPIC -fno-pie -no-pie")
-	    set(_LOPT "-pg")
-	    SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
-	  endif()
-
-	  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
-	  set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${_LOPT}")
-	endif()
-endif()
-
 add_library(${PROJECT_NAME} STATIC ${CORE_SRCS} ${CORE_HEADERS})
 
 #This paths will be used by project-dependent project libraries
@@ -84,10 +37,6 @@ if(WIN32)
   include_directories(include/)
 endif()
 
-if ( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
-    set(LINUX "Linux")
-endif()
-
 if(UNIX)
     add_subdirectory(src/unix)
     target_link_libraries(${PROJECT_NAME} dap_core_unix rt)
diff --git a/dap-sdk/crypto/CMakeLists.txt b/dap-sdk/crypto/CMakeLists.txt
index 51423bd00b470a69dadef7c609044279744e2b42..68ac022fd8446202052c3b71e73e6681f4669379 100755
--- a/dap-sdk/crypto/CMakeLists.txt
+++ b/dap-sdk/crypto/CMakeLists.txt
@@ -3,27 +3,6 @@ project (dap_crypto)
 
 # fix implicit declaration warnings
 add_definitions ("-D_GNU_SOURCE")
-if(NOT SUBMODULES_NO_BUILD)
-
-  # Check whether we're on a 32-bit or 64-bit system
-  if(CMAKE_SIZEOF_VOID_P EQUAL "8")
-    set(DEFAULT_BUILD_64 ON)
-  else()
-    set(DEFAULT_BUILD_64 OFF)
-  endif()
-  option(BUILD_64 "Build for 64-bit? 'OFF' builds for 32-bit." ${DEFAULT_BUILD_64})
-
-
-  set(_CCOPT "-Wall -O2 -pg -fPIC -fno-pie -no-pie")
-  set(_LOPT "-pg")
-  SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
-  set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${_LOPT}")
-
-  if (NOT (TARGET dap_core))
-    add_subdirectory(libdap)
-  endif()
-endif()
 
 file( GLOB CRYPTO_SRCS
       src/*.c