diff --git a/hercules_rt/src/lib.rs b/hercules_rt/src/lib.rs
index c5ef5f6a601fb04304396a5e28c23c53cd020f44..ed5dca1d817f7d738a29e7c4be4a6f589a7dad41 100644
--- a/hercules_rt/src/lib.rs
+++ b/hercules_rt/src/lib.rs
@@ -152,12 +152,12 @@ impl<'a> HerculesCPURefMut<'a> {
 
 #[cfg(feature = "cuda")]
 impl<'a> HerculesCUDARef<'a> {
-    pub fn to_cpu_ref<T>(self, dst: &mut [T]) -> HerculesCPURef<'a> {
+    pub fn to_cpu_ref<'b, T>(self, dst: &'b mut [T]) -> HerculesCPURefMut<'b> {
         unsafe {
             let size = self.size;
             let ptr = NonNull::new(dst.as_ptr() as *mut u8).unwrap();
             __copy_cuda_to_cpu(ptr.as_ptr(), self.ptr.as_ptr(), size);
-            HerculesCPURef {
+            HerculesCPURefMut {
                 ptr,
                 size,
                 _phantom: PhantomData,
@@ -192,12 +192,12 @@ impl<'a> HerculesCUDARefMut<'a> {
         }
     }
 
-    pub fn to_cpu_ref<T>(self, dst: &mut [T]) -> HerculesCPURef<'a> {
+    pub fn to_cpu_ref<'b, T>(self, dst: &mut [T]) -> HerculesCPURefMut<'b> {
         unsafe {
             let size = self.size;
             let ptr = NonNull::new(dst.as_ptr() as *mut u8).unwrap();
             __copy_cuda_to_cpu(ptr.as_ptr(), self.ptr.as_ptr(), size);
-            HerculesCPURef {
+            HerculesCPURefMut {
                 ptr,
                 size,
                 _phantom: PhantomData,