diff --git a/devine/commands/auth.py b/devine/commands/auth.py
index cf7ab21..aa49b40 100644
--- a/devine/commands/auth.py
+++ b/devine/commands/auth.py
@@ -1,5 +1,6 @@
 import logging
 import sys
+import shutil
 import tkinter.filedialog
 from collections import defaultdict
 from pathlib import Path
@@ -243,7 +244,7 @@ def add(ctx: click.Context, profile: str, service: str, cookie: Optional[str] =
         if final_path.exists():
             log.error(f"A Cookie file for the Profile {profile} on {service} already exists.")
             sys.exit(1)
-        cookie = cookie.rename(final_path)
+        shutil.move(cookie, final_path)
         log.info(f"Moved Cookie file to: {cookie}")
 
     if credential:
diff --git a/devine/commands/dl.py b/devine/commands/dl.py
index 1b6c01e..1994566 100644
--- a/devine/commands/dl.py
+++ b/devine/commands/dl.py
@@ -5,6 +5,7 @@ import logging
 import math
 import random
 import re
+import shutil
 import sys
 import time
 import traceback
@@ -674,7 +675,7 @@ class dl:
         final_dir.mkdir(parents=True, exist_ok=True)
         final_path = final_dir / f"{final_filename}{muxed_path.suffix}"
 
-        muxed_path.rename(final_path)
+        shutil.move(muxed_path, final_path)
         self.log.info(f" + Moved to {final_path}")
 
     @staticmethod
diff --git a/devine/core/tracks/track.py b/devine/core/tracks/track.py
index 4cf2ed5..12c15f7 100644
--- a/devine/core/tracks/track.py
+++ b/devine/core/tracks/track.py
@@ -1,6 +1,7 @@
 import asyncio
 import logging
 import re
+import shutil
 import subprocess
 from enum import Enum
 from pathlib import Path
@@ -312,7 +313,8 @@ class Track:
         if not self.path:
             return False
         target = Path(target)
-        ok = self.path.rename(target).resolve() == target.resolve()
+
+        ok = Path(shutil.move(self.path, target)).resolve() == target.resolve()
         if ok:
             self.path = target
         return ok
@@ -326,7 +328,7 @@ class Track:
         if not target.exists() or not self.path:
             return False
         self.path.unlink()
-        ok = target.rename(self.path) == self.path
+        ok = Path(shutil.move(target, self.path)).resolve() == self.path.resolve()
         if not ok:
             return False
         return self.move(target)