Index: HamlibTransceiver.cpp
===================================================================
--- HamlibTransceiver.cpp	(revision 5708)
+++ HamlibTransceiver.cpp	(working copy)
@@ -699,6 +699,24 @@
       update_other_frequency (f);
     }
 
+  // do this here before getting the mode to avoid Hamlib calling IF;
+  // twice in succession at the end of the poll sequence on Kenwood
+  // rigs - this is because doing so seems to cause a subtle CAT bug
+  // on at least the TS-480
+  if (RIG_PTT_NONE != rig_->state.pttport.type.ptt && rig_->caps->get_ptt)
+    {
+      ptt_t p;
+      auto rc = rig_get_ptt (rig_.data (), RIG_VFO_CURR, &p);
+      if (-RIG_ENAVAIL != rc && -RIG_ENIMPL != rc) // may fail if
+        // Net rig ctl and target doesn't
+        // support command
+        {
+          error_check (rc, tr ("getting PTT state"));
+          TRACE_CAT_POLL ("rig_get_ptt PTT =" << p);
+          update_PTT (!(RIG_PTT_OFF == p));
+        }
+    }
+
   error_check (rig_get_mode (rig_.data (), RIG_VFO_CURR, &m, &w), tr ("getting current VFO mode"));
   TRACE_CAT_POLL ("rig_get_mode mode =" << rig_strrmode (m) << "bw =" << w);
   update_mode (map_mode (m));
@@ -731,20 +749,6 @@
         }
     }
 
-  if (RIG_PTT_NONE != rig_->state.pttport.type.ptt && rig_->caps->get_ptt)
-    {
-      ptt_t p;
-      auto rc = rig_get_ptt (rig_.data (), RIG_VFO_CURR, &p);
-      if (-RIG_ENAVAIL != rc && -RIG_ENIMPL != rc) // may fail if
-        // Net rig ctl and target doesn't
-        // support command
-        {
-          error_check (rc, tr ("getting PTT state"));
-          TRACE_CAT_POLL ("rig_get_ptt PTT =" << p);
-          update_PTT (!(RIG_PTT_OFF == p));
-        }
-    }
-
 #if !WSJT_TRACE_CAT_POLLS
 #if WSJT_HAMLIB_TRACE
 #if WSJT_HAMLIB_VERBOSE_TRACE
Index: mainwindow.cpp
===================================================================
--- mainwindow.cpp	(revision 5708)
+++ mainwindow.cpp	(working copy)
@@ -2175,6 +2175,11 @@
                                   m_transmitting);
 }
 
+void MainWindow::stopTx2a()
+{
+    WSPR_scheduling ();
+}
+
 void MainWindow::stopTx2()
 {
   Q_EMIT m_config.transceiver_ptt (false);      //Lower PTT
@@ -2184,9 +2189,12 @@
     msgBox("Runaway Tx watchdog");
     m_repeatMsg=0;
   }
+  // we let ptt signal process first by doing the timer here
+  qDebug()<< "stopTx2a";
   if(m_mode.mid(0,4)=="WSPR" and m_ntr==-1 and !m_tuneup) {
     m_wideGraph->setWSPRtransmitted();
-    WSPR_scheduling ();
+//    WSPR_scheduling ();// let the timer do this
+    QTimer::singleShot(2000,this,SLOT(stopTx2a()));
     m_ntr=0;
   }
 }
Index: mainwindow.h
===================================================================
--- mainwindow.h	(revision 5708)
+++ mainwindow.h	(working copy)
@@ -162,6 +162,7 @@
   void startTx2();
   void stopTx();
   void stopTx2();
+  void stopTx2a();
   void on_pbCallCQ_clicked();
   void on_pbAnswerCaller_clicked();
   void on_pbSendRRR_clicked();
