diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index fa9319b670dc92b42cc874129c795fbc42cb2ab6..26b015536b47e46ac54332fb3040c822508d06d8 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -282,45 +282,43 @@ static void s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
     l_usage->net = l_net;
     l_usage->service = l_srv;
 
-
-    dap_chain_net_srv_grace_t *l_grace = DAP_NEW_Z(dap_chain_net_srv_grace_t);
-    if (!l_grace) {
-        log_it(L_ERROR, "Memory allocation errror in s_service_start");
-        l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_ALLOC_MEMORY_ERROR;
-        if(a_ch)
-            dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
-        if (l_srv && l_srv->callbacks.response_error)
-            l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
-        DAP_DEL_Z(l_usage->client);
-        DAP_DEL_Z(l_usage);    
-        return;
-    }
-    l_grace->request = DAP_NEW_Z_SIZE(dap_stream_ch_chain_net_srv_pkt_request_t, a_request_size);
-    if (!l_grace->request) {
-        log_it(L_ERROR, "Memory allocation errror in s_service_start");
-        l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_ALLOC_MEMORY_ERROR;
-        if(a_ch)
-            dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
-        if (l_srv && l_srv->callbacks.response_error)
-            l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
-        DAP_DEL_Z(l_usage->client);
-        DAP_DEL_Z(l_usage);
-        DAP_DEL_Z(l_grace);
-        return;
-    }
-    memcpy(l_grace->request, a_request, a_request_size);
-    l_grace->request_size = a_request_size;
-    l_grace->ch_uuid = a_ch->uuid;
-    l_grace->stream_worker = a_ch->stream_worker;
-    l_grace->usage = l_usage;
-
     if (l_srv->pricelist){
         // not free service
+        log_it( L_INFO, "Valid pricelist is founded. Start service in pay mode.");
+        dap_chain_net_srv_grace_t *l_grace = DAP_NEW_Z(dap_chain_net_srv_grace_t);
+        if (!l_grace) {
+            log_it(L_ERROR, "Memory allocation errror in s_service_start");
+            l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_ALLOC_MEMORY_ERROR;
+            if(a_ch)
+                dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
+            if (l_srv && l_srv->callbacks.response_error)
+                l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
+            DAP_DEL_Z(l_usage->client);
+            DAP_DEL_Z(l_usage);
+            return;
+        }
+        l_grace->request = DAP_DUP_SIZE(a_request, a_request_size);
+        if (!l_grace->request) {
+            log_it(L_ERROR, "Memory allocation errror in s_service_start");
+            l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_ALLOC_MEMORY_ERROR;
+            if(a_ch)
+                dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err));
+            if (l_srv && l_srv->callbacks.response_error)
+                l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
+            DAP_DEL_Z(l_usage->client);
+            DAP_DEL_Z(l_usage);
+            DAP_DEL_Z(l_grace);
+            return;
+        }
+        l_grace->request_size   = a_request_size;
+        l_grace->ch_uuid        = a_ch->uuid;
+        l_grace->stream_worker  = a_ch->stream_worker;
+        l_grace->usage          = l_usage;
         s_grace_period_start(l_grace);
-    } else {
+    } else if (l_srv->allow_free_srv){
         // Start service for free
-        log_it( L_INFO, "Service provide for free");
-        l_grace->usage->is_free = true;
+        log_it( L_INFO, "Can't find a valid pricelist. Service provide for free");
+        l_usage->is_free = true;
         size_t l_success_size = sizeof (dap_stream_ch_chain_net_srv_pkt_success_hdr_t );
         dap_stream_ch_chain_net_srv_pkt_success_t *l_success = DAP_NEW_Z_SIZE(dap_stream_ch_chain_net_srv_pkt_success_t,
                                                                               l_success_size);
@@ -333,8 +331,6 @@ static void s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
                 l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
             DAP_DEL_Z(l_usage->client);
             DAP_DEL_Z(l_usage);
-            DAP_DEL_Z(l_grace->request);
-            DAP_DEL_Z(l_grace);
             return;
         }
         l_success->hdr.usage_id = l_usage->id;
@@ -344,6 +340,11 @@ static void s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_
         if (l_usage->service->callbacks.response_success)
             l_usage->service->callbacks.response_success(l_usage->service, l_usage->id,  l_usage->client, NULL, 0);
         DAP_DELETE(l_success);
+    }else {
+        log_it( L_INFO, "No pricelists. Free service sharing is not allowed. Service stop.");
+        dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof(l_err));
+        if (l_srv && l_srv->callbacks.response_error)
+            l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err));
     }
     return;
 }
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index 1620a740718ad5b5a8632f26bb0f2479bd0d5878..ed48d6700f6df1d7028fb3da2ec9a559e1f7e054 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -821,6 +821,7 @@ int dap_chain_net_srv_price_apply_from_my_order(dap_chain_net_srv_t *a_srv, cons
         return -4;
     }
     a_srv->grace_period = dap_config_get_item_uint32_default(g_config, a_config_section, "grace_period", 60);
+    a_srv->allow_free_srv = dap_config_get_item_bool_default(g_config, a_config_section, "allow_free_srv", false);
     int l_err_code = 0;
     dap_chain_node_addr_t *l_node_addr = NULL;
     l_node_addr = dap_chain_net_get_cur_addr(l_net);
@@ -843,10 +844,24 @@ int dap_chain_net_srv_price_apply_from_my_order(dap_chain_net_srv_t *a_srv, cons
             }
             l_price->net = l_net;
             l_price->net_name = dap_strdup(l_net->pub.name);
+            uint256_t l_max_price = GET_256_FROM_64((uint64_t)1000000000000000); // Change this value when max price wil be calculated
+            if (!compare256(l_order->price, uint256_0) || l_order->units == 0 ){
+                DAP_DELETE(l_price);
+                continue;
+            }
             l_price->value_datoshi = l_order->price;
             dap_stpcpy(l_price->token, l_order->price_ticker);
             l_price->units = l_order->units;
             l_price->units_uid = l_order->price_unit;
+            if (compare256(l_max_price, uint256_0)){
+                uint256_t l_price_unit = uint256_0;
+                DIV_256(l_price->value_datoshi,  GET_256_FROM_64(l_order->units), &l_price_unit);
+                if (compare256(l_price_unit, l_max_price)>0){
+                    DAP_DELETE(l_price);
+                    continue;
+                }
+            }
+
             l_price->wallet = l_wallet;
             DL_APPEND(a_srv->pricelist, l_price);
             break;
diff --git a/modules/net/srv/include/dap_chain_net_srv.h b/modules/net/srv/include/dap_chain_net_srv.h
index b4493d9f5bba54e383f8abb79f45b9a1f8269702..faf5c86de72a17fbc1b61dbd23e28d6e3ddf6a97 100755
--- a/modules/net/srv/include/dap_chain_net_srv.h
+++ b/modules/net/srv/include/dap_chain_net_srv.h
@@ -247,6 +247,7 @@ typedef struct dap_chain_net_srv
     dap_chain_net_srv_abstract_t srv_common;
     dap_chain_net_srv_price_t *pricelist;
 
+    bool allow_free_srv;
     uint32_t grace_period;
     pthread_mutex_t banlist_mutex;
     dap_chain_net_srv_banlist_item_t *ban_list;