diff --git a/src/shared/trk/launcher.cpp b/src/shared/trk/launcher.cpp
index bae9c37e9b4c9fea8b73442a80bed1a101af212d..3d808b22245a1eb156f63ae4022f12805fbe8e4b 100644
--- a/src/shared/trk/launcher.cpp
+++ b/src/shared/trk/launcher.cpp
@@ -76,6 +76,7 @@ Launcher::Launcher(Actions startupActions) :
 {
     d->m_startupActions = startupActions;
     connect(&d->m_device, SIGNAL(messageReceived(trk::TrkResult)), this, SLOT(handleResult(trk::TrkResult)));
+    connect(this, SIGNAL(finished()), &d->m_device, SLOT(close()));
 }
 
 Launcher::~Launcher()
diff --git a/src/shared/trk/trkdevice.cpp b/src/shared/trk/trkdevice.cpp
index c7ebe792b7bc203dd92656bdf26f38ada5deab79..7aee9bf00e91dce10351f63fe139f229ecc4a469 100644
--- a/src/shared/trk/trkdevice.cpp
+++ b/src/shared/trk/trkdevice.cpp
@@ -893,7 +893,7 @@ bool TrkDevice::open(const QString &port, QString *errorMessage)
             Qt::QueuedConnection);
     connect(d->readerThread.data(), SIGNAL(messageReceived(trk::TrkResult,QByteArray)),
             this, SLOT(slotMessageReceived(trk::TrkResult,QByteArray)),
-            Qt::BlockingQueuedConnection);
+            Qt::QueuedConnection);
     d->readerThread->start();
 
     d->writerThread = QSharedPointer<WriterThread>(new WriterThread(d->deviceContext));
diff --git a/src/shared/trk/trkdevice.h b/src/shared/trk/trkdevice.h
index 579d32acf3bc0f1fc9294e6f30430fa809aa076e..632dea1b24b32c32291be86052bf457c919e0518 100644
--- a/src/shared/trk/trkdevice.h
+++ b/src/shared/trk/trkdevice.h
@@ -73,7 +73,6 @@ public:
 
     bool open(const QString &port, QString *errorMessage);
     bool isOpen() const;
-    void close();
 
     QString errorString() const;
 
@@ -109,6 +108,9 @@ protected slots:
     void emitError(const QString &msg);
     void emitLogMessage(const QString &msg);
 
+public slots:
+    void close();
+
 private:
     void readMessages();
     TrkDevicePrivate *d;