diff --git a/Network/NetworkMessage.hpp b/Network/NetworkMessage.hpp
index d1cbc67cb..c211abb0f 100644
--- a/Network/NetworkMessage.hpp
+++ b/Network/NetworkMessage.hpp
@@ -197,9 +197,9 @@
  *       3 -> FIELD DAY
  *       4 -> RTTY RU
  *       5 -> WW DIGI
- *       6 -> ARRL DIGI
- *       7 -> FOX
- *       8 -> HOUND
+ *       6 -> FOX
+ *       7 -> HOUND
+ *       8 -> ARRL DIGI
  *
  *    The Frequency Tolerance  and T/R period fields may  have a value
  *    of  the maximum  quint32 value  which implies  the field  is not
diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp
index ef59a5668..6175d00b4 100644
--- a/widgets/mainwindow.cpp
+++ b/widgets/mainwindow.cpp
@@ -1373,12 +1373,12 @@ void MainWindow::readSettings()
 
 void MainWindow::checkMSK144ContestType()
 {
-  if(SpecOp::NONE != m_config.special_op_id()) 
+  if(SpecOp::NONE != m_specOp)
     {
-      if(m_mode=="MSK144" && SpecOp::EU_VHF < m_config.special_op_id())
+      if(m_mode=="MSK144" && SpecOp::EU_VHF < m_specOp)
         {
           MessageBox::warning_message (this, tr ("Improper mode"),
-           "Mode will be changed to FT8. MSK144 not available if Field Day, WW Digi, RTTY or Fox/Hound is selected.");
+          "Mode will be changed to FT8. MSK144 not available if Fox, Hound, Field Day, FT Roundup, WW Digi. or ARRL Digi contest is selected.");
           on_actionFT8_triggered();
         }
     }
@@ -1898,7 +1898,7 @@ void MainWindow::on_actionSettings_triggered()               //Setup Dialog
   // things that might change that we need know about
   auto callsign = m_config.my_callsign ();
   auto my_grid = m_config.my_grid ();
-  SpecOp nContest0=m_config.special_op_id();
+  SpecOp nContest0=m_specOp;
   auto psk_on = m_config.spot_to_psk_reporter ();
   if (QDialog::Accepted == m_config.exec ()) {
     checkMSK144ContestType();
@@ -1964,16 +1964,17 @@ void MainWindow::on_actionSettings_triggered()               //Setup Dialog
       ui->actionEnable_AP_JT65->setVisible(false);
       ui->actionAuto_Clear_Avg->setVisible(false);
     }
-    if(m_config.special_op_id()!=nContest0) {
+    m_specOp=m_config.special_op_id();
+    if(m_specOp!=nContest0) {
       ui->tx1->setEnabled(true);
       ui->txb1->setEnabled(true);
     }
     chkFT4();
-    if(SpecOp::EU_VHF==m_config.special_op_id() and m_config.my_grid().size()<6) {
+    if(SpecOp::EU_VHF==m_specOp and m_config.my_grid().size()<6) {
       MessageBox::information_message (this,
           "EU VHF Contest messages require a 6-character locator.");
     }
-    if((m_config.special_op_id()==SpecOp::FOX or m_config.special_op_id()==SpecOp::HOUND) and
+    if((m_specOp==SpecOp::FOX or m_specOp==SpecOp::HOUND) and
        m_mode!="FT8") {
       MessageBox::information_message (this,
           "Fox-and-Hound operation is available only in FT8 mode.\nGo back and change your selection.");
@@ -2062,7 +2063,7 @@ void MainWindow::auto_tx_mode (bool state)
 void MainWindow::keyPressEvent (QKeyEvent * e)
 {
 
-  if(SpecOp::FOX == m_config.special_op_id()) {
+  if(SpecOp::FOX == m_specOp) {
     switch (e->key()) {
       case Qt::Key_Return:
         doubleClickOnCall2(Qt::KeyboardModifier(Qt::ShiftModifier + Qt::ControlModifier + Qt::AltModifier));
@@ -2077,7 +2078,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
     QMainWindow::keyPressEvent (e);
   }
 
-  if(SpecOp::HOUND == m_config.special_op_id()) {
+  if(SpecOp::HOUND == m_specOp) {
     switch (e->key()) {
       case Qt::Key_Return:
         auto_tx_mode(true);
@@ -2212,11 +2213,11 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
       abortQSO();
       return;
     case Qt::Key_E:
-      if((e->modifiers() & Qt::ShiftModifier) and SpecOp::FOX > m_config.special_op_id()) {
+      if((e->modifiers() & Qt::ShiftModifier) and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
           ui->txFirstCheckBox->setChecked(false);
           return;
       }
-      else if((e->modifiers() & Qt::ControlModifier) and SpecOp::FOX > m_config.special_op_id()) {
+      else if((e->modifiers() & Qt::ControlModifier) and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
           ui->txFirstCheckBox->setChecked(true);
           return;
       }
@@ -3218,8 +3219,8 @@ void MainWindow::decode()                                       //decode()
   dec_data.params.nfa=m_wideGraph->nStartFreq();
   dec_data.params.nfSplit=m_wideGraph->Fmin();
   dec_data.params.nfb=m_wideGraph->Fmax();
-  if(m_mode=="FT8" and SpecOp::HOUND == m_config.special_op_id() and !ui->cbRxAll->isChecked()) dec_data.params.nfb=1000;
-  if(m_mode=="FT8" and SpecOp::FOX == m_config.special_op_id() ) dec_data.params.nfqso=200;
+  if(m_mode=="FT8" and SpecOp::HOUND == m_specOp and !ui->cbRxAll->isChecked()) dec_data.params.nfb=1000;
+  if(m_mode=="FT8" and SpecOp::FOX == m_specOp ) dec_data.params.nfqso=200;
   dec_data.params.ntol=ui->sbFtol->value ();
   if(!m_config.enable_VHF_features()) {
     dec_data.params.ntol=20;
@@ -3272,7 +3273,7 @@ void MainWindow::decode()                                       //decode()
   dec_data.params.emedelay=0.0;
   if(m_config.decode_at_52s()) dec_data.params.emedelay=2.5;
   dec_data.params.minSync=ui->syncSpinBox->isVisible () ? m_minSync : 0;
-  dec_data.params.nexp_decode = static_cast<int> (m_config.special_op_id());
+  dec_data.params.nexp_decode = static_cast<int> (m_specOp);
   if(m_config.single_decode()) dec_data.params.nexp_decode += 32;
   if(m_config.enable_VHF_features()) dec_data.params.nexp_decode += 64;
   if(m_mode.startsWith("FST4")) dec_data.params.nexp_decode += 256*(ui->sbNB->value()+3);
@@ -3435,7 +3436,7 @@ void MainWindow::decodeDone ()
   ui->DecodeButton->setChecked (false);
   decodeBusy(false);
   m_RxLog=0;
-  if(SpecOp::FOX == m_config.special_op_id()) houndCallers();
+  if(SpecOp::FOX == m_specOp) houndCallers();
   to_jt9(m_ihsym,-1,1);                //Tell jt9 we know it has finished
 
   m_startAnother=m_loopall;
@@ -3628,7 +3629,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
   bool bDisplayPoints = false;
   if(m_ActiveStationsWidget!=NULL) {
     bDisplayPoints=(m_mode=="FT4" or m_mode=="FT8") and
-      (m_config.special_op_id()==SpecOp::ARRL_DIGI or m_ActiveStationsWidget->isVisible());
+      (m_specOp==SpecOp::ARRL_DIGI or m_ActiveStationsWidget->isVisible());
   }
   while(proc_jt9.canReadLine()) {
     auto line_read = proc_jt9.readLine ();
@@ -3710,7 +3711,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
       if (line_read.left(ntime) != m_tBlankLine) {
           ui->decodedTextBrowser->new_period ();
           if (m_config.insert_blank ()
-              && SpecOp::FOX != m_config.special_op_id()) {
+              && SpecOp::FOX != m_specOp) {
             QString band;
             if(((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4)
                 or m_displayBand) {
@@ -3727,7 +3728,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
       DecodedText decodedtext0 {QString::fromUtf8(line_read.constData())};
       DecodedText decodedtext {QString::fromUtf8(line_read.constData()).remove("TU; ")};
 
-      if(m_mode=="FT8" and SpecOp::FOX == m_config.special_op_id() and
+      if(m_mode=="FT8" and SpecOp::FOX == m_specOp and
          (decodedtext.string().contains("R+") or decodedtext.string().contains("R-"))) {
         auto for_us  = decodedtext.string().contains(" " + m_config.my_callsign() + " ") or
             decodedtext.string().contains(" "+m_baseCall) or
@@ -3743,7 +3744,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
 
 //Left (Band activity) window
       if(!bAvgMsg) {
-        if(m_mode=="FT8" and SpecOp::FOX == m_config.special_op_id()) {
+        if(m_mode=="FT8" and SpecOp::FOX == m_specOp) {
           if(!m_bDisplayedOnce) {
             // This hack sets the font.  Surely there's a better way!
             DecodedText dt{"."};
@@ -3827,7 +3828,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
                   for_us = false;
             }
           }
-          if(m_bCallingCQ && !m_bAutoReply && for_us && SpecOp::FOX > m_config.special_op_id()) {
+          if(m_bCallingCQ && !m_bAutoReply && for_us && m_specOp!=SpecOp::FOX && m_specOp!=SpecOp::HOUND) {
             bool bProcessMsgNormally=ui->respondComboBox->currentText()=="CQ: First" or
                 (ui->respondComboBox->currentText()=="CQ: Max Dist" and m_ActiveStationsWidget==NULL) or
                 (m_ActiveStationsWidget!=NULL and !m_ActiveStationsWidget->isVisible());
@@ -3865,7 +3866,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
                   m_bDoubleClicked=true;
                   ui->dxCallEntry->setText(deCall);
                   int m_ntx=2;
-                  bool bContest=m_config.special_op_id()==SpecOp::NA_VHF or m_config.special_op_id()==SpecOp::ARRL_DIGI;
+                  bool bContest=m_specOp==SpecOp::NA_VHF or m_specOp==SpecOp::ARRL_DIGI;
                   if(bContest) m_ntx=3;
                   if(deGrid.contains(grid_regexp)) {
                     m_deGrid=deGrid;
@@ -3884,9 +3885,9 @@ void MainWindow::readFromStdout()                             //readFromStdout
             }
 
           }
-          if(SpecOp::FOX==m_config.special_op_id() and decodedtext.string().contains(" DE ")) for_us=true; //Hound with compound callsign
-          if(SpecOp::FOX==m_config.special_op_id() and for_us and (audioFreq<1000)) bDisplayRight=true;
-          if(SpecOp::FOX!=m_config.special_op_id() and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
+          if(SpecOp::FOX==m_specOp and decodedtext.string().contains(" DE ")) for_us=true; //Hound with compound callsign
+          if(SpecOp::FOX==m_specOp and for_us and (audioFreq<1000)) bDisplayRight=true;
+          if(SpecOp::FOX!=m_specOp and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
         }
       } else {
         if((abs(audioFreq - m_wideGraph->rxFreq()) <= 10) and
@@ -3905,7 +3906,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
 
       postDecode (true, decodedtext.string ());
 
-      if(m_mode=="FT8" and SpecOp::HOUND==m_config.special_op_id()) {
+      if(m_mode=="FT8" and SpecOp::HOUND==m_specOp) {
         if(decodedtext.string().contains(";")) {
           QStringList w=decodedtext.string().mid(24).split(" ",SkipEmptyParts);
           QString foxCall=w.at(3);
@@ -3947,7 +3948,7 @@ void MainWindow::readFromStdout()                             //readFromStdout
       }
 
 //### I think this is where we are preventing Hounds from spotting Fox ###
-      if(m_mode!="FT8" or (SpecOp::HOUND != m_config.special_op_id())) {
+      if(m_mode!="FT8" or (SpecOp::HOUND != m_specOp)) {
         if(m_mode=="FT8" or m_mode=="FT4" or m_mode=="Q65"
            or m_mode=="JT4" or m_mode=="JT65" or m_mode=="JT9" or m_mode=="FST4") {
           auto_sequence (decodedtext, 25, 50);
@@ -4071,7 +4072,7 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
                        // look for type 2 compound call replies on our Tx and Rx offsets
                        && ((within_tolerance && "DE" == message_words.at (2))
                            || message_words.at (2).contains (m_baseCall))))) {
-      if(SpecOp::FOX != m_config.special_op_id()) processMessage (message);
+      if(SpecOp::FOX != m_specOp) processMessage (message);
     }
   }
 }
@@ -4239,7 +4240,7 @@ void MainWindow::guiUpdate()
       }
     }
 
-    if(m_mode=="FT8" and SpecOp::FOX==m_config.special_op_id()) {
+    if(m_mode=="FT8" and SpecOp::FOX==m_specOp) {
 // Don't allow Fox mode in any of the default FT8 sub-bands.
       qint32 ft8Freq[]={1840,3573,7074,10136,14074,18100,21074,24915,28074,50313,70100};
       for(int i=0; i<11; i++) {
@@ -4281,12 +4282,12 @@ void MainWindow::guiUpdate()
       g_iptt = 1;
       setRig ();
       if(m_mode=="FT8") {
-        if (SpecOp::FOX == m_config.special_op_id()) {
+        if (SpecOp::FOX == m_specOp) {
           if (ui->TxFreqSpinBox->value() > 900) {
             ui->TxFreqSpinBox->setValue(300);
           }
         }
-        else if (SpecOp::HOUND == m_config.special_op_id()) {
+        else if (SpecOp::HOUND == m_specOp) {
           if(m_auto && !m_tune) {
             if (ui->TxFreqSpinBox->value() < 999 && m_ntx != 3) {
               // Hound randomized range: 1000-3000 Hz
@@ -4312,7 +4313,7 @@ void MainWindow::guiUpdate()
 
 // If HoldTxFreq is not checked, randomize Fox's Tx Freq
 // NB: Maybe this should be done no more than once every 5 minutes or so ?
-      if(m_mode=="FT8" and SpecOp::FOX==m_config.special_op_id() and !ui->cbHoldTxFreq->isChecked()) {
+      if(m_mode=="FT8" and SpecOp::FOX==m_specOp and !ui->cbHoldTxFreq->isChecked()) {
 #if QT_VERSION >= QT_VERSION_CHECK (5, 15, 0)
         ui->TxFreqSpinBox->setValue (QRandomGenerator::global ()->bounded (300, 599));
 #else
@@ -4354,7 +4355,7 @@ void MainWindow::guiUpdate()
     if(m_mode=="WSPR") {
       ba=WSPR_message().toLatin1();
     } else {
-      if(SpecOp::HOUND == m_config.special_op_id() and m_ntx!=3) {   //Hound transmits only Tx1 or Tx3
+      if(SpecOp::HOUND == m_specOp and m_ntx!=3) {   //Hound transmits only Tx1 or Tx3
         m_ntx=1;
         ui->txrb1->setChecked(true);
       }
@@ -4408,7 +4409,7 @@ void MainWindow::guiUpdate()
         }
 
         if(m_mode=="FT8") {
-          if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==1) {
+          if(SpecOp::FOX==m_specOp and ui->tabWidget->currentIndex()==1) {
             foxTxSequencer();
           } else {
             int i3=0;
@@ -4425,7 +4426,7 @@ void MainWindow::guiUpdate()
             int nwave=nsym*nsps;
             gen_ft8wave_(const_cast<int *>(itone),&nsym,&nsps,&bt,&fsample,&f0,foxcom_.wave,
                          foxcom_.wave,&icmplx,&nwave);
-            if(SpecOp::FOX == m_config.special_op_id()) {
+            if(SpecOp::FOX == m_specOp) {
               //Fox must generate the full Tx waveform, not just an itone[] array.
               QString fm = QString::fromStdString(message).trimmed();
               foxGenWaveform(0,fm);
@@ -4508,12 +4509,12 @@ void MainWindow::guiUpdate()
                    &fsample,&hmod,&f0,&icmplx,foxcom_.wave,foxcom_.wave);
         }
 
-        if(SpecOp::EU_VHF==m_config.special_op_id()) {
+        if(SpecOp::EU_VHF==m_specOp) {
           if(m_ntx==2) m_xSent=ui->tx2->text().right(13);
           if(m_ntx==3) m_xSent=ui->tx3->text().right(13);
         }
 
-        if(SpecOp::FIELD_DAY==m_config.special_op_id() or SpecOp::RTTY==m_config.special_op_id()) {
+        if(SpecOp::FIELD_DAY==m_specOp or SpecOp::RTTY==m_specOp) {
           if(m_ntx==2 or m_ntx==3) {
             QStringList t=ui->tx2->text().split(' ', SkipEmptyParts);
             int n=t.size();
@@ -4644,7 +4645,7 @@ void MainWindow::guiUpdate()
     if (m_mode != "FST4W" && m_mode != "WSPR")
       {
         if(!m_tune) write_all("Tx",m_currentMessage);
-        if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id())
+        if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_specOp)
           {
             ui->decodedTextBrowser2->displayTransmittedText(current_message.trimmed(),
                   m_mode,ui->TxFreqSpinBox->value(),m_bFastMode,m_TRperiod);
@@ -4687,16 +4688,16 @@ void MainWindow::guiUpdate()
 
   if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT4" || "Q65" == m_mode) {
     if(ui->txrb1->isEnabled() and
-       (SpecOp::NA_VHF==m_config.special_op_id() or
-        SpecOp::FIELD_DAY==m_config.special_op_id() or
-        SpecOp::RTTY==m_config.special_op_id() or
-        SpecOp::WW_DIGI==m_config.special_op_id() or
-        SpecOp::ARRL_DIGI==m_config.special_op_id()) ) {
+       (SpecOp::NA_VHF==m_specOp or
+        SpecOp::FIELD_DAY==m_specOp or
+        SpecOp::RTTY==m_specOp or
+        SpecOp::WW_DIGI==m_specOp or
+        SpecOp::ARRL_DIGI==m_specOp) ) {
       //We're in a contest-like mode other than EU_VHF: start QSO with Tx2.
       ui->tx1->setEnabled(false);
       ui->txb1->setEnabled(false);
     }
-    if(!ui->tx1->isEnabled() and SpecOp::EU_VHF==m_config.special_op_id()) {
+    if(!ui->tx1->isEnabled() and SpecOp::EU_VHF==m_specOp) {
       //We're in EU_VHF mode: start QSO with Tx1.
       ui->tx1->setEnabled(true);
       ui->txb1->setEnabled(true);
@@ -4705,11 +4706,11 @@ void MainWindow::guiUpdate()
 
 //Once per second (onesec)
   if(nsec != m_sec0) {
-//    qDebug() << "AAA" << nsec << (int)m_config.special_op_id() << (int)SpecOp::FOX;
+//    qDebug() << "AAA" << nsec;
 
     if(m_mode=="FST4") chk_FST4_freq_range();
     m_currentBand=m_config.bands()->find(m_freqNominal);
-    if( SpecOp::HOUND == m_config.special_op_id() ) {
+    if( SpecOp::HOUND == m_specOp ) {
       qint32 tHound=QDateTime::currentMSecsSinceEpoch()/1000 - m_tAutoOn;
       //To keep calling Fox, Hound must reactivate Enable Tx at least once every 2 minutes
       if(tHound >= 120 and m_ntx==1) auto_tx_mode(false);
@@ -4742,7 +4743,7 @@ void MainWindow::guiUpdate()
 
     if(m_transmitting) {
       char s[42];
-      if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==1) {
+      if(SpecOp::FOX==m_specOp and ui->tabWidget->currentIndex()==1) {
         sprintf(s,"Tx:  %d Slots",foxcom_.nslots);
       } else {
         sprintf(s,"Tx: %s",msgsent);
@@ -4764,7 +4765,7 @@ void MainWindow::guiUpdate()
         } else {
           s[40]=0;
           QString t{QString::fromLatin1(s)};
-          if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==1 and foxcom_.nslots==1) {
+          if(SpecOp::FOX==m_specOp and ui->tabWidget->currentIndex()==1 and foxcom_.nslots==1) {
               t=m_fm1.trimmed();
           }
           if(m_mode=="FT4") t="Tx: "+ m_currentMessage;
@@ -4943,7 +4944,7 @@ bool MainWindow::elide_tx1_not_allowed () const
 {
   auto const& my_callsign = m_config.my_callsign ();
   return
-    (m_mode=="FT8" && SpecOp::HOUND == m_config.special_op_id())
+    (m_mode=="FT8" && SpecOp::HOUND == m_specOp)
     || ((m_mode.startsWith ("FT") || "MSK144" == m_mode || "Q65" == m_mode || "FST4" == m_mode)
         && Radio::is_77bit_nonstandard_callsign (my_callsign))
     || (my_callsign != m_baseCall && !shortList (my_callsign));
@@ -5117,7 +5118,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers)
     cursor.setPosition(cursor.selectionStart());
   }
 
-  if(SpecOp::FOX==m_config.special_op_id() and m_decodedText2) {
+  if(SpecOp::FOX==m_specOp and m_decodedText2) {
     if(m_houndQueue.count()<10 and m_nSortedHounds>0) {
       QString t=cursor.block().text();
       selectHound(t);
@@ -5175,8 +5176,8 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
 
   int nmod = fmod(double(message.timeInSeconds()),2.0*m_TRperiod);
   m_txFirst=(nmod!=0);
-  if( SpecOp::HOUND == m_config.special_op_id() ) m_txFirst=false;          //Hound must not transmit first
-  if( SpecOp::FOX == m_config.special_op_id() ) m_txFirst=true;             //Fox must always transmit first
+  if( SpecOp::HOUND == m_specOp ) m_txFirst=false;          //Hound must not transmit first
+  if( SpecOp::FOX == m_specOp ) m_txFirst=true;             //Fox must always transmit first
   ui->txFirstCheckBox->setChecked(m_txFirst);
 
   auto const& message_words = message.messageWords ();
@@ -5220,7 +5221,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
   }
 
   // ignore calls by other hounds
-  if (SpecOp::HOUND == m_config.special_op_id()
+  if (SpecOp::HOUND == m_specOp
       && message.messageWords ().indexOf (QRegularExpression {R"(R\+-[0-9]+)"}) >= 1)
     {
       return;
@@ -5235,7 +5236,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
          && firstcall != m_config.my_callsign () && firstcall != m_baseCall
          && firstcall != "DE")
         || "CQ" == firstcall || "QRZ" == firstcall || ctrl || shift) {
-      if (((SpecOp::HOUND != m_config.special_op_id()) || m_mode != "FT8")
+      if (((SpecOp::HOUND != m_specOp) || m_mode != "FT8")
           && (!ui->cbHoldTxFreq->isChecked () || shift || ctrl)) {
         ui->TxFreqSpinBox->setValue(frequency);
       }
@@ -5272,7 +5273,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
     }
     bool bRTTY = (nrpt>=529 and nrpt<=599);
     bool bEU_VHF_w2=(nrpt>=520001 and nrpt<=594000);
-    if(bEU_VHF_w2 and SpecOp::EU_VHF!=m_config.special_op_id()) {
+    if(bEU_VHF_w2 and SpecOp::EU_VHF!=m_specOp) {
       auto const& msg = tr("Should you switch to EU VHF Contest mode?\n\n"
                                "To do so, check 'Special operating activity' and\n"
                                "'EU VHF Contest' on the Settings | Advanced tab.");
@@ -5290,17 +5291,17 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
       m_xRcvd=t.at(n-2) + " " + t.at(n-1);
       t0=t.at(n-3);
     }
-    if(bFieldDay_msg and SpecOp::FIELD_DAY!=m_config.special_op_id()) {
+    if(bFieldDay_msg and SpecOp::FIELD_DAY!=m_specOp) {
       // ### Should be in ARRL Field Day mode ??? ###
       MessageBox::information_message (this, tr ("Should you switch to ARRL Field Day mode?"));
     }
 
-    if(bRTTY and SpecOp::RTTY != m_config.special_op_id()) {
+    if(bRTTY and SpecOp::RTTY != m_specOp) {
       // ### Should be in RTTY contest mode ??? ###
       MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?"));
     }
 
-    if(SpecOp::EU_VHF==m_config.special_op_id() and message_words.at(2).contains(m_baseCall) and
+    if(SpecOp::EU_VHF==m_specOp and message_words.at(2).contains(m_baseCall) and
        (!message_words.at(3).contains(qso_partner_base_call)) and (!m_bDoubleClicked)) {
       return;
     }
@@ -5310,9 +5311,9 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
        && (message_words.at(2).contains(m_baseCall) || "DE" == message_words.at(2))
        && (message_words.at(3).contains(qso_partner_base_call) or m_bDoubleClicked
            or bEU_VHF_w2 or (m_QSOProgress==CALLING))) {
-      if(message_words.at(4).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) {
-        if((SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id() or
-            SpecOp::ARRL_DIGI==m_config.special_op_id() )
+      if(message_words.at(4).contains(grid_regexp) and SpecOp::EU_VHF!=m_specOp) {
+        if((SpecOp::NA_VHF==m_specOp or SpecOp::WW_DIGI==m_specOp or
+            SpecOp::ARRL_DIGI==m_specOp )
            and bContestOK) {
           setTxMsg(3);
           m_QSOProgress=ROGER_REPORT;
@@ -5325,7 +5326,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
             m_QSOProgress=REPORT;
           }
         }
-      } else if(w34.contains(grid_regexp) and SpecOp::EU_VHF==m_config.special_op_id()) {
+      } else if(w34.contains(grid_regexp) and SpecOp::EU_VHF==m_specOp) {
 
         if(nrpt==0) {
           setTxMsg(2);
@@ -5339,7 +5340,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
             m_QSOProgress=ROGER_REPORT;
           }
         }
-      } else if(SpecOp::RTTY == m_config.special_op_id() and bRTTY) {
+      } else if(SpecOp::RTTY == m_specOp and bRTTY) {
         if(w2=="R") {
           setTxMsg(4);
           m_QSOProgress=ROGERS;
@@ -5348,7 +5349,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
           m_QSOProgress=ROGER_REPORT;
         }
         m_xRcvd=t[n-2] + " " + t[n-1];
-      } else if(SpecOp::FIELD_DAY==m_config.special_op_id() and bFieldDay_msg) {
+      } else if(SpecOp::FIELD_DAY==m_specOp and bFieldDay_msg) {
         if(t0=="R") {
           setTxMsg(4);
           m_QSOProgress=ROGERS;
@@ -5366,7 +5367,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
           if(m_mode=="FT4" and "RR73" == word_3) m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc();
           m_bTUmsg=false;
           m_nextCall="";   //### Temporary: disable use of "TU;" message
-          if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") {
+          if(SpecOp::RTTY == m_specOp and m_nextCall!="") {
             // We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message
             if (m_config.prompt_to_log() || m_config.autoLog()) {
               logQSOTimer.start(0);
@@ -5380,12 +5381,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
             ui->tx3->setText(t);
             m_bTUmsg=true;
           } else {
-
-// The following test was to skip sending 73 after receiving RR73, in a contest mode.
-// I'm disabling it so thet we always send 73 after receiving RR73.
-//            if (m_QSOProgress > CALLING && m_QSOProgress < SIGNOFF
-//                && SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()
-//                && ("RR73" == word_3 || 73 == word_3_as_number))
             if (false)              // Always Send 73 after receiving RRR or RR73, even in contest mode.
               {
                 if (m_config.prompt_to_log() || m_config.autoLog()) {
@@ -5444,7 +5439,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
                   && word_3.startsWith ('R')) {
           m_ntx=4;
           m_QSOProgress = ROGERS;
-          if(SpecOp::RTTY == m_config.special_op_id()) {
+          if(SpecOp::RTTY == m_specOp) {
             int n=t.size();
             int nRpt=t[n-2].toInt();
             if(nRpt>=529 and nRpt<=599) m_xRcvd=t[n-2] + " " + t[n-1];
@@ -5455,9 +5450,9 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
             if ((word_3_as_number >= -50 && word_3_as_number <= 49)
                 || (word_3_as_number >= 529 && word_3_as_number <= 599))
               {
-                if(SpecOp::EU_VHF==m_config.special_op_id() or
-                   SpecOp::FIELD_DAY==m_config.special_op_id() or
-                   SpecOp::RTTY==m_config.special_op_id())
+                if(SpecOp::EU_VHF==m_specOp or
+                   SpecOp::FIELD_DAY==m_specOp or
+                   SpecOp::RTTY==m_specOp)
                   {
                     setTxMsg(2);
                     m_QSOProgress=REPORT;
@@ -5682,16 +5677,16 @@ void MainWindow::genCQMsg ()
     QString t=ui->tx6->text();
     QStringList tlist=t.split(" ");
     if((m_mode=="FT4" or m_mode=="FT8" or m_mode=="MSK144" || "Q65" == m_mode) and
-       SpecOp::NONE != m_config.special_op_id() and
+       SpecOp::NONE != m_specOp and
        ( tlist.at(1)==my_callsign or
          tlist.at(2)==my_callsign ) and
        stdCall(my_callsign)) {
-      if(SpecOp::NA_VHF == m_config.special_op_id())    m_cqStr="TEST";
-      if(SpecOp::EU_VHF == m_config.special_op_id())    m_cqStr="TEST";
-      if(SpecOp::FIELD_DAY == m_config.special_op_id()) m_cqStr="FD";
-      if(SpecOp::RTTY == m_config.special_op_id())      m_cqStr="RU";
-      if(SpecOp::WW_DIGI == m_config.special_op_id())   m_cqStr="WW";
-      if(SpecOp::ARRL_DIGI == m_config.special_op_id()) m_cqStr="TEST";
+      if(SpecOp::NA_VHF == m_specOp)    m_cqStr="TEST";
+      if(SpecOp::EU_VHF == m_specOp)    m_cqStr="TEST";
+      if(SpecOp::FIELD_DAY == m_specOp) m_cqStr="FD";
+      if(SpecOp::RTTY == m_specOp)      m_cqStr="RU";
+      if(SpecOp::WW_DIGI == m_specOp)   m_cqStr="WW";
+      if(SpecOp::ARRL_DIGI == m_specOp) m_cqStr="TEST";
       if( tlist.at(1)==my_callsign ) {
          t="CQ " + m_cqStr + " " + tlist.at(1) + " " + tlist.at(2); 
       } else {
@@ -5799,11 +5794,11 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
         t=t0a;
         msgtype(t0a + my_grid, ui->tx1);
       }
-      if(SpecOp::NA_VHF==m_config.special_op_id()) sent=my_grid;
-      if(SpecOp::WW_DIGI==m_config.special_op_id()) sent=my_grid;
-      if(SpecOp::ARRL_DIGI==m_config.special_op_id()) sent=my_grid;
-      if(SpecOp::FIELD_DAY==m_config.special_op_id()) sent=m_config.Field_Day_Exchange();
-      if(SpecOp::RTTY==m_config.special_op_id()) { 
+      if(SpecOp::NA_VHF==m_specOp) sent=my_grid;
+      if(SpecOp::WW_DIGI==m_specOp) sent=my_grid;
+      if(SpecOp::ARRL_DIGI==m_specOp) sent=my_grid;
+      if(SpecOp::FIELD_DAY==m_specOp) sent=m_config.Field_Day_Exchange();
+      if(SpecOp::RTTY==m_specOp) {
         sent=rst + m_config.RTTY_Exchange();
         QString t1=m_config.RTTY_Exchange();
         if(t1=="DX" or t1=="#") {
@@ -5811,7 +5806,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
           sent=rst + t1;
         }
       }
-      if(SpecOp::EU_VHF==m_config.special_op_id()) {
+      if(SpecOp::EU_VHF==m_specOp) {
         QString a;
         t="<" + t0s.split(" ").at(0) + "> <" + t0s.split(" ").at(1) + "> ";
         a = a.asprintf("%4.4d ",ui->sbSerialNumber->value());
@@ -5820,7 +5815,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
       msgtype(t + sent, ui->tx2);
       if(sent==rpt) msgtype(t + "R" + sent, ui->tx3);
       if(sent!=rpt) msgtype(t + "R " + sent, ui->tx3);
-      if(m_mode=="FT4" and SpecOp::RTTY==m_config.special_op_id()) {
+      if(m_mode=="FT4" and SpecOp::RTTY==m_specOp) {
         QDateTime now=QDateTime::currentDateTimeUtc();
         int sinceTx3 = m_dateTimeSentTx3.secsTo(now);
         int sinceRR73 = m_dateTimeRcvdRR73.secsTo(now);
@@ -5834,7 +5829,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
     if(m_mode=="MSK144" and m_bShMsgs) {
       int i=t0s.length()-1;
       t0="<" + t0s.mid(0,i) + "> ";
-      if(SpecOp::NA_VHF != m_config.special_op_id()) {
+      if(SpecOp::NA_VHF != m_specOp) {
         if(n<=-2) n=-3;
         if(n>=-1 and n<=1) n=0;
         if(n>=2 and n<=4) n=3;
@@ -5854,7 +5849,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
     }
 
     if(m_mode=="MSK144" and m_bShMsgs) {
-      if(m_config.special_op_id()==SpecOp::NONE) {
+      if(m_specOp==SpecOp::NONE) {
         t=t0 + "R" + rpt;
         msgtype(t, ui->tx3);
       }
@@ -5899,7 +5894,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
         case Configuration::type_2_msg_1_full:
           msgtype(t + my_grid, ui->tx1);
           if (!eme_short_codes) {
-            if(is77BitMode () && SpecOp::NA_VHF == m_config.special_op_id()) {
+            if(is77BitMode () && SpecOp::NA_VHF == m_specOp) {
               msgtype(t + "R " + my_grid, ui->tx3); // #### Unreachable code
             } else {
               msgtype(t + "R" + rpt, ui->tx3);
@@ -5911,7 +5906,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
           break;
 
         case Configuration::type_2_msg_3_full:
-          if (is77BitMode () && SpecOp::NA_VHF == m_config.special_op_id()) {
+          if (is77BitMode () && SpecOp::NA_VHF == m_specOp) {
             msgtype(t + "R " + my_grid, ui->tx3);
             msgtype(t + "RRR", ui->tx4);
           } else {
@@ -5926,7 +5921,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
         case Configuration::type_2_msg_5_only:
           msgtype(t00 + my_grid, ui->tx1);
           if (!eme_short_codes) {
-            if (is77BitMode () && SpecOp::NA_VHF == m_config.special_op_id()) {
+            if (is77BitMode () && SpecOp::NA_VHF == m_specOp) {
               msgtype(t + "R " + my_grid, ui->tx3); // #### Unreachable code
               msgtype(t + "RRR", ui->tx4);
             } else {
@@ -5947,7 +5942,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
       msgtype(t, ui->tx5->lineEdit ());
     }
   } else {
-    if (hisCall != hisBase and SpecOp::HOUND != m_config.special_op_id()) {
+    if (hisCall != hisBase and SpecOp::HOUND != m_specOp) {
       if (shortList(hisCall)) {
         // cfm we know his full call with a type 1 tx1 message
         t = hisCall + " " + my_callsign;
@@ -5961,7 +5956,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
     }
   }
   m_rpt=rpt;
-  if(SpecOp::HOUND == m_config.special_op_id() and is_compound) ui->tx1->setText("DE " + my_callsign);
+  if(SpecOp::HOUND == m_specOp and is_compound) ui->tx1->setText("DE " + my_callsign);
 }
 
 void MainWindow::TxAgain()
@@ -5984,7 +5979,7 @@ void MainWindow::clearDX ()
   m_qsoStop.clear ();
   m_inQSOwith.clear();
   genStdMsgs (QString {});
-  if (m_mode=="FT8" and SpecOp::HOUND == m_config.special_op_id()) {
+  if (m_mode=="FT8" and SpecOp::HOUND == m_specOp) {
     m_ntx=1;
     ui->txrb1->setChecked(true);
   } else {
@@ -6148,7 +6143,7 @@ void MainWindow::msgtype(QString t, QLineEdit* tx)               //msgtype()
   if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true;
   if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false;
   if((m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4" || "Q65" == m_mode) and
-     SpecOp::NA_VHF==m_config.special_op_id()) {
+     SpecOp::NA_VHF==m_specOp) {
     int i0=t.trimmed().length()-7;
     if(t.mid(i0,3)==" R ") text=false;
   }
@@ -6286,7 +6281,7 @@ void MainWindow::on_genStdMsgsPushButton_clicked()         //genStdMsgs button
 
 void MainWindow::cease_auto_Tx_after_QSO ()
 {
-  if (SpecOp::FOX != m_config.special_op_id ()
+  if (SpecOp::FOX != m_specOp
       && ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked ())
     {
       // ensure that auto Tx is disabled even if disable Tx
@@ -6312,7 +6307,7 @@ void MainWindow::on_logQSOButton_clicked()                 //Log QSO button
   QString grid=m_hisGrid;
   if(grid=="....") grid="";
   
-  switch( m_config.special_op_id() )
+  switch( m_specOp )
     {
       case SpecOp::NA_VHF:
         m_xSent=m_config.my_grid().left(4);
@@ -6384,10 +6379,9 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
         }
     }
 
-  if(m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX ();
+  if(m_config.clear_DX () and SpecOp::HOUND != m_specOp) clearDX ();
   m_dateTimeQSOOn = QDateTime {};
-  auto special_op = m_config.special_op_id ();
-  if (SpecOp::NONE < special_op && special_op < SpecOp::FOX) { 
+  if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
     ui->sbSerialNumber->setValue(ui->sbSerialNumber->value() + 1);
   }
 
@@ -6499,11 +6493,11 @@ void MainWindow::displayWidgets(qint64 n)
   ui->pbBestSP->setVisible(m_mode=="FT4");
   b=false;
   if(m_mode=="FT4" or m_mode=="FT8" || "Q65" == m_mode) {
-  b=SpecOp::EU_VHF==m_config.special_op_id() or 
-    ( SpecOp::RTTY==m_config.special_op_id() and
+  b=SpecOp::EU_VHF==m_specOp or
+    ( SpecOp::RTTY==m_specOp and
       (m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="#") );
   }
-  if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_config.special_op_id();
+  if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_specOp;
   ui->sbSerialNumber->setVisible(b);
   m_lastCallsign.clear ();     // ensures Tx5 is updated for new modes
   b=m_mode.startsWith("FST4");
@@ -6666,7 +6660,7 @@ void MainWindow::on_actionFT8_triggered()
   m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
   m_detector->setTRPeriod(m_TRperiod);  // TODO - not thread safe
   ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
-  if(SpecOp::FOX==m_config.special_op_id()) {
+  if(SpecOp::FOX==m_specOp) {
     ui->lh_decodes_title_label->setText(tr ("Stations calling DXpedition %1").arg (m_config.my_callsign()));
     ui->lh_decodes_headings_label->setText( "Call         Grid   dB  Freq   Dist Age Continent");
   } else {
@@ -6685,7 +6679,7 @@ void MainWindow::on_actionFT8_triggered()
   ui->txb6->setEnabled(true);
   ui->txFirstCheckBox->setEnabled(true);
   ui->cbAutoSeq->setEnabled(true);
-  if(SpecOp::FOX==m_config.special_op_id()) {
+  if(SpecOp::FOX==m_specOp) {
     ui->txFirstCheckBox->setChecked(true);
     ui->txFirstCheckBox->setEnabled(false);
     ui->cbHoldTxFreq->setChecked(true);
@@ -6697,7 +6691,7 @@ void MainWindow::on_actionFT8_triggered()
     ui->labDXped->setText(tr ("Fox"));
     on_fox_log_action_triggered();
   }
-  if(SpecOp::HOUND == m_config.special_op_id()) {
+  if(SpecOp::HOUND == m_specOp) {
     ui->houndButton->setChecked(true);
     ui->houndButton->setStyleSheet("background-color: #ff0000;");
     ui->txFirstCheckBox->setChecked(false);
@@ -6721,19 +6715,19 @@ void MainWindow::on_actionFT8_triggered()
     switch_mode (Modes::FT8);
   }
 
-  if(m_config.special_op_id() != SpecOp::HOUND) {
+  if(m_specOp != SpecOp::HOUND) {
       ui->houndButton->setChecked(false);
       ui->houndButton->setStyleSheet("");
   }
 
-  if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) {
+  if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
     QString t0="";
-    if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
-    if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
-    if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
-    if(SpecOp::RTTY==m_config.special_op_id()) t0="RTTY";
-    if(SpecOp::WW_DIGI==m_config.special_op_id()) t0="WW_DIGI";
-    if(SpecOp::ARRL_DIGI==m_config.special_op_id()) t0="ARRL_DIGI";
+    if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+    if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
+    if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day";
+    if(SpecOp::RTTY==m_specOp) t0="FT RU";
+    if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI";
+    if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI";
     if(t0=="") {
       ui->labDXped->setVisible(false);
     } else {
@@ -6743,7 +6737,7 @@ void MainWindow::on_actionFT8_triggered()
     on_contest_log_action_triggered();
   }
 
-  if((SpecOp::FOX==m_config.special_op_id() or SpecOp::HOUND==m_config.special_op_id()) and !m_config.split_mode() and !m_bWarnedSplit) {
+  if((SpecOp::FOX==m_specOp or SpecOp::HOUND==m_specOp) and !m_config.split_mode() and !m_bWarnedSplit) {
     QString errorMsg;
     MessageBox::critical_message (this,
        "Operation in FT8 DXpedition mode normally requires\n"
@@ -6961,14 +6955,14 @@ void MainWindow::on_actionQ65_triggered()
   ui->rh_decodes_headings_label->setText("UTC   dB   DT Freq    " + tr ("Message"));
   statusChanged();
 
-  if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) {
+  if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
     QString t0="";
-    if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
-    if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
-    if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
-    if(SpecOp::RTTY==m_config.special_op_id()) t0="RTTY";
-    if(SpecOp::WW_DIGI==m_config.special_op_id()) t0="WW_DIGI";
-    if(SpecOp::ARRL_DIGI==m_config.special_op_id()) t0="ARRL_DIGI";
+    if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+    if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
+    if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day";
+    if(SpecOp::RTTY==m_specOp) t0="FT RU";
+    if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI";
+    if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI";
     if(t0=="") {
       ui->labDXped->setVisible(false);
     } else {
@@ -6982,7 +6976,7 @@ void MainWindow::on_actionQ65_triggered()
 
 void MainWindow::on_actionMSK144_triggered()
 {
-  if(SpecOp::EU_VHF < m_config.special_op_id()) {
+  if(SpecOp::EU_VHF < m_specOp) {
 // We are rejecting the requested mode change, so re-check the old mode
     if("FT8"==m_mode) ui->actionFT8->setChecked(true); 
     if("JT4"==m_mode) ui->actionJT4->setChecked(true); 
@@ -6997,7 +6991,7 @@ void MainWindow::on_actionMSK144_triggered()
 // Make sure that MSK144 is not checked.
     ui->actionMSK144->setChecked(false);
     MessageBox::warning_message (this, tr ("Improper mode"),
-       "MSK144 not available if Fox, Hound, Field Day, RTTY, or WW Digi contest is selected.");
+       "MSK144 not available if Fox, Hound, Field Day, FT Roundup, WW Digi. or ARRL Digi contest is selected.");
     return;
   }
   m_mode="MSK144";
@@ -7044,8 +7038,8 @@ void MainWindow::on_actionMSK144_triggered()
   statusChanged();
 
   QString t0="";
-  if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
-  if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
+  if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+  if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
   if(t0=="") {
     ui->labDXped->setVisible(false);
   } else {
@@ -7811,7 +7805,7 @@ void MainWindow::transmit (double snr)
            true, false, snr, m_TRperiod);
   }
 
-  if((m_mode=="FT4" or m_mode=="FT8") and m_maxPoints>0 and SpecOp::ARRL_DIGI==m_config.special_op_id()) {
+  if((m_mode=="FT4" or m_mode=="FT8") and m_maxPoints>0 and SpecOp::ARRL_DIGI==m_specOp) {
     ui->dxCallEntry->setText(m_deCall);
     ui->dxGridEntry->setText(m_deGrid);
     genStdMsgs("-10");
@@ -7822,7 +7816,7 @@ void MainWindow::transmit (double snr)
     toneSpacing=-3;
     if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0;
     if(m_config.x4ToneSpacing()) toneSpacing=4*12000.0/1920.0;
-    if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1;
+    if(SpecOp::FOX==m_specOp and !m_tune) toneSpacing=-1;
     Q_EMIT sendMessage (m_mode, NUM_FT8_SYMBOLS,
            1920.0, ui->TxFreqSpinBox->value () - m_XIT,
            toneSpacing, m_soundOutput, m_config.audio_output_channel (),
@@ -8095,7 +8089,7 @@ void::MainWindow::VHF_features_enabled(bool b)
   ui->actionMessage_averaging->setEnabled(b && (m_mode=="JT4" or m_mode=="JT65"));
   ui->actionEnable_AP_JT65->setVisible (b && m_mode=="JT65");
 
-  if(!b && m_msgAvgWidget and (SpecOp::FOX != m_config.special_op_id()) and !m_config.autoLog()) {
+  if(!b && m_msgAvgWidget and (SpecOp::FOX != m_specOp) and !m_config.autoLog()) {
     if(m_msgAvgWidget->isVisible() and m_mode!="JT4" and m_mode!="JT9" and m_mode!="JT65") {
       m_msgAvgWidget->close();
     }
@@ -8934,7 +8928,7 @@ void MainWindow::statusUpdate () const
                                   m_config.my_callsign (), m_config.my_grid (),
                                   m_hisGrid, m_tx_watchdog,
                                   submode != QChar::Null ? QString {submode} : QString {}, m_bFastMode,
-                                  static_cast<quint8> (m_config.special_op_id ()),
+                                  static_cast<quint8> (m_specOp),
                                   ftol, tr_period, m_multi_settings->configuration_name (),
                                   m_currentMessage);
 }
@@ -9091,7 +9085,7 @@ void MainWindow::on_sbNlist_valueChanged(int n)
 void MainWindow::on_sbNslots_valueChanged(int n)
 {
   m_Nslots=n;
-  if(m_config.special_op_id()!=SpecOp::FOX) return;
+  if(m_specOp!=SpecOp::FOX) return;
   QString t;
   t = t.asprintf(" NSlots %d",m_Nslots);
   writeFoxQSO(t);
@@ -9100,7 +9094,7 @@ void MainWindow::on_sbNslots_valueChanged(int n)
 void MainWindow::on_sbMax_dB_valueChanged(int n)
 {
   m_max_dB=n;
-  if(m_config.special_op_id()!=SpecOp::FOX) return;
+  if(m_specOp!=SpecOp::FOX) return;
   QString t;
   t = t.asprintf(" Max_dB %d",m_max_dB);
   writeFoxQSO(t);
@@ -9108,7 +9102,7 @@ void MainWindow::on_sbMax_dB_valueChanged(int n)
 
 void MainWindow::on_pbFoxReset_clicked()
 {
-  if(m_config.special_op_id()!=SpecOp::FOX) return;
+  if(m_specOp!=SpecOp::FOX) return;
   auto button = MessageBox::query_message (this, tr ("Confirm Reset"),
       tr ("Are you sure you want to clear the QSO queues?"));
   if(button == MessageBox::Yes) {
@@ -9777,17 +9771,17 @@ void MainWindow::chkFT4()
   ui->cbAutoSeq->setEnabled(true);
   ui->respondComboBox->setVisible(true);
   ui->respondComboBox->setEnabled(true);
-  ui->labDXped->setVisible(m_config.special_op_id()!=SpecOp::NONE);
+  ui->labDXped->setVisible(m_specOp!=SpecOp::NONE);
   ui->respondComboBox->setVisible(ui->cbAutoSeq->isChecked());
 
-  if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) {
+  if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
     QString t0="";
-    if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
-    if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
-    if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
-    if(SpecOp::RTTY==m_config.special_op_id()) t0="RTTY";
-    if(SpecOp::WW_DIGI==m_config.special_op_id()) t0="WW_DIGI";
-    if(SpecOp::ARRL_DIGI==m_config.special_op_id()) t0="ARRL_DIGI";
+    if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+    if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
+    if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day";
+    if(SpecOp::RTTY==m_specOp) t0="FT RU";
+    if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI";
+    if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI";
     if(t0=="") {
       ui->labDXped->setVisible(false);
     } else {
@@ -9796,7 +9790,7 @@ void MainWindow::chkFT4()
     }
     on_contest_log_action_triggered();
   }
-  if (SpecOp::HOUND == m_config.special_op_id() or SpecOp::FOX == m_config.special_op_id()) {
+  if (SpecOp::HOUND == m_specOp or SpecOp::FOX == m_specOp) {
     ui->labDXped->setVisible(false);
   }
 
@@ -9951,7 +9945,7 @@ void MainWindow::on_ft8Button_clicked()
 {
     ui->houndButton->setChecked(false);
     ui->houndButton->setStyleSheet("");
-    if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+    if(m_specOp==SpecOp::HOUND) m_config.setSpecial_None();
     on_actionFT8_triggered();
 }
 
@@ -9959,7 +9953,7 @@ void MainWindow::on_ft4Button_clicked()
 {
     ui->houndButton->setChecked(false);
     ui->houndButton->setStyleSheet("");
-    if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+    if(m_specOp==SpecOp::HOUND) m_config.setSpecial_None();
     on_actionFT4_triggered();
 }
 
@@ -9967,7 +9961,7 @@ void MainWindow::on_msk144Button_clicked()
 {
     ui->houndButton->setChecked(false);
     ui->houndButton->setStyleSheet("");
-    if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+    if(m_specOp==SpecOp::HOUND) m_config.setSpecial_None();
     on_actionMSK144_triggered();
 }
 
@@ -9975,7 +9969,7 @@ void MainWindow::on_q65Button_clicked()
 {
     ui->houndButton->setChecked(false);
     ui->houndButton->setStyleSheet("");
-    if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+    if(m_specOp==SpecOp::HOUND) m_config.setSpecial_None();
     on_actionQ65_triggered();
 }
 
@@ -9983,6 +9977,6 @@ void MainWindow::on_jt65Button_clicked()
 {
     ui->houndButton->setChecked(false);
     ui->houndButton->setStyleSheet("");
-    if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+    if(m_specOp==SpecOp::HOUND) m_config.setSpecial_None();
     on_actionJT65_triggered();
 }
diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h
index 1de6f4d53..aa1796c4a 100644
--- a/widgets/mainwindow.h
+++ b/widgets/mainwindow.h
@@ -105,6 +105,7 @@ public:
   using Frequency = Radio::Frequency;
   using FrequencyDelta = Radio::FrequencyDelta;
   using Mode = Modes::Mode;
+  using SpecOp = Configuration::SpecialOperatingActivity;
 
   explicit MainWindow(QDir const& temp_directory, bool multiple, MultiSettings *,
                       QSharedMemory *shdmem, unsigned downSampleFactor,
@@ -562,6 +563,8 @@ private:
   bool    m_bOK_to_chk=false;
   bool    m_bSentReport=false;
 
+  SpecOp  m_specOp;
+
   enum
     {
       CALLING,