diff --git a/src/media/localrecorder.cpp b/src/media/localrecorder.cpp
index 4a995e9c16e470e841babafd6d841fd85d2af259..67b54eb5fed6d3e0e0903299d52c0e3f3b3a9967 100644
--- a/src/media/localrecorder.cpp
+++ b/src/media/localrecorder.cpp
@@ -36,6 +36,12 @@ LocalRecorder::LocalRecorder(const bool& audioOnly)
     recorder_->audioOnly(audioOnly);
 }
 
+LocalRecorder::~LocalRecorder()
+{
+    if (isRecording())
+        stopRecording();
+}
+
 void
 LocalRecorder::setPath(const std::string& path)
 {
@@ -94,15 +100,14 @@ LocalRecorder::startRecording()
 void
 LocalRecorder::stopRecording()
 {
-    Recordable::stopRecording();
-    Manager::instance().getRingBufferPool().unBindHalfDuplexOut(path_, RingBufferPool::DEFAULT_ID);
     if (auto ob = recorder_->getStream(audioInput_->getInfo().name))
         audioInput_->detach(ob);
     if (videoInput_)
         if (auto ob = recorder_->getStream(videoInput_->getInfo().name))
             videoInput_->detach(ob);
-    audioInput_.reset();
-    videoInput_.reset();
+    Manager::instance().getRingBufferPool().unBindHalfDuplexOut(path_, RingBufferPool::DEFAULT_ID);
+    // NOTE stopRecording should be last call to avoid data races
+    Recordable::stopRecording();
 }
 
 } // namespace ring
diff --git a/src/media/localrecorder.h b/src/media/localrecorder.h
index 26a7864812643f77df3686c52cf19402301df419..1514a565ec4f3e96de884c3be98fa3b753c08306 100644
--- a/src/media/localrecorder.h
+++ b/src/media/localrecorder.h
@@ -40,13 +40,8 @@ namespace ring {
 class LocalRecorder : public Recordable {
     public:
 
-        /**
-         * Constructor of a LocalRecorder.
-         * Passed VideoInput pointer will be used for recording.
-         * If input pointer in null, video recording will be disabled on this
-         * recorder.
-         */
         LocalRecorder(const bool& audioOnly);
+        ~LocalRecorder();
 
         /**
          * Start local recording. Return true if recording was successfully
@@ -54,6 +49,9 @@ class LocalRecorder : public Recordable {
          */
         bool startRecording();
 
+        /**
+         * Stops recording.
+         */
         void stopRecording();
 
         /**