diff --git a/Configuration.cpp b/Configuration.cpp
index ebb6380b3..f4bf79e82 100644
--- a/Configuration.cpp
+++ b/Configuration.cpp
@@ -571,6 +571,7 @@ private:
   DecodeHighlightingModel decode_highlighing_model_;
   DecodeHighlightingModel next_decode_highlighing_model_;
   bool highlight_by_mode_;
+  bool highlight_only_fields_;
   bool include_WAE_entities_;
   int LotW_days_since_upload_;
 
@@ -753,6 +754,7 @@ bool Configuration::pwrBandTuneMemory () const {return m_->pwrBandTuneMemory_;}
 LotWUsers const& Configuration::lotw_users () const {return m_->lotw_users_;}
 DecodeHighlightingModel const& Configuration::decode_highlighting () const {return m_->decode_highlighing_model_;}
 bool Configuration::highlight_by_mode () const {return m_->highlight_by_mode_;}
+bool Configuration::highlight_only_fields () const {return m_->highlight_only_fields_;}
 bool Configuration::include_WAE_entities () const {return m_->include_WAE_entities_;}
 
 void Configuration::set_calibration (CalibrationParams params)
@@ -959,6 +961,7 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
   , station_insert_action_ {tr ("&Insert ..."), nullptr}
   , station_dialog_ {new StationDialog {&next_stations_, &bands_, this}}
   , highlight_by_mode_ {false}
+  , highlight_only_fields_ {false}
   , include_WAE_entities_ {false}
   , LotW_days_since_upload_ {0}
   , last_port_type_ {TransceiverFactory::Capabilities::none}
@@ -1325,6 +1328,7 @@ void Configuration::impl::initialize_models ()
 
   next_decode_highlighing_model_.items (decode_highlighing_model_.items ());
   ui_->highlight_by_mode_check_box->setChecked (highlight_by_mode_);
+  ui_->only_fields_check_box->setChecked (highlight_only_fields_);
   ui_->include_WAE_check_box->setChecked (include_WAE_entities_);
   ui_->LotW_days_since_upload_spin_box->setValue (LotW_days_since_upload_);
 
@@ -1474,6 +1478,7 @@ void Configuration::impl::read_settings ()
   if (!highlight_items.size ()) highlight_items = DecodeHighlightingModel::default_items ();
   decode_highlighing_model_.items (highlight_items);
   highlight_by_mode_ = settings_->value("HighlightByMode", false).toBool ();
+  highlight_only_fields_ = settings_->value("OnlyFieldsSought", false).toBool ();
   include_WAE_entities_ = settings_->value("IncludeWAEEntities", false).toBool ();
   LotW_days_since_upload_ = settings_->value ("LotWDaysSinceLastUpload", 365).toInt ();
   lotw_users_.set_age_constraint (LotW_days_since_upload_);
@@ -1588,6 +1593,7 @@ void Configuration::impl::write_settings ()
   settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ()));
   settings_->setValue ("DecodeHighlighting", QVariant::fromValue (decode_highlighing_model_.items ()));
   settings_->setValue ("HighlightByMode", highlight_by_mode_);
+  settings_->setValue ("OnlyFieldsSought", highlight_only_fields_);
   settings_->setValue ("IncludeWAEEntities", include_WAE_entities_);
   settings_->setValue ("LotWDaysSinceLastUpload", LotW_days_since_upload_);
   settings_->setValue ("toRTTY", log_as_RTTY_);
@@ -2130,6 +2136,7 @@ void Configuration::impl::accept ()
       Q_EMIT self_->decode_highlighting_changed (decode_highlighing_model_);
     }
   highlight_by_mode_ = ui_->highlight_by_mode_check_box->isChecked ();
+  highlight_only_fields_ = ui_->only_fields_check_box->isChecked ();
   include_WAE_entities_ = ui_->include_WAE_check_box->isChecked ();
   LotW_days_since_upload_ = ui_->LotW_days_since_upload_spin_box->value ();
   lotw_users_.set_age_constraint (LotW_days_since_upload_);
diff --git a/Configuration.hpp b/Configuration.hpp
index dbf232fd5..3e57267e3 100644
--- a/Configuration.hpp
+++ b/Configuration.hpp
@@ -177,6 +177,7 @@ public:
   LotWUsers const& lotw_users () const;
   DecodeHighlightingModel const& decode_highlighting () const;
   bool highlight_by_mode () const;
+  bool highlight_only_fields () const;
   bool include_WAE_entities () const;
  
   enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, FOX, HOUND};
diff --git a/Configuration.ui b/Configuration.ui
index b3d0836d3..f473bb6b4 100644
--- a/Configuration.ui
+++ b/Configuration.ui
@@ -2206,8 +2206,45 @@ Right click for insert and delete options.
          
           Decode Highlightling
          
-         
-          - 
+         
+          - 
+           
+            - 
+             
+              
+               Qt::Horizontal
+              
+              
+               
+                40
+                20
+               
+              
+             
+            +
- 
+             
+              
+               <html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html>
+              
+              
+               Rescan ADIF Log
+              
+             
+            +           
+
+- 
+           
+            
+             <html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html>
+            
+            
+             Reset Highlighting
+            
+           
+          +
- 
            
             
              
@@ -2247,69 +2284,32 @@ Right click for insert and delete options.
             
            
           -
- 
-           
+          - 
+           
             
-             <html><head/><body><p>Push to reset all highlight items above to default values and priorities.</p></body></html>
+             <html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html>
             
             
-             Reset Highlighting
+             Highlight by Mode
             
            
           -
- 
-           
-            - 
-             
-              
-               <html><head/><body><p>Check to indicate new DXCC entities, grid squares, and callsigns per mode.</p></body></html>
-              
-              
-               Highlight by Mode
-              
-             
-            -
- 
-             
-              
-               Qt::Horizontal
-              
-              
-               
-                40
-                20
-               
-              
-             
-            -
- 
-             
-              
-               <html><head/><body><p>Click to scan the wsjtx_log.adi ADIF file again for worked before information</p></body></html>
-              
-              
-               Rescan ADIF Log
-              
-             
-            -           
+
- 
+           
+            
+             Include extra WAE entities
+            
+           
           -
- 
-           
-            - 
-             
-            -
- 
-             
-              
-               Include extra WAE entities
-              
-              
-               include_WAE_check_box
-              
-             
-            -           
+
- 
+           
+            
+             Check to for grid highlighting to only apply to unworked grid fields
+            
+            
+             Only grid Fields sought
+            
+           
           
diff --git a/logbook/WorkedBefore.cpp b/logbook/WorkedBefore.cpp
index aa65ab651..a1d774e4e 100644
--- a/logbook/WorkedBefore.cpp
+++ b/logbook/WorkedBefore.cpp
@@ -7,6 +7,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -362,7 +363,8 @@ class WorkedBefore::impl final
 {
 public:
   impl (Configuration const * configuration)
-    : path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
+    : configuration_ {configuration}
+    , path_ {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath (logFileName)}
     , prefixes_ {configuration}
   {
   }
@@ -373,6 +375,7 @@ public:
     loader_watcher_.setFuture (async_loader_);
   }
 
+  Configuration const * configuration_;
   QString path_;
   AD1CCty prefixes_;
   QFutureWatcher loader_watcher_;
@@ -491,34 +494,56 @@ bool WorkedBefore::country_worked (QString const& country, QString const& mode,
 
 bool WorkedBefore::grid_worked (QString const& grid, QString const& mode, QString const& band) const
 {
-  if (mode.size ())
+  auto gridsquare = grid.left (4).toUpper ();
+  if (m_->configuration_->highlight_only_fields ())
     {
-      if (band.size ())
+      // can't use a direct set find operation or a set operation with
+      // a (CompatibleKey, CompatibleCompare) concept so we must
+      // partially scan the index
+      auto range = boost::make_iterator_range (
+                                               m_->worked_.get ().lower_bound (gridsquare.left (2))
+                                               , m_->worked_.get ().upper_bound (gridsquare.left (2) + "99"));
+      for (worked_entry const& worked : range)
         {
-          return m_->worked_.get ().end ()
-            != m_->worked_.get ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper (), band.toUpper ()));
-        }
-      else
-        {
-          // partial key lookup
-          return m_->worked_.get ().end ()
-            != m_->worked_.get ().find (std::make_tuple (grid.left (4).toUpper (), mode.toUpper ()));
+          if ((!mode.size () || mode.toUpper () == worked.mode_)
+              && (!band.size () || worked.band_ == band.toUpper ()))
+            {
+              return true;
+            }
         }
     }
   else
     {
-      if (band.size ())
+      if (mode.size ())
         {
-          return m_->worked_.get ().end ()
-            != m_->worked_.get ().find (std::make_tuple (grid.left (4).toUpper (), band.toUpper ()));
+          if (band.size ())
+            {
+              return m_->worked_.get ().end ()
+                != m_->worked_.get ().find (std::make_tuple (gridsquare, mode.toUpper (), band.toUpper ()));
+            }
+          else
+            {
+              // partial key lookup
+              return m_->worked_.get ().end ()
+                != m_->worked_.get ().find (std::make_tuple (gridsquare, mode.toUpper ()));
+            }
         }
       else
         {
-          // partial key lookup
-          return m_->worked_.get ().end ()
-            != m_->worked_.get ().find (grid.left (4).toUpper ());
+          if (band.size ())
+            {
+              return m_->worked_.get ().end ()
+                != m_->worked_.get ().find (std::make_tuple (gridsquare, band.toUpper ()));
+            }
+          else
+            {
+              // partial key lookup
+              return m_->worked_.get ().end ()
+                != m_->worked_.get ().find (gridsquare);
+            }
         }
     }
+  return false;
 }
 
 bool WorkedBefore::call_worked (QString const& call, QString const& mode, QString const& band) const