diff --git a/libs/clipboard/src/context_send.rs b/libs/clipboard/src/context_send.rs
index 76f8e4d7a..a2053d852 100644
--- a/libs/clipboard/src/context_send.rs
+++ b/libs/clipboard/src/context_send.rs
@@ -57,15 +57,10 @@ impl ContextSend {
         }
     }
 
-    pub fn proc<F: FnOnce(&mut Box<CliprdrClientContext>) -> u32>(f: F) -> u32 {
+    pub fn proc<F: FnOnce(&mut CliprdrClientContext) -> u32>(f: F) -> u32 {
         let lock = CONTEXT_SEND.addr.lock().unwrap();
         if *lock != 0 {
-            unsafe {
-                let mut context = Box::from_raw(*lock as *mut CliprdrClientContext);
-                let code = f(&mut context);
-                std::mem::forget(context);
-                code
-            }
+            unsafe { f(&mut *(*lock as *mut CliprdrClientContext)) }
         } else {
             0
         }
diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs
index fb20615d8..dc6892d61 100644
--- a/libs/clipboard/src/lib.rs
+++ b/libs/clipboard/src/lib.rs
@@ -164,12 +164,12 @@ fn send_data(conn_id: i32, data: ClipboardFile) {
     }
 }
 
-pub fn empty_clipboard(context: &mut Box<CliprdrClientContext>, conn_id: i32) -> bool {
-    unsafe { TRUE == cliprdr::empty_cliprdr(&mut (**context), conn_id as u32) }
+pub fn empty_clipboard(context: &mut CliprdrClientContext, conn_id: i32) -> bool {
+    unsafe { TRUE == cliprdr::empty_cliprdr(context, conn_id as u32) }
 }
 
 pub fn server_clip_file(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     msg: ClipboardFile,
 ) -> u32 {
@@ -294,7 +294,7 @@ pub fn server_clip_file(
     ret
 }
 
-pub fn server_monitor_ready(context: &mut Box<CliprdrClientContext>, conn_id: i32) -> u32 {
+pub fn server_monitor_ready(context: &mut CliprdrClientContext, conn_id: i32) -> u32 {
     unsafe {
         let monitor_ready = CLIPRDR_MONITOR_READY {
             connID: conn_id as UINT32,
@@ -302,8 +302,8 @@ pub fn server_monitor_ready(context: &mut Box<CliprdrClientContext>, conn_id: i3
             msgFlags: 0 as UINT16,
             dataLen: 0 as UINT32,
         };
-        if let Some(f) = (**context).MonitorReady {
-            let ret = f(&mut (**context), &monitor_ready);
+        if let Some(f) = context.MonitorReady {
+            let ret = f(context, &monitor_ready);
             ret as u32
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
@@ -312,7 +312,7 @@ pub fn server_monitor_ready(context: &mut Box<CliprdrClientContext>, conn_id: i3
 }
 
 pub fn server_format_list(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     format_list: Vec<(i32, String)>,
 ) -> u32 {
@@ -348,8 +348,8 @@ pub fn server_format_list(
             formats: formats.as_mut_ptr(),
         };
 
-        let ret = if let Some(f) = (**context).ServerFormatList {
-            f(&mut (**context), &format_list)
+        let ret = if let Some(f) = context.ServerFormatList {
+            f(context, &format_list)
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
         };
@@ -366,7 +366,7 @@ pub fn server_format_list(
 }
 
 pub fn server_format_list_response(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     msg_flags: i32,
 ) -> u32 {
@@ -378,8 +378,8 @@ pub fn server_format_list_response(
             dataLen: 0 as UINT32,
         };
 
-        if let Some(f) = (**context).ServerFormatListResponse {
-            f(&mut (**context), &format_list_response)
+        if let Some(f) = context.ServerFormatListResponse {
+            f(context, &format_list_response)
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
         }
@@ -387,7 +387,7 @@ pub fn server_format_list_response(
 }
 
 pub fn server_format_data_request(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     requested_format_id: i32,
 ) -> u32 {
@@ -399,8 +399,8 @@ pub fn server_format_data_request(
             dataLen: 0 as UINT32,
             requestedFormatId: requested_format_id as UINT32,
         };
-        if let Some(f) = (**context).ServerFormatDataRequest {
-            f(&mut (**context), &format_data_request)
+        if let Some(f) = context.ServerFormatDataRequest {
+            f(context, &format_data_request)
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
         }
@@ -408,7 +408,7 @@ pub fn server_format_data_request(
 }
 
 pub fn server_format_data_response(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     msg_flags: i32,
     mut format_data: Vec<u8>,
@@ -421,8 +421,8 @@ pub fn server_format_data_response(
             dataLen: format_data.len() as UINT32,
             requestedFormatData: format_data.as_mut_ptr(),
         };
-        if let Some(f) = (**context).ServerFormatDataResponse {
-            f(&mut (**context), &format_data_response)
+        if let Some(f) = context.ServerFormatDataResponse {
+            f(context, &format_data_response)
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
         }
@@ -430,7 +430,7 @@ pub fn server_format_data_response(
 }
 
 pub fn server_file_contents_request(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     stream_id: i32,
     list_index: i32,
@@ -456,8 +456,8 @@ pub fn server_file_contents_request(
             haveClipDataId: if have_clip_data_id { TRUE } else { FALSE },
             clipDataId: clip_data_id as UINT32,
         };
-        if let Some(f) = (**context).ServerFileContentsRequest {
-            f(&mut (**context), &file_contents_request)
+        if let Some(f) = context.ServerFileContentsRequest {
+            f(context, &file_contents_request)
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
         }
@@ -465,7 +465,7 @@ pub fn server_file_contents_request(
 }
 
 pub fn server_file_contents_response(
-    context: &mut Box<CliprdrClientContext>,
+    context: &mut CliprdrClientContext,
     conn_id: i32,
     msg_flags: i32,
     stream_id: i32,
@@ -481,8 +481,8 @@ pub fn server_file_contents_response(
             cbRequested: requested_data.len() as UINT32,
             requestedData: requested_data.as_mut_ptr(),
         };
-        if let Some(f) = (**context).ServerFileContentsResponse {
-            f(&mut (**context), &file_contents_response)
+        if let Some(f) = context.ServerFileContentsResponse {
+            f(context, &file_contents_response)
         } else {
             ERR_CODE_SERVER_FUNCTION_NONE
         }
diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs
index 15ce93c32..82c3794bb 100644
--- a/src/client/io_loop.rs
+++ b/src/client/io_loop.rs
@@ -251,7 +251,7 @@ impl<T: InvokeUiSession> Remote<T> {
         #[cfg(windows)]
         {
             let conn_id = self.client_conn_id;
-            ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 {
+            ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
                 empty_clipboard(context, conn_id);
                 0
             });
@@ -1624,7 +1624,7 @@ impl<T: InvokeUiSession> Remote<T> {
                 "Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}",
                 stop, is_stopping_allowed, file_transfer_enabled);
             if !stop {
-                ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 {
+                ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
                     clipboard::server_clip_file(context, self.client_conn_id, clip)
                 });
             }
diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs
index 78949b0b5..29828d6b7 100644
--- a/src/ui_cm_interface.rs
+++ b/src/ui_cm_interface.rs
@@ -184,7 +184,7 @@ impl<T: InvokeUiCM> ConnectionManager<T> {
 
         #[cfg(windows)]
         {
-            ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 {
+            ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
                 empty_clipboard(context, id);
                 0
             });
@@ -427,7 +427,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
                                                 continue;
                                             }
                                             let conn_id = self.conn_id;
-                                            ContextSend::proc(|context: &mut Box<CliprdrClientContext>| -> u32 {
+                                            ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 {
                                                 clipboard::server_clip_file(context, conn_id, _clip)
                                             });
                                         }