diff --git a/SpotifyAudioRecorder.py b/SpotifyAudioRecorder.py
index 0cb32464d8d4fe63f36238b7f9efeced03c4e3b0..785ae352a7a580082178424d3d2f9c3122e5b962 100644
--- a/SpotifyAudioRecorder.py
+++ b/SpotifyAudioRecorder.py
@@ -1,6 +1,6 @@
-import threading
 import time
 import wave
+from contextlib import contextmanager
 
 import pyaudiowpatch as pyaudio
 from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger
@@ -9,14 +9,12 @@ LOG_FORMAT = '[%(levelname)-7s] - %(asctime)s - %(message)s'
 LOGGER = DefaultLogger().create_logger_if_not_exists('SpotifyAudioRecorder', logFormat=LOG_FORMAT)
 
 
-class SpotifyAudioRecorder(threading.Thread):
+class SpotifyAudioRecorder:
     _CHUNK_SIZE = 512
 
     def __init__(self, deviceName: str, destinationFilePath: str):
-        threading.Thread.__init__(self, daemon=True)
         self._deviceName = deviceName
         self._destinationFilePath = destinationFilePath
-        self._stopEvent = threading.Event()
 
     def __get_device_by_name(self, pyaudioInstance, deviceName: str):
         deviceNames = []
@@ -31,7 +29,8 @@ class SpotifyAudioRecorder(threading.Thread):
                 message += f'\n\t{deviceName}'
             raise RuntimeError(message)
 
-    def run(self):
+    @contextmanager
+    def record(self):
         with pyaudio.PyAudio() as pyaudioInstance:
             device = self.__get_device_by_name(pyaudioInstance, self._deviceName)
             LOGGER.info(f'Recording from: ({device["index"]}) {device["name"]}')
@@ -52,27 +51,18 @@ class SpotifyAudioRecorder(threading.Thread):
                                       input=True,
                                       input_device_index=device['index'],
                                       stream_callback=callback
-                                      ):
-                while not self._stopEvent.is_set():
-                    time.sleep(1)
+                                      ) as stream:
+                yield stream
 
             waveFile.close()
             LOGGER.info(f'Recording stopped. File: "{self._destinationFilePath}"')
 
-    def stop(self):
-        if not self._stopEvent.is_set():
-            self._stopEvent.set()
-
-    def is_stopped(self) -> bool:
-        return self._stopEvent.is_set()
-
 
 if __name__ == '__main__':
     recorder = SpotifyAudioRecorder(
         deviceName='3/4 - Musik (2- GIGAPort HD Audio driver) [Loopback]',
         destinationFilePath='C:/Users/RobertG/Desktop/output.wav'
     )
-    recorder.start()
 
-    time.sleep(5)
-    recorder.stop()
+    with recorder.record() as stream:
+        time.sleep(5)
diff --git a/SpotifyRecorder.py b/SpotifyRecorder.py
index 75aba3b83efbf9ec9a0028bfea37a8e85bf6c59b..03c6b83e759384ac0726e7e36f48457659e4a3b2 100644
--- a/SpotifyRecorder.py
+++ b/SpotifyRecorder.py
@@ -99,24 +99,18 @@ class SpotifyRecorder:
                 continue
 
             LOGGER.info(f'Recording track {index + 1}/{len(tracks)}: "{track["track"]["name"]}"...')
-            recorder = None
             try:
                 filePath = self.__determine_file_path(index + 1, track)
                 recorder = SpotifyAudioRecorder(self._audioDeviceName, filePath)
-                recorder.start()
-
-                self.__play_track(deviceId, track['track']['uri'])
-                self.__wait_for_track_playing()
-                self.__wait_for_track_end(track)
-
-                recorder.stop()
+                with recorder.record():
+                    self.__play_track(deviceId, track['track']['uri'])
+                    self.__wait_for_track_playing()
+                    self.__wait_for_track_end(track)
 
                 recordedTracks.append(track['track']['name'])
             except Exception as e:
                 LOGGER.error(f'An error occurred while recording track "{track["track"]["name"]}"', exc_info=e)
                 errorTracks.append(track['track']['name'])
-                if recorder is not None and not recorder.is_stopped():
-                    recorder.stop()
 
         LOGGER.info('### DONE ###')
         LOGGER.info(f'{len(tracks)} tracks, {len(recordedTracks)} recorded, {len(skippedTracks)} skipped, {len(errorTracks)} errors')