diff --git a/pylonrecorder.cpp b/pylonrecorder.cpp
index b8c4900..10aa50a 100644
--- a/pylonrecorder.cpp
+++ b/pylonrecorder.cpp
@@ -93,6 +93,14 @@ PylonRecorder::PylonRecorder(QWidget *parent)
 }
 
 PylonRecorder::~PylonRecorder(){
+  if (grabber->isRunning()) {
+      grabber->requestStop();
+      grabber->wait(1000);
+  }
+  if (writer->isRunning()) {
+      writer->forceStop();
+      writer->wait(1000);
+  }
   delete pylon;
   delete buffer;
   delete grabber;
diff --git a/writer.cpp b/writer.cpp
index 87d09f1..d47e0a4 100644
--- a/writer.cpp
+++ b/writer.cpp
@@ -9,12 +9,13 @@ void Writer::run() {
   int64_t count = 0;
   if (valid) {
       stop_request = false;
+      stopNow = false;
       Pylon::CVideoWriter videoWriter;
       videoWriter.SetParameter(videoSpecs.width, videoSpecs.height, videoSpecs.pixelType,
                                videoSpecs.fps, videoSpecs.quality);
       videoWriter.Open(videoSpecs.filename.c_str());
       MyImage img;
-      while (!stop_request || buffer->bufferLoad() > 0) {
+      while ((!stop_request || buffer->bufferLoad() > 0) && !stopNow) {
           if (buffer->bufferLoad() > 0 ) {
               bool valid = buffer->pop(img);
               if (valid) {
@@ -32,7 +33,7 @@ void Writer::run() {
               msleep(10);
             }
           }
-        }
+      }
       videoWriter.Close();
     } else {
       std::cerr << "Got no video specifications, not writing!" << std::endl;
diff --git a/writer.h b/writer.h
index f87b222..673b365 100644
--- a/writer.h
+++ b/writer.h
@@ -33,13 +33,17 @@ signals:
 private:
   ImageBuffer *buffer;
   VideoSpecs videoSpecs;
-  bool stop_request = false;
+  bool stop_request = false, stopNow = false;
   bool valid = false;
 
 public slots:
   void requestStop() {
     stop_request=true;
   }
+
+  void forceStop() {
+    stopNow = true;
+  }
 };
 
 #endif // WRITER_H