diff --git a/api/funkwhale_api/playlists/utils.py b/api/funkwhale_api/playlists/utils.py
index 72177da732c7b686ff645b7cea14f38a7237bb35..4d49a4d3bfff022c013e193c944f73624c2183d2 100644
--- a/api/funkwhale_api/playlists/utils.py
+++ b/api/funkwhale_api/playlists/utils.py
@@ -1,7 +1,5 @@
 import logging
-import os
 import re
-
 # /!\ The next import have xml vulnerabilities but this shouldn't have security implication in funkwhale
 # since there are only used to generate xspf file.
 from xml.etree.ElementTree import Element, SubElement
@@ -27,13 +25,7 @@ def clean_namespace_xspf(xspf_file):
     # This is needed because lxml error : "ValueError: Unicode strings with encoding declaration are
     # not supported. Please use bytes input or XML fragments without declaration."
     xspf_data = re.sub("'encoding='.'", "", xspf_data)
-    xspf_file_clean = xspf_file + "2"
-    if os.path.exists(xspf_file_clean):
-        os.remove(xspf_file_clean)
-    file = open(xspf_file_clean, "x")
-    file.write(xspf_data)
-
-    return xspf_file_clean
+    return xspf_data
 
 
 def get_track_id_from_xspf(xspf_file):
@@ -41,8 +33,8 @@ def get_track_id_from_xspf(xspf_file):
         Return a list of funkwhale tracks id from a xspf file. Tracks not found in database are ignored.
     """
     track_list = []
-    xspf_file_clean = clean_namespace_xspf(xspf_file)
-    tree = etree.parse(xspf_file_clean)
+    xspf_data_clean = clean_namespace_xspf(xspf_file)
+    tree = etree.fromstring(xspf_data_clean)
     tracks = tree.findall(".//track")
     added_track_count = 0
 
@@ -55,7 +47,6 @@ def get_track_id_from_xspf(xspf_file):
             album = track.find(".//album").text
         except Exception as e:
             logger.info(f"Error while parsing Xml file : {e!r}")
-
         # Finding track id in the db
         try:
             artist_id = Artist.objects.get(name=artist)
@@ -118,6 +109,35 @@ def generate_xspf_from_playlist(playlist_id):
     return prettify(top)
 
 
+def generate_xspf_from_tracks_ids(tracks_ids):
+    """
+        This returns a string containing playlist data in xspf format. It's used for test purposes.
+    """
+
+    top = Element("playlist")
+    top.set("version", "1")
+    # top.append(Element.fromstring('version="1"'))
+    title_xspf = SubElement(top, "title")
+    title_xspf.text = "An automated generated playlist"
+    trackList_xspf = SubElement(top, "trackList")
+
+    for track_id in tracks_ids:
+        track = Track.objects.get(id=track_id)
+        track_xspf = SubElement(trackList_xspf, "track")
+        location_xspf = SubElement(track_xspf, "location")
+        location_xspf.text = "https://" + track.domain_name + track.listen_url
+        title_xspf = SubElement(track_xspf, "title")
+        title_xspf.text = str(track.title)
+        creator_xspf = SubElement(track_xspf, "creator")
+        creator_xspf.text = str(track.artist)
+        if str(track.album) == "[non-album tracks]":
+            continue
+        else:
+            album_xspf = SubElement(track_xspf, "album")
+            album_xspf.text = str(track.album)
+    return prettify(top)
+
+
 def prettify(elem):
     """
         Return a pretty-printed XML string for the Element.