diff --git a/Cargo.lock b/Cargo.lock
index 1bbab12d79bec6225ce4d4b019c8971d9a415bf3..5c17e3be99e2f29ff8d48257e51149c747d46119 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2373,7 +2373,7 @@ dependencies = [
 
 [[package]]
 name = "rustus"
-version = "0.4.3"
+version = "0.4.4"
 dependencies = [
  "actix-files",
  "actix-rt",
diff --git a/Cargo.toml b/Cargo.toml
index 525541321413b0d9cdcbcd8edd73d9c5a5ca4a1d..da7cc4a4846f3f300b0e3579bb78e8103cdd6bdd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "rustus"
-version = "0.4.3"
+version = "0.4.4"
 edition = "2021"
 description = "TUS protocol implementation written in Rust."
 
@@ -113,5 +113,5 @@ httptest = "0.15.4"
 [profile.release]
 lto = true
 panic = "abort"
-opt-level = "z"
+opt-level = 2
 codegen-units = 1
diff --git a/src/info_storages/file_info_storage.rs b/src/info_storages/file_info_storage.rs
index 08f977bc8238c13678f98bd37ae1958c47f9e0d9..993f3121c0526a341a3cc1d11b2072b5418a0a2f 100644
--- a/src/info_storages/file_info_storage.rs
+++ b/src/info_storages/file_info_storage.rs
@@ -3,7 +3,7 @@ use std::path::PathBuf;
 use async_trait::async_trait;
 use log::error;
 use tokio::fs::{read_to_string, remove_file, DirBuilder, OpenOptions};
-use tokio::io::{AsyncWriteExt, BufWriter};
+use tokio::io::copy;
 
 use crate::errors::{RustusError, RustusResult};
 use crate::info_storages::{FileInfo, InfoStorage};
@@ -35,7 +35,7 @@ impl InfoStorage for FileInfoStorage {
     }
 
     async fn set_info(&self, file_info: &FileInfo, create: bool) -> RustusResult<()> {
-        let file = OpenOptions::new()
+        let mut file = OpenOptions::new()
             .write(true)
             .create(create)
             .truncate(true)
@@ -45,27 +45,11 @@ impl InfoStorage for FileInfoStorage {
                 error!("{:?}", err);
                 RustusError::UnableToWrite(err.to_string())
             })?;
-        let mut writer = BufWriter::new(file);
-        writer
-            .write(
-                serde_json::to_string(&file_info)
-                    .map_err(|err| {
-                        error!("{:#?}", err);
-                        err
-                    })?
-                    .as_bytes(),
-            )
-            .await
-            .map_err(|err| {
-                error!("{:?}", err);
-                RustusError::UnableToWrite(
-                    self.info_file_path(file_info.id.as_str())
-                        .as_path()
-                        .display()
-                        .to_string(),
-                )
-            })?;
-        writer.flush().await?;
+        let data = serde_json::to_string(&file_info).map_err(|err| {
+            error!("{:#?}", err);
+            err
+        })?;
+        copy(&mut data.as_bytes(), &mut file).await?;
         Ok(())
     }
 
diff --git a/src/main.rs b/src/main.rs
index 93aacc19b89975f8e51d66314f381374d2c21764..5b5330c6d3dc628e60910afd449a07c49cb6b6cc 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,4 +1,5 @@
 #![cfg_attr(coverage, feature(no_coverage))]
+
 use std::str::FromStr;
 use std::sync::Arc;
 
diff --git a/src/storages/file_storage.rs b/src/storages/file_storage.rs
index 607dbc17b8bb798278b5911b6e2055cbab22b404..a89985a59f893acaa3ea6d93ae72ccbf173b7f1d 100644
--- a/src/storages/file_storage.rs
+++ b/src/storages/file_storage.rs
@@ -4,7 +4,7 @@ use actix_files::NamedFile;
 use async_trait::async_trait;
 use log::error;
 use tokio::fs::{remove_file, DirBuilder, OpenOptions};
-use tokio::io::{copy, AsyncWriteExt, BufWriter};
+use tokio::io::{copy, BufReader};
 
 use crate::errors::{RustusError, RustusResult};
 use crate::info_storages::FileInfo;
@@ -85,7 +85,7 @@ impl Storage for FileStorage {
         // Opening file in w+a mode.
         // It means that we're going to append some
         // bytes to the end of a file.
-        let file = OpenOptions::new()
+        let mut file = OpenOptions::new()
             .write(true)
             .append(true)
             .create(false)
@@ -95,15 +95,8 @@ impl Storage for FileStorage {
                 error!("{:?}", err);
                 RustusError::UnableToWrite(err.to_string())
             })?;
-        let mut writer = BufWriter::new(file);
-        writer.write(bytes).await.map_err(|err| {
-            error!("{:?}", err);
-            RustusError::UnableToWrite(info.path.clone().unwrap())
-        })?;
-        writer.flush().await.map_err(|err| {
-            error!("{:?}", err);
-            RustusError::UnableToWrite(info.path.clone().unwrap())
-        })?;
+        let mut reader = BufReader::new(bytes);
+        copy(&mut reader, &mut file).await?;
         Ok(())
     }