diff --git a/SpotifyRecorder.py b/SpotifyRecorder.py
index 18a28769bf42a95751705785ef50561c26628aff..f3f35b0ee5c65f5a013ce8297c656cb8b8c9b0f6 100644
--- a/SpotifyRecorder.py
+++ b/SpotifyRecorder.py
@@ -8,6 +8,7 @@ from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger
 from spotipy import SpotifyOAuth, CacheFileHandler
 
 from AudioRecorder import AudioRecorder
+from Mp3Converter import Mp3Converter
 
 LOG_FORMAT = '[%(levelname)-7s] - %(asctime)s - %(message)s'
 LOGGER = DefaultLogger().create_logger_if_not_exists('SpotifyRecorder', logFormat=LOG_FORMAT)
@@ -106,23 +107,39 @@ class SpotifyRecorder:
                 skippedTrackNumbers.append(indexInPlaylist)
                 continue
 
-            LOGGER.info(
-                f'>>> Recording track {index + 1}/{len(tracks)}: #{indexInPlaylist} "{track["track"]["name"]}"...')
+            LOGGER.info(f'>>> Recording track {index + 1}/{len(tracks)}: '
+                        f'#{indexInPlaylist} "{track["track"]["name"]}"...')
             try:
                 self.__stop_playback_if_playing(deviceId)
 
-                filePath = self.__determine_file_path(indexInPlaylist, track)
-                recorder = AudioRecorder(self._audioDeviceName, filePath)
+                fileName = self.__determine_file_name(indexInPlaylist, track)
+                filePathWav = f'{fileName}.wav'
+                filePathMp3 = f'{fileName}.mp3'
+                recorder = AudioRecorder(self._audioDeviceName, filePathWav)
                 with recorder.record():
                     self.__play_track(deviceId, track['track']['uri'])
                     timeWaitedForPlaying = self.__wait_for_track_playing(track['track']['id'])
                     self.__wait_for_track_end(track, timeWaitedForPlaying)
 
+                Mp3Converter.convert_to_mp3(filePathWav, filePathMp3)
+                Mp3Converter.set_mp3_tags(filePath=filePathMp3,
+                                          title=track['track']['name'],
+                                          artist=self.__join_artists(track),
+                                          album=track['track']['album']['name'])
+
                 recordedTrackNumbers.append(indexInPlaylist)
             except Exception as e:
                 LOGGER.error(f'An error occurred while recording track "{track["track"]["name"]}"', exc_info=e)
                 errorTrackNumbers.append(indexInPlaylist)
 
+        self.__print_end_statistics(errorTrackNumbers, recordedTrackNumbers, skippedTrackNumbers, len(tracks))
+
+    def __join_artists(self, track) -> str:
+        artists = track['track']['artists']
+        return ' & '.join(artist['name'] for artist in artists)
+
+    def __print_end_statistics(self, errorTrackNumbers: list[int], recordedTrackNumbers: list[int],
+                               skippedTrackNumbers: list[int], numberOfTracks: int):
         LOGGER.info('### DONE ###')
 
         LOGGER.info('>>> Skipped <<<')
@@ -133,13 +150,12 @@ class SpotifyRecorder:
         for number in errorTrackNumbers:
             LOGGER.info(f'Error #{number}')
 
-        LOGGER.info(
-            f'### {len(tracks)} tracks, {len(recordedTrackNumbers)} recorded, {len(skippedTrackNumbers)} skipped, {len(errorTrackNumbers)} errors ###')
+        LOGGER.info(f'### {numberOfTracks} tracks, {len(recordedTrackNumbers)} recorded, '
+                    f'{len(skippedTrackNumbers)} skipped, {len(errorTrackNumbers)} errors ###')
 
-    def __determine_file_path(self, index: int, track) -> str:
-        artists = track['track']['artists']
-        artists = ' & '.join(artist['name'] for artist in artists)
-        fileName = f'{index} - {artists} - {track["track"]["name"]}.wav'
+    def __determine_file_name(self, index: int, track) -> str:
+        artists = self.__join_artists(track)
+        fileName = f'{index} - {artists} - {track["track"]["name"]}'
         return os.path.join(self._destinationFolder, fileName)
 
     def __wait_for_track_end(self, track, timeWaitedForPlaying: float) -> None:
@@ -216,7 +232,8 @@ class SpotifyRecorder:
                     LOGGER.debug(f'\t\tTrack started playing after {duration:.1f}s')
                     break
                 else:
-                    raise RuntimeError(f'Wrong track started playing (actual: {currentPlayback["item"]["id"]}, expected: {expectedTrackId})')
+                    raise RuntimeError(
+                        f'Wrong track started playing (actual: {currentPlayback["item"]["id"]}, expected: {expectedTrackId})')
 
             time.sleep(1)