diff --git a/file/local_server/LocalFileTransfer.cpp b/file/local_server/LocalFileTransfer.cpp
index 7d79953..a02a7e9 100644
--- a/file/local_server/LocalFileTransfer.cpp
+++ b/file/local_server/LocalFileTransfer.cpp
@@ -19,6 +19,7 @@ Buffer* transfer::allocate_buffer(size_t size) {
     auto buffer = (Buffer*) malloc(total_size);
     new (buffer) Buffer{};
     buffer->capacity = size;
+    buffer->ref_count = 1;
     return buffer;
 }
 
diff --git a/file/local_server/LocalFileTransferDisk.cpp b/file/local_server/LocalFileTransferDisk.cpp
index 5d21850..3f187a5 100644
--- a/file/local_server/LocalFileTransferDisk.cpp
+++ b/file/local_server/LocalFileTransferDisk.cpp
@@ -492,13 +492,14 @@ void LocalFileTransfer::execute_disk_io(const std::shared_ptr<FileClient> &clien
                             assert(client->disk_buffer.bytes >= written);
                             client->disk_buffer.bytes -= written;
                             buffer_left_size = client->disk_buffer.bytes;
+
+                            /* We have to deref the buffer twice since we've removed it from the list which owns us one reference */
+                            /* Will not trigger a memory free since we're still holding onto one reference */
+                            deref_buffer(buffer);
                         } else {
                             /* The buffer got removed */
                         }
                     }
-
-                    /* We have to deref the buffer twice since we've removed it from the list which owns us one reference */
-                    deref_buffer(buffer);
                 } else {
                     std::lock_guard block{client->disk_buffer.mutex};
                     if(client->disk_buffer.buffer_head == buffer) {
diff --git a/file/local_server/LocalFileTransferNetwork.cpp b/file/local_server/LocalFileTransferNetwork.cpp
index 4f90b26..61ac1b5 100644
--- a/file/local_server/LocalFileTransferNetwork.cpp
+++ b/file/local_server/LocalFileTransferNetwork.cpp
@@ -801,17 +801,20 @@ void LocalFileTransfer::callback_transfer_network_write(int fd, short events, vo
                         std::lock_guard block{transfer->network_buffer.mutex};
                         if(transfer->network_buffer.buffer_head == buffer) {
                             transfer->network_buffer.buffer_head = buffer->next;
-                            if(!buffer->next)
+                            if(!buffer->next) {
                                 transfer->network_buffer.buffer_tail = &transfer->network_buffer.buffer_head;
+                            }
+
                             assert(transfer->network_buffer.bytes >= written);
                             transfer->network_buffer.bytes -= written;
                             buffer_left_size = transfer->network_buffer.bytes;
+
+                            /* Will not trigger a memory free since we're still holding onto one reference */
+                            deref_buffer(buffer);
                         } else {
                             /* the buffer got remove */
                         }
                     }
-
-                    deref_buffer(buffer);
                 } else {
                     std::lock_guard block{transfer->network_buffer.mutex};
                     if(transfer->network_buffer.buffer_head == buffer) {
@@ -819,7 +822,7 @@ void LocalFileTransfer::callback_transfer_network_write(int fd, short events, vo
                         transfer->network_buffer.bytes -= written;
                         buffer_left_size = transfer->network_buffer.bytes;
                     } else {
-                        /* the buffer got remove */
+                        /* the buffer got removed */
                     }
                 }