diff --git a/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c b/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c
index 3086c895e9dd99f691f65238779f3745d6763f2a..398ec38ed0f2a20cc2ef2454fe5d1ee6bd8c89ef 100644
--- a/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c
+++ b/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c
@@ -164,16 +164,18 @@ size_t dap_stream_ch_pkt_write_unsafe(dap_stream_ch_t * a_ch,  uint8_t a_type, c
             (char) l_hdr.id, l_hdr.size, l_hdr.type, l_hdr.seq_id , l_hdr.enc_type );
     }
 
-
-    if(a_data_size+sizeof(l_hdr)> sizeof(a_ch->buf) ){
-        log_it(L_ERROR,"Too big data size %lu, bigger than encryption buffer size %lu", a_data_size, sizeof(a_ch->buf));
-        a_data_size=sizeof(a_ch->buf)-sizeof(l_hdr);
+    if(a_data_size > 250000){
+        printf("bazinga");
     }
-    memcpy(a_ch->buf,&l_hdr,sizeof(l_hdr) );
+
+    uint8_t * l_ch_buf = DAP_NEW_SIZE(uint8_t, a_data_size+sizeof(l_hdr));
+    assert(l_ch_buf);
+    memcpy(l_ch_buf,&l_hdr,sizeof(l_hdr) );
     if( a_data_size )
-        memcpy(a_ch->buf+sizeof(l_hdr),a_data,a_data_size );
+        memcpy(l_ch_buf+sizeof(l_hdr),a_data,a_data_size );
 
-    size_t l_ret=dap_stream_pkt_write_unsafe(a_ch->stream,a_ch->buf,a_data_size+sizeof(l_hdr));
+    size_t l_ret=dap_stream_pkt_write_unsafe(a_ch->stream,l_ch_buf,a_data_size+sizeof(l_hdr));
+    DAP_DELETE(l_ch_buf);
     a_ch->stat.bytes_write+=a_data_size;
     a_ch->ready_to_write=true;
     return l_ret;
diff --git a/dap-sdk/net/stream/ch/include/dap_stream_ch.h b/dap-sdk/net/stream/ch/include/dap_stream_ch.h
index dc1e862802027079df2b340e2393803d0082ea23..6c48a6ccb5bd0694209f17b99fc36c463cec0dc7 100644
--- a/dap-sdk/net/stream/ch/include/dap_stream_ch.h
+++ b/dap-sdk/net/stream/ch/include/dap_stream_ch.h
@@ -46,8 +46,6 @@ typedef struct dap_stream_ch{
         uint64_t bytes_read;
     } stat;
 
-    uint8_t buf[500000];
-
     dap_stream_ch_proc_t * proc;
     void * internal;
     struct dap_stream_ch *me;
diff --git a/dap-sdk/net/stream/stream/dap_stream_pkt.c b/dap-sdk/net/stream/stream/dap_stream_pkt.c
index 1f1357e25aa5f3648608b55fc058be88fee0d6c9..99dcfe2cd800f3e7497bed3f1864f85d373c3ce6 100644
--- a/dap-sdk/net/stream/stream/dap_stream_pkt.c
+++ b/dap-sdk/net/stream/stream/dap_stream_pkt.c
@@ -121,6 +121,7 @@ size_t dap_stream_pkt_read_unsafe( dap_stream_t * a_stream, dap_stream_pkt_t * a
 }
 
 
+#define DAP_STREAM_PKT_ENCRYPTION_OVERHEAD 200 //intended overkill, it's about ~2*16+15 for oaes
 
 /**
  * @brief stream_ch_pkt_write
@@ -135,22 +136,23 @@ size_t dap_stream_pkt_write_unsafe(dap_stream_t * a_stream, const void * a_data,
     size_t ret=0;
     stream_pkt_hdr_t pkt_hdr;
 
-    if(a_data_size > STREAM_BUF_SIZE_MAX ){
-        log_it(L_ERROR,"Too big data size %lu, bigger than encryption buffer size %lu",a_data_size,sizeof(a_stream->buf));
-        a_data_size=sizeof(a_stream->buf);
-    }
+    size_t l_stream_buf_size = a_data_size + DAP_STREAM_PKT_ENCRYPTION_OVERHEAD;
+    uint8_t * l_stream_buf = DAP_NEW_SIZE(uint8_t, l_stream_buf_size);
+    assert(l_stream_buf);
 
     memset(&pkt_hdr,0,sizeof(pkt_hdr));
     memcpy(pkt_hdr.sig,c_dap_stream_sig,sizeof(pkt_hdr.sig));
 
-    pkt_hdr.size =(uint32_t) a_stream->session->key->enc_na(a_stream->session->key, a_data,a_data_size,a_stream->buf, STREAM_BUF_SIZE_MAX);
+    pkt_hdr.size =(uint32_t) a_stream->session->key->enc_na(a_stream->session->key, a_data,a_data_size,l_stream_buf,l_stream_buf_size);
+    assert(pkt_hdr.size > 0 && pkt_hdr.size <= l_stream_buf_size);
 //    printf("*[dap_stream_pkt_write] size=%d key=0x%x _inheritor_size=%d\n", pkt_hdr.size, sid->session->key,
 //            sid->session->key->_inheritor_size);
 
     ret+=dap_events_socket_write_unsafe(a_stream->esocket,&pkt_hdr,sizeof(pkt_hdr));
-    ret+=dap_events_socket_write_unsafe(a_stream->esocket,a_stream->buf,pkt_hdr.size);
+    ret+=dap_events_socket_write_unsafe(a_stream->esocket,l_stream_buf,pkt_hdr.size);
     dap_events_socket_set_writable_unsafe(a_stream->esocket, true);
 
+    DAP_DELETE(l_stream_buf);
     return ret;
 }
 
diff --git a/dap-sdk/net/stream/stream/include/dap_stream.h b/dap-sdk/net/stream/stream/include/dap_stream.h
index 888be346b5ae1b3b43b0d3aea5bc9004bfc999e1..d57a211b875ffcff13d22b00732da3ee28321ff4 100644
--- a/dap-sdk/net/stream/stream/include/dap_stream.h
+++ b/dap-sdk/net/stream/stream/include/dap_stream.h
@@ -73,7 +73,6 @@ typedef struct dap_stream {
     uint8_t buf_defrag[STREAM_BUF_SIZE_MAX];
     uint64_t buf_defrag_size;
 
-    uint8_t buf[STREAM_BUF_SIZE_MAX];
     uint8_t pkt_cache[STREAM_BUF_SIZE_MAX];
 
     dap_stream_ch_t *channel[255]; // TODO reduce channels to 16 to economy memory