Index: mainwindow.cpp
===================================================================
--- mainwindow.cpp	(revision 5053)
+++ mainwindow.cpp	(working copy)
@@ -434,6 +434,10 @@
   watcher2 = new QFutureWatcher<void>;
   connect(watcher2, SIGNAL(finished()),this,SLOT(diskWriteFinished()));
 
+  future3 = new QFuture<void>;
+  watcher3 = new QFutureWatcher<void>;
+  connect(watcher3, SIGNAL(finished()),this,SLOT(udpServerFinished()));
+
   Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ());
   Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered);
 
@@ -451,11 +455,30 @@
   m_config.transceiver_online (true);
   on_monitorButton_clicked (!m_config.monitor_off_at_startup ());
 
+  m_UDPServer = new UDPServer();
+  *future3 = QtConcurrent::run(this->m_UDPServer,&UDPServer::start);
+  watcher3->setFuture(*future3);
+  connect(m_UDPServer,&UDPServer::on_doCall,this,&MainWindow::doCall);
 #if !WSJT_ENABLE_EXPERIMENTAL_FEATURES
   ui->actionJT9W_1->setEnabled (false);
 #endif
 }
 
+void MainWindow::doCall(DecodedText decodedtext)
+{
+      auto my_base_call = baseCall (m_config.my_callsign ());
+      ui->decodedTextBrowser2->displayDecodedText(decodedtext
+                                                  , my_base_call
+                                                  , false
+                                                  , m_logBook
+                                                  , m_config.color_CQ()
+                                                  , m_config.color_MyCall()
+                                                  , m_config.color_DXCC()
+                                                  , m_config.color_NewCall());
+      m_QSOText=decodedtext;
+}
+
+
 //--------------------------------------------------- MainWindow destructor
 MainWindow::~MainWindow()
 {
@@ -1021,6 +1044,7 @@
 
   if(m_fname != "") killFile();
   m_killAll=true;
+  future3->waitForFinished();
   mem_jt9->detach();
   QFile quitFile {m_config.temp_dir ().absoluteFilePath (".quit")};
   quitFile.open(QIODevice::ReadWrite);
@@ -1155,6 +1179,10 @@
 {
 }
 
+void MainWindow::udpServerFinished()
+{
+}
+
 //Delete ../save/*.wav
 void MainWindow::on_actionDelete_all_wav_files_in_SaveDir_triggered()
 {
Index: mainwindow.h
===================================================================
--- mainwindow.h	(revision 5053)
+++ mainwindow.h	(working copy)
@@ -28,6 +28,7 @@
 #include "Detector.hpp"
 #include "Modulator.hpp"
 #include "decodedtext.h"
+#include "UDPServer.h"
 
 
 #define NUM_JT65_SYMBOLS 126
@@ -71,6 +72,7 @@
   void dataSink(qint64 frames);
   void diskDat();
   void diskWriteFinished();
+  void udpServerFinished();
   void freezeDecode(int n);
   void guiUpdate();
   void doubleClickOnCall(bool shift, bool ctrl);
@@ -80,6 +82,7 @@
   void jt9_error(QProcess::ProcessError);
   void setXIT(int n);
   void setFreq4(int rxFreq, int txFreq);
+  void doCall(DecodedText decodedtext);
 
 protected:
   virtual void keyPressEvent( QKeyEvent *e );
@@ -369,6 +372,7 @@
   double m_toneSpacing;
   int m_firstDecode;
   QProgressDialog m_optimizingProgress;
+  UDPServer *m_UDPServer;
 
   //---------------------------------------------------- private functions
   void readSettings();
