diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 78ae7458e46f0e6299760dea12620a7d16d03a5b..6023ff47176c12cde5637787a1b5c42cc5302b94 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -73,8 +73,10 @@ if (CELLFRAME_MODULES MATCHES "srv-datum")
 endif()
 
 # Service VPN
-if (CELLFRAME_MODULES MATCHES "srv-vpn")
-    add_subdirectory(service/vpn)
+if(LINUX)
+    if (CELLFRAME_MODULES MATCHES "srv-vpn")
+	add_subdirectory(service/vpn)
+    endif()
 endif()
 
 # Service eXchange
diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index b6b5943cad3e12664e182183cd356d6cf3ae1ddb..d117a5ef9b04728870e713df1a5336cf9aac2de4 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -24,7 +24,7 @@
 #include <dap_chain_ledger.h>
 #include <sys/types.h>
 #include <dirent.h>
-#ifdef DAP_OS_UNIX
+#ifdef DAP_OS_LINUX
 #include <stdc-predef.h>
 #endif
 #include <unistd.h>
diff --git a/modules/global-db/dap_chain_global_db_driver_cdb.c b/modules/global-db/dap_chain_global_db_driver_cdb.c
index 5b54ead3ac2c4e825124da39d9e5027865f23eb7..fe44afcd95694b8ed5e570deb4ecb27896852d9f 100644
--- a/modules/global-db/dap_chain_global_db_driver_cdb.c
+++ b/modules/global-db/dap_chain_global_db_driver_cdb.c
@@ -197,12 +197,18 @@ int dap_db_driver_cdb_init(const char *a_cdb_path, dap_db_driver_callbacks_t *a_
 #ifdef _DIRENT_HAVE_D_TYPE
         if (d->d_type != DT_DIR)
             continue;
-#else
+#elif defined(DAP_OS_LINUX)
         struct _stat buf;
         int res = _stat(d->d_name, &buf);
         if (!S_ISDIR(buf.st_mode) || !res) {
             continue;
         }
+#elif defined (DAP_OS_BSD)        
+        struct stat buf;
+        int res = stat(d->d_name, &buf);
+        if (!S_ISDIR(buf.st_mode) || !res) {
+            continue;
+        }
 #endif
         if (!dap_strcmp(d->d_name, ".") || !dap_strcmp(d->d_name, "..")) {
             continue;
diff --git a/modules/net/CMakeLists.txt b/modules/net/CMakeLists.txt
index 79fe22e7ca3af9e83bedde9928c07f83c8fb533c..3c1b2a9d5af628be26818201d20d3b31dc5e38db 100644
--- a/modules/net/CMakeLists.txt
+++ b/modules/net/CMakeLists.txt
@@ -16,7 +16,7 @@ set(IPUTILS_INCLUDE_DIRS
      ../../3rdparty/iputils/traceroute/
     )
 
-if(NOT (WIN32))
+if(LINUX)
   file(GLOB IPUTILS_SRCS ../../3rdparty/iputils/*.c ../../3rdparty/iputils/traceroute/*.c)
   file(GLOB IPUTILS_HEADERS ../../3rdparty/iputils/*.h ${IPUTILS_INCLUDE_DIRS}*.h)
 endif()
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index f13b8311714b3b3ba607f44d20e382e23650e68a..765113edd0c130893d47e25f7114a91bb11a5b98 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1648,7 +1648,12 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
 
                     l_node_info->hdr.address.uint64 = l_seed_node_addr->uint64;
                     if ( l_node_info->hdr.ext_addr_v4.s_addr ||
-                            l_node_info->hdr.ext_addr_v6.s6_addr32[0] ){
+                    #ifdef DAP_OS_BSD
+                	l_node_info->hdr.ext_addr_v6.__u6_addr.__u6_addr32[0]
+                    #else
+                        l_node_info->hdr.ext_addr_v6.s6_addr32[0] 
+                    #endif
+                            ){
                         int l_ret;
                         if ( (l_ret = dap_chain_node_info_save(l_net, l_node_info)) ==0 ){
                             if (dap_chain_node_alias_register(l_net,l_net_pvt->seed_aliases[i],l_seed_node_addr))
diff --git a/modules/net/dap_chain_node_dns_client.c b/modules/net/dap_chain_node_dns_client.c
index 29c91805a73bc1782e83f7982878d3ecfcc59495..2ed130ddc37e8712b96d3f3eface9f4dc32a6292 100644
--- a/modules/net/dap_chain_node_dns_client.c
+++ b/modules/net/dap_chain_node_dns_client.c
@@ -67,7 +67,7 @@ static void s_dns_client_esocket_read_callback(dap_events_socket_t * a_esocket,
     size_t l_addr_point = DNS_HEADER_SIZE + strlen(l_dns_client->name) + 2 + 2 * sizeof(uint16_t) + DNS_ANSWER_SIZE - sizeof(uint32_t);
     if (l_recieved < l_addr_point + sizeof(uint32_t)) {
         log_it(L_WARNING, "DNS answer incomplete");
-        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EREMOTEIO );
+        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EIO );
         l_dns_client->is_callbacks_called = true;
         a_esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
         a_esocket->buf_in_size = a_esocket->buf_out_size = 0;
@@ -77,7 +77,7 @@ static void s_dns_client_esocket_read_callback(dap_events_socket_t * a_esocket,
     int l_answers_count = ntohs(*(uint16_t *)l_cur);
     if (l_answers_count != 1) {
         log_it(L_WARNING, "Incorrect DNS answer format");
-        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EMEDIUMTYPE );
+        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EINVAL);
         l_dns_client->is_callbacks_called = true;
         a_esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
         a_esocket->buf_in_size = a_esocket->buf_out_size = 0;
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index d4a4c60020ba70895892d342c54b77cbc7c96c28..8cff46d7a926d92b55e09367a72a955d20133b1a 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -24,17 +24,26 @@
     along with any DAP based project.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifdef DAP_OS_UNIX
+#ifdef DAP_OS_LINUX
 #include <netinet/in.h>
 #include <linux/if.h>
 #include <linux/if_tun.h>
 #include <sys/ioctl.h>
+#include <sys/epoll.h>
+#endif
+
+#ifdef DAP_OS_BSD
+#include <netinet/in.h>
+#include <net/if.h>
+#include <net/if_tun.h>
+#include <sys/ioctl.h>
 #endif
 
+
+
 #include <sys/select.h>
 #include <sys/types.h>
 #include <sys/socket.h>
-#include <sys/epoll.h>
 #include <sys/un.h>
 
 #include <netinet/in.h>