diff --git a/dap_chain_net_srv.c b/dap_chain_net_srv.c
index 1a690e3f2fabeda8148af854a95289fec83304fc..83e3ae1e19bc00776bcb65e6fbf097e5d70e1a2b 100755
--- a/dap_chain_net_srv.c
+++ b/dap_chain_net_srv.c
@@ -50,6 +50,7 @@
 #include "dap_chain_net.h"
 #include "dap_chain_net_srv.h"
 #include "dap_chain_net_srv_order.h"
+#include "dap_chain_net_srv_stream_session.h"
 
 #include "dap_chain_node_cli_cmd.h"
 
@@ -398,7 +399,9 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
  * @return
  */
 dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_data_t a_callback_request,
-                                           dap_chain_net_srv_callback_data_t a_callback_response_success,dap_chain_net_srv_callback_data_t a_callback_response_error)
+                                           dap_chain_net_srv_callback_data_t a_callback_response_success,
+                                           dap_chain_net_srv_callback_data_t a_callback_response_error,
+                                           dap_chain_net_srv_callback_data_t a_callback_receipt_next_success)
 {
     service_list_t *l_sdata = NULL;
     dap_chain_net_srv_t * l_srv = NULL;
@@ -409,8 +412,9 @@ dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_cha
         l_srv = DAP_NEW_Z(dap_chain_net_srv_t);
         l_srv->uid.uint64 = a_uid.uint64;
         l_srv->callback_requested = a_callback_request;
-        l_srv->callback_response_success = a_callback_response_success;
+        l_srv->callback_receipt_first_success = a_callback_response_success;
         l_srv->callback_response_error = a_callback_response_error;
+        l_srv->callback_receipt_next_success = a_callback_receipt_next_success;
         l_sdata = DAP_NEW_Z(service_list_t);
         memcpy(&l_sdata->uid, &l_uid, sizeof(l_uid));
         l_sdata->srv = DAP_NEW(dap_chain_net_srv_t);
@@ -522,3 +526,30 @@ const dap_chain_net_srv_uid_t * dap_chain_net_srv_list(void)
     return l_srv_uids;
 }
 
+/**
+ * @brief dap_chain_net_srv_issue_receipt
+ * @param a_srv
+ * @param a_usage
+ * @param a_price
+ * @return
+ */
+dap_chain_datum_tx_receipt_t * dap_chain_net_srv_issue_receipt(dap_chain_net_srv_t *a_srv,
+                dap_chain_net_srv_usage_t * a_usage,
+                dap_chain_net_srv_price_t * a_price
+                )
+{
+    dap_chain_datum_tx_receipt_t * l_receipt = dap_chain_datum_tx_receipt_create(
+                    a_srv->uid, a_price->units_uid, a_price->units, a_price->value_datoshi);
+    size_t l_receipt_size = sizeof(dap_chain_receipt_t)+1; // nested receipt plus 8 bits for type
+
+    // Sign with our wallet
+    l_receipt_size = dap_chain_datum_tx_receipt_sign_add(l_receipt,l_receipt_size , dap_chain_wallet_get_key( a_usage->wallet,0) );
+
+    a_usage->receipt = l_receipt;
+    a_usage->receipt_size = l_receipt_size;
+    a_usage->wallet = a_price->wallet;
+
+    return  l_receipt;
+}
+
+
diff --git a/dap_chain_net_srv.h b/dap_chain_net_srv.h
index b11c48fe2384a781e6975adaf28f55c13ccc6122..5c4f8cd0374c111e7d9a9ca64fd9a446f6019880 100755
--- a/dap_chain_net_srv.h
+++ b/dap_chain_net_srv.h
@@ -27,6 +27,7 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 #include "dap_config.h"
 #include "dap_chain_net_srv_common.h"
 #include "dap_chain_net_srv_client.h"
+#include "dap_chain_net_srv_stream_session.h"
 
 typedef struct dap_chain_net_srv dap_chain_net_srv_t;
 
@@ -40,8 +41,9 @@ typedef struct dap_chain_net_srv
     dap_chain_net_srv_price_t *pricelist;
     dap_chain_callback_trafic_t callback_trafic;
     dap_chain_net_srv_callback_data_t callback_requested;
-    dap_chain_net_srv_callback_data_t callback_response_success;
+    dap_chain_net_srv_callback_data_t callback_receipt_first_success;
     dap_chain_net_srv_callback_data_t callback_response_error;
+    dap_chain_net_srv_callback_data_t callback_receipt_next_success;
     void * _inhertor;
 } dap_chain_net_srv_t;
 typedef void (*dap_chain_net_srv_callback_new_t)(dap_chain_net_srv_t *, dap_config_t *);
@@ -51,10 +53,16 @@ int dap_chain_net_srv_init(dap_config_t * a_cfg);
 void dap_chain_net_srv_deinit(void);
 dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_data_t a_callback_requested,
                                            dap_chain_net_srv_callback_data_t a_callback_response_success,
-                                           dap_chain_net_srv_callback_data_t a_callback_response_error);
+                                           dap_chain_net_srv_callback_data_t a_callback_response_error,
+                                           dap_chain_net_srv_callback_data_t a_callback_receipt_next_success
+                                           );
 void dap_chain_net_srv_del(dap_chain_net_srv_t * a_srv);
 void dap_chain_net_srv_del_all(void);
 dap_chain_net_srv_t * dap_chain_net_srv_get(dap_chain_net_srv_uid_t a_uid);
 size_t dap_chain_net_srv_count(void);
 const dap_chain_net_srv_uid_t * dap_chain_net_srv_list(void);
+dap_chain_datum_tx_receipt_t * dap_chain_net_srv_issue_receipt(dap_chain_net_srv_t *a_srv,
+                dap_chain_net_srv_usage_t * a_usage,
+                dap_chain_net_srv_price_t * a_price
+                );
 
diff --git a/dap_chain_net_srv_common.c b/dap_chain_net_srv_common.c
index 57bcc568d233ab09f655021eea64fed1cb78a94c..04ace6677fccc24266945e0888f963385f3d8634 100755
--- a/dap_chain_net_srv_common.c
+++ b/dap_chain_net_srv_common.c
@@ -47,83 +47,3 @@
 #include "dap_chain_net_srv_key.h"
 #include "dap_chain_net_srv_common.h"
 
-/**
- * copy a_value_dst to a_uid_src
- */
-void dap_chain_net_srv_uid_set(dap_chain_net_srv_uid_t *a_uid_src, uint128_t a_value_dst)
-{
-    memset(a_uid_src->raw, 0, sizeof(a_uid_src->raw));
-    memcpy(a_uid_src->raw, &a_value_dst, min(sizeof(a_uid_src->raw), sizeof(uint128_t)));
-}
-
-/**
- * Generate unique id for service
- */
-bool dap_chain_net_srv_gen_uid(uint8_t *a_srv, size_t a_srv_size)
-{
-    if(!a_srv)
-        return false;
-    randombytes(a_srv, a_srv_size);
-    return true;
-}
-
-/**
- *  Initialize dap_chain_net_srv_abstract_t structure
- */
-void dap_chain_net_srv_abstract_set(dap_chain_net_srv_abstract_t *a_cond, uint8_t a_class, uint128_t a_type_id,
-        uint64_t a_price, uint8_t a_price_units, const char *a_decription)
-{
-    memset(a_cond, 0, sizeof(dap_chain_net_srv_abstract_t));
-    // generate unique proposal_id
-    //dap_chain_net_srv_gen_uid((uint8_t*) &a_cond->proposal_id, sizeof(a_cond->proposal_id));
-    // fill structure
-    a_cond->class = a_class;
-    dap_chain_net_srv_uid_set(&a_cond->type_id, a_type_id);
-    a_cond->price = a_price;
-    a_cond->price_units = a_price_units;
-    if(a_decription)
-        strncpy(a_cond->decription, a_decription, sizeof(a_cond->decription) - 1);
-}
-
-/**
- *
- */
-uint64_t dap_chain_net_srv_client_auth(dap_ledger_t  *a_ledger,
-        const char *a_service_key, const dap_chain_net_srv_abstract_t **a_cond_out)
-{
-    char *l_addr_base58;
-    char *l_sign_hash_str;
-    if(dap_chain_net_srv_key_parse(a_service_key, &l_addr_base58, &l_sign_hash_str)) {
-        return 0;
-    }
-    if(!dap_chain_net_srv_key_check(l_addr_base58, l_sign_hash_str)) {
-        // invalid signature
-        return 0;
-    }
-
-    dap_chain_addr_t *l_addr = (l_addr_base58) ? dap_chain_addr_from_str(l_addr_base58) : NULL;
-    dap_chain_tx_out_cond_t *l_tx_out_cond = NULL;
-    dap_sign_type_t l_sig_type;
-    if(l_addr)
-        memcpy(&l_sig_type, &l_addr->sig_type, sizeof(dap_sign_type_t));
-
-    // Search all value in transactions with l_addr in 'out_cond' item
-    uint64_t l_value = dap_chain_ledger_tx_cache_get_out_cond_value(a_ledger, l_addr, &l_tx_out_cond);
-    DAP_DELETE(l_addr);
-    // not found transaction with l_addr in 'out_cond' item
-    if(!l_value)
-        return 0;
-
-    size_t l_pkey_size = 0;
-    size_t l_cond_size = 0;
-    uint8_t *l_cond = dap_chain_datum_tx_out_cond_item_get_params(l_tx_out_cond, &l_cond_size);
-    //uint8_t *l_pkey = dap_chain_datum_tx_out_cond_item_get_pkey(l_tx_out_cond, &l_pkey_size);
-
-    if(l_cond_size != sizeof(dap_chain_net_srv_abstract_t)) {
-        return 0;
-    }
-    if(a_cond_out)
-        *a_cond_out = (const dap_chain_net_srv_abstract_t*) l_cond;
-    return l_value;
-}
-
diff --git a/dap_chain_net_srv_common.h b/dap_chain_net_srv_common.h
index 08f29345efcc607298a5b1b0033c4ef28302f7cf..55a949360762a4644393adb1115f484c5dd6dd8d 100755
--- a/dap_chain_net_srv_common.h
+++ b/dap_chain_net_srv_common.h
@@ -153,16 +153,3 @@ DAP_STATIC_INLINE const char * dap_chain_net_srv_price_unit_uid_to_str( dap_chai
         default: return "UNKNOWN";
     }
 }
-
-// Initialize dap_chain_net_srv_abstract_t structure
-void dap_chain_net_srv_abstract_set(dap_chain_net_srv_abstract_t *a_cond, uint8_t a_class, uint128_t a_type_id,
-        uint64_t a_price, uint8_t a_price_units, const char *a_decription);
-
-// copy a_value_dst to a_uid_src
-void dap_chain_net_srv_uid_set(dap_chain_net_srv_uid_t *a_uid_src, uint128_t a_value_dst);
-
-// generate new dap_chain_net_srv_uid_t
-bool dap_chain_net_srv_gen_uid(uint8_t *a_srv, size_t a_srv_size);
-
-uint64_t dap_chain_net_srv_client_auth(dap_ledger_t  *a_ledger,
-        const char *a_service_key, const dap_chain_net_srv_abstract_t **a_cond_out);
diff --git a/dap_chain_net_srv_stream_session.c b/dap_chain_net_srv_stream_session.c
index 60d4e57add52bc53070231f01276471d7e755ba2..4cae5231445c8595746f3698602bc7a1a6f4d1d4 100644
--- a/dap_chain_net_srv_stream_session.c
+++ b/dap_chain_net_srv_stream_session.c
@@ -24,6 +24,7 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 
 #include "dap_common.h"
 #include "rand/dap_rand.h"
+#include "dap_chain_net_srv.h"
 #include "dap_chain_net_srv_stream_session.h"
 
 #define LOG_TAG "dap_stream_ch_chain_net_srv_session"
diff --git a/dap_chain_net_srv_stream_session.h b/dap_chain_net_srv_stream_session.h
index 610c20b0110532da6ccdc9e755cda1cb8282f0d2..94f44f4c7e6a68c76b9fb1ac3aa4799755ef4fce 100644
--- a/dap_chain_net_srv_stream_session.h
+++ b/dap_chain_net_srv_stream_session.h
@@ -31,10 +31,12 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 #include "dap_sign.h"
 #include "dap_chain_datum_tx.h"
 #include "dap_chain_datum_tx_receipt.h"
-#include "dap_chain_net_srv.h"
+//#include "dap_chain_net_srv.h"
 #include "dap_chain_net_srv_order.h"
 #include "dap_chain_net_srv_client.h"
 #include "dap_chain_wallet.h"
+
+typedef struct dap_chain_net_srv dap_chain_net_srv_t;
 typedef struct dap_chain_net_srv_usage{
     uint32_t id; // Usage id
     pthread_rwlock_t rwlock;
@@ -42,8 +44,12 @@ typedef struct dap_chain_net_srv_usage{
     dap_chain_net_t * net; // Chain network where everything happens
     dap_chain_wallet_t * wallet;
     dap_chain_net_srv_t * service; // Service that used
+
     dap_chain_datum_tx_receipt_t* receipt;
+    dap_chain_datum_tx_receipt_t* receipt_next; // Receipt on the next units amount
+    dap_chain_net_srv_price_t * price; // Price for issue next receipt
     size_t receipt_size;
+    size_t receipt_next_size;
     dap_chain_net_srv_client_t * clients;
     dap_chain_datum_tx_t * tx_cond;
     dap_chain_hash_fast_t tx_cond_hash;
@@ -56,8 +62,11 @@ typedef struct dap_chain_net_srv_stream_session {
     dap_stream_session_t * parent;
     dap_chain_net_srv_usage_t * usages;
     dap_chain_net_srv_usage_t * usage_active;
-    uint64_t bytes_sent;
-    uint64_t bytes_received;
+
+    uint128_t limits_bytes; // Bytes left
+    time_t limits_ts; // Timestamp until its activte
+    dap_chain_net_srv_price_unit_uid_t limits_units_type;
+
     time_t ts_activated;
     dap_sign_t* user_sign; // User's signature for auth if reconnect
 } dap_chain_net_srv_stream_session_t;