diff --git a/.gitignore b/.gitignore
index 9d9c1ac..c16f920 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,6 @@ lib/
 cqrlog
 
 tools/cqrlog.?.gz
+.idea
+
+
diff --git a/ctyfiles/sat_name.tab b/ctyfiles/sat_name.tab
index 97cd17b..06b3cb5 100644
--- a/ctyfiles/sat_name.tab
+++ b/ctyfiles/sat_name.tab
@@ -1,8 +1,9 @@
+AISAT1|AISAT-1 AMSAT India APRS Digipeater
 AO-10|AMSAT-OSCAR 10
+AO-109|AMSAT-OSCAR 109
 AO-13|AMSAT-OSCAR 13
 AO-16|AMSAT-OSCAR 16
 AO-21|OSCAR 21/RS-14
-AO-24|Arsene-OSCAR 24
 AO-27|AMRAD-OSCAR 27
 AO-3|AMSAT-OSCAR 3
 AO-4|AMSAT-OSCAR 4
@@ -13,22 +14,26 @@ AO-7|AMSAT-OSCAR 7
 AO-73|AMSAT-OSCAR 73
 AO-8|AMSAT-OSCAR 8
 AO-85|AMSAT-OSCAR 85 (Fox-1A)
-AO-91|AMSAT-OSCAR 91 (RadFxSat/Fox-1B)
+AO-91|AMSAT-OSCAR 91 (RadFxSat / Fox-1B)
 AO-92|AMSAT-OSCAR 92 (Fox-1D)
 ARISS|ARISS
+Arsene|OSCAR 24
+BO-102|BIT Progress-OSCAR 102 (CAS-7B)
 BY70-1|Bayi Kepu Weixing 1
-CAS-3H|LilacSat 2
+CAS-3H|LilacSat-2
 CAS-4A|CAMSAT 4A (CAS-4A)
 CAS-4B|CAMSAT 4B (CAS-4B)
 DO-64|Delfi OSCAR-64
 EO-79|FUNcube-3
-EO-88|Emirates OSCAR 88 (Nayif-1)
+EO-88|Emirates-OSCAR 88 (Nayif-1)
 FO-12|Fuji-OSCAR 12
 FO-20|Fuji-OSCAR 20
 FO-29|Fuji-OSCAR 29
 FO-99|Fuji-OSCAR 99 (NEXUS)
 FS-3|FalconSAT 3
-HO-68|Hope OSCAR 68
+HO-107|HuskySat OSCAR 107
+HO-113|HO-113
+HO-68|Hope-Oscar 68
 IO-86|Indonesia-OSCAR 86 (LAPAN-ORARI)
 JO-97|Jordan-OSCAR 97(JY1Sat)
 KEDR|ARISSat-1
@@ -36,14 +41,16 @@ LO-19|Lusat-OSCAR 19
 LO-78|LituanicaSAT-1
 LO-87|LUSEX-OSCAR 87
 LO-90|LilacSat-OSCAR 90 (LilacSat-1)
-MIREX|Mir packet digipeater
-NO-103|BRICSAT2
-NO-104|PSAT2
+MAYA-3|Cubesat
+MAYA-4|Cubesat
+MIREX|MIR Packet Digipeater
+NO-103|Navy-OSCAR 103 (BRICSAT 2)
+NO-104|Navy-OSCAR 104 (PSAT 2)
 NO-44|Navy-OSCAR 44
-NO-83|BRICSat
+NO-83|BRICsat
 NO-84|PSAT
-PO-101|Diwata 2B
-QO-100|Qatar-OSCAR 100 (Es`hail-2/P4A)
+PO-101|Phillipines-OSCAR-101 (Diwata-2)
+QO-100|Qatar-OSCAR 100 (Es'hail-2/P4A)
 RS-1|Radio Sputnik 1
 RS-10|Radio Sputnik 10
 RS-11|Radio Sputnik 11
@@ -51,22 +58,25 @@ RS-12|Radio Sputnik 12
 RS-13|Radio Sputnik 13
 RS-15|Radio Sputnik 15
 RS-2|Radio Sputnik 2
+RS-44|Radio Sputnik 44 (DOSAAF-85)
 RS-5|Radio Sputnik 5
 RS-6|Radio Sputnik 6
 RS-7|Radio Sputnik 7
 RS-8|Radio Sputnik 8
-RS-44|Radio Sputnik 44 (DOSAAF-85)
-SAREX|Shuttle Amateur Radio Experiment packet digipeater
+SAREX|Shuttle Amateur Radio Experiment (SAREX) Digipeater
 SO-35|Sunsat-OSCAR 35
 SO-41|Saudi-OSCAR 41
 SO-50|Saudi-OSCAR 50
-SO-67|Sumbandila OSCAR 67
+SO-67|Sumbandila Oscar 67
+TAURUS|Taurus-1 (Jinniuzuo-1)
+TO-108|TQ-OSCAR 108 (CAS-6 / TQ-1)
 UKUBE1|UKube-1 (FUNcube-2)
 UO-14|UOSAT-OSCAR 14
+UVSQ|CubeSat
 VO-52|VUsat-OSCAR 52
-XW-2A|Hope 2A
-XW-2B|Hope 2B
-XW-2C|Hope 2C
-XW-2D|Hope 2D
-XW-2E|Hope 2E
-XW-2F|Hope 2F
+XW-2A|Hope 2A (CAS-3A)
+XW-2B|Hope 2B (CAS-3B)
+XW-2C|Hope 2C (CAS-3C)
+XW-2D|Hope 2D (CAS-3D)
+XW-2E|Hope 2E (CAS-3E)
+XW-2F|Hope 2F (CAS-2F)
diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile
index feec81e..527bd03 100644
--- a/docker-build/Dockerfile
+++ b/docker-build/Dockerfile
@@ -1,7 +1,9 @@
-FROM ubuntu:eoan
+FROM ubuntu:focal
 
 RUN apt-get update && apt-get -y upgrade
 
+ENV DEBIAN_FRONTEND="noninteractive" TZ="Europe/London"
+
 RUN apt-get install -y git lazarus-ide lcl lcl-gtk2 lcl-nogui lcl-units lcl-utils lazarus lazarus-doc lazarus-src fp-units-misc fp-units-rtl fp-utils fpc fpc-source libssl-dev
 
 RUN mkdir -p /usr/local/cqrlog-alpha /home/cqrlog/build
diff --git a/help/a_page_template.html b/help/a_page_template.html
new file mode 100644
index 0000000..11f6fea
--- /dev/null
+++ b/help/a_page_template.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en-us">
+<head>
+    <title>CQRLOG - SUBJECT HERE</title></head>
+<body>
+<table border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tbody>
+    <tr>
+        <td valign="top"><img src="img/exc.png"></td>
+        <td align="justify" bgcolor="ffffcc" valign="top"><strong>
+            <font color="red">WARNING!</font></strong>
+            Backup your data often! BACKUP your log directory at the end of EVERY session!
+            All that you need to backup and store in a safe place is the log database directory
+            located in the ~/.config/cqrlog/database folder, or you can enable the autobackup function
+            in Preferences. This autobackup function creates an ADIF file with a backup of your log.
+        </td>
+    </tr>
+    </tbody>
+</table>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+<div style="text-align: left;"><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
+<p align="center"><img src="img/line.png"></p>
+<H2>SUBJECT HERE</H2><br><br>
+
+
+PAGE TEXT HERE
+
+
+
+
+<p align="center"><img src="img/line.png"></p>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+</body>
+</html>
diff --git a/help/contest.html b/help/contest.html
index c1552cb..ddc282a 100644
--- a/help/contest.html
+++ b/help/contest.html
@@ -29,26 +29,30 @@
 <br>
 <div style="text-align: left;"><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
 <p align=center><img src=img/line.png></p>
-
 <a name=co1><h2><strong>Contest support</strong></h2></a>
+<p>You will find contest selection from <b>NewQSO/Window</b> dropdown menu.
+<br><br>When contest window is open <b>NewQSO</b> has contest exchange fields visible. You may have to stretch <b>NewQSO </b> window horizontally to see them.
+<br>You <b>do not</b> normally need <b>NewQSO</b> window during contest. Only need for <b>NewQSO</b> is in case you have to edit an already worked qso.
+ <br> Select qso normally via <b>QSO list</b> and press <b>edit QSO button</b> and you are able to edit qso, also the contest message part of it.
+ <br><br><b>NewQSO</b>  is not meant to be used during contest qso feeds. <b>All new qsos are entered via contest window.</b></p>
+
 <p align="center">
    <img src="img/contest.png">
 </p>
 <p>
-<b>RECOMMENDATION:</b> Make new log for each contest, do not allow qrz/hamqth search. It slows things.
+<b>RECOMMENDATION:</b> Make new log for each contest, consider not to allow qrz/hamqth search, it may slow down qso feed.
 <b>Note:</b> This is <b>NOT</b> a contest logging add-on!!! It is a contest-notepad.
 It is meant to be a tool for "Sunday contesters working in Tourist Class". Do not expect wonders!
 </p><p>
-Contest window is just a "child form" for NewQSO to make qso logging faster when working in contests.
-With Tru and Msg is Loc setting it is useful also in VHF, UHF, SHF Tropo, Es etc. openings for fast qso
-logging.
+Contest window is just a "child form" for <b>NewQSO</b> to make qso logging faster when working in contests.
+With <b>Tru</b> and <b>Msg is Loc</b> setting it is useful also in VHF, UHF, SHF Tropo, Es etc. openings for fast qso
+logging. Perhaps also in some other operations like WWFF activations.
 <br><br>
-Contest window has a simple dupe check (same call in same mode and band) that turns typed duplicate callsign bold red printed.
-<br>To get this working properly you must either create a new log for every contest or set "preferences/fldigi/wsjt interface/
-<b>WB4 check starts from/call Date</b>" and check the <b>"call" checkbox</b>. See :  <a href="h1.html#ch2b">Quick start: wsjt-x interface</a> Remember to uncheck "call" checkbox after contest is over.
+Contest window has a simple dupe check that turns typed duplicate callsign bold red printed. If you save a duplicate qso it is marked as "Dupe" in "Comment to qso" field.
+<br>To get this working properly you must <b>either</b> create a new log for every contest <b>or</b> set dupe start date (I.E. contest starting day) with button <b>"from YYYY-MM-DD"</b>
 </p>
 <p>
-<b>HOTKEYS</b> work like in <a href="h20.html">New QSO window</a>.
+<b>HOTKEYS</b> work like with <a href="h20.html">New QSO window</a>.
 <ul><li> <b>2x ESC</b> clears all fileds</li>
 <li>Note: <b>1x ESC</b> returns cursor back to Call-field (if cursor is in some of the other fields like RSTr) and places cursor at the end of callsign for possible repairs.<br>
   It also halts CW memory output if it is just running.</li>
@@ -60,14 +64,22 @@ Contest window has a simple dupe check (same call in same mode and band) that tu
 <p>
 Contest window has following fields and checkboxes:<br>
 <ul>
-<li><b>Tab All</b> when checked overrides all other Tab settings (below) and Tab Order is Call-RSTs-NRs-MSGs-RSTr-NRr-MSGr-SaveQSO-ClearAll</li>
+<li><b>Tab in order</b> when checked overrides all other Tab settings (below) and Tab Order is Call-RSTs-NRs-MSGs-RSTr-NRr-MSGr-SaveQSO-ClearAll</li>
 <li><b>Call</b> when you leave this field callsign is moved to NewQSO. Callsign turns BOLD RED if it is duplicate.</li>
 <li><b>SPACE is TAB</b> when checked space bar acts like TAB-key moving to next field. <b>Note:</b>This prevents typing space (perhaps needed in MSG fields).</li>
+<li><b>Dupe check</b> Default checked.
+<li><b>from YY-MM-DD</b> Button to set duplicate check start date (I.E. contest start date). Must be set if you have all qsos in same log. 
+<br>If every contest has it's own log can be as default (1900-01-01). Button is not visible if <b>Ignore dupes</b> is set.
+<li><b>NoMode4Dupe</b> Means that same callsign can be worked again on same band if mode is different.
+</li>
+<li><b>Ignore dupes</b> Do not check duplicate qsos at all.</li>
 <br>
-<li><b>RST s</b> copied from NewQSO, so should correspond used mode. Can be changed.</li>
+<li><b>RST s</b> copied from NewQSO, so should correspond used mode. Can be changed.
+<br><b> Note:</b> defaults to 599 (as NewQSO) If mode is not CW it will change after cursor leaves callsign column. So do not worry when working non-cw contest!</li>
 <li><b>Tru</b> means you like to exchange true reports. Makes Tab order to stop at RST (s & r) fields. Useful in some high band contests, Es and tropo openings.</li>
 <br>
-<li><b>NR s</b> serial number to send. <b>Note:</b> you can type only numbers to NR s field.</li>
+<li><b>NR s</b> serial number to send. 
+<br><b> Note:</b> you can type only numbers to NR s field.</li>
 <li> <b>Inc</b> if checked it will auto increment serial number. You may change this number at any time. Increment goes on from typed number.</li>
 <br>
 <li><b>MSG s</b> sometimes you may need an additional message with number, or just a message with no number. On high band contests you may type your locator here.</li>
@@ -75,15 +87,28 @@ Contest window has following fields and checkboxes:<br>
 <br>
 <li><b>RST r</b> copied from NewQSO, so should correspond used mode. Can be changed.</li>
 <br>
-<li><b>NR r</b> serial number you receive. <b>Note:</b> you can type only numbers to NR r field. </li>
+<li><b>NR r</b> serial number you receive.
+<br><b> Note:</b> you can type only numbers to NR r field. </li>
 <li><b>No </b> if no serial number then setting this changes tab order so that it jumps directly to MSG r. </li>
 <br>
 <li><b>MSG r</b> message you receive</li>
-<li> <b>MSG is LOC</b> if checked then message will be logged <b>ALSO</b> as locator grid <b>AND</b> SRX String</li>
+<li> <b>MSG is Grid</b> If '<b>MSG is ...</b>' is checked then message will be logged in <i> SRX_String </i><b>AND ALSO</b> to <i>selected NewQSO column</i>. 
+<br><br> By default <b>Msg is Grid</b>. It can be changed with right mouse click on the text.
+ If <b>checked</b> then input will turn red if character count is odd. Maximum of 6 characters locator can be entered.
+<br>If <b>MSG is Grid</b> but the entered locator is <b>not valid</b> it will <b>NOT</b> be copied to <i>NewQSO/Grid column</i> and stays only in <i>Srx_String</i>.
+<br> 
+<br>In case of <b>MSG is State</b> and callsign is detected by prefix to be a Germany callsign srx_string is copied to <b>DarcDOC</b> column, orherwise to <b>State</b> column.
+<br>In case of <b>MSG is Comment</b> and dupe checking is allowed, and dupe found, Comment to QSO contains first "Dupe " and then the copied message.</li>
 <br>
-<li><b>Save QSO</b> Save QSO button at NewQSO, increments NR and clears all fields. <b>Note:</b> pressing <b>ENTER at any time</b> after Call field is filled does the same.</li>
-<li><b>Clear all</b> Clear all fields.  <b>Note:</b> Pressing 2x ESC key does the same.</li>
+<li><b>Save QSO</b> Save QSO button at NewQSO, increments NR and clears all fields.
+<br><b> Note:</b> pressing <b>ENTER at any time</b> after Call field is filled does the same.</li>
+<li><b>Clear QSO</b> Clear all QSO information.
+<br><b> Note:</b> Pressing 2x ESC key does the same.</li>
+<br><li><b>Clear all</b> Clear all fields. Usefull when starting a new contest to remove saved settings.</li>
 </ul>
+<br>
+All settings, including contest name, are saved when closing contest form. When opening cqrlog and contest form again after rest period you can directly continue contest working.
+
 </p>
 <p>
 <b>Typical contest qso goes like this:</b><br>
@@ -95,9 +120,8 @@ callsign of least three characters long. Sent/Received number and message are no
 <br><b>There is no need to use the mouse.</b> Keep your hands on keyboard (and possible on CW key / PTT (if not foot pedal in use)). It is faster.</p>
 <p>
 Contest numbers and messages are saved in log into their own columns. Use <b>preferences/Visible columns</b> to show them in <b>Qso list</b>.
-For editing a qso these columns appear to <b>NewQSO</b> window when <b>contest</b> window is open and NewQso window is streched horizontally (DXCCinfo may override them).
-<br> 
-CW macros Have some new items. Look them from <a href="h26.html">CW Operation</a>
+<br><br>
+<b>CW macros</b> can be used for sending contest meessages. Look them from help section <a href="h26.html">CW Operation</a>
 </p>
 <p>
 ADIF exports fields to right tags.<br><br>
@@ -116,8 +140,9 @@ HTML export will look like this:<br>
 </p>
 <p>
 </br>
-Most contests expect <b>Cabrillo</b> log format. <b>There is no support for this. You have to make ADIF export of qsos</b>
-and then use separate program if you want to send logs.</p><p>
+Most contests expect <b>Cabrillo</b> log format. Cqrlog has a limited support of Cabrillo exports. Mostly enough for a Sunday contester.
+<br>In case you want to use external Cabrillo program you have to make ADIF export of qsos</b>
+and then use another program.</p><p>
 </br>
 I found nice <b>adif2cabrillo</b> program for Linux from <a href="http://users.telenet.be/on4qz/a2c/index.html" target="_blank">http://users.telenet.be/on4qz/</a> that supports ADIF importing.
 </p></p>Starting is bit complicated: 
diff --git a/help/cwd.html b/help/cwd.html
index e4ac3c1..dc45a0b 100644
--- a/help/cwd.html
+++ b/help/cwd.html
@@ -20,9 +20,7 @@
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h26.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h26.html">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
@@ -99,9 +97,7 @@ the sidetone of your radio rather than the PC speaker.
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h26.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h26.html">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
diff --git a/help/cwh.html b/help/cwh.html
index ddbf886..5b5f723 100644
--- a/help/cwh.html
+++ b/help/cwh.html
@@ -20,9 +20,7 @@
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h1.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h1.html#ch2">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
@@ -52,9 +50,7 @@ Commands used for HamLib CW are:
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h1.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h1.html#ch2">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
diff --git a/help/firsttime.html b/help/firsttime.html
new file mode 100644
index 0000000..108c7a1
--- /dev/null
+++ b/help/firsttime.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en-us">
+<head>
+    <title>CQRLOG - Starting for the first time</title></head>
+<body>
+<table border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tbody>
+    <tr>
+        <td valign="top"><img src="img/exc.png"></td>
+        <td align="justify" bgcolor="ffffcc" valign="top"><strong>
+            <font color="red">WARNING!</font></strong>
+            Backup your data often! BACKUP your log directory at the end of EVERY session!
+            All that you need to backup and store in a safe place is the log database directory
+            located in the ~/.config/cqrlog/database folder, or you can enable the autobackup function
+            in Preferences. This autobackup function creates an ADIF file with a backup of your log.
+        </td>
+    </tr>
+    </tbody>
+</table>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+<div style="text-align: left;"><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
+<p align="center"><img src="img/line.png"></p>
+<H2>Starting CQRLOG for the first time</H2>
+<p>First start of CQRLOG is important.
+<br>Thanks for opening the help to your web browser during this first run.  Help has many answers to your future questions and you can open it again from many menus of CQRLOG.
+ We hope that you at least check now the left frame to see what topics you may find from help if needed.
+</p><p> Then you have to decide where you put your logs. You have three ways to save logs and each of them has it's good and bad sides.
+<br><br><img src="img/firsts1.png" >
+
+
+<H4>your Linux user folder</H4>
+This is the default way. If you close <b>Select SQL for logs</b> window, without pressing <b>OK</b>, this selection is used.
+<br>Log data is saved to  ~/.config/cqrlog/database folder. Access to that data is done by starting a new SQL server thread for that.
+<br>This makes full backup very easy. Just copy the ~/.config/cqrlog folder with all files and subfolders. You can also move your CQRLOG to another PC that uses same version SQL engine, and has CQRLOG installed, by
+just copying ~/.config/cqrlog to another PC's user folder. How ever if username (actually user ID) there is different you have to run chown command to set the ownership of all files and folders for current username.
+
+<br><br>Unfortunately using this way to save logs causes most of database connection problems with CQRLOG mostly because of modern Linux security settings.
+
+</p><p>
+<h4>local machine's SQL server</h4>
+This option uses SQL server already installed to your machine during CQRLOG installation.
+<br>When using this option CQRLOG tries first to create SQL user with proper privileges to use the SQL server and then set proper values to "Database connection" window.
+<br>CQRLOG will create two scripts to your home folder: <b>create_cqr_user.sh</b> and <b>backup_all_cqr.sh</b>
+<br>The first one creates database user and is normally used only once. It needs your Linux user password to run this script with sudo.
+<br>The second one allows you to make full backup of all CQRLOG logs currently in database by starting this scipt in command-line terminal. 
+This script needs program mysqldump and cqrlog database users username and password to access database same way as CQRLOG itself does.
+Backup creates <b>allcqrlogs.sql</b> in <b>/tmp</b> folder. You have to move this file to safe place because most Linuxes do clean up /tmp folder during startup.
+<br>It is also recommended to save <b>~/.config/cqrlog folder with allcqrlogs.sql </b>file. Script tells you how you can restore all logs back.
+<br><br>CQRLOG tries to open most common terminals <b>xterm, gnome-terminal </b>or<b> lxterminal</b> to execute <b>create_cqr_user.sh</b>. If that fails you have to run script manually from your command-line terminal.
+</p>
+<h4>external networked SQL server</h4>
+With this option you have to define values to connect SQL server by yourself. Address, port, user and passord are required to connect to external SQL server.
+<br>SQL user and it's privileges have to be created by SQL server administrator.
+<br>It can exist in your home network or in Internet. When using internet SQL servers it is most recommended to use VPN or SSH tunnel connection for security reasons.
+</p>
+<p><br>
+After any of these options is selected, <b>OK</b> button pressed, and connection to SQL database established, CQRLOG tries to create first empty Log. This can take some time, so plese be patient.
+<br>When log is ready you can open it and go to <b>NewQSO/File/Preferences</b> to set all station details and other settings affecting to CQRLOG.
+In case of local and external SQL servers there might already be a log, or logs. Then no new log is created.<br><br><b>NOTE:</b> All settings are log based. You can have other logs with different settings and station information. 
+<br>Once you have got all settings ready you can export them to file. It happens at CQRLOG start in <b>Database connection</b> window with <b>Utils/Export/configuration</b>.
+<br>When a new log is created you can use <b>Utils/Import/configuration</b> from your file to get all log settings similar with this new log.
+</p><p>
+<b>NOTE:</b> If you can not get one of these options work then remove <b>~/.config/cqrlog</b> folder to get new fresh start. There is no need to reinstall CQRLOG. 
+After done that start CQRLOG again to try with another of these options.<b> Removing this folder removes all local logs and settings!</b> 
+
+
+<p align="center"><img src="img/line.png"></p>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+</body>
+</html>
diff --git a/help/fldxml.html b/help/fldxml.html
index c030a77..8089c3f 100644
--- a/help/fldxml.html
+++ b/help/fldxml.html
@@ -77,10 +77,11 @@ selection to use XmlRpC.</br>With selection you can choose “the old way” for
 address.</br>
 If you use fldigi on other PC remember to open firewall at fldigi-PC side for TCP traffic to port 7362 from your local network.</p>
 
-<p>Parameter &quot;Drop after SyncErr &gt;&quot; automates remote mode closing when fldigi is closed. But as it may affect also (in slow PCs) fldigi started by cqrlog it can be changed. 0 disables, 1-20 means timer rounds until drop.
- When closing happens it leaves text &quot;Socket error, check fldigi!&quot; to NewQSO field &quot;Comment QSO&quot;.
- </p><p> In all cases fldigi must be started from command line with parameter: <b>fldigi --xmlrpc-server-port 7362</b>
-</br>When closing fldgi properly and answering YES to save setup changes the next start should open xmlrpc server without parameters from usual icon.</p>
+<p>Parameter <b>&quot;Drop after SyncErr &gt;&quot; </b> automates remote mode closing when fldigi is closed. Because SyncError happens when fldigi can not be reached it can cause remote mode closing already at start of entering remote mode in case PC is slow and fldigi is set to start when entering remote mode.
+<br>Therefore the value should be big enough to give time for fldigi to start. Value 0 disables drop, 1-20 means timer rounds to wait before drop the remote mode.
+<br>In case of remote mode drop happens it leaves text <b> &quot;Socket error, check fldigi!&quot; </b>to NewQSO field <b> &quot;Comment QSO&quot; </b> to give information that remote mode dropped by sync error. I.E. fldigi could not be connected. 
+ </p><p> In all cases fldigi must be started from command line with parameter: <b>fldigi --xmlrpc-server-port 7362</b> at least once.
+</br>When closing fldgi properly and answering YES to &quot; save setup changes &quot; question the next start should open xmlrpc server without parameters from usual icon.</p>
 
 <a name=fl3><h3>Use</h3></a>
 <p><img src="img/fxml9.png"  width="446" height="117">
diff --git a/help/h1.html b/help/h1.html
index a5446b0..40c00d6 100644
--- a/help/h1.html
+++ b/help/h1.html
@@ -28,7 +28,18 @@
 <br>
 <div style="text-align: left;"><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
 <p align=center><img src=img/line.png></p>
-<h2><strong>Preferences</strong></h2>
+<a name=ah0><h2><strong>Starting cqrlog</strong></h2>
+<p>Installing cqrlog from package should create a start up selection to your system startup menu.
+<br>Cqrlog can also be started from command terminal by typing: cqrlog ,follwed with return key.
+<br>There are some additional startup parameters that you can use with command terminal, or add them to your startup menu parameters of cqrlog.
+ Those parameters can be listed in command terminal starting cqrlog as: cqrlog -h , or: cqrlog --help
+<br><br><img src=img/h0.png border=0>
+<br><br>Starting with <b>--remote</b> or <b>-r</b> takes one letter argument <b>J</b>,<b> M</b> or <b>K</b> that is not case sensitive. Letters correspond quick control keys in NewQSO/File to start three remote modes.
+<br>When one of these are assigned cqrlog will jump to selected remote mode 10 seconds after startup is complete.
+<br><br>Starting with <b>--debug</b> takes one number (NR) usually<b> 1</b> to see full debug. Thtere are also some negative numbers in use to limit debug prints to certain functions. Mainly for developer usage.
+
+</p>
+<a name=ah1><h2><strong>Preferences</strong></h2>
 <div align=justify>The first step you need is to set up your log preferences. From the
     logging window, choose the 'File' menu item and 'Preferences' (or Ctrl-P).<br><br>
     <img src=img/h2.png border=0>
@@ -64,7 +75,6 @@
         <li><a href="h1.html#ch6">RBN support</a></li>
         <li><a href="h1.html#ch7">Online log upload support</a></li>
     </ul>
-    <h2><strong>Preferences</strong></h2>
     The first tab of the 'Preferences' dialog is labelled 'Program'. Here you can setup the
     main program behaviour.<br><br>
     <a name=ah2><h2><strong>Program</strong></h2></a>
@@ -91,6 +101,9 @@
     <strong>Grayline offset</strong> - sometimes the gray line position is not accurate.
     You can set your own correction.
     <br><br>
+    <strong>Great circle </strong> Short and Long path line plotting may be adjusted here. Plotting step is decimal degrees &gt; 0.0 and &lt; 40.0. In polar areas where distance/degree is smaller this value is divided by integer divisor value &gt; 0 and &lt; 40.
+    <br>You may test different values if you like. If Columns are left empty the default values 1.5 and 10 are replaced.
+    <br><br>
     <strong>Check for newer version of DXCC tables after program startup</strong></a> - if checked,
     CQRLOG will check if any update of the country files is available. If a new version is found,
     an update will be performed, however you are asked first if you want this update.<br><br>
@@ -173,9 +186,9 @@
     was OM/OK2CQR, SP/OK2CQR etc.</br>
     The <strong>Enable satellite mode</strong> Opens second tab 'Satellte' to NewQSO/DXCC statistic view. There you can select used satellite name,
     RX frequency and also propagation mode for logged qso.</br>
+    If you enable the <strong>Upload SAT info to AMSAT status page</strong> cqrlog will upload a status info to the AMSAT satellite status page. This only happens for satellite QSOs (i.e. propagation mode is "SAT"). The status page can be found under: <a target="_blank" href="https://www.amsat.org/status/">https://www.amsat.org/status/</a>.<br>
+    <strong>User defined web button</strong> defaults to www.qrzcq.com requesting info for currently existing call in NewQSO, but you can define URL address you want and use listed macros if needed.<br><br>
     Keys and Shortcuts for NewQSO Window you will find <a href="h20.html#ah16">here</a>.<br>
-    If you enable the <strong>Upload SAT info to AMSAT status page</strong> cqrlog will upload a status info to the AMSAT satellite status page. This only happens for satellite QSOs (i.e. propagation mode is "SAT"). The status page can be found under: <a target="_blank" href="https://www.amsat.org/status/">https://www.amsat.org/status/</a>.<br><br>
-
 </div>
 
 <p align=center><img src=img/line.png></p>
@@ -201,16 +214,16 @@
 <a name=ah7><h2><strong>TRX Control</strong></h2></a>
 <img src=img/h10.png border=0><br><br>
 <div align=justify>
-    The TRX Control displays actual frequency. You can change band and mode. The radio will
-    change the freq/mode after you double click on a spot from dx cluster or on an item
-    in bandmap.<br> CQRLOG uses the rigctld utilty from HamLib. It controls the radio and
-    programs communicate with it through UDP. CQRLOG supports operating with two TRX but
-    only one can be active at a time.<br><br>
+
+<br><br><b> Note: </b>Running same time CQRLOG and other software that uses rig's CAT control can not be done by just setting rig same parameters to both programs.
+<br>That causes problems. See this document for more information: <a href="https://github.com/OH1KH/cqrlog/blob/loc_testing/compiled/setting_rigctld_for_all_programs.pdf">https://github.com/OH1KH/cqrlog/blob/loc_testing/compiled/setting_rigctld_for_all_programs.pdf</a>
+<br><br><b>Note: </b>CQRLOG supports operating with two TRX radios but only one can be active at a time.
+<br><br>
     <strong>Radio one, desc:</strong> is a description you'll see in TRX control window. It is only
     descriptive text, you can write whatever you want.<br><br>
     <strong>Host:</strong> computer where rigctld is running, localhost is fine for most cases. <br><br>
     <strong>RIG model:</strong> choose your radio model from the list.
-     Rig models below 10 (Dummy, NET rigctld, FLRig, TRXManager) are using TCP communication and so the <strong>Device</strong> as well
+    <br> Rig models below 10 (Dummy, NET rigctld, FLRig, TRXManager) are using TCP communication and so the <strong>Device</strong> as well
      as <strong>Radio serial parameters</strong> do not need settings.<br><br>
     <strong>Device:</strong> device which the radio is connected to. /dev/ttyS0 is COM1, /dev/ttyS1
     is COM2 etc. If you use USB to serial interface, the device will usually be /dev/ttyUSB0
@@ -219,22 +232,30 @@
     <strong>Poll rate:</strong> specifies how often CQRLOG should read data from rigctld. 500 milliseconds
     is fine.<br><br>
     <strong>Port number</strong> is the number of the port used to communicate with rigctld.
-    Default value is 4532. The second radio, has to have a different port e.g. 4533.<br><br>
-    <strong>Extra command line arguments</strong> usefull when you have to specify more parameters to
+    Default value is 4532. The second radio, has to have a different port e.g. 4533.<br>
+    <br><strong>Extra command line arguments</strong> usefull when you have to specify more parameters to
     rigctld. E.g. CIV address (--civaddr=ID, where ID is the CIV address).<br><br>
-    <strong>Serial port parameters</strong> from the manual of your rig, please choose the correct options.
+    <strong>Run rigctld when program starts</strong> is usually checked but when rig model #2 <strong>Hamlib Net Rigctld</strong> is used then it is unchecked and disabled because with that rig setting we are trying to connect external rigctld. Either in same PC or in network.
+    <br>If rig model #1 <b>Hamlib Dummy</b> is selected <strong>Run rigctld when program starts</strong>  is forced to be checked. This allows testing and simulated operations without rig CAT control.
+    <br><br><strong>Use \chkvfo</strong> is normally checked. Then cqrlog tries to find out is rigctld started with parameter "--vfo" because that changes rigctld command format. Uncheck of this disables this function. Use it in case of problems.
+    <br><br><strong>Serial port parameters</strong> Use the manual of your rig, please choose the correct options.
     Very often it is much better to specify only serial speed and leave other options as default.
     Default value means that the settings from HamLib will be used.<br>
     <br>
-    <strong>User defined TRXControl buttons</strong> can be defined here. First column is button name shown (4char max) and second column is command to execute. Definition can consist one, or several in queue, rigctld commands or if definition starts with word
-    <strong> run </strong> it can be a program or script name with full path.
-    <br><ul> <li>
-    <strong>Note:</strong> Rigctld supports raw command <strong>W</strong>. Parameter for it is the rig cat command in bytes. Prefix<strong> \0x</strong> must be added for Hex values. Usr1 command in picture activates Icom IC7300 first voice memory play.
+    <strong>User defined TRXControl buttons</strong> can be defined here. Your defined buttons will shown in the TRX Control window after
+     you drop select this option in using the <strong>Preferences tab in the TRXControl</strong> window. For setting up buttons use
+      <strong>preferences</strong> option from TRXControl drop select option <strong>Preferences</strong>. From TRX Control tab you will find group
+       box named <strong>User defined TRX control buttons</strong>.
+    The first column is button name shown (4char max). In the same area the second column is the command(s) to execute. Definition can consist one 
+     command or several in a queue, rigctld commands may be used or if definition starts with word "<strong>run</strong>" (without quotes) it can be a program or
+      script name with full file path for your computer.
+      <br><ul> <li>
+    <strong>Note:</strong> Rigctld supports raw command <strong>W</strong>. Parameter for it is the rig cat command in bytes. Prefix<strong> \0x</strong> must be added for Hex values. Usr1 command in picture Sets IC7300 to 60m CW with 500Hz filter and reduces output power to leagal limit with raw command.
     </li> <li>
     <strong>Note:</strong> To run program or script it's name with full path must be entered. If file is command script then first line of it must tell what it is written for. If it is bash command script it's first line must be
     <strong>#!/bin/bash </strong> if not, button definition must have <strong>run /bin/bash /tmp/my_test.sh</strong> to tell that bash is used to call the script.
     </li> <li>
-    <strong>Note:</strong> Several rigctld commands can be written in same button definition. Usr3 command in picture  moves rig to 7.1MHz and then sets LSB mode with 2400Hz bandwidth.
+    <strong>Note:</strong> Several rigctld commands can be written in same button definition. Usr3 command in picture  moves rig to 70MHz and then sets CW mode with 500Hz bandwidth filter.
     </li><br> <li>
     <strong>Note:  There is NO feedback from commands to cqrlog !</strong>
     </li></ul>
@@ -290,15 +311,57 @@ You can also switch between memory frequencies with TRXControl's <b>M up</b> and
 <img src="img/h121.png"><br><br>
 <a name=ah8><h2><strong>Modes</strong></h2></a>
 <img src=img/h11.png border=0><br><br>
-Here you can set up the default bandwidth for any of the supported modes (CW - SSB - RTTY - AM - FM).
+<p>Here you can set up the default bandwidth for any of the supported modes (CW - SSB - RTTY - AM - FM).
 If your radio is tuned to the corresponding band segment or if you switch the mode on the radio
 control panel, CQRLOG will change the bandwidth to the desired value. The bandwidth can be
 changed at any time, however a program restart will probably be needed to make the changes
-take effect.<br><br>
-<strong>User definable digital modes</strong> can be set up in a separate box. Use comma
-as a separator, ie. BPSK31,QPSK64,OLIVIA,CONTESTIA etc.<br>
+take effect.<br>
 Some <strong>TRX like ICOM don't have support for this in HamLib. To get mode settings work, set
 all values to 0 (zero).</strong>
+</p><p><strong>User definable digital modes</strong> can be set up in a separate box. Use comma
+as a separator, ie. MYMODE1,MYMODE2 etc.<br>
+user should add digital modes (submode names) exactly as written in this table <a href="https://adif.org/312/ADIF_312.htm#Mode_Enumeration">ADIF.org: Mode_Enumeration</a> 
+If mode is missing from <strong>NewQSO/mode</strong> selection list and not added to <strong>User defined digital modes</strong> it may prevent ADIF import causing "wrong mode" error.
+</p><p>
+<strong>Note:</strong><br>
+Cqrlog uses internally modefied mode name. We call it here <strong>CqrMode</strong>. CqrMode is created from ADIF mode and submode with conversion table. CqrMode is mainly ADIF submode if it exist, with some exceptions.
+<br>Cqrlog will create four files in ~/.config/cqrlog folder for this use if they do not exist. One is a brief <strong>README_modefiles</strong> explaining three other files purposes.
+<br><br>If files exist they are not overwritten keeping possible user changes there. How ever user must do backups by himself if files are edited from original format.
+These files apply to all logs created. They are not log based.
+<ul>
+<li><strong>submode_mode.txt</strong>
+<br> This file holds submode=mode pairs used to convert incoming mode+submode pair to CqrMode that mainly is the submode.
+<br><br> All pairs must be in uppercase format. User can add or delete mode pairs with text editor if definition at
+<br> <a href="https://adif.org/312/ADIF_312.htm#Mode_Enumeration">ADIF.org: Mode_Enumeration</a> changes. 
+<br>"Self invented" mode names should not be used! Just one mode pair is accepted in one line.
+<br> The first line is never read (lower case). It just shows the order of submode and mode.
+<br><br>This file is used also when qso record is ADIF exported. Then CqrMode is converted back to mode+sumbode tags.
+<br>
+</li>
+<li><strong>import_mode.txt</strong>
+<br>This file holds a list of deprecated ADIF submodes that are accepted only for input. They are used in CqrModes but they will never be ADIF exported out from Cqrlog.
+<br><br> All lines must be in uppercase format. User can add or delete lines with text editor if definition at
+<br> <a href="https://adif.org/312/ADIF_312.htm#Mode_Enumeration">ADIF.org: Mode_Enumeration</a> changes. 
+<br>"Self invented" mode names should not be used!  Just one mode is accepted in one line.
+<br> The first line is never read (lower case). It just shows the meaning of then list. 
+<br><br>This file is used also when qso record is ADIF exported. It prevents submode in list to export and only mode is exported.
+<br>
+
+</li>
+<li><strong>exception_mode.txt</strong>
+<br>This file holds submode=mode pairs used to convert incoming mode+submode pair to CqrMode when CqrMode can not use ADIF submode directly.
+<br>For example by ADIF definition mode SSB  has submodes USB and LSB. How ever Cqrlog does not use those as CqrMode, but uses only SSB.
+ Then CqrMode is converted as SSB. How ever after exception the mode can not have it's submode back when exporting ADIF from Cqrlog.
+<br><br>This file can also have conversion from rigctld given mode to ADIF mode. For example with IC7300 rigctld shows mode PACKETUSB if rig is set to usb and data mode:
+<br> then this file can convert PACKETUSB to PKT that is ADIF standard format.
+<br><br> All pairs must be in uppercase format. User can add or delete mode pairs with text editor when needed.
+<br>How ever in case of outgoing modes (outgoing mode is at right side of mode pair) <a href="https://adif.org/312/ADIF_312.htm#Mode_Enumeration">ADIF.org: Mode_Enumeration</a> should be used.
+<br>"Self invented" mode names should not be used! Just one mode pair is accepted in one line.
+<br> The first line is never read (lower case). It just shows the order of submode and mode.
+</li>
+</ul>
+
+</p>
 <p align=center><img src=img/line.png></p>
 <a name=ah9><h2><strong>QTH Profiles</strong></h2></a>
 <img src=img/h12.png border=0><br><br>
@@ -685,7 +748,7 @@ There are no known dependencies issues.<br><br>
     <img src="img/h1114.png"><br><br>
     <ul>
       <li><strong>Login:</strong> - your user name to log in to RBN. It's usually your own callsign.</li>
-      <li><strong>Watch for:</strong> the callsign you are watching for, also usually your own callsign. 
+      <li><strong>Watch for:</strong> the callsign you are watching for, usually your own callsign but can be any. You can also type in prefix followed by asterisk I.E. OK* etc.
        If you leave this field empty, every spot will be shown on the grayline map.</li>
       <li><strong>Signal strength</strong> How strong you are will be clear very quickly when you look
     at the map with the dots in different colours. Which colour will be used can be set here.</li>
@@ -693,19 +756,20 @@ There are no known dependencies issues.<br><br>
     to RBN when the Grayline and/or RBN Monitor window opens. If you have closed cqrlog with window(s) open they will open at next program start
     and so also connection is made.</li>
     <ul>
-      <li><strong>Autoconnect RBN Grayline</strong> connects Grayline map to RBN.</li>
-      <li><strong>Autoconnect RBN Monitor</strong> connects RBN Monitor to RBN. See: <a href="./h31.html">Operation/RBN monitor</a></li>
-      <li><strong>Link Grayline to RBN Monitor.</strong> links Grayline to same connection as RBN Monitor uses and does not allow to create a new connection to Grayline itself. This is usefull with QT5 widgets compiled version as there the direct Grayline RBN connection does not work. It also saves one connection in all cases as the same RBN connection can be used for both Grayline dotting and RBN Monitor listing.
-      <br>Linking alone does not start Grayline dotting. Connection to RBN must be done either here with <strong>Autoconnect RBN Monitor</strong> or <strong>manually</strong> at RBM Monitor window side.</li>
-      <strong>Note:</strong> Even when linked, Grayline dotting and RBN Monitor listing both uses their own settings what call(s) to follow.
+      <li><strong>Autoconnect RBN Grayline</strong> connects Grayline map to RBN.
+      <br>Connection to RBN must be done either here with <strong>Autoconnect RBN Monitor</strong> or <strong>manually</strong> at Grayline window side.</li>
+      <li><strong>Autoconnect RBN Monitor</strong> connects RBN Monitor to RBN site. See: <a href="./h31.html">Operation/RBN monitor</a></li>
+      <li><strong>Link Grayline to RBN Monitor</strong> links Grayline to same connection as RBN Monitor uses. It saves one connection as the same RBN connection can be used for both Grayline dotting and RBN Monitor listing.
+      </li>
+      <strong>Note:</strong> Linking alone does not start Grayline dotting.When linked, Grayline dotting and RBN Monitor listing both uses their own filter settings what call(s) to follow.
       <br><strong>Note:</strong> "Connect RBN Grayline" and "Link Grayline to RBN Monitor" are alternatives. You can not select both of them at same time.</li>
     </ul>
       <li><strong>Delete old information after XX seconds</strong> The dots won't stay on the map forever.
-    180 seconds (3 minutes) is a good default value. Please note, it also depends on the band,
-    if you change band, dots will always be deleted. All data is band related.</li>
+    180 seconds (3 minutes) is a good default value.
+    <br><b>Note:</b> Dots also depend on the band, if you change band, dots will always be deleted. All data is band related.</li>
     </ul>
     <br><br>
-    <img src="img/h1114b.png"><br><br>
+
     <a name=ch7><h2><strong>Online log upload support</strong></h2></a>
     CQRLOG supports online log upload to <a href="http://HamQTH.com">HamQTH</a>,
     <a href="https://secure.clublog.org/loginform.php">ClubLog.org</a> and
diff --git a/help/h21.html b/help/h21.html
index 05a8a16..15f228f 100644
--- a/help/h21.html
+++ b/help/h21.html
@@ -43,6 +43,7 @@ Cluster node by simply clicking the 'Connect' button. You should see the cluster
 messages indicating progress. You can enter any command into the 'Command' field
 (ie. SH/DX to display last spots, SH/U to see the users connected to the node etc.).
 <br> Double click with mouse left on DX spot line applies DX callsign to NewQSO and sets rig frequency to spot QRG.
+ If you have checked <b>NewQSO/Auto</b> checkbox and set mode frequencies at <b>preferences/bands/frequencies</b> also right mode will be set to rig.
 <br>If there is additional info available on spot line it is copied to clipboard. You can set cursor to desired NewQSO field and apply info from clipboard with Ctrl-V.
  That is an easy and quick way to store IOTA, SOTA, WWFF or other info from DX spot line to qso record.
 <br>This works with normal spots starting with "DX de" and also from lines printed by "sh/dx" command.
@@ -226,7 +227,9 @@ So any time you like you can make it larger and chat lines are there to check.</
                 QSO logging.<br><br>
                 If the entry becomes older than the set time, it is displayed in a lighter color. Very old
                 entries will disappear, also if you log the station, the corresponding entry disappears
-                from the band map. The entries are always sorted by frequency.
+                from the band map. 
+                <br><br>The entries are always sorted by frequency. Default order is for lowest to higest. This can be reversed with checkbox <b>Reverese order</b>.
+                <br>With normal order and <b>Show active band</b> checked this shows CW spots first (CW is normally at band low edge). Cheking <b>Reverse order</b> will then show SBB spots first.
                 <br><br>When band map form is active new spots are not added. This helps to locate needed
                 line from all spot lines. Form name changes to <b>BM PAUSED!</b> to remind that nothing will be
                  added until focus is moved to any other form by a mouse click.
diff --git a/help/h22.html b/help/h22.html
index 44fa886..a2b2a52 100644
--- a/help/h22.html
+++ b/help/h22.html
@@ -109,6 +109,14 @@ For LoTW operations see <a href=h7.html><strong>here</strong></a>.
 </div>
 <br>
 
+<div align="justify">In order to keep the structure of the exported csv file you can check
+   checkbox 'Keep csv structure'. This the number of columns will always be the same and not
+   depend on whether specific export items are selected or not. Thus the number for each 
+   column will stay the same and you do not need to re-design your glabels template upon
+   (un-)selecting items to export. Not selected items are simply exported as empty values.
+</div>
+
+<br>
 <div align="justify">For both methods, the filtering potential can be utilized.
     For example, you can filter out all QSOs with DJ3 stations and print QSL labels for them.
     You will get such output:
diff --git a/help/h28.html b/help/h28.html
index 70fb24a..552713a 100644
--- a/help/h28.html
+++ b/help/h28.html
@@ -43,34 +43,103 @@ Here is a sample of script. Modfy it against your needs:
 
 <pre>
 #!/bin/bash
-# install sox with all soundformats support
-# Use "rec F1.mp3" to record F1 message. End recording with Ctrl-C.
-# same with F2.mp3 Etc....
-# you may use also mpg123 or what ever terminal mode player you wish
-
-# cqrlog "TRX control"/"Extra command line arguments" add following
-# text  "-p /dev/ttyXXX -P YYY" (you may already have some text there) 
-# Where  XXX os the same device as you have in "TRX control"/"Device"
-# and YYY is the line you have connected (via relay or transistor) to
-# your rig's PTT (usually DTR or RTS)
-# At "TRX control"/"Radio xxx serial parameters set handshake none
-# and at least your YYY (DTR or RTS) to "Unset"
-
-if ! ps aux | grep -q '[m]pg123'
-then
-  #ptt via rigctld on
-  echo 'T1' | nc --send-only -t 127.0.0.1 4532
-  #select audio card (if more than one)
-  #export AUDIODEV=hw:1,0
-  #play F-key message
-  mpg123 ~/.config/cqrlog/voice_keyer/$1.mp3
-else
-  #halt playing message (if pressed while playing)
-  killall mpg123
+
+#Comment lines are starting with #
+#this script requires program 'ncat' (also called 'nc') 
+# 'pidof' and player you select (defaut 'mpg123') to be installed.
+
+
+#You can test this script from command line by typing:
+
+#  voice_keyer.sh F10.mp3  (without typing hash (#) at beginning of line)
+
+#It will then play file F10.mp3 if all is ok.
+
+
+#the script begins:
+#Define your sound player's name below (mpg123, aplay, etc..)
+#If you do not get any sound out:
+#Yor rig may exist as one sound card of Linux. 
+#To get your voice message directed to right sound card consult your player's
+#man pages how to select right sound output device and add those parameter(s)
+#after your player's name (within those parenthesis).
+myplayer="mpg123"
+
+#rigctld PTT commands
+rigctldPttCmdON="T 1"
+rigctldPttCmdOFF="T 0"
+
+   #if Hamlib/rigctld method does not work with you it might be that you have
+   #very latest rigctld and/or you use start parameter '--vfo' with it
+   #then put hash (#) in front of above two lines and remove hash (#) from
+   #start of next two lines
+
+# rigctldPttCmdON="T currVFO 1" 
+# rigctldPttCmdOFF="T currVFO 0"
+
+
+#Search the sound file that was given as first start parameter with script name
+FILE="$1.mp3"
+if [ ! -e $FILE ]
+ then 
+ echo "$FILE Not Found!"
+ exit 1
 fi
-  #ptt via rigctld off
-  echo 'T0' | nc --send-only -t 127.0.0.1 4532
-#end of script
+
+ #search audio your player 
+ command -v $myplayer >/dev/null 2>&1 
+  if [ $? != 0 ]
+   then 
+    echo "$myplayer is not installed.  Aborting."
+    exit 1
+   fi
+
+   #check that we are not already playing something
+   pidof -q $myplayer
+   if [ $? = 0 ]
+      then
+       echo "$myplayer is already playing, exit!"
+       exit 1
+      fi
+
+   echo "PTT on"
+
+   #This puts your rig ptt ON if you have 'cwdaemon' program in use.
+   #If you want to use this then remove hash (#) from the beginning of next line
+
+#  echo -e '\033a1' | nc -q 1 -u localhost 6789 &
+
+   #This puts your rig ptt ON using hamlib rigctld (same as Cqrlog uses for rig)
+   #if you do not want to use this method put hash (#) to beginning of next line.
+
+   echo -e $rigctldPttCmdON |nc localhost 4532
+
+   #the last words in above line (after 'nc') should be same as your 
+   #'Host' and 'Port number' in Cqrlpg/preferences/TRXControl
+
+   echo "Play"
+   $myplayer $FILE
+   echo "PTT off"
+   #This puts your rig ptt OFF if you have 'cwdaemon' program in use.
+   #then remove hash (#) from the  beginning of next line
+
+#  echo -e '\033a0' | nc -q 1 -u localhost 6789 &
+
+   #This puts your rig ptt OFF using hamlib rigctld (same as Cqrlog uses for rig)
+   #if you do not want to use this method put hash (#) to beginning of next line.
+
+   echo -e $rigctldPttCmdOFF |nc localhost 4532
+
+   #the last words in above line (after 'nc') should be same as your 
+   #'Host' and 'Port number' in Cqrlpg/preferences/TRXControl
+
+
+   #If you want to use VOX put hash in start of all four lines 
+   #that controls PTT ON and OFF
+
+#script ends
+
+
 </pre>
 </p>
 
diff --git a/help/h3.html b/help/h3.html
index b553a52..47d9984 100644
--- a/help/h3.html
+++ b/help/h3.html
@@ -60,14 +60,30 @@
     However the user can choose to override a MY_GRIDSQUARE from ADIF file by selecting the checkbox.
     In this case MY_GRIDSQUARE from the ADIF file is overriden by the locator from the selected profile 
     or if no profile is selected the default locator from the config is used.<br><br>
-    <img src="img/h42.png" border="0"><br><br>
-    The previous window now shows the import completion, the number of imported records and
+    <img src="img/h42.png" border="0"> <img src="img/h42b.png" border="0"><p>
+    The  window now shows the import completion, the number of imported records and
     the number of errors. If the ADIF file contains incorrect entries, they will be stored
-    separately in the file <strong>errors.adi</strong> located in the 'log_data' subfolder.
-    You can fix the errors manually and import again. <br><br>
+    separately in the file <strong>errors_HH_MM_SS.adi</strong> located in the user's home folder.
+    You can open, import or delete the file by pointing the name with left mouse click.</p><p>
+    If you plan to import fixed error file you have to fix every qso record line at point(s) the ERROR: -line(s) show. 
+    After fixing a qso record you must delete corresponding ERROR: -line(s).<br>
+    Text editor to use must be defined at preferences/External viewers. If reimported error file still has errors you can delete it from popup menu and continue with new error file.<br>
+    <strong>NOTE:</strong> If you change tag text you have to check the length of text that is after tag name, before text itself, as <strong>:xx&gt;</strong> where
+    xx is the count of characters in tag string.
+    <i><br><br>
+    &lt;Complete adif qso record here&gt;<br>
+    ERROR: Wrong QSO IOTA: NO
+    <br><br></i>
+    <strong>NOTE:</strong> Error file now contains also qsos that are imported with shrunken adif tags. There is no need to import them again. You can fix shrunken tags with QSL list/Edit QSO.
+    <i><br><br>
+    &lt;Complete adif qso record here&gt;<br>
+    ERROR: Imported with shrink(s):<br>
+    STATE shrink to 4 chrs:05 // Yamagata-ken -> 05 /<br>
+    QSL_VIA shrink to 30 chrs:via Bureau, Direct, e-QSL, LoTW -> via Bureau, Direct, e-QSL, LoT<br>
+    <br></i></p><p>
     <img src="img/h43.png" border="0"><br><br>
     Duplicate entries (contacts already in the log) are indicated with a separate dialog
-    allowing you to exclude or include these records. This will be asked every time a duplicate is found. If you check <b>Case of duplicates; Remember my answer</b> it is asked only once and then the same answer is used every time a duplicate is found.
+    allowing you to exclude or include these records. This will be asked every time a duplicate is found. If you check <b>Case of duplicates; Remember my answer</b> it is asked only once and then the same answer is used every time a duplicate is found.</p>
     <p align=center><img src=img/line.png></p>
     <a name=ah25><strong>ADIF export</strong></a><br><br>
     Go to QSO list using Ctrl-O or choose the QSO list from the upper menu - item 'File'.<br><br>
@@ -97,7 +113,13 @@
     <br><br>
     <img src=img/h45f.png><br><br>
     You can set the filename to export to as well as some meta data describing the equipment you
-    used for this contest.
+    used for this contest.</p>
+    <p><img src=img/h45ff.png>
+    <br><br>After export is done you can see the summary of exported qsos. Also <b>Open exported file</b> button appears.
+    <br>If you have set <b>preferences/External viewers/text files</b> exported file will be opened when button is pressed.
+    <br><br><img src=img/h45fff.png>
+    <br><br>If your contest did not use serial numbers you can uncheck <b>Export requires serial nr</b> that may clear out export error qsos.
+    </p>
     <p align=center><img src=img/line.png></p>
     <p><a name=ah28><strong>Cabrillo export</strong></a><br><br>
     This dialog can be used to export contest logs in Carbillo format. Cabrillo is very compilcated to export as
@@ -116,7 +138,8 @@
      it clears column when moved away from it. Then try again. Example: VA is not ok, but VA1 will turn accepted as VE.
     <br><br>
     Export remebers last used settings (by used log). You can also save and load settings for different contests using <b>save and load buttons</b>.
-    <br> At bottom of form there is prograss indicator and after export there is some statistics and possible error message.
+    <br>At bottom of form there is prograss indicator and after export there is some statistics and possible error message shown. You can also open resulted Cabrillo file with defined text editor (preferences/external viewers) using button <b>"Open resulted file".</b>
+    <br>If red error text is displayed after export you can open error log by clicking the red error text line.
     <br><br>
     As cabrillo export output is very basic you may need to edit exported file afterwards with text editor to suit your purposes!
     <br><br>
diff --git a/help/h30.html b/help/h30.html
index 37c9b9f..9a781b7 100644
--- a/help/h30.html
+++ b/help/h30.html
@@ -31,8 +31,9 @@
 <p align=center><img src=img/line.png></p>
 
 <h3 ><a name="m3"></a>TRX Control</h3>
-<img src="img/h117.png" name="7"  width="353" height="367">
-<img src="img/h118.png" name="8"  width="353" height="367">
+<img src="img/h117.png" name="7"  width="320" height="360">
+<img src="img/h118.png" name="8"  width="320" height="360">
+<img src="img/h118b.png" name="8"  width="320" height="360">
 </img>
 <p>
 TRX Control window Shows current frequency and buttons allow change of Band, mode, memory and rig. Additional selections are User defined buttons, Power buttons, Vfo A and B buttons and memory information field.
@@ -44,7 +45,11 @@ TRX Control window Shows current frequency and buttons allow change of Band, mod
 <br>With <b>P-on/off/stb</b> buttons current rig can be set ON, OFF or STANDBY (if it supports rigctld power commands).
 <br>Default setting for power buttons is hidden. You can change it via dropdown menu "Preferences".
 <br><br><b>M_up</b> and <b>M_dwn</b> buttons select next/previous entry from memory list. <b>M_Wri</b> adds entry to memory list from current rig frequency and mode and info field shows<b> "MW ok"</b>.
-<br>
+<br><br>You can change rig frequency by clicking frequency display. Then you can enter a new <b>MHz value</b> and press enter.
+<br>You can also use mouse wheel to change frequency. One wheel step is 100Hz, Keeping <b>Shift key</b> pressed the step is 1kHz. Keeping <b>Ctrl key</b> pressed the step is 10kHz.
+Keeping both keys pressed the step is 1MHz.
+<br>If you use mouse wheel the rig frequency is changed while turning. There is no need to press enter then. Just move mouse cursor away from frequency display.
+
 <br><br><b>NOTE!!!</b> <br>Check <b>pereferences/TRXcontrol/Switch only between mode related memories</b><br>Cqrlog TRXcontrol memories are categorized by mode (groups). CW, SSB(=AM+USB+LSB+FM), RTTY(=RTTY+DATA+PKTLSB+PKTUSB+PKTFM)[no mode selector for PKT*  but you may "M wri" them anyway]. 
 So do not wonder if you get smaller amount of memories than in your list when pressing <b>M_up</b> and <b>M_dwn</b> with "Show mode related" checked.
 <br><br>
@@ -68,8 +73,8 @@ So do not wonder if you get smaller amount of memories than in your list when pr
 <p>
 
 From NewQSO/Window you can open <strong>Rotor control</strong> window.
-<p><img src="img/h121a.png" name="121a"> <img src="img/h121b.png" name="121b">  
-<img src="img/h121e.png" name="121e"> <img src="img/h121c.png" name="121c"> <img src="img/h121d.png" name="121d">
+<p><img src="img/h121a.png" name="121a"><img src="img/h121aa.png" name="121aa"><img src="img/h121b.png" name="121b">
+<img src="img/h121e.png" name="121e"><img src="img/h121c.png" name="121c"><img src="img/h121d.png" name="121d">
 </p>
 Window shows current position of rotor with <b>numerical display, Short and Long path Buttons and radio buttons to select rotor 1 or rotor 2</b>.
 <br>User can resize window and select <b>additional bar display, direction and stop buttons</b>.
@@ -78,7 +83,10 @@ Window shows current position of rotor with <b>numerical display, Short and Long
 <br><br> When a call is entered to <b>NewQSO</b> callsign field and cursor is moved away from that field <b>DXCC info</b> part gets filled against call prefix and/or locator grid,
  then, when <b>DXCC/AZIM</b> shows a value, it is possible to press <b>Short Path</b> or <b>Long Path buttons</b> and your ro
  tor will turn your antenna to that direction.
-<br>Pressing <b>Stop button</b> stops rotor turning started either with path or turn buttons.</p>
+<br><br>It is also possible to set new direction by a click on <b>Azimuth display</b>, type a new direction value and press <b>Enter</b> or use  <b>mouse wheel</b> to select degrees.
+<br>One wheel step is one degree. If you keep <b>Shift key</b> pressed while turning mouse wheel the step will be 10 degrees. If <b> Ctrl key</b> is pressed instead step will be 100 degrees.
+<br>If you have used mouse wheel it is enough to move mouse away from Azimuth reading to get rotor turning. No enter keypress is needed then.
+<br><br>Pressing <b>Stop button</b> stops rotor turning started either with path or turn buttons.</p>
 <p>Progress bar displays Az value relative to AzLimits (if Use \dump_state is checked in preferences) so do not wonder if it in some cases may look different than numerical true direction display. 
 <br>If error message is received from rotctld button area turns red. If requested turn command is ok, but az_min or az_maz limits change requested direction from true direction 
 (then antenna may not always reach requested direction) button area will turn yellow as warning sign.
diff --git a/help/h32.html b/help/h32.html
new file mode 100644
index 0000000..8ff2dcd
--- /dev/null
+++ b/help/h32.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+<head>
+    <title>CQRLOG </title>
+</head>
+<body>
+<table border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tbody>
+    <tr>
+        <td valign="top"><img src="img/exc.png"></td>
+        <td bgcolor=ffffcc valign="top" align="justify"><strong>
+            <font color="red">WARNING!</font></strong>
+            Backup your data often! BACKUP your log directory at the end of EVERY session!
+            All that you need to backup and store in a safe place is the log database directory
+            located in the ~/.config/cqrlog/database folder, or you can enable the autobackup function
+            in Preferences. This autobackup function creates an ADIF file with a backup of your log.
+            /td>
+    </tr>
+    </tbody>
+</table>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td width="33%" align="center">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+<div style="text-align: left;"><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
+<p align="center"><img src=img/line.png></p>
+<h3>Grayline map</h3>
+<p> Grayline window opens from NewQSO/Window/Grayline.</p>
+<p>
+ Grayline map has speed button at top right corner that opens a popup menu containing:
+   <ul>
+   <li> <b>Connect to RBN</b> If autoconnect is not seleceted, see: <a href="h1.html#ch6">RBN support</a>, the connect and disconnect to RBN can be done here.</li>
+   <li> <b>Link to RBNMonitor</b> This is alternative to RBN connection and will use same connection as RBN monitor window has (if connected).</li>
+   <li> <b>Show statusbar</b> Shows connection or linking state</li>
+   <li> <b>Show ShortPath</b> By default Grayline map will show straight line from your station (from your locator defined) to station you enter to NewQSO/callsign. 
+   With this selection you can switch the  straight line to plotted great circle short path. </li>
+   <li> <b>Show LongPath</b> As another option you can select great circle longpath. This can be selected with, or without short path.
+   <li> <b>Clear all spots</b> Clears all RBN spots from map.
+   <br><b> Note:</b> Dots also depend on the band, if you change band, dots will always be deleted. All data is band related.</li>
+   <li> <b>Watch for</b> Opens an edit window where you can change callsign or prefix watched without opening preferences. see: <a href="h1.html#ch6">RBN support</a></li>
+   </ul>
+
+    <img src="img/h1114d.png"><br><br>
+    <img src="img/h1114b.png"><br><br>
+
+
+
+<p align="center"><img src=img/line.png></p>
+<br>
+<table width="100%" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td width="33%" align="center">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+</body>
+</html>
diff --git a/help/h34.html b/help/h34.html
new file mode 100644
index 0000000..2f3f4d1
--- /dev/null
+++ b/help/h34.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en-us">
+<head>
+    <title>CQRLOG - eQSL support</title></head>
+<body>
+<table border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tbody>
+    <tr>
+        <td valign="top"><img src="img/exc.png"></td>
+        <td align="justify" bgcolor="#ffffcc" valign="top"><strong>
+            <font color="red">WARNING!</font></strong>
+            Backup your data often! BACKUP your log directory at the end of EVERY session!
+            All that you need to backup and store in a safe place is the log database directory
+            located in the ~/.config/cqrlog/database folder, or you can enable the autobackup function
+            in Preferences. This autobackup function creates an ADIF file with a backup of your log.
+            /td>
+    </tr>
+    </tbody>
+</table>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+<div align=left><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
+<p align="center"><img src="img/line.png"></p><a name="eh7"></a><br><b><h2>eQSL support</h2></b>
+<p><h3>Preparation</h3></p>
+<div align=justify>We assume that you have a working eQSL Account. If you are new to eQSL,
+    carefully read the instructions provided by the eQSL and set up your account.<br>
+    Most important is to set the QTH nickname and dates to validate qsos with that name.
+    </p><p><h3>Setup</h3></p>
+    <div align=justify>If you didn't do it already in the <a href="h1.html#bh4"<strong>Preferences</strong></a> setup procedure,
+        provide your user name for eQSL and the password.
+    </div>
+    </p>
+    <p><img src="img/eqsl1.png"><br><br>
+
+    <br><h3>eQSL upload</h3></p>
+    <p>
+    You find eQSL up and donwload from <b>QSO list/QSL</b> menu.<br>
+    <div align=justify><strong>Select the QSO records</strong> you want to confirm.
+    Either whole log, or just files that have never been uploaded (that is the normal operation).
+    <br>Be sure that<b> QTH Nickname </b> is the same you defined at eQSL website setup.
+   <br>Now click the <b>Upload</b> button. A message will appear to inform you about ulpload progress.<br>
+    From message you will see what is the adif file that were used for upload. It is saved and can be used afterwards if needed.
+    <br> You see also how many records were added to eQSL.
+    </p>
+
+    <p><h3>eQSL download and processing</h3></p>
+    <p><div align=justify>The main purpose of the eQSL  download is to
+        mark existing QSO records as confirmed via eQSL.
+    </div>
+    <br>
+    <img src="img/eqsl2.png"><br><br>
+    Set the <b>date after</b> to request QSL records. This is normally good to keep in current year for daily use.
+    It keep the download and porcessing fast. Every now and then set te date more back to past to see possible late confirms.
+    <br>Be sure that<b> QTH Nickname </b> is the same you defined at eQSL website setup.
+    If you press <b>Download  data from eQSL website</b> a progress
+    indicator is displayed in <b>Progress</b> window.
+    <br>You can also see the filename that was used to store records locally in case of future needs.
+    <br><br>
+    In case there are QSO records that are not found from your log an error file is written and you can see it by clicking <b>Yes</b> button.
+    <br>Note that this file may contain also SWL eQSLs reportings of your qsos heard by SWLs.
+    You can read more about import error file handling from <a href="qslimperr.html">LoTW/eQSL import errors</a>
+    </p>
+
+
+
+<p align="center"><img src="img/line.png"></p>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+
+    </tr>
+    </tbody>
+</table>
+<br>
+</body>
+</html>
diff --git a/help/h6.html b/help/h6.html
index 276e8fe..e931f77 100644
--- a/help/h6.html
+++ b/help/h6.html
@@ -31,242 +31,23 @@
 <strong><h2>Supported radio types</h2></strong>
 <br>
 <div style="text-align: justify;">
-    The actual list of supported radios depends on the hamlib version.
-    You can obtain the actual list using the command:
+    The actual list of supported radios depends on the hamlib version, not Cqrlog itself.
+    You can obtain the actual list using the command terminal with:
 <pre>
-rigctl --list > riglist.txt
-</pre>
-    Remember, the <i>rigctl</i> executable must be on your path.<br>
-    The snapshot version 3.1. supports the following radio types:
-<pre>
-  Rig#  Mfg                    Model                   Vers.          Status
-=============================================================================
-     1  Hamlib                 Dummy                   0.5             Beta
-     2  Hamlib                 NET rigctl              0.3             Beta
-   101  Yaesu                  FT-847                  0.5             Beta
-   103  Yaesu                  FT-1000D                0.0.6           Alpha
-   104  Yaesu                  MARK-V FT-1000MP        0.0.5           Alpha
-   105  Yaesu                  FT-747GX                0.4.1           Beta
-   106  Yaesu                  FT-757GX                0.5.0           Beta
-   107  Yaesu                  FT-757GXII              0.4             Stable
-   109  Yaesu                  FT-767GX                1.0             Stable
-   110  Yaesu                  FT-736R                 0.3             Stable
-   111  Yaesu                  FT-840                  0.1             Untested
-   113  Yaesu                  FT-900                  0.1             Untested
-   114  Yaesu                  FT-920                  2010-08-23      Stable
-   115  Yaesu                  FT-890                  0.1             Stable
-   116  Yaesu                  FT-990                  0.2.2           Alpha
-   117  Yaesu                  FRG-100                 0.5             Beta
-   118  Yaesu                  FRG-9600                0.2             Untested
-   119  Yaesu                  FRG-8800                0.2             Untested
-   120  Yaesu                  FT-817                  0.5.1           Beta
-   121  Yaesu                  FT-100                  0.4.1           Beta
-   122  Yaesu                  FT-857                  0.5             Beta
-   123  Yaesu                  FT-897                  0.3.3           Beta
-   124  Yaesu                  FT-1000MP               0.1.1           Beta
-   125  Yaesu                  MARK-V Field FT-1000MP  0.0.5           Alpha
-   126  Yaesu                  VR-5000                 0.2             Alpha
-   127  Yaesu                  FT-450                  0.23.1          Beta
-   128  Yaesu                  FT-950                  0.23.2          Stable
-   129  Yaesu                  FT-2000                 0.23.1          Stable
-   130  Yaesu                  FTDX-9000               0.23.1          Untested
-   131  Yaesu                  FT-980                  0.1             Alpha
-   132  Yaesu                  FT-DX5000               0.23            Alpha
-   133  Vertex Standard        VX-1700                 1.1             Alpha
-   134  Yaesu                  FT-1200                 0.23.1          Stable
-   135  Yaesu                  FT-991                  0.23.4          Beta
-   201  Kenwood                TS-50S                  0.9             Untested
-   202  Kenwood                TS-440                  0.9.0.6.1       Alpha
-   203  Kenwood                TS-450S                 0.9.1           Beta
-   204  Kenwood                TS-570D                 0.9.2           Stable
-   205  Kenwood                TS-690S                 0.9.1           Beta
-   206  Kenwood                TS-711                  0.9.0.6.1       Untested
-   207  Kenwood                TS-790                  0.9.2           Alpha
-   208  Kenwood                TS-811                  0.9.0.6.1       Untested
-   209  Kenwood                TS-850                  0.9.1           Beta
-   210  Kenwood                TS-870S                 0.9.0           Beta
-   211  Kenwood                TS-940S                 0.9.7           Alpha
-   213  Kenwood                TS-950SDX               0.9             Beta
-   214  Kenwood                TS-2000                 0.9.4           Beta
-   215  Kenwood                R-5000                  0.6.1           Alpha
-   216  Kenwood                TS-570S                 0.9.1           Stable
-   217  Kenwood                TH-D7A                  0.5             Alpha
-   219  Kenwood                TH-F6A                  0.5             Beta
-   220  Kenwood                TH-F7E                  0.5.1           Beta
-   221  Elecraft               K2                      20120615        Beta
-   222  Kenwood                TS-930                  0.9             Untested
-   223  Kenwood                TH-G71                  0.5             Beta
-   224  Kenwood                TS-680S                 0.9.1           Beta
-   225  Kenwood                TS-140S                 0.9.1           Beta
-   226  Kenwood                TM-D700                 0.5             Beta
-   227  Kenwood                TM-V7                   0.5             Beta
-   228  Kenwood                TS-480                  0.9.5           Untested
-   229  Elecraft               K3/KX3                  20161116        Beta
-   230  Kenwood                TRC-80                  0.9             Alpha
-   231  Kenwood                TS-590S                 0.9.1           Beta
-   232  SigFox                 Transfox                20111223        Alpha
-   233  Kenwood                TH-D72A                 0.5.1           Alpha
-   234  Kenwood                TM-D710                 0.6b            Beta
-   236  FlexRadio              6xxx                    20130717        Beta
-   237  Kenwood                TS-590SG                0.9.1           Beta
-   238  Elecraft               XG3                     20150101        Beta
-   239  Kenwood                TS-990s                 0.9.1           Beta
-   302  Icom                   IC-1275                 0.7             Beta
-   303  Icom                   IC-271                  0.7             Untested
-   304  Icom                   IC-275                  0.7.1           Beta
-   306  Icom                   IC-471                  0.7             Untested
-   307  Icom                   IC-475                  0.7.1           Beta
-   309  Icom                   IC-706                  0.7.1           Untested
-   310  Icom                   IC-706MkII              0.7.1           Untested
-   311  Icom                   IC-706MkIIG             0.7.2           Stable
-   312  Icom                   IC-707                  0.7             Untested
-   313  Icom                   IC-718                  0.7.1           Beta
-   314  Icom                   IC-725                  0.7.1           Stable
-   315  Icom                   IC-726                  0.7             Stable
-   316  Icom                   IC-728                  0.7             Untested
-   319  Icom                   IC-735                  0.7.1           Beta
-   320  Icom                   IC-736                  0.7             Untested
-   321  Icom                   IC-737                  0.7             Untested
-   322  Icom                   IC-738                  0.7             Untested
-   323  Icom                   IC-746                  0.7.1           Beta
-   324  Icom                   IC-751                  0.7.1           Beta
-   326  Icom                   IC-756                  0.7.1           Alpha
-   327  Icom                   IC-756PRO               0.7             Untested
-   328  Icom                   IC-761                  0.7.1           Stable
-   329  Icom                   IC-765                  0.7             Stable
-   330  Icom                   IC-775                  0.7.1           Untested
-   331  Icom                   IC-781                  0.7.1           Untested
-   332  Icom                   IC-820H                 0.7             Alpha
-   334  Icom                   IC-821H                 0.7             Alpha
-   335  Icom                   IC-970                  0.7             Untested
-   336  Icom                   IC-R10                  0.7             Untested
-   337  Icom                   IC-R71                  0.7             Untested
-   338  Icom                   IC-R72                  0.7             Untested
-   339  Icom                   IC-R75                  0.7             Beta
-   340  Icom                   IC-R7000                0.7.0           Alpha
-   341  Icom                   IC-R7100                0.7.0           Untested
-   342  Icom                   ICR-8500                0.7.1           Beta
-   343  Icom                   IC-R9000                0.7.1           Alpha
-   344  Icom                   IC-910                  0.7.1           Beta
-   345  Icom                   IC-78                   0.7             Untested
-   346  Icom                   IC-746PRO               0.7             Stable
-   347  Icom                   IC-756PROII             0.7             Alpha
-   351  Ten-Tec                Omni VI Plus            0.2             Beta
-   352  Optoelectronics        OptoScan535             0.3             Beta
-   353  Optoelectronics        OptoScan456             0.3             Beta
-   354  Icom                   IC ID-1                 0.7             Untested
-   355  Icom                   IC-703                  0.7             Untested
-   356  Icom                   IC-7800                 0.7.2           Untested
-   357  Icom                   IC-756PROIII            0.7.1           Beta
-   358  Icom                   IC-R20                  0.7             Untested
-   360  Icom                   IC-7000                 0.7.2           Beta
-   361  Icom                   IC-7200                 0.7             Beta
-   362  Icom                   IC-7700                 0.7.1           Stable
-   363  Icom                   IC-7600                 0.7             Beta
-   364  Ten-Tec                Delta II                0.1             Untested
-   365  Icom                   IC-92D                  0.7             Untested
-   366  Icom                   IC-R9500                0.7.1           Untested
-   367  Icom                   IC-7410                 0.7             Untested
-   368  Icom                   IC-9100                 0.7             Untested
-   369  Icom                   IC-RX7                  0.7             Untested
-   370  Icom                   IC-7100                 0.7             Untested
-   371  Icom                   ID-5100                 0.7             Untested
-   372  Icom                   IC-2730                 0.7             Untested
-   373  Icom                   IC-7300                 0.7.2           Stable
-   374  Microtelecom           Perseus                 0.7.0           Alpha
-   401  Icom                   IC-PCR1000              0.8             Beta
-   402  Icom                   IC-PCR100               0.8             Beta
-   403  Icom                   IC-PCR1500              0.8             Beta
-   404  Icom                   IC-PCR2500              0.8             Beta
-   501  AOR                    AR8200                  0.6.1           Alpha
-   502  AOR                    AR8000                  0.6.1           Beta
-   503  AOR                    AR7030                  0.4.1           Beta
-   504  AOR                    AR5000                  0.6.1           Beta
-   505  AOR                    AR3030                  0.4             Untested
-   506  AOR                    AR3000A                 0.5             Beta
-   508  AOR                    AR2700                  0.6             Untested
-   513  AOR                    AR8600                  0.6.1           Beta
-   514  AOR                    AR5000A                 0.6             Alpha
-   515  AOR                    AR7030 Plus             0.1             Beta
-   516  AOR                    SR2200                  0.1             Beta
-   605  JRC                    NRD-525                 0.1             Alpha
-   606  JRC                    NRD-535D                0.6             Stable
-   607  JRC                    NRD-545 DSP             0.6             Beta
-   801  Uniden                 BC780xlt                0.3             Untested
-   802  Uniden                 BC245xlt                0.3             Untested
-   803  Uniden                 BC895xlt                0.3             Untested
-   804  Radio Shack            PRO-2052                0.3             Untested
-   806  Uniden                 BC250D                  0.3             Untested
-   810  Uniden                 BCD-396T                0.3             Alpha
-   811  Uniden                 BCD-996T                0.3             Alpha
-   812  Uniden                 BC898T                  0.3             Untested
-   902  Drake                  R-8A                    0.5.1           Beta
-   903  Drake                  R-8B                    0.5             Untested
-  1004  Lowe                   HF-235                  0.3             Alpha
-  1103  Racal                  RA6790/GM               0.1             Untested
-  1105  Racal                  RA3702                  0.1             Alpha
-  1204  Watkins-Johnson        WJ-8888                 0.2             Untested
-  1402  Skanti                 TRP8000                 0.2             Untested
-  1404  Skanti                 TRP 8255 S R            0.1             Untested
-  1501  Winradio               WR-1000                 0.6             Untested
-  1502  Winradio               WR-1500                 0.6             Untested
-  1503  Winradio               WR-1550                 0.6             Untested
-  1504  Winradio               WR-3100                 0.6             Untested
-  1505  Winradio               WR-3150                 0.6             Untested
-  1506  Winradio               WR-3500                 0.6             Untested
-  1507  Winradio               WR-3700                 0.6             Untested
-  1509  Winradio               WR-G313                 0.1             Alpha
-  1601  Ten-Tec                TT-550                  0.2             Beta
-  1602  Ten-Tec                TT-538 Jupiter          0.7             Beta
-  1603  Ten-Tec                RX-320                  0.6             Stable
-  1604  Ten-Tec                RX-340                  0.3             Untested
-  1605  Ten-Tec                RX-350                  0.1             Untested
-  1607  Ten-Tec                TT-516 Argonaut V       0.2             Stable
-  1608  Ten-Tec                TT-565 Orion            0.5             Beta
-  1609  Ten-Tec                TT-585 Paragon          0.3             Beta
-  1611  Ten-Tec                TT-588 Omni VII         0.5             Stable
-  1612  Ten-Tec                RX-331                  0.1             Beta
-  1613  Ten-Tec                TT-599 Eagle            0.4             Untested
-  1701  Alinco                 DX-77                   0.7             Beta
-  1801  Kachina                505DSP                  0.3             Alpha
-  2201  TAPR                   DSP-10                  0.2             Alpha
-  2301  Flex-radio             SDR-1000                0.2             Untested
-  2303  DTTS Microwave Society DttSP IPC               0.2             Alpha
-  2304  DTTS Microwave Society DttSP UDP               0.2             Alpha
-  2401  RFT                    EKD-500                 0.4             Alpha
-  2501  Elektor                Elektor 3/04            0.4             Stable
-  2502  SAT-Schneider          DRT1                    0.2             Beta
-  2503  Coding Technologies    Digital World Traveller 0.2             Untested
-  2506  AmQRP                  DDS-60                  0.1             Alpha
-  2507  Elektor                Elektor SDR-USB         0.3.2           Stable
-  2508  mRS                    miniVNA                 0.1             Alpha
-  2509  SoftRock               Si570 AVR-USB           0.3             Beta
-  2511  KTH-SDR kit            Si570 PIC-USB           0.3             Beta
-  2512  FiFi                   FiFi-SDR                0.6             Beta
-  2513  AMSAT-UK               FUNcube Dongle          0.3             Beta
-  2514  N2ADR                  HiQSDR                  0.1             Untested
-  2515  Funkamatuer            FA-SDR                  0.2             Alpha
-  2516  AE9RB                  Si570 Peaberry V1       0.3             Beta
-  2517  AE9RB                  Si570 Peaberry V2       0.2             Beta
-  2518  AMSAT-UK               FUNcube Dongle Pro+     0.3             Beta
-  2601  Video4Linux            SW/FM radio             0.2.1           Beta
-  2602  Video4Linux2           SW/FM radio             0.2.1           Alpha
-  2701  Rohde&Schwarz          ESMC                    0.1             Alpha
-  2702  Rohde&Schwarz          EB200                   0.1             Untested
-  2801  Philips/Simoco         PRM8060                 0.1             Alpha
-  2901  ADAT www.adat.ch       ADT-200A                1.36            Beta
-  3001  Icom                   IC-M700PRO              0.1             Alpha
-  3002  Icom                   IC-M802                 0.1             Untested
-  3003  Icom                   IC-M710                 0.1             Untested
-
-------------------------------------------------------------------
+rigctld --list
 </pre>
+    Remember, the <i>rigctld</i> executable must be on your path that it usually is after installation.<br>
     There's no standardized protocol to remotely control one's rig, be it a Ham radio
     transceiver, a SWL receiver, any kind of scanner or other mobile.
     Many manufacturers have designed their own proprietary protocol, implemented in
     some of their product family. Therefore, each rig family will require a Hamlib
     backend to set the VFO frequency, change mode and passband width, get current
-    signal strength, etc.<br><br>
+    signal strength, etc.
+    <br><br>Communication between Hamlib(rigctld) and Cqrlog is standardized and when Hamlib supports your rig Cqrlog will also support it. 
+    <br>Note that with Hamlib, as well as with Cqrlog, package maintainers very often offer old versions to install. That's why it is recommended to compile both from source code that is available from github.com. That way you will get the latest versions for use.
+    <br><a href="https://github.com/Hamlib/Hamlib">https://github.com/Hamlib/Hamlib</a>
+    <br><a href="https://github.com/ok2cqr/cqrlog">https://github.com/ok2cqr/cqrlog</a>
+    <br><br>
     <table width="100%" border="0" cellpadding="5" cellspacing="2">
         <tbody>
         <tr>
diff --git a/help/h7.html b/help/h7.html
index 120226f..5b1b6e5 100644
--- a/help/h7.html
+++ b/help/h7.html
@@ -20,16 +20,14 @@
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h6.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h8.html">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
 <br>
 <div align=left><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
 <p align="center"><img src="img/line.png"></p><a name="bh4"></a><br><b><h2>LoTW support</h2></b>
-<p><strong>Preparation</strong></p>
+<p><h3>Preparation</h3></p>
 <div align=justify>We assume that you have a working LoTW Account. If you are new to LoTW,
     carefully read the instructions provided by the ARRL and set up your account.<br><br>
     Most important is the certificate. ARRL issues certificates (.tq8) which are bound to
@@ -37,7 +35,7 @@
     .tq8 certificate, it is <b>absolutely essential to convert it to more usual .p12</b>
     format which <strong>can</strong> be transferred. Do this immediately!<br><br>
     Download and install the latest LoTW utilities (<em>tqsl</em> and <em>tqslcert</em>).
-    <p><strong>Setup</strong></p>
+    <p><h3>Setup</h3></p>
     <img src="img/h76.png"><br><br>
     <div align=justify>If you didn't do it already in the 'Preferences' setup procedure,
         provide your user name for LoTW and the password (this is <strong>not</strong> the
@@ -62,7 +60,11 @@
     <br>
     <img src="img/h81.png"><br><br>
     <div align=justify>Once entered, the QTH name stays in the predefined command line.</div>
-    <p><strong>LoTW file export and upload</strong></p>
+    <p><h3>LoTW file export and upload</h3></p>
+    You find LoTW up- and download from <b>QSO list/QSL</b> menu.
+    <br> For daily usage it is easier to select<b>Export only QSQs that have never been uploaded</b> using the <b>Upload to LoTW TAB </b>of Export window.
+    <br> Below are instructions for making file to export and exporting it.
+    <br><br>
     <div align=justify><strong>1. Select the QSO records</strong> you want to confirm.
 
         A suitable choice is a filter for date, QSL received etc. But be aware that QSO with propagtion mode "RPT - repeater" are filtered, due to the LoTW rule that repeater QSO doesn't count.<br><br>
@@ -103,7 +105,7 @@ Uploading was succesful<br></pre>
         Log in and go to <em>Your Account -> Your Activity</em> and you should see your last
         upload with the date, time and file name.
         <br><br></div>
-    <p><strong>LoTW files download and processing</strong></p>
+    <p><h3>LoTW files download and processing</h3></p>
     <div align=justify>The main purpose of the LoTW file processing (also download) is to
         mark existing QSO records as confirmed via LoTW. Files can be downloaded directly
         into CQRLOG or an already downloaded ADIF files can be processed.
@@ -116,26 +118,30 @@ Uploading was succesful<br></pre>
     </div>
     <br>
     <img src="img/h86.png"><br><br>
-    If you choose <em>Download and process data from LoTW website</em> a progress
-    indicator is displayed.
+    If you press <b>Download and process data from LoTW website</b> a progress
+    indicator is displayed in <b>Progress</b> window.
+    <br>You can select to <b>show new confirmed qsos</b> in Progress window after import finish.
+    <br>You can also select to <b>import station information from LoTW </b>data if it is not filled during qso logging (default checked).
+    This does not overwrite logged data, just fills empty columns of WAZ, ITU, IOTA, GRID, STATE and COUNTY
 </div>
 <br><br>
 <img src="img/h87.png"><br><br>
-<div align=justify>The Size changes while downloading, if finished it indicates the
-    total file size. When the download finishes, a summary appears and the import begins,
+<div align=justify>The Size changes while downloading, When finished it indicates the
+    total file size downloaded. When the download finishes, a summary appears and the import begins,
     showing the same progress indicator as above.
+    <br>In case there are files that are not in your log the queston to show the error file appears.
+    You can read more about import error file handling from <a href="qslimperr.html">LoTW/eQSL import errors</a>
 </div>
 <br>
 <img src="img/h88.png"><br><br>
 If the file is not accessible (due to server overload etc.), an error message is shown.
 Also if the file contains a record which is not in your log, a warning message appears.
+<br>All downloaded files from LoTW are saved in ~/.config/cqrlog/lotw folder for possible later needs.
 <p align="center"><img src="img/line.png"></p>
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h6.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h8.html">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
diff --git a/help/img/contest.png b/help/img/contest.png
index 055daf2..f12587b 100644
Binary files a/help/img/contest.png and b/help/img/contest.png differ
diff --git a/help/img/eqsl1.png b/help/img/eqsl1.png
new file mode 100644
index 0000000..a1e4a10
Binary files /dev/null and b/help/img/eqsl1.png differ
diff --git a/help/img/eqsl2.png b/help/img/eqsl2.png
new file mode 100644
index 0000000..aed1752
Binary files /dev/null and b/help/img/eqsl2.png differ
diff --git a/help/img/firsts1.png b/help/img/firsts1.png
new file mode 100644
index 0000000..2906303
Binary files /dev/null and b/help/img/firsts1.png differ
diff --git a/help/img/h0.png b/help/img/h0.png
new file mode 100644
index 0000000..d76fe9f
Binary files /dev/null and b/help/img/h0.png differ
diff --git a/help/img/h10.png b/help/img/h10.png
index 4623629..5729f06 100644
Binary files a/help/img/h10.png and b/help/img/h10.png differ
diff --git a/help/img/h104.png b/help/img/h104.png
index 172fc70..a4eb1c3 100644
Binary files a/help/img/h104.png and b/help/img/h104.png differ
diff --git a/help/img/h111.png b/help/img/h111.png
index 6066b0a..1eeeaca 100644
Binary files a/help/img/h111.png and b/help/img/h111.png differ
diff --git a/help/img/h1114b.png b/help/img/h1114b.png
index ad46123..b8c3fa4 100644
Binary files a/help/img/h1114b.png and b/help/img/h1114b.png differ
diff --git a/help/img/h1114d.png b/help/img/h1114d.png
new file mode 100644
index 0000000..6a44c3e
Binary files /dev/null and b/help/img/h1114d.png differ
diff --git a/help/img/h118b.png b/help/img/h118b.png
new file mode 100644
index 0000000..17d3d44
Binary files /dev/null and b/help/img/h118b.png differ
diff --git a/help/img/h121aa.png b/help/img/h121aa.png
new file mode 100644
index 0000000..71a93e5
Binary files /dev/null and b/help/img/h121aa.png differ
diff --git a/help/img/h2.png b/help/img/h2.png
index 0570bc5..517de70 100644
Binary files a/help/img/h2.png and b/help/img/h2.png differ
diff --git a/help/img/h29.png b/help/img/h29.png
index 2295b96..a18e3f9 100644
Binary files a/help/img/h29.png and b/help/img/h29.png differ
diff --git a/help/img/h42.png b/help/img/h42.png
index 8ef75ab..6f6365a 100644
Binary files a/help/img/h42.png and b/help/img/h42.png differ
diff --git a/help/img/h42b.png b/help/img/h42b.png
new file mode 100644
index 0000000..f44b6c9
Binary files /dev/null and b/help/img/h42b.png differ
diff --git a/help/img/h45ff.png b/help/img/h45ff.png
new file mode 100644
index 0000000..da0f92b
Binary files /dev/null and b/help/img/h45ff.png differ
diff --git a/help/img/h45fff.png b/help/img/h45fff.png
new file mode 100644
index 0000000..61e9758
Binary files /dev/null and b/help/img/h45fff.png differ
diff --git a/help/img/h45g.png b/help/img/h45g.png
index 0f32c54..2132a49 100644
Binary files a/help/img/h45g.png and b/help/img/h45g.png differ
diff --git a/help/img/h45gg.png b/help/img/h45gg.png
index 9a745c7..2f71924 100644
Binary files a/help/img/h45gg.png and b/help/img/h45gg.png differ
diff --git a/help/img/h5.png b/help/img/h5.png
index b0d96c8..2ab48cc 100644
Binary files a/help/img/h5.png and b/help/img/h5.png differ
diff --git a/help/img/h64-b.png b/help/img/h64-b.png
index 0c3be35..9723c72 100644
Binary files a/help/img/h64-b.png and b/help/img/h64-b.png differ
diff --git a/help/img/h7.png b/help/img/h7.png
index 4cbb832..d3b4b53 100644
Binary files a/help/img/h7.png and b/help/img/h7.png differ
diff --git a/help/img/h70.png b/help/img/h70.png
index 61541f4..1216964 100644
Binary files a/help/img/h70.png and b/help/img/h70.png differ
diff --git a/help/img/h87.png b/help/img/h87.png
index ce3aa0b..bc4439e 100644
Binary files a/help/img/h87.png and b/help/img/h87.png differ
diff --git a/help/img/h88.png b/help/img/h88.png
index 5849019..506c68e 100644
Binary files a/help/img/h88.png and b/help/img/h88.png differ
diff --git a/help/img/qslimperr1.png b/help/img/qslimperr1.png
new file mode 100644
index 0000000..6dfc58b
Binary files /dev/null and b/help/img/qslimperr1.png differ
diff --git a/help/img/wsjt16.png b/help/img/wsjt16.png
index 405279f..b61ec20 100644
Binary files a/help/img/wsjt16.png and b/help/img/wsjt16.png differ
diff --git a/help/img/wsjt16b.png b/help/img/wsjt16b.png
new file mode 100644
index 0000000..389ee75
Binary files /dev/null and b/help/img/wsjt16b.png differ
diff --git a/help/img/wsjt21.png b/help/img/wsjt21.png
index 405fee0..41d3039 100644
Binary files a/help/img/wsjt21.png and b/help/img/wsjt21.png differ
diff --git a/help/img/wsjt22.png b/help/img/wsjt22.png
index 4c7cad5..509886c 100644
Binary files a/help/img/wsjt22.png and b/help/img/wsjt22.png differ
diff --git a/help/img/wsjt23.png b/help/img/wsjt23.png
index 547f2ef..6e251a6 100644
Binary files a/help/img/wsjt23.png and b/help/img/wsjt23.png differ
diff --git a/help/img/wsjt29.png b/help/img/wsjt29.png
index f42156c..f7d15dc 100644
Binary files a/help/img/wsjt29.png and b/help/img/wsjt29.png differ
diff --git a/help/img/wsjt35.png b/help/img/wsjt35.png
index 2dfee17..8b2c383 100644
Binary files a/help/img/wsjt35.png and b/help/img/wsjt35.png differ
diff --git a/help/img/wsjt36.png b/help/img/wsjt36.png
index 76a4bca..86a9033 100644
Binary files a/help/img/wsjt36.png and b/help/img/wsjt36.png differ
diff --git a/help/index_left.html b/help/index_left.html
index 246b14b..fa39f20 100644
--- a/help/index_left.html
+++ b/help/index_left.html
@@ -12,7 +12,9 @@
 <h2><a name="aa"><strong>Contents:</strong></a></h2>
 <h3><strong>Quick start</strong></h3>
 <ul>
-        <li><a target="right" href="h1.html">Preferences</a></li>
+        <li><a target="right" href="h1.html">Starting cqrlog</a></li>
+        <li><a target="right" href="firsttime.html">Running first time</a></li>
+        <li><a target="right" href="h1.html#ah1">Preferences</a></li>
         <li><a target="right" href="h1.html#ah2">Program</a></li>
         <li><a target="right" href="h1.html#ah3">Station</a></li>
         <li><a target="right" href="h1.html#ah4">New QSO</a></li>
@@ -30,7 +32,7 @@
         <li><a target="right" href="h1.html#bh1">Bandmap</a></li>
         <li><a target="right" href="h1.html#bh2">xplanet support</a></li>
         <li><a target="right" href="h1.html#bh3">Zip code tracking</a></li>
-        <li><a target="right" href="h1.html#bh4">LoTW support</a></li>
+        <li><a target="right" href="h1.html#bh4">LoTW/eQSL support</a></li>
         <li><a target="right" href="h1.html#ch1">CW interface</a></li>
         <li><a target="right" href="h26.html">CW messages</a></li>
         <li><a target="right" href="h28.html">Voice messages</a></li>
@@ -61,7 +63,9 @@
     <li><a target="right" href="adif.html">Digital modes:</a> <em>ADIF remote</em></li>
     <li><a target="right" href="wsjt.html">Digital modes:</a> <em>wsjt-x</em></li>
     <li><a target="right" href="h21.html#ah19">DX Cluster Operation</a></li>
+    <li><a target="right" href="h34.html">eQSL</a></li>
     <li><a target="right" href="h23.html#ah22">Filtering</a></li>
+    <li><a target="right" href="h32.html">Grayline map</a></li>
     <li><a target="right" href="h25.html#grp">Group edit</a></li>
     <li><a target="right" href="gridmap.html">Grid Map</a></li>
     <li><a target="right" href="h7.html">LoTW</a></li>
@@ -79,28 +83,28 @@
 </ul>
 <strong><h3>Advanced operations</h3></strong>
 <ul>
+    <li><a target="right" href="qslimperr.html">LoTW/eQSL import errors</a></li>
     <li><a target="right" href="h27.html">SQL console</a></li>
 </ul>
 <strong><h3>Maintenance</h3></strong>
 <ul>
     <li><a target="right" href="h3.html#ah24">ADIF import</a></li>
     <li><a target="right" href="h3.html#ah25">ADIF export</a></li>
-    <li><a target="right" href="h3.html#ah26">HTML export</a></li>
-    <li><a target="right" href="h3.html#ah27">EDI export</a></li>
     <li><a target="right" href="h3.html#ah28">Cabrillo export</a></li>
-    <li><a target="right" href="h3.html#ah29">Program version update</a></li>
     <li><a target="right" href="h3.html#ah30">Country files update</a></li>
-    <li><a target="right" href="h3.html#ah31">QSL Manager Database update</a></li>
-    <li><a target="right" href="h3.html#ah32">Statistics Rebuilding</a></li>
+    <li><a target="right" href="h3.html#ah27">EDI export</a></li>
+    <li><a target="right" href="h3.html#ah26">HTML export</a></li>
+    <li><a target="right" href="h3.html#ah34">Log backup</a></li>
     <li><a target="right" href="h7.html#cfm">LoTW confirmation report update</a></li>
     <li><a target="right" href="h3.html#ah33">Membership databases</a></li>
-    <li><a target="right" href="h3.html#ah34">Log backup</a></li>
+    <li><a target="right" href="h3.html#ah29">Program version update</a></li>
+    <li><a target="right" href="h3.html#ah31">QSL Manager Database update</a></li>
+    <li><a target="right" href="h3.html#ah32">Statistics Rebuilding</a></li>
 </ul>
 <strong><h3>Miscellaneous</h3></strong>
 <ul>
-    <li><a target="right" href="h6.html">Supported radio types</a></li>
-    <li><a target="right" href="h6.html#param">Comm parameters of some popular radios</a></li>
     <li><a target="right" href="h8.html">GNU GENERAL PUBLIC LICENSE</a></li>
+    <li><a target="right" href="h6.html">Supported radio types</a></li>
 </ul>
 
 <strong><h3>I want to...</h3></strong>
diff --git a/help/index_right.html b/help/index_right.html
index b115c93..d3c0e20 100644
--- a/help/index_right.html
+++ b/help/index_right.html
@@ -18,6 +18,11 @@ and
 <i>Martin Kratoska, OK1RR
     [<a href="http://www.ok1rr.com">http://www.ok1rr.com</a>]</i>
 <br><br>
+<strong><h3>If you are impatient:</h3></strong>
+<div align="justify">
+    <div>Please check at least left frame <strong>'Starting cqrlog'</strong>,<strong>'Running first time'</strong> and <strong>'Preferences'</strong>. 
+         <br> Thank you !
+    </div>     
 <strong><h3>Description:</h3></strong>
 <div align="justify">
     <div>CQRLOG is an advanced ham radio logging application based
diff --git a/help/qslimperr.html b/help/qslimperr.html
new file mode 100644
index 0000000..b9a32cf
--- /dev/null
+++ b/help/qslimperr.html
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en-us">
+<head>
+    <title>CQRLOG - LoTW/eQSL import errors</title></head>
+<body>
+<table border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tbody>
+    <tr>
+        <td valign="top"><img src="img/exc.png"></td>
+        <td align="justify" bgcolor="ffffcc" valign="top"><strong>
+            <font color="red">WARNING!</font></strong>
+            Backup your data often! BACKUP your log directory at the end of EVERY session!
+            All that you need to backup and store in a safe place is the log database directory
+            located in the ~/.config/cqrlog/database folder, or you can enable the autobackup function
+            in Preferences. This autobackup function creates an ADIF file with a backup of your log.
+        </td>
+    </tr>
+    </tbody>
+</table>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+<div style="text-align: left;"><strong>CQRLOG for LINUX by OK2CQR &amp; OK1RR</strong></div>
+<p align="center"><img src="img/line.png"></p>
+<H2>LoTW/eQSL import errors</H2>
+<p><H4>Preface</H4>
+Sometimes you find some "QSO not found" errors in LoTW or eQSL download. There are some reasons for that.<br>
+<ul>
+<li>QSO did not complete and you did not log that, but the opponent station thinks it is completed.</li>
+<li>People type in their old paper logs to computer and upload them to LoTW/eQSL. QSO is ok but it is somewhere in your earlier paper logs.</li>
+<li>QSO may be an SWL report waiting to confirm via eQSL</li>
+</ul><br>
+Those same errors keep appearing every time when you download from LoTW/eQSL. If you confirm or archive qso in eQSL that does not help as downloading always gives all qsos from given start date.
+<br>Only way to get rid of those errors is to add them into cqrlog. Cqrlog LoTW and eQSL error file names are now modified from ".txt" to ."adi" and file contents are suitable for adif import.
+</p>
+<p><H4>Operating with error files</H4>
+If you just want to add all qsos that were not in your log you simply make <strong>QSO list/File/Import/ADIF</strong> using <strong>errors_LoTW.adi</strong> or <strong> errors_eQSL.adi</strong> file.
+<br>All qsos are added to your log with following additions:
+<ul>
+<li>LoTW qsl sent and LoTW qsl sent date is set to current date</li>
+<li>eQSL qsl sent and eQSL qsl sent date is set to current date</li>
+<ul><li>These prevent upload on next "Export only QSOs which has never been uploaded"</li></ul>
+<li>Contest name is set to "Qso_was_not_found_in_log!" for all imported QSOs</li>
+<ul><li>This allows quick find of all these kind of qsos using <strong>QSO list/Filter/Contest filter</strong></li></ul>
+</ul>
+<br>
+If you do not want to import all error qsos, or want to send a confirmation to eQSL for SWL report, or confirm old paper log qso via LoTW you can do it
+ quite easy by modifying the <strong>errors_LoTW.adi</strong> or <strong> errors_eQSL.adi</strong> file with plain text editor <strong>before you import it to cqrlog.</strong>.
+</p><p><img src="img/qslimperr1.png"></p>
+<p>Here is a sample eQSL error file opened with Leafpad editor (that shows line numbers at left side).
+LoTW error file looks very similar, but has some text more for every qso record.
+<br><br>When you edit file do not touch the header of the file. Lines from 1 to 8 where header ends with "EOH" (End Of Header).
+<br>You can remove qso records that you do not want to import to your log by removing all record's lines. For example here remove the CQ750RSI qso means
+ to remove lines 10 - 22. Adif tag APP_CQRLOG_ERROR:XXX specifies one error qso data lenght (to EOH tag) but it is actually not used for anything.
+</p><p>
+<h5>SWL</h5>
+Cqrlog fixes error record if adif tag APP_EQSL_SWL is found.<br>
+CONTEST_ID is changed to talk about "SWL" instead of "Qso". Then all imported SWL cards from this error file can be found fast by selecting Contest filter "SWL_was_not_found_in_log!"
+<br>RST_SENT is swapped to RST_RCVD as SWLs do report how heard you in RST_SENT tag.
+<br>RST_SENT is replaced as "SWL". This is your "report" for swl.
+<br>SWLs should report who they heard you working with. They should use QSOMSG adif tag. This is swapped to tag COMMENT to show up in "Comment for qso" in cqrlog. Without this informaton you can concider that swl report is not valid.
+<br><br>If you want to upload a confirmation for SWL  after importing error file to cqrlog change "eQSL qsl sent" value with QSL list/File/Group edit from Y to N to cause upload to eQSL. This might be handy if you want to check several swl cards before uploading. Be careful not to touch "LoTW qsl sent" value as LoTW does not support SWLs. 
+<br><br>Same way, if you want to confirm an old paper log qso now added to cqrlog on next upload/"Export only QSOs which has never been uploaded"
+just change the eQSL and/or LoTW qsl set from value Y to N</p> 
+<p>With these properties handling of "not found qsos" should become a little bit easier</p>
+ 
+
+
+
+
+
+<p align="center"><img src="img/line.png"></p>
+<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
+    <tbody>
+    <tr>
+        <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
+    </tr>
+    </tbody>
+</table>
+<br>
+</body>
+</html>
diff --git a/help/wkusb.html b/help/wkusb.html
index 653cc31..948f158 100644
--- a/help/wkusb.html
+++ b/help/wkusb.html
@@ -20,9 +20,7 @@
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h26.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h26.html">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
@@ -180,9 +178,7 @@
 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
     <tbody>
     <tr>
-        <td align="left" width="33%">&nbsp;&lt;<a href="h26.html"> Prev</a></td>
         <td align="center" width="33%">[<a href="index.html" target="_top">Menu</a>]</td>
-        <td align="right" width="33%"><a href="h26.html">Next </a>&gt;</td>
     </tr>
     </tbody>
 </table>
diff --git a/help/wsjt.html b/help/wsjt.html
index bfc3afd..434644c 100644
--- a/help/wsjt.html
+++ b/help/wsjt.html
@@ -1,4 +1,3 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 <head>
@@ -55,10 +54,13 @@ These will show you that UDP link is alive between these programs.</font></p>
 
 
 <h3><a name="w1"></a>Wsjt-x CQ-monitor</h3>
-<p ><img src="img/wsjt16.png" name="16"  width="363" height="282">
+<p ><img src="img/wsjt16.png" name="16"  width="363" height="282"> <img src="img/wsjt16b.png" name="16"  width="363" height="282">
 </img>
 </p>
-<p >Wsjt-x CQ-monitor form opens when you select ”Remote mode for wsjtx” from ”File” of NewQSO window.</p>
+<p >Wsjt-x CQ-monitor form opens when you select ”Remote mode for wsjtx” from ”File” of NewQSO window.
+<br> Top checkbox selection bar is visible at start by default.<br>
+You can hide it clicking with mouse on band or mode visible in both ends of the selection bar.
+ It can be restored by moving mouse over window's name bar at top. It works same way when wsjtx-MAP mode is selected (see below).</p>
 <p >You can close this window and reopen it later via NewQSO/Window/Wsjt-x monitor that is visible only when
 remote mode is selected. While it is closed it will not update it’s contents.<br/>
 Only remote logging and call qrz/hamqth seek are used then.
@@ -86,28 +88,12 @@ In some cases your TX may be shut down after you have first tried to answer some
 </img>
 <img src="img/wsjt30.png" name="30" width="353" height="83">
 </img></p><p>
-If you do not want any information texts, just alerts, you can check <b>nTxt</b> to prevent richmemo text updates and minimize window size horizontal or drop it completely down with (<b>_</b>) while alerts and follow are still working.
-</br>
-If you have Wsjt-x devel version 1.9.0-rc3 r8592 (or higher) <strong>color</strong>ing is sent <strong>back</strong> to Wsjt-x with same choosed colours as CQ-monitor uses. 
-How ever there are some limitations compared to CQ-monitor:
-</br><li><strong>color back</strong> can not change lower case letters of Band Activity line in case call or locator is worked. Just font color is changed</li>
-<li><strong>color back</strong> can not print locator with 2 colors in case main grid is worked, but subgrid(numerical part) is not. In that case locator will have maingrid color and yellow background.</li>
-<li><strong>color back</strong> will paint both "CQ" and cq-direction with "CQ ext" color if CQ is not directed to you.</li>
-</br>
-With older versions of wsjt-x this causes unkonwn command error and then <b>nTxt</b> should not be checked until you get newer version of Wsjt-x.
-</br></p><p>
-<img src="img/wsjt34.png" name="34" width="353" height="282">
-</img>
-<img src="img/wsjt33.png" name="33" width="353" height="282">
-</img></p><p>
-If you are able to use <strong>color back</strong> feature you may want to change some Wsjt-x color settings and maybe check "CQ only" checbox at Main window. Selecting also font to some of "mono"+ "bold" ones from "Configuration/General/Decoded Text Font" could make a better view.</p>
-<p>
-<ul><strong>A word of warning:</strong></ul>  In current Wsjt-x devel version 1.9.0-rc3 r8592 selecting <strong>CQ only</strong> will <strong>disable Generating of Std messages</strong> by double click either <strong>followed</strong> message line or Wsjt-x <strong>map's non-cq lines</strong>.
-</br>This <strong>does not</strong> happen if <strong>CQ only</strong> is <strong>uncheked</strong>. Unchecking it after not working double click does not help if Band Activiy window does not contain that line from which  <strong>Wsjt map</strong> or <strong>follow</strong> line was created.
-</br>That is because Wsjt-x must found equal line from Band activity and UDP command that produces Std General messages creation. 
-</br> This may change in future devel versions or in official release of 1.9.0, but at the moment you should be aware of that.</p>
-<p><strong>Hint:</strong> If you have had <strong>CQ only</strong> checked and you want to load Std message from just appeared line from <strong>Wsjt map</strong> or <strong>follow line</strong> uncheck <strong>CQ only immediately</strong> during time that entry is not grayed (ongoing period).
- Wsjtx will produce again last periods decode (wsjt map will show it double) and after that you can have effect for double click.
+If you do not want any information texts, just alerts, you can check <b>nTxt</b> to prevent text updates and minimize window size horizontal or drop it completely down with (<b>_</b>) while alerts and follow are still working.
+</br></br>
+Selecting <b>DX</b> checkbox cqrlog fiters away all calls that are from same continent as you are. This works both in Cq monitor and MAP mode<br>
+
+
+
 </p><p><img src="img/wsjt21.png" name="21" width="363" height="282">
 </img></p>
 Checking <b>“flw”</b> new part of monitor opens. This will make easier to follow a DX who does not stay on same frequency, but jumps around answering to callers.
@@ -225,7 +211,7 @@ cd ~/.config/cqrlog/ctyfiles
 <p>CQ-monitor can be turned to "Band map"- type Wsjt-x map by checking "<strong>Map</strong>". It hides all other controls.
 How ever if alerts were <strong>on</strong> they stay <strong>on</strong>. Exception is that <strong>Text alert</strong> does not find continents and comments like "New country","QSL needed" etc.
 </br>Map-mode shows all traffic on band. Colors of callsigns and locators are same than in CQ-monitor. If call is <strong>not in parentheses</strong> it is a <strong>CQ</strong>-call.
- <strong>Calls in parentheses have qso</strong> if there is no locator shown. If locator is shown they are answering to someones CQ.
+ <strong>Calls in parentheses have qso</strong> if there is no locator shown. If locator is shown they are answering to someones CQ. If <b>closing bracket</b> is replaced with asterisk <b>*</b> it means that callsign is closing his current qso I.E. sending RR73 or 73.
 </br>If station is calling <strong>directed CQ</strong> that is <strong>not directed to you</strong> (same as in CQ-monitor, but in short form)  <strong>the direction </strong> is shown at the and of line.
 </br> 
 </br>As also all other lines than CQs are compared against your log entries this mode will eat more of cpu cycles than CQ-monitor.
@@ -236,6 +222,26 @@ How ever if alerts were <strong>on</strong> they stay <strong>on</strong>. Excep
 </p><p><strong>dB</strong> selection shows station snr report, like it shows up in Band Activity of wsjt-x.
 </br><strong>ColorBackCQs </strong> selection work so that all <strong>CQs</strong> are printed (colored) <strong>back to Wsjt-x</strong> Band Activity window and <strong>rest of the traffic</strong> will appear to Wsjt-x <strong>band map</strong>.
 </p>
+If you have Wsjt-x devel version 1.9.0-rc3 r8592 (or higher) <strong>color</strong>ing is sent <strong>back</strong> to Wsjt-x with same choosed colours as CQ-monitor uses. 
+How ever there are some limitations compared to CQ-monitor:
+</br><li><strong>color back</strong> can not change lower case letters of Band Activity line in case call or locator is worked. Just font color is changed</li>
+<li><strong>color back</strong> can not print locator with 2 colors in case main grid is worked, but subgrid(numerical part) is not. In that case locator will have maingrid color and yellow background.</li>
+<li><strong>color back</strong> will paint both "CQ" and cq-direction with "CQ ext" color if CQ is not directed to you.</li>
+</br>
+With older versions of wsjt-x this causes unkonwn command error and then <b>nTxt</b> should not be checked until you get newer version of Wsjt-x.
+</br></p><p>
+<img src="img/wsjt34.png" name="34" width="353" height="282">
+</img>
+<img src="img/wsjt33.png" name="33" width="353" height="282">
+</img></p><p>
+If you are able to use <strong>color back</strong> feature you may want to change some Wsjt-x color settings and maybe check "CQ only" checbox at Main window. Selecting also font to some of "mono"+ "bold" ones from "Configuration/General/Decoded Text Font" could make a better view.</p>
+<p>
+<ul><strong>A word of warning:</strong></ul>  In current Wsjt-x devel version 1.9.0-rc3 r8592 selecting <strong>CQ only</strong> will <strong>disable Generating of Std messages</strong> by double click either <strong>followed</strong> message line or Wsjt-x <strong>map's non-cq lines</strong>.
+</br>This <strong>does not</strong> happen if <strong>CQ only</strong> is <strong>uncheked</strong>. Unchecking it after not working double click does not help if Band Activiy window does not contain that line from which  <strong>Wsjt map</strong> or <strong>follow</strong> line was created.
+</br>That is because Wsjt-x must found equal line from Band activity and UDP command that produces Std General messages creation. 
+</br> This may change in future devel versions or in official release of 1.9.0, but at the moment you should be aware of that.</p>
+<p><strong>Hint:</strong> If you have had <strong>CQ only</strong> checked and you want to load Std message from just appeared line from <strong>Wsjt map</strong> or <strong>follow line</strong> uncheck <strong>CQ only immediately</strong> during time that entry is not grayed (ongoing period).
+ Wsjtx will produce again last periods decode (wsjt map will show it double) and after that you can have effect for double click.
 <p><img src="img/wsjt31.png" name="31" width="453" height="383">
 </img><img src="img/wsjt32.png" name="32" width="253" height="283">
 </img></p>
diff --git a/jcfsettings.cfg b/jcfsettings.cfg
new file mode 100644
index 0000000..1e1e788
--- /dev/null
+++ b/jcfsettings.cfg
@@ -0,0 +1,185 @@
+<?xml version="1.0" ?>
+<JediCodeFormatSettings>
+    <WriteVersion> 2.44 </WriteVersion>
+    <WriteDateTime> 44675.612696794 </WriteDateTime>
+    <Description> format settings for use with Lazarus </Description>
+    <ConfirmFormat> True </ConfirmFormat>
+  <Obfuscate>
+      <Enabled> False </Enabled>
+      <Caps> 1 </Caps>
+      <RemoveComments> True </RemoveComments>
+      <RemoveWhiteSpace> True </RemoveWhiteSpace>
+      <RemoveIndent> True </RemoveIndent>
+      <RebreakLines> True </RebreakLines>
+  </Obfuscate>
+  <Clarify>
+      <OnceOffs> 0 </OnceOffs>
+      <Warnings> True </Warnings>
+      <WarnUnusedParams> False </WarnUnusedParams>
+      <IgnoreUnusedParams> Sender </IgnoreUnusedParams>
+      <FileExtensions> dpr,lpr,pas,pp </FileExtensions>
+  </Clarify>
+  <Indent>
+      <IndentationSpaces> 2 </IndentationSpaces>
+      <FirstLevelIndent> 0 </FirstLevelIndent>
+      <HasFirstLevelIndent> False </HasFirstLevelIndent>
+      <IndentBeginEnd> False </IndentBeginEnd>
+      <IndentbeginEndSpaces> 2 </IndentbeginEndSpaces>
+      <IndentLibraryProcs> True </IndentLibraryProcs>
+      <IndentProcedureBody> False </IndentProcedureBody>
+      <KeepCommentsWithCodeInGlobals> True </KeepCommentsWithCodeInGlobals>
+      <KeepCommentsWithCodeInProcs> True </KeepCommentsWithCodeInProcs>
+      <KeepCommentsWithCodeInClassDef> True </KeepCommentsWithCodeInClassDef>
+      <KeepCommentsWithCodeElsewhere> True </KeepCommentsWithCodeElsewhere>
+      <IndentElse> False </IndentElse>
+      <IndentCaseElse> True </IndentCaseElse>
+      <IndentNestedTypes> False </IndentNestedTypes>
+      <IndentVarAndConstInClass> False </IndentVarAndConstInClass>
+  </Indent>
+  <Spaces>
+      <TabsToSpaces> True </TabsToSpaces>
+      <SpacesToTabs> False </SpacesToTabs>
+      <SpacesPerTab> 2 </SpacesPerTab>
+      <SpacesForTab> 2 </SpacesForTab>
+      <FixSpacing> True </FixSpacing>
+      <SpaceBeforeClassHeritage> False </SpaceBeforeClassHeritage>
+      <SpacesBeforeColonVar> 1 </SpacesBeforeColonVar>
+      <SpacesBeforeColonConst> 0 </SpacesBeforeColonConst>
+      <SpacesBeforeColonParam> 1 </SpacesBeforeColonParam>
+      <SpacesBeforeColonFn> 1 </SpacesBeforeColonFn>
+      <SpacesBeforeColonClassVar> 1 </SpacesBeforeColonClassVar>
+      <SpacesBeforeColonRecordField> 0 </SpacesBeforeColonRecordField>
+      <SpacesBeforeColonCaseLabel> 0 </SpacesBeforeColonCaseLabel>
+      <SpacesBeforeColonLabel> 1 </SpacesBeforeColonLabel>
+      <SpacesBeforeColonInGeneric> 0 </SpacesBeforeColonInGeneric>
+      <MaxSpacesInCode> 2 </MaxSpacesInCode>
+      <UseMaxSpacesInCode> True </UseMaxSpacesInCode>
+      <SpaceForOperator> 0 </SpaceForOperator>
+      <SpaceBeforeOpenBracketsInFunctionDeclaration> False </SpaceBeforeOpenBracketsInFunctionDeclaration>
+      <SpaceBeforeOpenBracketsInFunctionCall> False </SpaceBeforeOpenBracketsInFunctionCall>
+      <SpaceBeforeOpenSquareBracketsInExpression> False </SpaceBeforeOpenSquareBracketsInExpression>
+      <SpaceAfterOpenBrackets> False </SpaceAfterOpenBrackets>
+      <SpaceBeforeCloseBrackets> False </SpaceBeforeCloseBrackets>
+      <MoveSpaceToBeforeColon> False </MoveSpaceToBeforeColon>
+  </Spaces>
+  <Returns>
+      <WhenRebreakLines> 2 </WhenRebreakLines>
+      <MaxLineLength> 90 </MaxLineLength>
+      <NumReturnsAfterFinalEnd> 1 </NumReturnsAfterFinalEnd>
+      <RemoveBadReturns> True </RemoveBadReturns>
+      <AddGoodReturns> True </AddGoodReturns>
+      <UsesOnePerLine> False </UsesOnePerLine>
+      <BreakAfterUses> False </BreakAfterUses>
+      <RemoveExpressionReturns> True </RemoveExpressionReturns>
+      <RemoveVarReturns> True </RemoveVarReturns>
+      <NoReturnsInProperty> True </NoReturnsInProperty>
+      <RemoveProcedureDefReturns> True </RemoveProcedureDefReturns>
+      <RemoveReturns> True </RemoveReturns>
+      <RemoveVarBlankLines> True </RemoveVarBlankLines>
+      <RemoveProcHeaderBlankLines> True </RemoveProcHeaderBlankLines>
+      <Block> 1 </Block>
+      <BlockBegin> 0 </BlockBegin>
+      <Label> 1 </Label>
+      <LabelBegin> 1 </LabelBegin>
+      <CaseLabel> 1 </CaseLabel>
+      <CaseBegin> 1 </CaseBegin>
+      <CaseElse> 0 </CaseElse>
+      <CaseElseBegin> 2 </CaseElseBegin>
+      <EndElse> 0 </EndElse>
+      <ElseIf> 1 </ElseIf>
+      <ElseBegin> 2 </ElseBegin>
+      <BeforeCompilerDirectUses> 1 </BeforeCompilerDirectUses>
+      <BeforeCompilerDirectStatements> 0 </BeforeCompilerDirectStatements>
+      <BeforeCompilerDirectGeneral> 1 </BeforeCompilerDirectGeneral>
+      <AfterCompilerDirectUses> 1 </AfterCompilerDirectUses>
+      <AfterCompilerDirectStatements> 0 </AfterCompilerDirectStatements>
+      <AfterCompilerDirectGeneral> 1 </AfterCompilerDirectGeneral>
+      <ReturnChars> 0 </ReturnChars>
+      <RemoveConsecutiveBlankLines> True </RemoveConsecutiveBlankLines>
+      <MaxConsecutiveBlankLines> 4 </MaxConsecutiveBlankLines>
+      <MaxBlankLinesInSection> 1 </MaxBlankLinesInSection>
+      <LinesBeforeProcedure> 1 </LinesBeforeProcedure>
+  </Returns>
+  <Comments>
+      <RemoveEmptyDoubleSlashComments> True </RemoveEmptyDoubleSlashComments>
+      <RemoveEmptyCurlyBraceComments> True </RemoveEmptyCurlyBraceComments>
+  </Comments>
+  <Capitalisation>
+      <Enabled> True </Enabled>
+      <ReservedWords> 1 </ReservedWords>
+      <Operators> 1 </Operators>
+      <Directives> 1 </Directives>
+      <Constants> 1 </Constants>
+      <Types> 2 </Types>
+  </Capitalisation>
+  <SpecificWordCaps>
+      <Enabled> True </Enabled>
+      <Words>  </Words>
+  </SpecificWordCaps>
+  <Identifiers>
+      <Enabled> True </Enabled>
+      <Words> ActivePage,AnsiCompareStr,AnsiCompareText,AnsiUpperCase,AsBoolean,AsDateTime,AsFloat,AsInteger,Assign,AsString,AsVariant,BeginDrag,Buttons,Caption,Classes,ClassName,Clear,Close,Components,Controls,Count,Create,Data,Dec,Delete,Destroy,Dialogs,Enabled,EndDrag,EOF,Exception,Execute,False,FieldByName,First,Forms,Free,FreeAndNil,GetFirstChild,Graphics,Height,Checked,idAbort,idCancel,idIgnore,IDispatch,idNo,idOk,idRetry,idYes,Inc,Initialize,IntToStr,ItemIndex,IUnknown,Lines,Math,MaxValue,mbAbort,mbAll,mbCancel,mbHelp,mbIgnore,mbNo,mbOK,mbRetry,mbYes,mbYesToAll,Messages,MinValue,mnNoToAll,mrAbort,mrAll,mrCancel,mrIgnore,mrNo,mrNone,mrNoToAll,mrOk,mrRetry,mrYes,mrYesToAll,mtConfirmation,mtCustom,mtError,mtInformation,mtWarning,Name,Next,Open,Ord,ParamStr,Perform,PChar,ProcessMessages,Read,ReadOnly,RecordCount,Register,Release,Result,Sender,SetFocus,Show,ShowMessage,Source,StdCtrls,StrToInt,SysUtils,TAutoObject,TButton,TComponent,TDataModule,Text,TForm,TFrame,TList,TNotifyEvent,TObject,TObjectList,TPageControl,TPersistent,True,TStringList,TStrings,TTabSheet,Unassigned,Value,Visible,WideString,Width,Windows,Write </Words>
+  </Identifiers>
+  <NotIdent>
+      <Enabled> True </Enabled>
+      <Words> False,Name,nil,PChar,read,ReadOnly,True,WideString,write </Words>
+  </NotIdent>
+  <UnitNameCaps>
+      <Enabled> True </Enabled>
+      <Words> ActnColorMaps,ActnCtrls,ActnList,ActnMan,ActnMenus,ActnPopup,ActnRes,ADOConst,ADODB,ADOInt,AppEvnts,AxCtrls,BandActn,bdeconst,bdemts,Buttons,Classes,Clipbrd.pas,CmAdmCtl,ComCtrls,ComStrs,Consts,Controls,CtlConsts,CtlPanel,CustomizeDlg,DataBkr,DB,DBActns,dbcgrids,DBClient,DBClientActnRes,DBClientActns,DBCommon,DBConnAdmin,DBConsts,DBCtrls,DbExcept,DBGrids,DBLocal,DBLocalI,DBLogDlg,dblookup,DBOleCtl,DBPWDlg,DBTables,DBXpress,DdeMan,Dialogs,DrTable,DSIntf,ExtActns,ExtCtrls,ExtDlgs,FileCtrl,FMTBcd,Forms,Graphics,GraphUtil,Grids,HTTPIntr,CheckLst,IB,IBBlob,IBCustomDataSet,IBDatabase,IBDatabaseInfo,IBDCLConst,IBErrorCodes,IBEvents,IBExternals,IBExtract,IBGeneratorEditor,IBHeader,IBIntf,IBQuery,IBRestoreEditor,IBSecurityEditor,IBServiceEditor,IBSQL,IBSQLMonitor,IBStoredProc,IBTable,IBUpdateSQL,IBUtils,IBXConst,ImgList,JclAbstractContainers,JclAlgorithms,JclAnsiStrings,JclAppInst,JclArrayLists,JclArraySets,JclBase,JclBinaryTrees,JclBorlandTools,JclCIL,JclCLR,JclCOM,JclComplex,JclCompression,JclConsole,JclContainerIntf,JclCounter,JclDateTime,JclDebug,JclDotNet,JclEDI,JclEDI_ANSIX12,JclEDI_ANSIX12_Ext,JclEDISEF,JclEDITranslators,JclEDI_UNEDIFACT,JclEDI_UNEDIFACT_Ext,JclEDIXML,JclExprEval,JclFileUtils,JclFont,JclGraphics,JclGraphUtils,JclHashMaps,JclHashSets,JclHookExcept,JclIniFiles,JclLANMan,JclLinkedLists,JclLocales,JclLogic,JclMapi,JclMath,JclMetadata,JclMIDI,JclMime,JclMiscel,JclMsdosSys,JclMultimedia,JclNTFS,JclPCRE,JclPeImage,JclPrint,JclQGraphics,JclQGraphUtils,JclQueues,JclRegistry,JclResources,JclRTTI,JclSecurity,JclShell,JclSchedule,JclSimpleXml,JclStacks,JclStatistics,JclStreams,JclStrHashMap,JclStringLists,JclStrings,JclStructStorage,JclSvcCtrl,JclSynch,JclSysInfo,JclSysUtils,JclTask,JclTD32,JclUnicode,JclUnitConv,JclUnitVersioning,JclUnitVersioningProviders,JclValidation,JclVectors,JclWideFormat,JclWideStrings,JclWinMIDI,JclWin32,JclWin32Ex,Jcl8087,ListActns,Mask,MConnect,Menus,Midas,MidasCon,MidConst,MPlayer,MtsRdm,Mxconsts,ObjBrkr,OleAuto,OleConst,OleCtnrs,OleCtrls,OleDB,OleServer,Outline,Printers,Provider,recerror,ScktCnst,ScktComp,ScktMain,SConnect,ShadowWnd,SimpleDS,SMINTF,SqlConst,SqlExpr,SqlTimSt,StdActnMenus,StdActns,StdCtrls,StdStyleActnCtrls,SvcMgr,SysUtils,TabNotBk,Tabs,TConnect,Themes,ToolWin,ValEdit,VDBConsts,WinHelpViewer,XPActnCtrls,XPMan,XPStyleActnCtrls </Words>
+  </UnitNameCaps>
+  <Asm>
+      <Caps> 0 </Caps>
+      <BreaksAfterLabel> 1 </BreaksAfterLabel>
+      <BreaksAfterLabelEnabled> True </BreaksAfterLabelEnabled>
+      <StatementIndentEnabled> True </StatementIndentEnabled>
+      <StatementIndent> 7 </StatementIndent>
+      <ParamsIndentEnabled> True </ParamsIndentEnabled>
+      <ParamsIndent> 15 </ParamsIndent>
+  </Asm>
+  <PreProcessor>
+      <Enabled> True </Enabled>
+      <DefinedSymbols> MSWINDOWS </DefinedSymbols>
+      <DefinedOptions>  </DefinedOptions>
+  </PreProcessor>
+  <Align>
+      <AlignAssign> False </AlignAssign>
+      <AlignConst> False </AlignConst>
+      <AlignTypedef> False </AlignTypedef>
+      <AlignVars> False </AlignVars>
+      <AlignComment> False </AlignComment>
+      <AlignFields> False </AlignFields>
+      <InterfaceOnly> False </InterfaceOnly>
+      <MinColumn> 2 </MinColumn>
+      <MaxColumn> 60 </MaxColumn>
+      <MaxVariance> 5 </MaxVariance>
+      <MaxVarianceInterface> 5 </MaxVarianceInterface>
+      <MaxUnalignedStatements> 0 </MaxUnalignedStatements>
+  </Align>
+  <Replace>
+      <Enabled> False </Enabled>
+      <Words>  </Words>
+  </Replace>
+  <Uses>
+      <RemoveEnabled> False </RemoveEnabled>
+      <InsertInterfaceEnabled> False </InsertInterfaceEnabled>
+      <InsertImplementationEnabled> False </InsertImplementationEnabled>
+      <FindReplaceEnabled> False </FindReplaceEnabled>
+      <Remove>  </Remove>
+      <InsertInterface>  </InsertInterface>
+      <InsertImplementation>  </InsertImplementation>
+      <Find>  </Find>
+      <Replace>  </Replace>
+  </Uses>
+  <Transform>
+      <BeginEndStyle> 1 </BeginEndStyle>
+      <AddBlockEndSemicolon> True </AddBlockEndSemicolon>
+      <SortUsesInterface> False </SortUsesInterface>
+      <SortUsesImplmentation> False </SortUsesImplmentation>
+      <SortUsesProgram> False </SortUsesProgram>
+      <SortUsesBreakOnReturn> False </SortUsesBreakOnReturn>
+      <SortUsesBreakOnComment> False </SortUsesBreakOnComment>
+      <SortUsesSortOrder> 0 </SortUsesSortOrder>
+      <SortUsesNoComments> False </SortUsesNoComments>
+  </Transform>
+</JediCodeFormatSettings>
diff --git a/src/azidis3.pas b/src/azidis3.pas
index 03abf42..e1b03ff 100755
--- a/src/azidis3.pas
+++ b/src/azidis3.pas
@@ -92,7 +92,8 @@ begin
   c := delx(loc1);
   d := dely(loc1);
   azim  := IntToStr(round(azimut(loc2)));
-  qrb   := IntToStr(round(dis));
+  // Adhere to REG1 QRB calculation, /node/3292
+  qrb   := IntToStr(trunc(dis) + 1);
 end;
 procedure LocToCoordinate(loc : String; var Latitude, Longitude : Real);
 begin
diff --git a/src/cqrlog.lpi b/src/cqrlog.lpi
index 5edbde0..e04a45d 100644
--- a/src/cqrlog.lpi
+++ b/src/cqrlog.lpi
@@ -39,7 +39,7 @@
     </PublishOptions>
     <RunParams>
       <local>
-        <CommandLineParams Value="--DEBUG=0"/>
+        <CommandLineParams Value="--debug=0"/>
         <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
       </local>
       <environment>
@@ -52,7 +52,7 @@
       <Modes Count="1">
         <Mode0 Name="default">
           <local>
-            <CommandLineParams Value="--DEBUG=0"/>
+            <CommandLineParams Value="--debug=0"/>
             <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
           </local>
           <environment>
@@ -105,7 +105,7 @@
         <MinVersion Major="1" Minor="2" Release="1" Valid="True"/>
       </Item10>
     </RequiredPackages>
-    <Units Count="119">
+    <Units Count="121">
       <Unit0>
         <Filename Value="cqrlog.lpr"/>
         <IsPartOfProject Value="True"/>
@@ -284,6 +284,7 @@
         <Filename Value="fNewDXCluster.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmNewDXCluster"/>
+        <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
       </Unit26>
       <Unit27>
@@ -812,74 +813,88 @@
         <ResourceBaseClass Value="Form"/>
       </Unit106>
       <Unit107>
-        <Filename Value="fCWKeys.lfm"/>
-        <IsPartOfProject Value="True"/>
-      </Unit107>
-      <Unit108>
         <Filename Value="fEDIExport.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmEDIExport"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit108>
-      <Unit109>
+      </Unit107>
+      <Unit108>
         <Filename Value="fDOKStat.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmDOKStat"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit109>
-      <Unit110>
+      </Unit108>
+      <Unit109>
         <Filename Value="fCabrilloExport.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmCabrilloExport"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit110>
-      <Unit111>
+      </Unit109>
+      <Unit110>
         <Filename Value="fContestFilter.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmContestFilter"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit111>
-      <Unit112>
+      </Unit110>
+      <Unit111>
         <Filename Value="uDbUtils.pas"/>
         <IsPartOfProject Value="True"/>
-      </Unit112>
-      <Unit113>
+      </Unit111>
+      <Unit112>
         <Filename Value="dQTHProfile.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="dmQTHProfile"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="DataModule"/>
+      </Unit112>
+      <Unit113>
+        <Filename Value="uInternalConnection.pas"/>
+        <IsPartOfProject Value="True"/>
       </Unit113>
       <Unit114>
-        <Filename Value="uInternalConnection.pas"/>
+        <Filename Value="uConnectionInfo.pas"/>
         <IsPartOfProject Value="True"/>
       </Unit114>
       <Unit115>
-        <Filename Value="uConnectionInfo.pas"/>
-        <IsPartOfProject Value="True"/>
-      </Unit115>
-      <Unit116>
         <Filename Value="fChangeOperator.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmChangeOperator"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-      </Unit116>
-      <Unit117>
+      </Unit115>
+      <Unit116>
         <Filename Value="fRemind.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="frmReminder"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
+      </Unit116>
+      <Unit117>
+        <Filename Value="znacmech.pas"/>
+        <IsPartOfProject Value="True"/>
       </Unit117>
       <Unit118>
-        <Filename Value="znacmech.pas"/>
+        <Filename Value="gline2.pas"/>
         <IsPartOfProject Value="True"/>
       </Unit118>
+      <Unit119>
+        <Filename Value="fSearch.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="frmSearch"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+      </Unit119>
+      <Unit120>
+        <Filename Value="fDbSqlSel.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="frmDbSqlSel"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+      </Unit120>
     </Units>
   </ProjectOptions>
   <CompilerOptions>
diff --git a/src/cqrlog.lpr b/src/cqrlog.lpr
index 27820b5..0bd6ecc 100644
--- a/src/cqrlog.lpr
+++ b/src/cqrlog.lpr
@@ -5,26 +5,28 @@ uses
   cmem,cthreads,uScrollBars,
   Interfaces, // this includes the LCL widgetset
   Forms, sysutils, Classes, fMain, fPreferences, dUtils, fNewQSO, dialogs,
-  fChangeLocator, fChangeOperator, dData, dDXCC, fMarkQSL, fDXCCStat, fSort, fFilter,
-  fImportProgress, fImportTest, TAChartLazarusPkg, RunTimeTypeInfoControls,
-  fSelectDXCC, fGrayline, fCallbook, fTRXControl, fFreq, fChangeFreq,
-  fAdifImport, fSplash, fSearch, fQTHProfiles, fNewQTHProfile, fEnterFreq,
-  fExportProgress, fNewDXCluster, fDXCluster, fDXClusterList, dDXCluster,
-  fWorking, fSerialPort, fQSLMgr, fSendSpot, fQSODetails, fUpgrade, fWAZITUStat,
-  fIOTAStat, fClubSettings, fLoadClub, fRefCall, fGraphStat, fBandMap,
-  fBandMapWatch, fLongNote, fDatabaseUpdate, fExLabelPrint, fImportLoTWWeb,
-  fLoTWExport, fGroupEdit, fDefaultFreq, fCustomStat, fKeyTexts, fCWType,
-  fSplitSettings, MemDSLaz, SDFLaz, turbopoweripro, fShowStations, uMyIni,
-  fPropagation, fSQLConsole, fCallAttachment, fEditDetails, fQSLViewer, fCWKeys,
-  fSCP, fDBConnect, fNewLog, fRebuildMembStat, uVersion, fAbout, fChangelog,
-  fBigSquareStat, feQSLDownload, feQSLUpload, fSOTAExport, fEDIExport,
-  fNewQSODefValues, fQSLExpPref, fRotControl, dLogUpload, fLogUploadStatus,
-  frCWKeys, fCallAlert, fNewCallAlert, fConfigStorage, fRbnFilter, fRbnMonitor,
-  fRbnServer, fRadioMemories, fAddRadioMemory, fException, fCommentToCall,
+  fChangeLocator, fChangeOperator, dData, dDXCC, fMarkQSL, fDXCCStat, fSort,
+  fFilter, fImportProgress, fImportTest, TAChartLazarusPkg,
+  RunTimeTypeInfoControls, fSelectDXCC, fGrayline, fCallbook, fTRXControl,
+  fFreq, fChangeFreq, fAdifImport, fSplash, fSearch, fQTHProfiles,
+  fNewQTHProfile, fEnterFreq, fExportProgress, fNewDXCluster, fDXCluster,
+  fDXClusterList, dDXCluster, fWorking, fSerialPort, fQSLMgr, fSendSpot,
+  fQSODetails, fUpgrade, fWAZITUStat, fIOTAStat, fClubSettings, fLoadClub,
+  fRefCall, fGraphStat, fBandMap, fBandMapWatch, fLongNote, fDatabaseUpdate,
+  fExLabelPrint, fImportLoTWWeb, fLoTWExport, fGroupEdit, fDefaultFreq,
+  fCustomStat, fKeyTexts, fCWType, fSplitSettings, MemDSLaz, SDFLaz,
+  turbopoweripro, fShowStations, uMyIni, fPropagation, fSQLConsole,
+  fCallAttachment, fEditDetails, fQSLViewer, fCWKeys, fSCP, fDBConnect, fNewLog,
+  fRebuildMembStat, uVersion, fAbout, fChangelog, fBigSquareStat, feQSLDownload,
+  feQSLUpload, fSOTAExport, fEDIExport, fNewQSODefValues, fQSLExpPref,
+  fRotControl, dLogUpload, fLogUploadStatus, frCWKeys, fCallAlert,
+  fNewCallAlert, fConfigStorage, fRbnFilter, fRbnMonitor, fRbnServer,
+  fRadioMemories, fAddRadioMemory, fException, fCommentToCall,
   fNewCommentToCall, fFindCommentToCall, frExportPref, fExportPref,
   fWorkedGrids, fPropDK0WCY, fRemind, fContest, fMonWsjtx, fXfldigi,
-  dMembership, dSatellite, uRigControl, uRotControl, azidis3, aziloc,
-  fDOKStat, fCabrilloExport, uDbUtils, dQTHProfile, uConnectionInfo, znacmech;
+  dMembership, dSatellite, uRigControl, uRotControl, azidis3, aziloc, fDOKStat,
+  fCabrilloExport, uDbUtils, dQTHProfile, uConnectionInfo, znacmech, gline2,
+  fDbSqlSel;
 var
   Splash : TfrmSplash;
 
@@ -42,9 +44,23 @@ begin
      Begin
         Writeln('Cqrlog Ver:',cVERSION,' Date:',cBUILD_DATE);
         if Application.HasOption('v','version') then exit;
+        Writeln;
         Writeln('-h     --help           Print this help and exit');
+        Writeln('-r KEY --remote=KEY     Start with remote mode KEY= one of J,M,K');
+        Writeln('                        (for KEY see: NewQSO shortcut keys)');
         Writeln('-v     --version        Print version and exit');
         Writeln('       --debug=NR       Set debug level to NR');
+        Writeln;
+        Writeln('Debug level NRs:');
+        Writeln('     0  No debug meesages');
+        Writeln('     1  All debug messages');
+        Writeln('     2  All debug messages + some additional RBNmonitor & DXCluster debugs');
+        Writeln('Negative values can be combined (binary bitwise OR)');
+        Writeln('    -2  AdifImport & ImportProgress debug messages');
+        Writeln('    -4  Wsjtx remote & Worked grids debug messages');
+        Writeln('    -8  CW keying & TRXControl debug messages');
+        Writeln('   -16  Grayline map RBN debug messages');
+        Writeln;
         Exit;
      end;
 
@@ -84,7 +100,6 @@ begin
   Application.CreateForm(TdmMembership, dmMembership);
   Application.CreateForm(TdmSatellite, dmSatellite);
 
-
   Splash.Update;
   application.ProcessMessages;
   sleep(800);
diff --git a/src/dDXCC.pas b/src/dDXCC.pas
index a25862d..81d90a6 100644
--- a/src/dDXCC.pas
+++ b/src/dDXCC.pas
@@ -665,6 +665,10 @@ begin
 end;
 
 function TdmDXCC.GetCont(call : String; Date : TDateTime) : String;
+//NOTE: 21-02-24 OH1KH
+//this returns country, not continent as would expect from naming!!
+//result is then same as calling TdmDXCC.GetCountry function above !!
+//Why?
 var
   cont, WAZ, posun, ITU, lat, long, country, pfx: string;
 begin
diff --git a/src/dDXCluster.pas b/src/dDXCluster.pas
index c3b3d99..486bee7 100644
--- a/src/dDXCluster.pas
+++ b/src/dDXCluster.pas
@@ -1160,6 +1160,7 @@ var
   cmd      : String;
 begin
   cmd := cqrini.ReadString('DXCluster','AlertCmd','');
+
   if (cmd<>'') then
   begin
     AProcess := TProcess.Create(nil);
@@ -1173,6 +1174,12 @@ begin
       paramList := TStringList.Create;
       paramList.Delimiter := ' ';
       paramList.DelimitedText := cmd;
+      if not  FileExists(paramList[0]) then
+       begin
+         if dmData.DebugLevel>=1 then
+                         Writeln('AProcess.Executable: ', paramList[0],' Not found!');
+         exit;
+       end;
       AProcess.Parameters.Clear;
       while index < paramList.Count do
       begin
diff --git a/src/dData.lfm b/src/dData.lfm
index 4f9e5b9..541c146 100644
--- a/src/dData.lfm
+++ b/src/dData.lfm
@@ -753,13 +753,13 @@ object dmData: TdmData
       '            rst_r VARCHAR(20) DEFAULT '''','
       '            name VARCHAR(40) DEFAULT '''','
       '            qth VARCHAR(60) DEFAULT '''','
-      '            qsl_s VARCHAR(3) DEFAULT '''','
+      '            qsl_s VARCHAR(4) DEFAULT '''','
       '            qsl_r VARCHAR(3) DEFAULT '''','
       '            qsl_via VARCHAR(30) DEFAULT '''','
       '            iota VARCHAR(6) DEFAULT '''','
       '            pwr VARCHAR(10) DEFAULT '''','
-      '            loc VARCHAR(6) DEFAULT '''','
-      '            my_loc VARCHAR(6) DEFAULT '''','
+      '            loc VARCHAR(10) DEFAULT '''','
+      '            my_loc VARCHAR(10) DEFAULT '''','
       '            award VARCHAR(50) DEFAULT '''','
       '            remarks VARCHAR(200) DEFAULT '''','
       '            band VARCHAR(6) DEFAULT '''','
diff --git a/src/dData.pas b/src/dData.pas
index 29a2ba9..c3f53a1 100644
--- a/src/dData.pas
+++ b/src/dData.pas
@@ -25,7 +25,7 @@ uses
 const
   cDB_LIMIT = 500;
   cDB_MAIN_VER = 18;
-  cDB_COMN_VER = 4;
+  cDB_COMN_VER = 5;
   cDB_PING_INT = 300;  //ping interval for database connection in seconds
                        //program crashed after long time of inactivity
                        //so now after cDB_PING_INT will be run simple sql query
@@ -530,30 +530,35 @@ begin
   if RbnMonCon.Connected then
     RbnMonCon.Connected := False;
 
+  MainCon.CharSet:='UTF8';
   MainCon.HostName     := host;
   MainCon.Params.Text  := 'Port='+port;
   MainCon.UserName     := user;
   MainCon.Password     := pass;
   MainCon.DatabaseName := 'information_schema';
 
+  BandMapCon.CharSet:='UTF8';
   BandMapCon.HostName     := host;
   BandMapCon.Params.Text  := 'Port='+port;
   BandMapCon.UserName     := user;
   BandMapCon.Password     := pass;
   BandMapCon.DatabaseName := 'information_schema';
 
+  RbnMonCon.CharSet:='UTF8';
   RbnMonCon.HostName     := host;
   RbnMonCon.Params.Text  := 'Port='+port;
   RbnMonCon.UserName     := user;
   RbnMonCon.Password     := pass;
   RbnMonCon.DatabaseName := 'information_schema';
 
+  dbDXC.CharSet:='UTF8';
   dbDXC.HostName     := host;
   dbDXC.Params.Text  := 'Port='+port;
   dbDXC.UserName     := user;
   dbDXC.Password     := pass;
   dbDXC.DatabaseName := 'information_schema';
 
+  LogUploadCon.CharSet:='UTF8';
   LogUploadCon.HostName     := host;
   LogUploadCon.Params.Text  := 'Port='+port;
   LogUploadCon.UserName     := user;
@@ -1091,7 +1096,10 @@ begin
   Writeln('Cqrlog Ver:',cVERSION,' Date:',cBUILD_DATE);
   Writeln('**** DEBUG LEVEL ',fDebugLevel,' ****');
   if fDebugLevel=0 then
-    Writeln('**** CHANGE WITH --debug=1 PARAMETER ****');
+   Begin
+    Writeln('**** CHANGE WITH --debug=NR PARAMETER ****');
+    Writeln('*** Parameter -h or --help for details ***');
+   end;
   Writeln('');
 
   Writeln('OS:');
@@ -1720,7 +1728,19 @@ begin
   Q.ExecSQL;
 
   Q.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
-                QuotedStr('4MM')+',77500,84000,77500,81000,81000)';
+                QuotedStr('4MM')+',75500,81500,75500,81500,81500)';
+  Q.ExecSQL;
+
+  Q.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
+                QuotedStr('2.5MM')+',122250,123000,122250,123000,123000)';
+  Q.ExecSQL;
+
+  Q.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
+                QuotedStr('2MM')+',134000,141000,141000,141000,141000)';
+  Q.ExecSQL;
+
+  Q.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
+                QuotedStr('1MM')+',241000,248000,241000,248000,248000)';
   Q.ExecSQL;
 
   trQ.Commit;
@@ -1981,8 +2001,10 @@ begin
   band := dmUtils.GetBandFromFreq(freq);
   Q.Close();
   Q.SQL.Text := 'select id_cqrlog_main FROM cqrlog_main WHERE waz = ' + waz +
-                ' AND band = ' + QuotedStr(band) + ' AND QSL_R = ' + QuotedStr('Q')+
-                ' LIMIT 1';
+                ' AND band = ' + QuotedStr(band) +
+                ' AND ( QSL_R = ' + QuotedStr('Q')+ ' OR lotw_qslr= ' + QuotedStr('L')+
+                ' OR eqsl_qsl_rcvd= ' + QuotedStr('E')+
+                ') LIMIT 1';
   trQ.StartTransaction;
   Q.Open();
   if Q.Fields[0].AsInteger > 0 then
@@ -2035,8 +2057,9 @@ begin
   band := dmUtils.GetBandFromFreq(freq);
   Q.Close();
   Q.SQL.Text := 'select id_cqrlog_main FROM cqrlog_main WHERE itu = ' + itu +
-                ' AND band = ' + QuotedStr(band) + ' AND QSL_R = ' + QuotedStr('Q')+
-                ' LIMIT 1';
+                ' AND band = ' + QuotedStr(band) +
+                ' AND ( QSL_R = ' + QuotedStr('Q')+ ' OR lotw_qslr= ' + QuotedStr('L')+
+                ' ) LIMIT 1';
   trQ.StartTransaction;
   Q.Open();
   if Q.Fields[0].AsInteger > 0 then
@@ -2714,6 +2737,22 @@ begin
         Q1.ExecSQL
       end;
 
+      if old_version < 5 then
+      begin
+        Q1.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
+                       QuotedStr('2.5MM')+',122250.0,123000.0,122251.0,122251.0,122251.0)';
+        if fDebugLevel>=1 then Writeln(Q1.SQL.Text);
+        Q1.ExecSQL;
+        Q1.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
+                       QuotedStr('2MM')+',134000.0,141000.0,134930.0,134930.0,134930.0)';
+        if fDebugLevel>=1 then Writeln(Q1.SQL.Text);
+        Q1.ExecSQL;
+        Q1.SQL.Text := 'INSERT INTO cqrlog_common.bands (band,b_begin,b_end,cw,rtty,ssb) VALUES (' +
+                        QuotedStr('1MM')+',241000.0,250000.0,248000.0,248000.0,248000.0)';
+        if fDebugLevel>=1 then Writeln(Q1.SQL.Text);
+        Q1.ExecSQL;
+      end;
+
       Q1.SQL.Text := 'update cqrlog_common.db_version set nr='+IntToStr(cDB_COMN_VER);
       if fDebugLevel>=1 then Writeln(Q1.SQL.Text);
       Q1.ExecSQL
diff --git a/src/dLogUpload.pas b/src/dLogUpload.pas
index 660385d..06a72f9 100644
--- a/src/dLogUpload.pas
+++ b/src/dLogUpload.pas
@@ -514,6 +514,10 @@ begin
     time_on := Q2.FieldByName('time_on').AsString;
     time_on := copy(time_on,1,2) + copy(time_on,4,2);
 
+    //2022-05-05 OH1KH I do not know (I can not test) are mode+submode pairs needed with log uploads
+    // or is the CqrMode ok here ???????
+    //If mode+submode needed then  use dmUtils.ModeFromCqr to get mode and submode at this point
+    // (look sample from fLoTWExport.pas line 453-460)
     adif := GetAdifValue('QSO_DATE',qsodate)+GetAdifValue('TIME_ON',time_on)+
             GetAdifValue('CALL',Q2.FieldByName('callsign').AsString)+
             GetAdifValue('BAND',Q2.FieldByName('band').AsString)+
diff --git a/src/dUtils.lfm b/src/dUtils.lfm
index beb3064..2b4cc45 100644
--- a/src/dUtils.lfm
+++ b/src/dUtils.lfm
@@ -1,26 +1,26 @@
 object dmUtils: TdmUtils
   OnCreate = DataModuleCreate
+  OnDestroy = DataModuleDestroy
   OldCreateOrder = False
   Height = 300
   HorizontalOffset = 365
   VerticalOffset = 366
   Width = 400
-  PPI = 96
   object HelpDatabase: THTMLHelpDatabase
     BaseURL = 'file:///usr/share/cqrlog/help'
     AutoRegister = True
     KeywordPrefix = 'help/'
-    left = 176
-    top = 40
+    Left = 176
+    Top = 40
   end
   object HelpViewer: THTMLBrowserHelpViewer
     BrowserParams = '%s'
     AutoRegister = True
-    left = 272
-    top = 40
+    Left = 272
+    Top = 40
   end
   object Datasource1: TDataSource
-    left = 56
-    top = 48
+    Left = 56
+    Top = 48
   end
 end
diff --git a/src/dUtils.pas b/src/dUtils.pas
index 7cc1886..dc3560e 100644
--- a/src/dUtils.pas
+++ b/src/dUtils.pas
@@ -20,7 +20,7 @@ uses
   DBGrids, aziloc, azidis3, process, DB, sqldb, Grids, Buttons, spin, colorbox,
   Menus, Graphics, Math, LazHelpHTML, lNet, DateUtils, fileutil, httpsend,
   sqlscript, BaseUnix, Unix, LazFileUtils, LazUTF8, RegExpr,
-  laz2_XMLRead, laz2_DOM, fpjson,jsonparser;
+  laz2_XMLRead, laz2_DOM, fpjson,jsonparser,StrUtils;
 
   //"XMLRead, DOM," replced. These have system encoding. "laz2_" ones have full UTF-8 Unicode support
   //they should be replaceable by Laz-XML-wiki.
@@ -60,16 +60,16 @@ const
     'OLIVIA', 'MFSK16', 'JS8', 'JT4','JT6M', 'JT65', 'JT65A', 'JT65B', 'JT65C',
     'JT9', 'QRA64', 'ISCAT', 'MSK144', 'FT8', 'FT4', 'FST4', 'FSK441', 'PSK125',
     'PSK63', 'WSPR', 'PSK250', 'ROS', 'DIGITALVOICE');
-  cMaxBandsCount = 27; //26 bands
+  cMaxBandsCount = 30; //29 bands
 
   cDefaultFreq =
     '0.136|0.472|1.800|3.500|3.700|5.351|7.000|10.100|14.000|14.200|18.100|21.000|21.200|24.890|28.000|28.500|50.000|70.0875|'
     +
-    '70.0500|144.000|145.275|430.000|902.0|1250.0|2400.0|3450.0|5670.0|10250.0|24100.0|47100.0|78000.0|';
-  cBands: array[0..25] of string[10] =
+    '70.0500|144.000|145.275|430.000|902.0|1250.0|2400.0|3450.0|5670.0|10250.0|24100.0|47100.0|78000.0|122252.0|134930.0|248000.0';
+  cBands: array[0..28] of string[10] =
     ('2190M', '630M', '160M', '80M'   , '60M', '40M'  , '30M', '20M'  , '17M' , '15M' ,
      '12M'  , '10M' , '6M'  , '4M'    , '2M' , '1.25M', '70CM', '33CM', '23CM', '13CM',
-     '9CM'  , '6CM' , '3CM' , '1.25CM', '6MM', '4MM');
+     '9CM'  , '6CM' , '3CM' , '1.25CM', '6MM', '4MM', '2.5MM', '2MM', '1MM');
 
   cMaxIgnoreFreq = 6;
   cIngnoreFreq: array [0..cMaxIgnoreFreq] of string =
@@ -88,6 +88,12 @@ const
     'NAME_INTL',    'NOTES_INTL',     'QSLMSG_INTL',     'QTH_INTL',
     'RIG_INTL',     'SIG_INTL',       'SIG_INFO_INTL');
 
+   c_MODEFILE_DIR    = ''; //   'ctyfiles/';
+   C_SUBMODE_FILE    = 'submode_mode.txt';
+   C_IMPORTMODE_FILE = 'import_mode.txt';
+   C_EXCEPMODE_FILE  = 'exception_mode.txt';
+   C_READMEMODE_FILE = 'README_modefiles';
+
 type
 
   { TdmUtils }
@@ -97,16 +103,21 @@ type
     HelpViewer: THTMLBrowserHelpViewer;
     HelpDatabase: THTMLHelpDatabase;
     procedure DataModuleCreate(Sender: TObject);
+    procedure DataModuleDestroy(Sender: TObject);
   private
     fTimeOffset: currency;
     fGrayLineOffset: currency;
     fQRZSession: string;
     fHamQTHSession: string;
     fSysUTC: boolean;
-
+    SubmodeMode: TStringList;
+    ImportMode : TStringlist;
+    ExceptMode : TStringlist;
 
     procedure LoadRigList(RigCtlBinaryPath : String;RigList : TStringList);
     procedure LoadRigListCombo(CurrentRigId : String; RigList : TStringList; RigComboBox : TComboBox);
+    procedure ModeConvListsCreate(SetUp:boolean);
+    procedure MakeMissingModeFile(num:integer);
 
     function nr(ch: char): integer;
     function GetTagValue(Data, tg: string): string;
@@ -116,6 +127,7 @@ type
       var nick, qth, address, zip, grid, state, county, qsl, iota, waz, itu, ErrMsg: string): boolean;
     function GetHamQTHInfo(call: string;
       var nick, qth, address, zip, grid, state, county, qsl, iota, waz, itu, dok, ErrMsg: string): boolean;
+
   public
     s136: string;
     s630: string;
@@ -143,12 +155,16 @@ type
     s24G: string;
     s47G: string;
     s76G: string;
+    s122G: string;
+    s134G: string;
+    s241G: string;
     USstates: array [1..50] of string;
     DOKs: array [1..52] of string;
     MyBands: array [0..cMaxBandsCount - 1, 0..1] of string[6];
     //list of bands, band labels
     BandFreq  : array [0..cMaxBandsCount - 1]of BandVsFreq;
 
+
     property TimeOffset: currency read fTimeOffset write fTimeOffset;
     property GrayLineOffset: currency read fGraylineOffset write fGrayLineOffset;
     property SysUTC: boolean read fSysUTC write fSysUTC;
@@ -186,7 +202,7 @@ type
     procedure ReadZipList(cmbZip: TComboBox);
     procedure CalcSunRiseSunSet(Lat, Long: double; var SunRise, SunSet: TDateTime);
     procedure ExecuteCommand(cmd: string);
-    procedure RunOnBackgroud(path: string);
+    procedure RunOnBackground(path: string);
     procedure SaveWindowPos(a: TForm);
     procedure LoadWindowPos(a: TForm);
     procedure ShowQSLWithExtViewer(Call: string);
@@ -195,16 +211,18 @@ type
     procedure LoadBandsSettings;
     procedure FillBandCombo(cmb : TComboBox);
     procedure ShowHamQTHInBrowser(call : String);
+    procedure ShowUsrUrl;
     procedure SortArray(l,r : Integer);
     procedure OpenInApp(what : String);
     procedure LoadRigsToComboBox(CurrentRigId : String; RigCtlBinaryPath : String; RigComboBox : TComboBox);
     procedure GetShorterCoordinates(latitude,longitude : Currency; var lat, long : String);
     procedure LoadListOfFiles(Path, Mask : String; ListOfFiles : TStringList);
-    procedure  BandFromDbase;
+    procedure BandFromDbase;
     procedure UpdateHelpBrowser;
+    procedure ModeFromCqr(CqrMode:String;var OutMode,OutSubmode:String;dbg:Boolean);
 
     function  BandFromArray(tmp:Currency):string;
-    function MyDefaultBrowser:String;
+    function  MyDefaultBrowser:String;
     function  StrToDateFormat(sDate : String) : TDateTime;
     function  DateToSQLIteDate(date : TDateTime) : String;
     function  GetBandFromFreq(MHz : string): String;
@@ -292,6 +310,9 @@ type
     function  MyDateTimeToStr(DateTime : TDateTime) : String;
     function  LoadVisibleColumnsConfiguration :  TColumnVisibleArray;
     function  StdFormatLocator(loc:string):String;
+    function  IsHeDx(call:String; CqDir:String = ''):boolean;
+    function  ModeToCqr(InMode,InSubmode:String;dbg:boolean=False):String;
+
 
 end;
 
@@ -593,7 +614,14 @@ begin
   USstates[49] := 'WV, West Virginia';
   USstates[50] := 'WY, Wyoming';
 
+  ModeConvListsCreate(True);
 end;
+
+procedure TdmUtils.DataModuleDestroy(Sender: TObject);
+begin
+  ModeConvListsCreate(False);
+end;
+
 procedure TdmUtils.InsertContests(cmbContestName: TComboBox);
 var
     ListOfContests : TStringList;
@@ -1284,205 +1312,41 @@ end;
 function TdmUtils.FreqFromBand(band, mode: string): string;
 begin
   Result := '';
-  mode := UpperCase(mode);
+  mode := LowerCase(mode);
   band := UpperCase(band);
-  if band = '2190M' then
-  begin
-    Result := '0.139';
-    exit;
-  end;
-  if band = '630M' then
-  begin
-    Result := '0.472';
-    exit;
-  end;
-  if band = '160M' then
-  begin
-    if (mode = 'CW') then
-      Result := '1.800'
-    else
-      Result := '1.850';
-    exit;
-  end;
-  if band = '80M' then
-  begin
-    if (mode = 'CW') then
-      Result := '3.520'
-    else
-      Result := '3.770';
-    exit;
-  end;
-  if band = '60M' then
-  begin
-    Result := '5.2585';
-    exit;
-  end;
-  if band = '40M' then
-  begin
-    if (mode = 'CW') then
-      Result := '7.020'
-    else
-      Result := '7.055';
-    exit;
-  end;
-  if band = '30M' then
-  begin
-    Result := '10.1';
-    exit;
-  end;
-  if band = '20M' then
-  begin
-    if (mode = 'CW') then
-      Result := '14.025'
-    else
-    begin
-      if (Pos('PSK', mode) > 0) then
-        Result := '14.075'
-      else
-      begin
-        if (mode = 'RTTY') then
-          Result := '14.085'
-        else
-          Result := '14.200';
-      end;
-    end;
-  end;
-  if band = '17M' then
-  begin
-    if (mode = 'CW') then
-      Result := '18.070'
-    else
-      Result := '18.100';
-    exit;
-  end;
-  if band = '15M' then
-  begin
-    if (mode = 'CW') then
-      Result := '21.050'
-    else
-    begin
-      if (Pos('PSK', mode) > 0) then
-        Result := '21.075'
-      else
-      begin
-        if mode = 'RTTY' then
-          Result := '21.085'
-        else
-          Result := '21.200';
-      end;
-    end;
-    exit;
-  end;
-  if band = '12M' then
-  begin
-    if (mode = 'CW') then
-      Result := '24.916'
-    else
-    begin
-      if LetterFromMode(mode) = 'D' then
-        Result := '24.917'
-      else
-        Result := '24.932';
-    end;
-    exit;
-  end;
-  if band = '10M' then
-  begin
-    if (mode = 'CW') then
-      Result := '28.050'
-    else
-    begin
-      if LetterFromMode(mode) = 'D' then
-        Result := '28.100'
+
+  if mode='' then
+     mode:='b_begin'
+   else
+    case mode of
+     'usb','lsb',
+     'fm','am',
+     'ssb'       : mode:='ssb';
+     'cw'        : mode:='cw';
       else
-        Result := '28.200';
+       mode:='rtty'  //this covers all modes not phone or cw
     end;
-    exit;
-  end;
-  if band = '6M' then
-  begin
-    Result := '50.100';
-    exit;
-  end;
-  if band = '4M' then
-  begin
-    if mode = 'CW' then
-      Result := ' 70.0500'
-    else
-      Result := '70.0875';
-    exit;
-  end;
-  if band = '1.25M' then
-  begin
-    Result := '222.010';
-    exit;
-  end;
-  if band = '2M' then
-  begin
-    if (mode = 'CW') then
-      Result := '144.050'
-    else
-      Result := '144.280';
-    exit;
-  end;
-  if band = '70CM' then
-  begin
-    if mode = 'CW' then
-      Result := '432.100'
-    else
-      Result := '432.200';
-    exit;
-  end;
-  if band = '33CM' then
-  begin
-    Result := '902.000';
-    exit;
-  end;
-  if band = '23CM' then
-  begin
-    if mode = 'CW' then
-      Result := '1296.150'
-    else
-      Result := '1296.200';
-    exit;
-  end;
-  if band = '13CM' then
-  begin
-    if mode = 'CW' then
-      Result := '2320.150'
-    else
-      Result := '2320.200';
-    exit;
-  end;
-  if band = '9CM' then
-  begin
-    Result := '3400.200';
-    exit;
-  end;
-  if band = '6CM' then
-  begin
-    Result := '5760.200';
-    exit;
-  end;
-  if band = '3CM' then
-  begin
-    Result := '10368.200';
-    exit;
-  end;
-  if band = '1.25CM' then
-  begin
-    Result := '24048.200';
-    exit;
-  end;
-  if band = '6MM' then
-  begin
-    Result := '47088';
-    exit;
+
+  dmData.qBands.Close;
+  dmData.qBands.SQL.Text := 'SELECT '+mode+' FROM cqrlog_common.bands WHERE band = ' + QuotedStr(band);
+  if dmData.DebugLevel >=1 then
+     Writeln(dmData.qBands.SQL.Text);
+
+  if dmData.trBands.Active then
+    dmData.trBands.Rollback;
+  dmData.trBands.StartTransaction;
+  try
+    dmData.qBands.Open;
+    if dmData.qBands.RecordCount > 0 then
+      Result:= dmData.qBands.FieldByName(mode).AsString;
+  finally
+    if dmData.DebugLevel >=1 then
+     Writeln('FreqFromBand('+band+','+mode+')='+Result);
+    dmData.qBands.Close;
+    dmData.trBands.Rollback
   end;
-  if band = '4MM' then
-    Result := '77500.200';
-end;
 
+end;
 
 function TdmUtils.IsAdifOK(qsodate, time_on, time_off, call, freq, mode, rst_s, rst_r, iota,
   itu, waz, loc, my_loc, band: string;
@@ -2228,6 +2092,9 @@ begin
     s24G := '24G';
     s47G := '47G';
     s76G := '76G';
+    s122G := '122G';
+    s134G := '134G';
+    s241G := '241G';
   end
   else
   begin
@@ -2257,6 +2124,9 @@ begin
     s24G := '1cm';
     s47G := '6mm';
     s76G := '4mm';
+    s122G := '2.5mm';
+    s134G := '2mm';
+    s241G := '1mm';
   end;
 end;
 
@@ -3241,6 +3111,8 @@ end;
 
 function TdmUtils.IsQSLViaValid(Text: string): boolean;
 begin
+  Result :=false;
+  if Text='' then exit; //do not allow empty RegExp
   reg.InputString := Text;
   reg.Expression := '\A\w{1,2}\d[A-Z]{1,3}\Z';
   Result := reg.ExecPos(1);
@@ -3261,14 +3133,19 @@ begin
   end;
 end;
 
-procedure TdmUtils.RunOnBackgroud(path: string);
+procedure TdmUtils.RunOnBackground(path: string);
 var
   AProcess: TProcess;
   index     :integer;
   paramList : TStringList;
 begin
-  if dmData.DebugLevel>=1 then Writeln('RunOnBackgroud -start');
-  if (path = '') then exit;
+ if dmData.DebugLevel>=1 then Writeln('RunOnBackground start ',path);
+  if (path = '') then  exit;
+  //following will fail if exec does not have full path or exec is not in current directory!
+  //this could be fixed by using getEnv('PATH') for search, but adding "Dos" unit that is then neeed (laz 2.0.12)
+  //breaks all FindFIle searches in other procedures (fpc bug or property?)
+  //Easy Fix will be to require full path at preferences/External Viewers   (OH1KH 2021.05.21)
+
   AProcess := TProcess.Create(nil);
   try
       index:=0;
@@ -3323,7 +3200,7 @@ begin
       ErrMsg := 'Callsign field empty!';
       exit;
     end;
-    req := 'http://xml.qrz.com/xml?s=' + fQRZSession + ';callsign=' + GetIDCall(call);
+    req := 'https://xml.qrz.com/xml/1.34?s=' + fQRZSession + ';callsign=' + GetIDCall(call);
     if not HTTP.HTTPMethod('GET', req) then
       ErrMsg := '(' + IntToStr(http.ResultCode) + '):' + http.ResultString
     else
@@ -3593,10 +3470,10 @@ begin
     SetCurrentDir(dmData.HomeDir + 'call_data' + PathDelim + call + PathDelim);
     prg := cqrini.ReadString('ExtView', 'img', 'eog');
     if prg = '' then
-      dmUtils.RunOnBackgroud(cqrini.ReadString('Program', 'WebBrowser', MyDefaultBrowser) +
+      dmUtils.RunOnBackground(cqrini.ReadString('Program', 'WebBrowser', MyDefaultBrowser) +
         ' ' + qsl)
     else
-      dmUtils.RunOnBackgroud(prg + ' ' + qsl)
+      dmUtils.RunOnBackground(prg + ' ' + qsl)
   finally
     SetCurrentDir(dir)
   end;
@@ -3627,7 +3504,7 @@ begin
   AProcess := TProcess.Create(nil);
   try
     AProcess.Executable := cqrini.ReadString('Program', 'WebBrowser', MyDefaultBrowser);
-    AProcess.Parameters.Add('http://www.qrz.com/db/' + GetIDCall(call));
+    AProcess.Parameters.Add('https://www.qrz.com/db/' + GetIDCall(call));
     if dmData.DebugLevel>=1 then Writeln('AProcess.Executable: ',AProcess.Executable,' Parameters: ',AProcess.Parameters.Text);
     AProcess.Execute
   finally
@@ -3846,6 +3723,28 @@ begin
     MyBands[i][1] := s76G;
     Inc(i);
   end;
+
+  if cqrini.ReadBool('Bands', '122GHz', False) then
+  begin
+    MyBands[i][0] := '2.5MM';
+    MyBands[i][1] := s122G;
+    Inc(i);
+  end;
+
+  if cqrini.ReadBool('Bands', '134GHz', False) then
+  begin
+    MyBands[i][0] := '2MM';
+    MyBands[i][1] := s134G;
+    Inc(i);
+  end;
+
+  if cqrini.ReadBool('Bands', '241GHz', False) then
+  begin
+    MyBands[i][0] := '1MM';
+    MyBands[i][1] := s241G;
+    Inc(i);
+  end;
+
 end;
 
 function TdmUtils.GetBandPos(band: string): integer;
@@ -3936,7 +3835,7 @@ begin
     http.ProxyPort := cqrini.ReadString('Program', 'Port', '');
     http.UserName := cqrini.ReadString('Program', 'User', '');
     http.Password := cqrini.ReadString('Program', 'Passwd', '');
-    req := 'http://xmldata.qrz.com/xml/?username=' + cqrini.ReadString(
+    req := 'https://xmldata.qrz.com/xml/1.34?username=' + cqrini.ReadString(
       'CallBook', 'CBUser', '') + ';password=' + cqrini.ReadString(
       'CallBook', 'CBPass', '') + ';agent=cqrlog';
     if not HTTP.HTTPMethod('GET', req) then
@@ -4130,6 +4029,34 @@ begin
     AProcess.Free
   end;
 end;
+procedure TdmUtils.ShowUsrUrl;
+var
+  AProcess: TProcess;
+  cmd       :String;
+begin
+  cmd := cqrini.ReadString('NewQSO', 'UsrBtn', 'https://www.qrzcq.com/call/$CALL');
+  if (cmd<>'') then
+   begin
+      AProcess := TProcess.Create(nil);
+      try
+          cmd := StringReplace(cmd,'$CALL',frmNewQSO.edtCall.Text,[rfReplaceAll]);
+          cmd := StringReplace(cmd,'$BAND',dmUtils.GetBandFromFreq(frmNewQSO.cmbFreq.Text),[rfReplaceAll]);
+          cmd := StringReplace(cmd,'$MODE',frmNewQSO.cmbFreq.Text,[rfReplaceAll]);
+          cmd := StringReplace(cmd,'$FREQ',frmNewQSO.cmbMode.Text,[rfReplaceAll]);
+          cmd := StringReplace(cmd,'$LOC',frmNewQSO.edtGrid.Text,[rfReplaceAll]);
+          if not(frmNewQSO.fEditQSO or frmNewQSO.fViewQSO) then
+             cmd := StringReplace(cmd,'$MYLOC',frmNewQSO.CurrentMyLoc,[rfReplaceAll])
+            else  cmd := StringReplace(cmd,'$MYLOC',frmNewQSO.EditViewMyLoc,[rfReplaceAll]);
+        AProcess.Executable  := cqrini.ReadString('Program', 'WebBrowser', MyDefaultBrowser);
+        AProcess.Parameters.Add(cmd);
+        if dmData.DebugLevel>=1 then ;
+        Writeln('AProcess.Executable: ',AProcess.Executable,' Parameters: ',AProcess.Parameters.Text);
+        AProcess.Execute
+      finally
+        AProcess.Free
+      end;
+   end;
+end;
 
 function TdmUtils.DateInSOTAFormat(date: TDateTime): string;
 var
@@ -4440,11 +4367,11 @@ begin
   if ((pos('.HTML',upcase(what))>0) or (pos('.HTM',upcase(what))>0)) //because possible "hashtag in link-problem"
     then
      Begin
-      RunOnBackgroud(cqrini.ReadString('Program', 'WebBrowser', MyDefaultBrowser) + ' ' + what);
+      RunOnBackground(cqrini.ReadString('Program', 'WebBrowser', MyDefaultBrowser) + ' ' + what);
      end
    else
     begin
-      RunOnBackgroud('xdg-open ' + what);
+      RunOnBackground('xdg-open ' + what);
     end;
 end;
 
@@ -4561,7 +4488,7 @@ end;
 
 function TdmUtils.LoadVisibleColumnsConfiguration : TColumnVisibleArray;
 const
-  COLUMN_COUNT = 46;
+  COLUMN_COUNT = 47;
 var
   i : Integer;
   aColumns : TColumnVisibleArray;
@@ -4706,6 +4633,9 @@ begin
   aColumns[45].FieldName := 'DOK';
   aColumns[45].Visible   := cqrini.ReadBool('Columns', 'DarcDok', False);
 
+  aColumns[46].FieldName := 'OPERATOR';
+  aColumns[46].Visible   := cqrini.ReadBool('Columns', 'Operator', False);
+
   for i:=0 to Length(aColumns)-1 do
     aColumns[i].Exists := False;
 
@@ -4808,4 +4738,305 @@ Begin
      //else use default browser that is defined at program early start
 end;
 
+function  TdmUtils.IsHeDx(call:String; CqDir:String = ''):boolean;
+ // Find out is call dx for me.
+ // If direction<>'' is directed cq pointed to me
+var
+  adif   :word;
+  pfx    : String = '';
+  mycont : String = '';
+  cont   : String = '';
+  country: String = '';
+  waz    : String = '';
+  posun  : String = '';
+  itu    : String = '';
+  lat    : String = '';
+  long   : String = '';
+
+begin
+    adif:= dmDXCC.id_country(cqrini.ReadString('Station', 'Call', ''), Now(), pfx, mycont,  country, WAZ, posun, ITU, lat, long);
+    adif:= dmDXCC.id_country(call, Now(), pfx, cont,  country, WAZ, posun, ITU, lat, long);
+
+    if CqDir <> '' then
+      begin
+       if ((mycont <> '') and (cont <> '')) then
+           //we can do some comparisons of continents and call dirction
+           begin
+             if ((CqDir = 'DX') and (mycont = cont)) then
+             begin
+               //I'm not DX for caller:
+               Result := false;
+               if dmData.DebugLevel >= 1 then
+                                    Writeln('My continent is:', mycont, '  His continent is:', cont,' is DX/CQ for me:',Result);
+               exit
+             end
+             else  //calling specified continent
+             if ((CqDir <> 'DX') and (CqDir <> mycont)) then
+              begin
+               //CQ NOT directed to my continent
+               Result := false;
+               if dmData.DebugLevel >= 1 then
+                                    Writeln('My continent is:', mycont, '  His continent is:', cont,' is DX/CQ for me:',Result);
+               exit
+              end
+             else
+              Begin
+               //CQ directed to my continent
+               Result :=true;
+               if dmData.DebugLevel >= 1 then
+                                    Writeln('My continent is:', mycont, '  His continent is:', cont,' is DX/CQ for me:',Result);
+               exit
+              end;
+           end
+      end
+     else
+      Begin
+       //no directed CQ just find out if call is DX for me
+       Result := (mycont <> cont);
+       if dmData.DebugLevel >= 1 then
+                            Writeln('My continent is:', mycont, '  His continent is:', cont,' is DX/CQ for me:',Result);
+      end;
+end;
+
+procedure TdmUtils.ModeFromCqr(CqrMode:String;var OutMode,OutSubmode:String;dbg:Boolean);
+//encodes Cqrlog's mode to mode and submode pair
+//returns empty string to submode if not exist
+var
+   e: integer;
+
+Begin
+      if dbg then
+                  Writeln('ModeFromCqr: ',CqrMode);
+      Cqrmode:=uppercase(CqrMode); //this is for sure
+      //cqrmode -> ex_mode
+      e:= ExceptMode.IndexOfName(CqrMode);
+      if e > -1 then
+        Begin
+          OutMode := uppercase(ExceptMode.Values[CqrMode]);
+          OutSubmode:='';
+          if dbg then
+                      begin
+                        Writeln('ex_mode=cqrlogmode line: ',e+1);
+                        Writeln('Cqrlog will export adif as mode: ',OutMode,'  submode: ',OutSubmode);
+                      end;
+          exit;
+        end;
+      // cqrmode -> mode+submode
+      e:= SubmodeMode.IndexOfName(CqrMode);
+      if e > -1 then
+         Begin
+           OutMode    := uppercase(SubmodeMode.Values[CqrMode]);
+           OutSubmode := CqrMode;
+           if dbg then
+                      Writeln('submode=mode line: ',e+1);
+
+           //is submode import only
+           e:=ImportMode.IndexOf(CqrMode);
+           if e > -1 then
+                           begin
+                             if dbg then
+                                        Writeln('submode for_import_only line: ',e+1);
+                             OutSubmode :='';
+                           end;
+         end
+        else
+         //no submodes
+         Begin
+           OutMode := CqrMode;
+           OutSubmode:='';
+         end;
+     if dbg then
+                Writeln('Cqrlog will export adif as mode: ',OutMode,'  submode: ',OutSubmode);
+end;
+function  TdmUtils.ModeToCqr(InMode,InSubmode:String;dbg:boolean=False):String;
+//decodes mode and submode pair to mode used by Cqrlog internally
+var
+   e: integer;
+
+Begin
+     if dbg then
+                  Writeln('ModeToCqr mode: ',InMode,' submode: ',InSubmode);
+     InMode:=uppercase(InMode);    //this is for sure
+     InSubmode:=uppercase(InSubmode);
+
+     Result:=InMode; //defaults to InMode
+     if InSubmode='' then
+                      Begin
+                         if dbg then
+                                    writeln('Cqrlog internal mode will be: ',Result);
+                         exit;
+                      end;
+
+     e:= SubmodeMode.IndexOfName(InSubmode);
+     if (e > -1 ) then  //it exist
+                        Begin
+                           if dbg then
+                                      Writeln('submode=mode line: ',e+1);
+                           Result:=InSubmode;
+                        end;
+
+      e:= ExceptMode.IndexOfName(Result);
+      if e > -1  then  //it exist
+                       begin
+                        if dbg then
+                                   Writeln('ex_mode=cqrlogmode line: ',e+1);
+                        Result:= ExceptMode.ValueFromIndex[e];
+                       end;
+
+    Result:=uppercase(Result); //this is for sure
+    if dbg then
+               writeln('Cqrlog internal mode will be: ',Result);
+end;
+procedure TdmUtils.ModeConvListsCreate(SetUp:boolean);
+
+Begin
+   if not SetUp then
+      Begin
+        if assigned(SubmodeMode) then FreeAndNil(SubmodeMode);
+        if assigned(ImportMode) then FreeAndNil(ImportMode);
+        if assigned(ExceptMode) then FreeAndNil(ExceptMode);
+        exit;
+      end;
+
+   SubmodeMode:= TStringList.Create;
+   ImportMode := TStringlist.Create;
+   ExceptMode := TStringlist.Create;
+
+   //if we do not find one of these files we create it
+   if FileSearch(C_SUBMODE_FILE,dmData.HomeDir+C_MODEFILE_DIR,[])='' then
+                                                                         MakeMissingModeFile(1);
+   if FileSearch(C_IMPORTMODE_FILE,dmData.HomeDir+C_MODEFILE_DIR,[])='' then
+                                                                         MakeMissingModeFile(2);
+   if FileSearch(C_EXCEPMODE_FILE,dmData.HomeDir+C_MODEFILE_DIR,[])='' then
+                                                                         MakeMissingModeFile(3);
+   if FileSearch(C_READMEMODE_FILE,dmData.HomeDir+C_MODEFILE_DIR,[])='' then
+                                                                         MakeMissingModeFile(4);
+   try
+      SubmodeMode.LoadFromFile(dmData.HomeDir+C_MODEFILE_DIR+C_SUBMODE_FILE);
+      ImportMode .LoadFromFile(dmData.HomeDir+C_MODEFILE_DIR+C_IMPORTMODE_FILE);
+      ExceptMode.LoadFromFile(dmData.HomeDir+C_MODEFILE_DIR+C_EXCEPMODE_FILE);
+   except
+      on E : Exception do writeln('Could not load mode conversion files!');
+   end;
+
+   if dmData.DebugLevel>=1 then
+    Begin
+       Writeln('Loaded mode conversion files:');
+       Writeln('   ',SubmodeMode.Strings[0]);
+       Writeln('   ',ImportMode.Strings[0]);
+       Writeln('   ',ExceptMode.Strings[0]);
+    end;
+
+
+end;
+
+
+procedure TdmUtils.MakeMissingModeFile(num:integer);
+//the idea not to use const for conversion is that when they are put in files
+//later additions and deletions can be done by user without compile
+Const
+  S_file: array [1..168] of string = (
+  'submode=mode','8PSK125=PSK','8PSK125F=PSK','8PSK125FL=PSK','8PSK250=PSK','8PSK250F=PSK','8PSK250FL=PSK','8PSK500=PSK','8PSK500F=PSK','8PSK1000=PSK',
+  '8PSK1000F=PSK','8PSK1200F=PSK','AMTORFEC=TOR','ASCI=RTTY','CHIP64=CHIP','CHIP128=CHIP','DOM-M=DOMINO','DOM4=DOMINO','DOM5=DOMINO','DOM8=DOMINO',
+  'DOM11=DOMINO','DOM16=DOMINO','DOM22=DOMINO','DOM44=DOMINO','DOM88=DOMINO','DOMINOEX=DOMINO','DOMINOF=DOMINO','FMHELL=HELL','FSK31=PSK','FSKHELL=HELL',
+  'FSQCALL=MFSK','FST4=MFSK','FST4W=MFSK','FT4=MFSK','GTOR=TOR','HELL80=HELL','HELLX5=HELL','HELLX9=HELL','HFSK=HELL','ISCAT-A=ISCAT',
+  'ISCAT-B=ISCAT','JS8=MFSK','JT4A=JT4','JT4B=JT4','JT4C=JT4','JT4D=JT4','JT4E=JT4','JT4F=JT4','JT4G=JT4','JT9-1=JT9',
+  'JT9-2=JT9','JT9-5=JT9','JT9-10=JT9','JT9-30=JT9','JT9A=JT9','JT9B=JT9','JT9C=JT9','JT9D=JT9','JT9E=JT9','JT9E=FAST',
+  'JT9F=JT9','JT9F=FAST','JT9G=JT9','JT9G=FAST','JT9H=JT9','JT9H=FAST','JT65A=JT65','JT65B=JT65','JT65B2=JT65','JT65C=JT65',
+  'JT65C2=JT65','JTMS=MFSK','LSB=SSB','MFSK4=MFSK','MFSK8=MFSK','MFSK11=MFSK','MFSK16=MFSK','MFSK22=MFSK','MFSK31=MFSK','MFSK32=MFSK',
+  'MFSK64=MFSK','MFSK64L=MFSK','MFSK128=MFSK','MFSK128L=MFSK','NAVTEX=TOR','OLIVIA 4/125=OLIVIA','OLIVIA 4/250=OLIVIA','OLIVIA 8/250=OLIVIA','OLIVIA 8/500=OLIVIA','OLIVIA 16/500=OLIVIA',
+  'OLIVIA 16/1000=OLIVIA','OLIVIA 32/1000=OLIVIA','OPERA-BEACON=OPERA','OPERA-QSO=OPERA','PAC2=PAC','PAC3=PAC','PAC4=PAC','PAX2=PAX','PCW=CW','PSK10=PSK',
+  'PSK31=PSK','PSK63=PSK','PSK63F=PSK','PSK63RC10=PSK','PSK63RC20=PSK','PSK63RC32=PSK','PSK63RC4=PSK','PSK63RC5=PSK','PSK125=PSK','PSK125RC10=PSK','PSK125RC12=PSK',
+  'PSK125RC16=PSK','PSK125RC4=PSK','PSK125RC5=PSK','PSK250=PSK','PSK250RC2=PSK','PSK250RC3=PSK','PSK250RC5=PSK','PSK250RC6=PSK','PSK250RC7=PSK','PSK500=PSK',
+  'PSK500RC2=PSK','PSK500RC3=PSK','PSK500RC4=PSK','PSK800RC2=PSK','PSK1000=PSK','PSK1000RC2=PSK','PSKAM10=PSK','PSKAM31=PSK','PSKAM50=PSK','PSKFEC31=PSK',
+  'PSKHELL=HELL','QPSK31=PSK','Q65=MFSK','QPSK63=PSK','QPSK125=PSK','QPSK250=PSK','QPSK500=PSK','QRA64A=QRA64','QRA64B=QRA64','QRA64C=QRA64',
+  'QRA64D=QRA64','QRA64E=QRA64','ROS-EME=ROS','ROS-HF=ROS','ROS-MF=ROS','SIM31=PSK','SITORB=TOR','SLOWHELL=HELL','THOR-M=THOR','THOR4=THOR',
+  'THOR5=THOR','THOR8=THOR','THOR11=THOR','THOR16=THOR','THOR22=THOR','THOR25X4=THOR','THOR50X1=THOR','THOR50X2=THOR','THOR100=THOR','THRBX=THRB',
+  'THRBX1=THRB','THRBX2=THRB','THRBX4=THRB','THROB1=THRB','THROB2=THRB','THROB4=THRB','USB=SSB'
+  );
+  I_file: array [1 .. 41] of string = (
+  'for_import_only','AMTORFEC','ASCI','CHIP64','CHIP128','DOMINOF','FMHELL','FSK31','GTOR','HELL80',
+  'HFSK','JT4A','JT4B','JT4C','JT4D','JT4E','JT4F','JT4G','JT65A','JT65B',
+  'JT65C','MFSK8','MFSK16','PAC2','PAC3','PAX2','PCW','PSK10','PSK31','PSK63',
+  'PSK63F','PSK125','PSKAM10','PSKAM31','PSKAM50','PSKFEC31','PSKHELL','QPSK31','QPSK63','QPSK125',
+  'THRBX'
+  );
+
+  {Exceptions file:
+  Cqrlog uses SSB for both USB and LSB
+  Cqrlog uses RTTY, some programs may export ASCI even when it is import only!
+  'PACKET':
+           these modes come from ICOM rig (IC7300) when DATA is selected with USB,LSB,FM or AM
+           and checkbox "auto" for mode is selected in NewQSO we put them all to PKT category here
+           as it is in ADIF standard
+  }
+  E_file: array [1 .. 9] of string = (
+  'ex_mode=cqrlogmode',
+  'USB=SSB',
+  'LSB=SSB',
+  'ASCI=RTTY',
+  'PACKET=PKT',
+  'PKTUSB=PKT',
+  'PKTLSB=PKT',
+  'PKTFM=PKT',
+  'PKTAM=PKT'
+  );
+  R_file: array [1 .. 22] of string = (
+  'Files to modify ADIF mode+submode to fit with Cqrlog.',
+  'Cqrlog internally uses submodes as mode. (only one database column -> mode)',
+  '',
+  'These files are manually created and can be changed if needed:',
+  'Contents are read to TStringLists at program start.',
+  '',
+  'submode_mode.txt',
+  ' Submode=Mode',
+  ' Used en/decoding mode-submode pairs for Cqrlog.',
+  '',
+  'import_mode.txt',
+  ' Submode list for import only',
+  ' Used to define deprecated submodes that are used ony for adif input.',
+  ' These submodes do not export.',
+   '',
+   'exception_mode.txt',
+   ' mode=cqrlogmode',
+   ' Exceptions between "true" (sub)modes and internal cqrlog mode',
+   ' Converts also in export "non adif" modes from rigctld like PACKET -> PKT',
+   '',
+   'Two first files created by https://adif.org/312/ADIF_312_annotated.htm#Mode_Enumeration',
+   'informations 2022-04-29,'
+  );
+  var f:TextFile;
+
+
+//--------------------------------------------------------
+  procedure CreaFile(Fname:string;items:array of string);
+  var
+     i: integer;
+     itemsmax:integer;
+
+   begin
+      itemsmax:=length(items);
+      AssignFile(f,Fname);
+      try
+        rewrite(f);
+        try
+         for i:= 0 to itemsmax-1 do
+            Writeln(f, items[i]);
+        finally
+         CloseFile(f);
+        end;
+      except
+      on E: EInOutError do
+         ShowMessage('File handling error occurred. Details: ' +  E.ClassName +  '/' +  E.Message);
+      end;
+    end;
+//--------------------------------------------------------
+Begin
+   if num=1 then CreaFile(dmData.HomeDir+C_MODEFILE_DIR+C_SUBMODE_FILE,S_file);
+   if num=2 then CreaFile(dmData.HomeDir+C_MODEFILE_DIR+C_IMPORTMODE_FILE,I_file);
+   if num=3 then CreaFile(dmData.HomeDir+C_MODEFILE_DIR+C_EXCEPMODE_FILE,E_file);
+   if num=4 then CreaFile(dmData.HomeDir+C_MODEFILE_DIR+C_READMEMODE_FILE,R_file);
+end;
+
 end.
+
diff --git a/src/fAdifImport.lfm b/src/fAdifImport.lfm
index db6754d..4eb5c67 100644
--- a/src/fAdifImport.lfm
+++ b/src/fAdifImport.lfm
@@ -328,12 +328,17 @@ object frmAdifImport: TfrmAdifImport
       AnchorSideLeft.Control = lblErrors
       AnchorSideLeft.Side = asrBottom
       AnchorSideTop.Control = lblError
-      Left = 121
+      Left = 112
       Height = 1
       Top = 55
       Width = 1
       BorderSpacing.Left = 6
+      Font.Color = clRed
       ParentColor = False
+      ParentFont = False
+      Visible = False
+      OnClick = lblErrorLogClick
+      OnMouseEnter = lblErrorLogMouseEnter
     end
     object btnImport: TButton
       AnchorSideTop.Control = lbFile
@@ -377,6 +382,7 @@ object frmAdifImport: TfrmAdifImport
       BorderSpacing.Bottom = 6
       Caption = 'Close'
       ModalResult = 2
+      OnClick = btnCloseClick
       TabOrder = 2
     end
     object chkFilterDateRange: TCheckBox
@@ -524,4 +530,25 @@ object frmAdifImport: TfrmAdifImport
     Left = 280
     Top = 144
   end
+  object popErrFile: TPopupMenu
+    Left = 320
+    Top = 144
+    object mnuedit: TMenuItem
+      Caption = 'Open with text editor'
+      OnClick = mnueditClick
+    end
+    object mnuImport: TMenuItem
+      Caption = 'Adif import file'
+      OnClick = mnuImportClick
+    end
+    object mnuDelImport: TMenuItem
+      Caption = 'Delete imported Err file'
+      Visible = False
+      OnClick = mnuDelImportClick
+    end
+    object mnuDelete: TMenuItem
+      Caption = 'Delete file'
+      OnClick = mnuDeleteClick
+    end
+  end
 end
diff --git a/src/fAdifImport.pas b/src/fAdifImport.pas
index 73959a6..e5e667b 100644
--- a/src/fAdifImport.pas
+++ b/src/fAdifImport.pas
@@ -17,8 +17,8 @@ interface
 
 uses
   Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
-  Buttons, lcltype, ComCtrls, ExtCtrls, EditBtn, iniFiles, sqldb, dateutils,
-  strutils, LazUTF8, RegExpr;
+  Buttons, lcltype, ComCtrls, ExtCtrls, EditBtn, Menus, iniFiles, sqldb,
+  dateutils, strutils, LazUTF8, RegExpr;
 
 {$include uADIFhash.pas}
 
@@ -27,63 +27,64 @@ type
 
 type TnewQSOEntry=record   //represents a new qso entry in the log
       st:longint; // number of items added;
-      BAND:string[10];
-      CALL:string[30];
-      CNTY:string[50];
-      COMMENT:string[250];
-      CONT:string[2];
-      DXCC:string[16];
-      EQSL_QSLRDATE:string[10];
-      EQSL_QSLSDATE:string[10];
-      EQSL_QSL_RCVD:string[2];
-      EQSL_QSL_SENT:string[2];
-      FREQ:string[12];
-      GRIDSQUARE:string[6];
-      IOTA:string[6];
-      ITUZ:string[2];
-      LOTW_QSLRDATE:string[10];
-      LOTW_QSLSDATE:string[10];
-      LOTW_QSL_RCVD:string[2];
-      LOTW_QSL_SENT:string[2];
-      MODE:string[12];
-      MY_GRIDSQUARE:string[6];
-      NAME:string[50];
-      NOTES:string[250];
-      PFX:string[16];
-      QSLMSG:string[250];
-      QSLRDATE:string[10];
-      QSLSDATE:string[10];
-      QSL_RCVD:string[5];
-      QSL_SENT:string[5];
-      QSL_VIA:string[20];
-      QSO_DATE:string[10];
-      QTH:string[250];
-      RST_RCVD:string[6];
-      RST_SENT:string[6];
-      SRX:string[6];
-      SRX_STRING:string[250];
-      STX:string[6];
-      STX_STRING:string[250];
-      CONTEST_ID:string[250];
-      DARC_DOK:string[12];
-      TIME_OFF:string[5];
-      TIME_ON:string[5];
-      TX_PWR:string[5];
-      EOH:string[250];
-      EOR:string[250];
-      APP_CQRLOG_QSLS:string[4];
-      APP_CQRLOG_QSLR:string[4];
-      APP_CQRLOG_PROFILE:string[250];
-      APP_CQRLOG_COUNTY:string[250];
-      APP_CQRLOG_DXCC:string[16];
-      CQZ:string[3];
-      STATE:string[3];
-      AWARD:string[250];
-      POWER:String[10];
-      PROP_MODE : String[30];
-      SAT_NAME : String[30];
-      FREQ_RX  : String[30];
-      OP:String[30];
+      BAND:string[l_BAND];
+      CALL:string[l_CALL];
+      CNTY:string[l_CNTY];
+      COMMENT:string[l_COMMENT];
+      CONT:string[l_CONT];
+      DXCC:string[l_DXCC];
+      EQSL_QSLRDATE:string[l_EQSL_QSLRDATE];
+      EQSL_QSLSDATE:string[l_EQSL_QSLSDATE];
+      EQSL_QSL_RCVD:string[l_EQSL_QSL_RCVD];
+      EQSL_QSL_SENT:string[l_EQSL_QSL_SENT];
+      FREQ:string[l_FREQ];
+      GRIDSQUARE:string[l_GRIDSQUARE];
+      IOTA:string[l_IOTA];
+      ITUZ:string[l_ITUZ];
+      LOTW_QSLRDATE:string[l_LOTW_QSLRDATE];
+      LOTW_QSLSDATE:string[l_LOTW_QSLSDATE];
+      LOTW_QSL_RCVD:string[l_LOTW_QSL_RCVD];
+      LOTW_QSL_SENT:string[l_LOTW_QSL_SENT];
+      MODE:string[l_MODE];
+      SUBMODE:string[l_SUBMODE]; //we need this while processing cqrmode
+      MY_GRIDSQUARE:string[l_MY_GRIDSQUARE];
+      NAME:string[l_NAME];
+      NOTES:string[l_NOTES];
+      PFX:string[l_PFX];
+      QSLMSG:string[l_QSLMSG];
+      QSLRDATE:string[l_QSLRDATE];
+      QSLSDATE:string[l_QSLSDATE];
+      QSL_RCVD:string[l_QSL_RCVD];
+      QSL_SENT:string[l_QSL_SENT];
+      QSL_VIA:string[l_QSL_VIA];
+      QSO_DATE:string[l_QSO_DATE];
+      QTH:string[l_QTH];
+      RST_RCVD:string[l_RST_RCVD];
+      RST_SENT:string[l_RST_SENT];
+      SRX:string[l_SRX];
+      SRX_STRING:string[l_SRX_STRING];
+      STX:string[l_STX];
+      STX_STRING:string[l_STX_STRING];
+      CONTEST_ID:string[l_CONTEST_ID];
+      DARC_DOK:string[l_DARC_DOK];
+      TIME_OFF:string[l_TIME_OFF];
+      TIME_ON:string[l_TIME_ON];
+      TX_PWR:string[l_TX_PWR];
+      EOH:string[l_EOH];
+      EOR:string[l_EOR];
+      APP_CQRLOG_QSLS:string[l_APP_CQRLOG_QSLS];
+      APP_CQRLOG_QSLR:string[l_APP_CQRLOG_QSLR];
+      APP_CQRLOG_PROFILE:string[l_APP_CQRLOG_PROFILE];
+      APP_CQRLOG_COUNTY:string[l_APP_CQRLOG_COUNTY];
+      APP_CQRLOG_DXCC:string[l_APP_CQRLOG_DXCC];
+      CQZ:string[l_CQZ];
+      STATE:string[l_STATE];
+      AWARD:string[l_AWARD];
+      POWER:String[l_POWER];
+      PROP_MODE : String[l_PROP_MODE];
+      SAT_NAME : String[l_SAT_NAME];
+      FREQ_RX  : String[l_FREQ_RX];
+      OP:String[l_OP];
      end;
 type
 
@@ -115,21 +116,36 @@ type
     lblDateTo: TLabel;
     lblQthProfile: TLabel;
     lblRemaks: TLabel;
+    mnuDelImport: TMenuItem;
+    mnuedit: TMenuItem;
+    mnuImport: TMenuItem;
+    mnuDelete: TMenuItem;
     pnlAll: TPanel;
     pnlFilterDateRange: TPanel;
+    popErrFile: TPopupMenu;
     Q1: TSQLQuery;
     Q2: TSQLQuery;
     Q3: TSQLQuery;
     Q4: TSQLQuery;
     sb: TStatusBar;
     tr: TSQLTransaction;
+    procedure btnCloseClick(Sender: TObject);
     procedure chkFilterDateRangeChange(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure btnImportClick(Sender: TObject);
+    procedure lblErrorLogClick(Sender: TObject);
+    procedure lblErrorLogMouseEnter(Sender: TObject);
+    procedure mnuDeleteClick(Sender: TObject);
+    procedure mnuDelImportClick(Sender: TObject);
+    procedure mnueditClick(Sender: TObject);
+    procedure mnuImportClick(Sender: TObject);
   private
+    LocalDbg     : Boolean;
     AbortImport : boolean;
     ERR_FILE : String;
+    Do_Err_Import : Boolean;
+    CutErrText : String;
     WrongRecNr : Integer;
     RecNR      : Integer;
     GlobalProfile : Integer;
@@ -141,15 +157,15 @@ type
     FFilterDateRange: array [0..1] of TDateString;
     function ValidateFilter: boolean;
     procedure WriteWrongADIF(lines : Array of String; error : String);
-
     function generateAdifTagHash(aaa:String):longint;
-    function fillTypeVariableWithTagData(h:longint;var data:string;var D:TnewQSOEntry):boolean;
+    function fillTypeVariableWithTagData(h:longint;var data:string;var D:TnewQSOEntry;adifTag:String):boolean;
     procedure initializeTypeVariable(var d:TnewQSOEntry);
     function saveNewEntryFromADIFinDatabase(var d:TnewQSOEntry; var err : String) : Boolean;
-
+    function TrimDataLen(adifTag:String;adifdata:String;maxlen:integer): String;
     { private declarations }
   public
     function getNextAdifTag(var vstup,prik,data:string):boolean;
+    procedure OpenInTextEditor(OtF:String);
     { public declarations }
   end; 
 
@@ -210,7 +226,7 @@ var z,x:longint;
       DataLen := 0
     else
       DataLen := StrToInt(slen);
-    //if dmData.DebugLevel >=1 then Write('Got length:',DataLen);
+    //if LocalDbg then Write('Got length:',DataLen);
 
     if z<>0 then
       prik:=trim(copy(aaa,1,z-1))
@@ -221,14 +237,14 @@ var z,x:longint;
 
     z:=pos('<',aaa);
     i:= pos('_INTL',upcase(prik));
-    //if dmData.DebugLevel >=1 then Write(' pos INTL:',i);
+    //if LocalDbg then Write(' pos INTL:',i);
     if z=0 then
     begin
       if i>0 then  //tags with '_intl' have UTF8 charactes
        Begin
         prik:= copy(prik,1,i-1); //remove '_INTL'
         data:=UTF8copy(aaa,1,DataLen);
-        //if dmData.DebugLevel >=1 then Write(' as UTF8');
+        //if LocalDbg then Write(' as UTF8');
        end
       else
         data:=copy(aaa,1,DataLen);
@@ -239,90 +255,86 @@ var z,x:longint;
        Begin
         prik:= copy(prik,1,i-1); //remove '_INTL'
         data:=UTF8copy(aaa,1,DataLen);
-        //if dmData.DebugLevel >=1 then Write(' as UTF8');
+        //if LocalDbg then Write(' as UTF8');
        end
       else
         data:=copy(aaa,1,DataLen);
       vstup:=copy(aaa,z,length(aaa))
     end;
     data :=trim(data);
-    //if dmData.DebugLevel >=1 then Writeln(' for tag:',prik,' with data:',data);
+    //if LocalDbg then Writeln(' for tag:',prik,' with data:',data);
     getNextAdifTag:=true
   end;
 
-function TfrmAdifImport.fillTypeVariableWithTagData(h:longint;var data:string;var D:TnewQSOEntry):boolean;
+function TfrmAdifImport.fillTypeVariableWithTagData(h:longint;var data:string;var D:TnewQSOEntry;adifTag:String):boolean;
+
   begin
     if (h=h_EOH) or (h=h_EOR) then begin
       fillTypeVariableWithTagData:=false;exit;
     end;
+
     fillTypeVariableWithTagData:=true;
     data := trim(data);
+
     case h of
-      h_BAND                          :d.BAND:=data;
-      h_CALL                          :d.CALL:=data;
-      h_CNTY                          :d.CNTY:=data;
-      h_COMMENT                       :d.COMMENT:=data;
-      h_CONT                          :d.CONT:=data;
-      h_DXCC                          :d.DXCC:=data;
-      h_EQSL_QSLRDATE                 :d.EQSL_QSLRDATE:=data;
-      h_EQSL_QSLSDATE                 :d.EQSL_QSLSDATE:=data;
-      h_EQSL_QSL_RCVD                 :d.EQSL_QSL_RCVD:=data;
-      h_EQSL_QSL_SENT                 :d.EQSL_QSL_SENT:=data;
-      h_FREQ                          :d.FREQ:=data;
-      h_GRIDSQUARE                    :d.GRIDSQUARE:=dmUtils.StdFormatLocator(data);
-      h_IOTA                          :d.IOTA:=data;
-      h_ITUZ                          :d.ITUZ:=data;
-      h_LOTW_QSLRDATE                 :d.LOTW_QSLRDATE:=data;
-      h_LOTW_QSLSDATE                 :d.LOTW_QSLSDATE:=data;
-      h_LOTW_QSL_RCVD                 :d.LOTW_QSL_RCVD:=data;
-      h_LOTW_QSL_SENT                 :d.LOTW_QSL_SENT:=data;
-      // DL7OAP: because MODE-field in cqrlog database does not match completely
-      // with MODE field of ADIF specification, we have to transfer the
-      // ADIF MODES/SUBMODES (JS8, FT4, FST4,PKT) to MODE-field in cqrlog database
-      h_MODE                          : begin
-                                          if data = 'PKT' then d.MODE:='PACKET'
-                                          else d.MODE:=data
-                                        end;
-      h_SUBMODE                       : begin
-                                          if data = 'FT4' then d.MODE:=data;
-                                          if data = 'FST4' then d.MODE:=data;
-                                          if data = 'JS8' then d.MODE:=data
-                                        end;
-      h_MY_GRIDSQUARE                   :d.MY_GRIDSQUARE:=dmUtils.StdFormatLocator(data);
-      h_NAME                            :d.NAME:=data;
-      h_NOTES                           :d.NOTES:=data;
-      h_PFX                             :d.PFX:=data;
-      h_QSLMSG                          :d.QSLMSG:=data;
-      h_QSLRDATE                        :d.QSLRDATE:=data;
-      h_QSLSDATE                        :d.QSLSDATE:=data;
-      h_QSL_RCVD                        :d.QSL_RCVD:=data;
-      h_QSL_SENT                        :d.QSL_SENT:=data;
-      h_QSL_VIA                         :d.QSL_VIA:=data;
-      h_QSO_DATE                        :d.QSO_DATE:=data;
-      h_QTH                             :d.QTH:=data;
-      h_RST_RCVD                        :d.RST_RCVD:=data;
-      h_RST_SENT                        :d.RST_SENT:=data;
-      h_SRX                             :d.SRX:=data;
-      h_SRX_STRING                      :d.SRX_STRING:=data;
-      h_STX                             :d.STX:=data;
-      h_STX_STRING                      :d.STX_STRING:=data;
-      h_CONTEST_ID                      :d.CONTEST_ID:=data;
-      h_DARC_DOK                        :d.DARC_DOK:=data;
-      h_TIME_OFF                        :d.TIME_OFF:=data;
-      h_TIME_ON                         :d.TIME_ON:=data;
-      h_TX_PWR                          :d.TX_PWR:=data;
-      h_APP_CQRLOG_DXCC                 :d.APP_CQRLOG_DXCC:=data;
-      h_APP_CQRLOG_QSLS                 :d.APP_CQRLOG_QSLS:=data;
-      h_APP_CQRLOG_PROFILE              :d.APP_CQRLOG_PROFILE:=data;
-      h_APP_CQRLOG_QSLR                 :d.APP_CQRLOG_QSLR:=data;
-      h_APP_CQRLOG_COUNTY               :d.APP_CQRLOG_COUNTY:=data;
-      h_CQZ                             :d.CQZ:=data;
-      h_STATE                           :d.STATE:=data;
-      h_AWARD                           :d.AWARD:=data;
-      h_PROP_MODE                       :d.PROP_MODE:=data;
-      h_SAT_NAME                        :d.SAT_NAME:=data;
-      h_FREQ_RX                         :d.FREQ_RX:=data;
-      h_OP                              :d.OP:=data
+    h_BAND                          :d.BAND:=UpperCase(TrimDataLen(adifTag,data,l_BAND));
+    h_CALL                          :d.CALL:=UpperCase(TrimDataLen(adifTag,data,l_CALL));
+    h_CNTY                          :d.CNTY:=TrimDataLen(adifTag,data,l_CNTY);
+    h_COMMENT                       :d.COMMENT:=TrimDataLen(adifTag,data,l_COMMENT);
+    h_CONT                          :d.CONT:=UpperCase(TrimDataLen(adifTag,data,l_CONT));
+    h_DXCC                          :d.DXCC:=UpperCase(TrimDataLen(adifTag,data,l_DXCC));
+    h_EQSL_QSLRDATE                 :d.EQSL_QSLRDATE:=TrimDataLen(adifTag,data,l_EQSL_QSLRDATE);
+    h_EQSL_QSLSDATE                 :d.EQSL_QSLSDATE:=TrimDataLen(adifTag,data,l_EQSL_QSLSDATE);
+    h_EQSL_QSL_RCVD                 :d.EQSL_QSL_RCVD:=TrimDataLen(adifTag,data,l_EQSL_QSL_RCVD);
+    h_EQSL_QSL_SENT                 :d.EQSL_QSL_SENT:=TrimDataLen(adifTag,data,l_EQSL_QSL_SENT);
+    h_FREQ                          :d.FREQ:=TrimDataLen(adifTag,data,l_FREQ);
+    h_GRIDSQUARE                    :d.GRIDSQUARE:=dmUtils.StdFormatLocator(data);
+    h_IOTA                          :d.IOTA:=UpperCase(TrimDataLen(adifTag,data,l_IOTA));
+    h_ITUZ                          :d.ITUZ:=TrimDataLen(adifTag,data,l_ITUZ);
+    h_LOTW_QSLRDATE                 :d.LOTW_QSLRDATE:=TrimDataLen(adifTag,data,l_LOTW_QSLRDATE);
+    h_LOTW_QSLSDATE                 :d.LOTW_QSLSDATE:=TrimDataLen(adifTag,data,l_LOTW_QSLSDATE);
+    h_LOTW_QSL_RCVD                 :d.LOTW_QSL_RCVD:=TrimDataLen(adifTag,data,l_LOTW_QSL_RCVD);
+    h_LOTW_QSL_SENT                 :d.LOTW_QSL_SENT:=TrimDataLen(adifTag,data,l_LOTW_QSL_SENT);
+
+    h_MODE                          :d.MODE    := UpperCase(TrimDataLen(adifTag,data,l_MODE));
+    h_SUBMODE                       :d.SUBMODE := UpperCase(TrimDataLen(adifTag,data,l_SUBMODE));
+
+    h_MY_GRIDSQUARE                 :d.MY_GRIDSQUARE:=dmUtils.StdFormatLocator(data);
+    h_NAME                          :d.NAME:=TrimDataLen(adifTag,data,l_NAME);
+    h_NOTES                         :d.NOTES:=TrimDataLen(adifTag,data,l_NOTES);
+    h_PFX                           :d.PFX:=UpperCase(TrimDataLen(adifTag,data,l_PFX));
+    h_QSLMSG                        :d.QSLMSG:=TrimDataLen(adifTag,data,l_QSLMSG);
+    h_QSLRDATE                      :d.QSLRDATE:=TrimDataLen(adifTag,data,l_QSLRDATE);
+    h_QSLSDATE                      :d.QSLSDATE:=TrimDataLen(adifTag,data,l_QSLSDATE);
+    h_QSL_RCVD                      :d.QSL_RCVD:=TrimDataLen(adifTag,data,l_QSL_RCVD);
+    h_QSL_SENT                      :d.QSL_SENT:=TrimDataLen(adifTag,data,l_QSL_SENT);
+    h_QSL_VIA                       :d.QSL_VIA:=TrimDataLen(adifTag,data,l_QSL_VIA);
+    h_QSO_DATE                      :d.QSO_DATE:=TrimDataLen(adifTag,data,l_QSO_DATE);
+    h_QTH                           :d.QTH:=TrimDataLen(adifTag,data,l_QTH);
+    h_RST_RCVD                      :d.RST_RCVD:=TrimDataLen(adifTag,data,l_RST_RCVD);
+    h_RST_SENT                      :d.RST_SENT:=TrimDataLen(adifTag,data,l_RST_SENT);
+    h_SRX                           :d.SRX:=TrimDataLen(adifTag,data,l_SRX);
+    h_SRX_STRING                    :d.SRX_STRING:=TrimDataLen(adifTag,data,l_SRX_STRING);
+    h_STX                           :d.STX:=TrimDataLen(adifTag,data,l_STX);
+    h_STX_STRING                    :d.STX_STRING:=TrimDataLen(adifTag,data,l_STX_STRING);
+    h_CONTEST_ID                    :d.CONTEST_ID:=TrimDataLen(adifTag,data,l_CONTEST_ID);
+    h_DARC_DOK                      :d.DARC_DOK:=TrimDataLen(adifTag,data,l_DARC_DOK);
+    h_TIME_OFF                      :d.TIME_OFF:=copy(data,1,4);//can be HHMMSS but cqrlog uses HHMM both
+    h_TIME_ON                       :d.TIME_ON:=copy(data,1,4); //are valid adif forms so no Trim/Err here
+    h_TX_PWR                        :d.TX_PWR:=TrimDataLen(adifTag,data,l_TX_PWR);
+    h_APP_CQRLOG_DXCC               :d.APP_CQRLOG_DXCC:=TrimDataLen(adifTag,data,l_APP_CQRLOG_DXCC);
+    h_APP_CQRLOG_QSLS               :d.APP_CQRLOG_QSLS:=TrimDataLen(adifTag,data,l_APP_CQRLOG_QSLS);
+    h_APP_CQRLOG_PROFILE            :d.APP_CQRLOG_PROFILE:=TrimDataLen(adifTag,data,l_APP_CQRLOG_PROFILE);
+    h_APP_CQRLOG_QSLR               :d.APP_CQRLOG_QSLR:=TrimDataLen(adifTag,data,l_APP_CQRLOG_QSLR);
+    h_APP_CQRLOG_COUNTY             :d.APP_CQRLOG_COUNTY:=TrimDataLen(adifTag,data,l_APP_CQRLOG_COUNTY);
+    h_CQZ                           :d.CQZ:=TrimDataLen(adifTag,data,l_CQZ);
+    h_STATE                         :d.STATE:=UpperCase(TrimDataLen(adifTag,data,l_STATE));
+    h_AWARD                         :d.AWARD:=TrimDataLen(adifTag,data,l_AWARD);
+    h_PROP_MODE                     :d.PROP_MODE:=TrimDataLen(adifTag,data,l_PROP_MODE);
+    h_SAT_NAME                      :d.SAT_NAME:=TrimDataLen(adifTag,data,l_SAT_NAME);
+    h_FREQ_RX                       :d.FREQ_RX:=TrimDataLen(adifTag,data,l_FREQ_RX);
+    h_OP                            :d.OP:=TrimDataLen(adifTag,data,l_OP);
+
     else begin
         { writeln('Unnamed...>',pom,'<');fillTypeVariableWithTagData:=false;exit;}
       end;
@@ -370,15 +382,18 @@ begin
     if (not dmUtils.IsLocOK(d.MY_GRIDSQUARE)) or chkOverrideLocator.Checked then
       d.MY_GRIDSQUARE := FMyLoc;
     d.CALL := UpperCase(d.CALL);
-    if (d.MODE = 'USB') or (d.MODE ='LSB') then
-      d.MODE := 'SSB';
-    if (d.FREQ  = '') or (d.FREQ = '0') then
+
+    //convert mode and submode to cqrmode here
+    d.MODE:=dmUtils.ModeToCqr(d.MODE,d.SUBMODE,LocalDbg);
+
+         if (d.FREQ  = '') or (d.FREQ = '0') then
       d.FREQ := dmUtils.FreqFromBand(d.BAND,d.MODE);
 
     d.QSO_DATE      := dmUtils.ADIFDateToDate(d.QSO_DATE);
     if not IsQsoDateInRange then
     begin
       Inc(FFilteredOutRecNr);
+      initializeTypeVariable(d);
       exit;
     end;
     d.LOTW_QSLSDATE := dmUtils.ADIFDateToDate(d.LOTW_QSLSDATE);
@@ -388,7 +403,8 @@ begin
     d.EQSL_QSLSDATE := dmUtils.ADIFDateToDate(d.EQSL_QSLSDATE);
     d.EQSL_QSLRDATE := dmUtils.ADIFDateToDate(d.EQSL_QSLRDATE);
 
-    d.TIME_ON := copy(d.TIME_ON,1,2) + ':' + copy(d.TIME_ON,3,2);
+
+     d.TIME_ON := copy(d.TIME_ON,1,2) + ':' + copy(d.TIME_ON,3,2);
     if d.TIME_OFF <> '' then
       d.TIME_OFF := copy(d.TIME_OFF,1,2) + ':' + copy(d.TIME_OFF,3,2)
     else
@@ -416,10 +432,11 @@ begin
         d.QSL_RCVD := ''
     end;
 
-    d.IOTA  := Trim(d.IOTA);
+    // d.IOTA  := Trim(d.IOTA); this has been trimmed at  fillTypeVariableWithTagData
     d.IOTA  := UpperCase(d.IOTA);
-    d.NAME  := Copy(d.NAME, 1 ,40);
-    d.QTH   := Copy(d.QTH, 1, 60);
+    //lengths now fixed in  fillTypeVariableWithTagData
+    //d.NAME  := Copy(d.NAME, 1 ,40);
+    //d.QTH   := Copy(d.QTH, 1, 60);
     //workaround for 'TRegExpr exec: empty input string' error in fpc compiler
     if (trim(d.DARC_DOK) <> '') then
     begin
@@ -440,13 +457,14 @@ begin
 
     d.OP := UpperCase(d.OP);
 
-    if not dmUtils.IsAdifOK(d.QSO_DATE,d.TIME_ON,d.TIME_OFF,d.CALL,d.FREQ,d.MODE,d.RST_SENT,
+    if (not dmUtils.IsAdifOK(d.QSO_DATE,d.TIME_ON,d.TIME_OFF,d.CALL,d.FREQ,d.MODE,d.RST_SENT,
                             d.RST_RCVD,d.IOTA,d.ITUZ,d.CQZ,d.GRIDSQUARE,d.MY_GRIDSQUARE,
-                            d.BAND,err) then
+                            d.BAND,err)) then
     begin
       inc(WrongRecNr);
       lblErrors.Caption   := IntToStr(WrongRecNr);
       lblErrorLog.Caption := dmData.UsrHomeDir + ERR_FILE;
+      lblErrorLog.Visible:=true;
       Repaint;
       Application.ProcessMessages;
       Result := False;
@@ -481,19 +499,19 @@ begin
           Q4.SQL.Text := 'SELECT nr FROM profiles WHERE locator='+QuotedStr(pLoc) +
                          ' and qth='+QuotedStr(pQTH)+' and rig='+QuotedStr(pEq) +
                          ' and remarks='+QuotedStr(pNote);
-          if dmData.DebugLevel >=1 then Writeln(Q4.SQL.Text);
+          if LocalDbg then Writeln(Q4.SQL.Text);
           Q4.Open;
           if Q4.Fields[0].AsInteger = 0 then
           begin
             Q4.Close();
             Q4.SQL.Text := 'select nr from profiles where nr = '+pProf;
-            if dmData.DebugLevel >=1 then Writeln(Q4.SQL.Text);
+            if LocalDbg then Writeln(Q4.SQL.Text);
             Q4.Open();
             if (Q4.Fields[0].AsInteger > 0) then //if profile with this number doesnt exists,
             begin                           //we can save the number
               Q4.Close();
               Q4.SQL.Text := 'select max(nr) from profiles';
-              if dmData.DebugLevel >=1 then Writeln(Q4.SQL.Text);
+              if LocalDbg then Writeln(Q4.SQL.Text);
               Q4.Open();
               pProf := IntToStr(Q4.Fields[0].AsInteger+1)
             end;
@@ -513,7 +531,7 @@ begin
                            pProf+','+QuotedStr(pLoc)+','+QuotedStr(pQTH)+','+QuotedStr(pEq)+','+
                            QuotedStr(pNote)+',1)';
             }
-            if dmData.DebugLevel >=1 then Writeln(Q4.SQL.Text);
+            if LocalDbg then Writeln(Q4.SQL.Text);
             Q4.ExecSQL;
             Q4.Close();
           end
@@ -533,7 +551,8 @@ begin
                            ' AND time_on = ' + QuotedStr(d.TIME_ON) + ' AND callsign = '+QuotedStr(d.CALL)+
                            ' AND band = ' + QuotedStr(d.BAND) + ' AND mode = '+QuotedStr(d.MODE);
 
-      if dmData.DebugLevel >=1 then Writeln(dmData.Q.SQL.Text);
+      if LocalDbg then
+                  Writeln(dmData.Q.SQL.Text);
       if dmData.trQ.Active then
         dmData.trQ.Rollback;
       dmData.trQ.StartTransaction;
@@ -601,7 +620,7 @@ begin
                    ':lotw_qslr,:qsls_date,:qslr_date,:eqsl_qslsdate,:eqsl_qsl_sent,:eqsl_qslrdate,'+
                    ':eqsl_qsl_rcvd, :prop_mode, :satellite, :rxfreq, :stx, :srx, :stx_string, :srx_string,'+
                    ':contestname,:dok,:operator)';
-    if dmData.DebugLevel >=1 then Writeln(Q1.SQL.Text);
+    if LocalDbg then Writeln(Q1.SQL.Text);
     Q1.Prepare;
     Q1.Params[0].AsString   := d.QSO_DATE;
     Q1.Params[1].AsString   := d.TIME_ON;
@@ -730,7 +749,7 @@ begin
     else
       Q1.Params[47].Clear;
 
-    if dmData.DebugLevel >=1 then Writeln(Q1.SQL.Text);
+    if LocalDbg then Writeln(Q1.SQL.Text);
     Q1.ExecSQL;
     inc(RecNR);
     if (RecNR mod 100 = 0) then
@@ -755,6 +774,8 @@ var
   ErrText : String = '';
   tmp : String='';
 begin
+  if lblFileName.Caption='' then exit;
+  CutErrText :='';
   AbortImport := false;
   lblComplete.Visible := False;
   GlobalProfile := dmData.GetNRFromProfile(cmbProfiles.Text);
@@ -764,7 +785,7 @@ begin
   // If that failed use default configured locator
   if not dmUtils.IsLocOK(FMyLoc) then
      FMyLoc   := cqrini.ReadString('Station', 'LOC', '');
-  if dmData.DebugLevel >=1 then WriteLn('Using '+FMyLoc+' as locator for imports');
+  if LocalDbg then WriteLn('Using '+FMyLoc+' as locator for imports');
   RecNR := 0;
   WrongRecNr := 0;
   FFilteredOutRecNr := 0;
@@ -796,13 +817,16 @@ begin
       while getNextAdifTag(oneTextRow,adifTag,data) and not (AbortImport) do
       begin
         h:=generateAdifTagHash(adifTag);
-        if (h=h_EOH) or (h=h_EOR) then
+        if ((h=h_EOH) or (h=h_EOR)) then
         begin
           if not saveNewEntryFromADIFinDatabase(d,ErrText) then
             WriteWrongADIF(tmp,ErrText);
-          tmp:=''
+          if (CutErrText<>'') and (h=h_EOR)then
+              WriteWrongADIF(tmp,'Imported with shrink(s):'+#10+CutErrText);
+          CutErrText:='';
+          tmp:='';
         end;
-        fillTypeVariableWithTagData(h,data,d)
+        fillTypeVariableWithTagData(h,data,D,adifTag);
       end;
     end
   except
@@ -820,7 +844,7 @@ begin
       tr.Commit;
     dt := dt - now;
     DecodeTime(dt,hh,m,s,ms);
-    if dmData.DebugLevel >=1 then WriteLn('It takes about ',m,' minutes and ',s,' seconds ',ms,' milliseconds');
+    if LocalDbg then WriteLn('It takes about ',m,' minutes and ',s,' seconds ',ms,' milliseconds');
     lblCount.Caption := IntToStr(RecNR);
     lblFilteredOut.Visible := FFilterByDate;
     lblFilteredOutCount.Visible := FFilterByDate;
@@ -838,6 +862,76 @@ begin
   end;
 end;
 
+procedure TfrmAdifImport.lblErrorLogClick(Sender: TObject);
+Begin
+   popErrFile.Popup;
+end;
+procedure TfrmAdifImport.OpenInTextEditor(OtF:String);
+//open in text editor
+var
+  prg: string;
+begin
+  try
+    prg := cqrini.ReadString('ExtView', 'txt', '');
+    if prg<>'' then
+      dmUtils.RunOnBackground(prg + ' ' + OtF)
+     else ShowMessage('No external text viewer defined!'+#10+'See: prefrences/External viewers');
+  finally
+   //done
+  end;
+end;
+
+procedure TfrmAdifImport.mnueditClick(Sender: TObject);
+begin
+  popErrFile.Close;
+  OpenInTextEditor(lblErrorLog.Caption);
+end;
+
+procedure TfrmAdifImport.mnuImportClick(Sender: TObject);
+var
+  tmp:Char;
+begin
+  popErrFile.Close;
+  try
+    tmp := FormatSettings.TimeSeparator;
+    FormatSettings.TimeSeparator := '_';
+    ERR_FILE := 'errors_'+TimeToStr(now)+'.adi'
+  finally
+    FormatSettings.TimeSeparator := tmp
+  end;
+  lblFileName.Caption:= lblErrorLog.Caption;
+  lblErrorLog.Caption:='';
+  lblCount.Caption :='';
+  lblErrors.Caption := '';
+  Do_Err_Import:=true;
+end;
+
+procedure TfrmAdifImport.mnuDeleteClick(Sender: TObject);
+begin
+  popErrFile.Close;
+  if ( Application.MessageBox(pAnsiChar('Do you want to delete file'+#10+lblErrorLog.Caption) , 'Delete file ?',MB_ICONQUESTION + MB_YESNO) = IDYES) then
+    Begin
+      DeleteFile( lblErrorLog.Caption );
+      lblErrorLog.Caption:=''
+    end;
+end;
+
+procedure TfrmAdifImport.mnuDelImportClick(Sender: TObject);
+begin
+    popErrFile.Close;
+     if ( Application.MessageBox(pAnsiChar('Do you want to delete file'+#10+lblFileName.Caption) , 'Delete file ?',MB_ICONQUESTION + MB_YESNO) = IDYES) then
+    Begin
+      DeleteFile(lblFileName.Caption);
+      Do_Err_Import:=false;
+      lblFileName.Caption:=''
+    end;
+end;
+
+procedure TfrmAdifImport.lblErrorLogMouseEnter(Sender: TObject);
+begin
+     mnuDelImport.Visible:=Do_Err_Import;
+     popErrFile.Popup;
+end;
 
 function TfrmAdifImport.ValidateFilter: boolean;
 begin
@@ -860,6 +954,7 @@ procedure TfrmAdifImport.FormCreate(Sender: TObject);
 var
   tmp : Char;
 begin
+  Do_Err_Import:=false;
   NowDate := dmUtils.MyDateToStr(now);
 
   Q1.DataBase := dmData.MainCon;
@@ -876,7 +971,13 @@ begin
     ERR_FILE := 'errors_'+TimeToStr(now)+'.adi'
   finally
     FormatSettings.TimeSeparator := tmp
-  end
+  end;
+  lblErrorLog.Visible:=false;
+  //set debug rules for this form
+  // bit 1, %1,  ---> -2 for routines in this form
+  LocalDbg := dmData.DebugLevel >= 1 ;
+  if dmData.DebugLevel < 0 then
+      LocalDbg :=  LocalDbg or ((abs(dmData.DebugLevel) and 2) = 2 );
 end;
 
 procedure TfrmAdifImport.chkFilterDateRangeChange(Sender: TObject);
@@ -886,6 +987,11 @@ begin
   lblFilteredOutCount.Visible := chkFilterDateRange.Checked;
 end;
 
+procedure TfrmAdifImport.btnCloseClick(Sender: TObject);
+begin
+  AbortImport:=true;
+end;
+
 procedure TfrmAdifImport.FormShow(Sender: TObject);
 begin
   lblComplete.Visible := False;
@@ -895,13 +1001,25 @@ begin
   Qasked:=false;
 end;
 
+function TfrmAdifImport.TrimDataLen(adiftag:String;adifdata:String;maxlen:integer):String;
+Begin
+ if length(adifdata)>maxlen then
+     Begin
+            CutErrText:=CutErrText + adiftag+' shrink to '+IntToStr(maxlen)+' chrs:'+adifdata+' -> '+copy(adifdata,1,maxlen)+#10;
+            Result:= trim(copy(adifdata,1,maxlen)); //trim after cut
+     end
+   else
+            Result:=adifdata; //trimmed before
+end;
+
+
 procedure TfrmAdifImport.WriteWrongADIF(lines : Array of String; error : String);
 var
   f : TextFile;
   i : Integer;
 begin
     for i:= 0 to Length(lines)-1 do
-      if dmData.DebugLevel >=1 then WriteLn(lines[i]);
+      if LocalDbg then WriteLn(lines[i]);
 
   if FileExists(dmData.UsrHomeDir + ERR_FILE) then
   begin
@@ -916,6 +1034,7 @@ begin
   else begin
     AssignFile(f,dmData.UsrHomeDir + ERR_FILE);
     Rewrite(f);
+    Writeln(f);
     Writeln(f,'ADIF export from CQRLOG for Linux version ' + dmData.VersionString);
     Writeln(f,'Copyright (C) ',YearOf(now),' by Petr, OK2CQR and Martin, OK1RR');
     Writeln(f,'Internet: http://www.cqrlog.com');
diff --git a/src/fBandMap.pas b/src/fBandMap.pas
index b13b2c1..b027a73 100644
--- a/src/fBandMap.pas
+++ b/src/fBandMap.pas
@@ -118,7 +118,7 @@ type
     FOnlyLoTW       : Boolean;
     FOnlyEQSL       : Boolean;
 
-    procedure SortBandMapArray(l,r : Integer);
+    procedure SortBandMapArray(l,r : Integer; Rev:boolean);
     procedure BandMapDbClick(where:longint;mb:TmouseButton;ms:TShiftState);
     procedure EmitBandMapClick(Sender:TObject;Call,Mode : String; Freq : Currency);
     procedure ClearAll;
@@ -332,27 +332,37 @@ begin
   end
 end;
 
-procedure TfrmBandMap.SortBandMapArray(l,r : integer);
+procedure TfrmBandMap.SortBandMapArray(l,r : integer; Rev:boolean);
 var
-  i,j : Integer;
-  w : TbandMapItem;
-  x : Double;
+  i,j,h : Integer;
+  w     : TbandMapItem;
+  x     : Double;
+
+procedure SwapItems;
+  begin
+    BandMapItems[j] := BandMapItems[j-h];
+    j := j - h;
+  end;
+
 begin
-  i:=l; j:=r;
-  x:=BandMapItems[(l+r) div 2].Freq;
+  h := l;
   repeat
-    while BandMapItems[i].Freq < x do i:=i+1;
-    while x < BandMapItems[j].Freq do j:=j-1;
-    if i <= j then
-    begin
-      w := BandMapItems[i];
-      BandMapItems[i] := BandMapItems[j];
-      BandMapItems[j] := w;
-      i:=i+1; j:=j-1
-    end
-  until i > j;
-  if l < j then SortBandMapArray(l,j);
-  if i < r then SortBandMapArray(i,r)
+   h := 3*h + 1
+  until h > r;
+  repeat
+   h := h div 3;
+   for i := h + 1 to r do
+      begin
+       x := BandMapItems[i].Freq;
+       w := BandMapItems[i];
+       j := i;
+       if not Rev then
+          while (j > h) AND (BandMapItems[j-h].Freq > x) do SwapItems
+        else
+          while (j > h) AND (BandMapItems[j-h].Freq < x) do SwapItems;
+       BandMapItems[j] := w;
+      end
+  until h = 1;
 end;
 
 function TfrmBandMap.GetIndexFromPosition(ItemPos : Word) : Integer;
@@ -555,7 +565,7 @@ begin
       end;
       if NewAdded then
       begin
-        frmBandMap.SortBandMapArray(1,MAX_ITEMS);
+        frmBandMap.SortBandMapArray(1,MAX_ITEMS,cqrini.ReadBool('BandMap', 'ReverseOrder', False) );
         NewAdded := False;
         Changed  := True
       end;
diff --git a/src/fBandMapFilter.lfm b/src/fBandMapFilter.lfm
index 84006ef..8994eb3 100644
--- a/src/fBandMapFilter.lfm
+++ b/src/fBandMapFilter.lfm
@@ -10,7 +10,7 @@ object frmBandMapFilter: TfrmBandMapFilter
   OnClose = FormClose
   OnShow = FormShow
   Position = poMainFormCenter
-  LCLVersion = '2.0.4.0'
+  LCLVersion = '2.0.12.0'
   object GroupBox1: TGroupBox
     AnchorSideLeft.Control = Owner
     AnchorSideTop.Control = Owner
@@ -136,6 +136,17 @@ object frmBandMapFilter: TfrmBandMapFilter
       Caption = 'Show only active band'
       TabOrder = 6
     end
+    object chkRevOrder: TCheckBox
+      AnchorSideLeft.Control = edtTime
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = rbShowAll
+      Left = 505
+      Height = 23
+      Top = 6
+      Width = 117
+      Caption = 'Reverse order'
+      TabOrder = 7
+    end
   end
   object GroupBox2: TGroupBox
     AnchorSideLeft.Control = GroupBox1
diff --git a/src/fBandMapFilter.pas b/src/fBandMapFilter.pas
index 61dc4f8..4657ee8 100644
--- a/src/fBandMapFilter.pas
+++ b/src/fBandMapFilter.pas
@@ -15,6 +15,7 @@ type
   TfrmBandMapFilter = class(TForm)
     btnOK: TButton;
     btnCancel: TButton;
+    chkRevOrder: TCheckBox;
     chkOnlyeQSL: TCheckBox;
     chkOnlyLoTW: TCheckBox;
     chkShowActiveBandFil: TCheckBox;
@@ -67,6 +68,7 @@ begin
   seCallWidth.Value := cqrini.ReadInteger('BandMapFilter','CallWidth',12);
 
   chkShowActiveBandFil.Checked := cqrini.ReadBool('BandMap', 'OnlyActiveBand', False);
+  chkRevOrder.Checked:=cqrini.ReadBool('BandMap', 'ReverseOrder', False);
 end;
 
 procedure TfrmBandMapFilter.FormClose(Sender: TObject;
@@ -114,6 +116,7 @@ begin
   cqrini.WriteBool('BandMapFilter','OnlyLoTW',chkOnlyLoTW.Checked);
 
   cqrini.WriteBool('BandMap', 'OnlyActiveBand', chkShowActiveBandFil.Checked);
+  cqrini.WriteBool('BandMap', 'ReverseOrder', chkRevOrder.Checked);
 
   cqrini.WriteInteger('BandMapFilter','FreqWidth',seFreqWidth.Value);
   cqrini.WriteInteger('BandMapFilter','CallWidth',seCallWidth.Value);
diff --git a/src/fBigSquareStat.pas b/src/fBigSquareStat.pas
index 2680514..b96b09f 100644
--- a/src/fBigSquareStat.pas
+++ b/src/fBigSquareStat.pas
@@ -159,13 +159,10 @@ begin
         db := TBufDataset.Create(nil); //I was not able to clear all records from TBufDataset without this workaround
         try
           db.FieldDefs.Clear;
-          with db.FieldDefs do
-          begin
-            Add('loc', ftString, 4);
-            Add('cfm',ftBoolean)
-          end;
-          db.CreateDataset;
+          db.FieldDefs.Add('loc', ftString, 4);
           db.IndexDefs.Add('loc','loc',[ixPrimary]);
+          db.FieldDefs.Add('cfm',ftBoolean);
+          db.CreateDataset;
 
           db.Open;
           wkd := 0;
diff --git a/src/fCWType.pas b/src/fCWType.pas
index 044fc93..27fa705 100644
--- a/src/fCWType.pas
+++ b/src/fCWType.pas
@@ -414,7 +414,7 @@ end;
 procedure TfrmCWType.edtSpeedChange(Sender: TObject);
 begin
   frmNewQSO.CWint.SetSpeed(edtSpeed.Value);
-  frmNewQSO.sbNewQSO.Panels[2].Text := IntToStr(edtSpeed.Value)+'WPM';
+  frmNewQSO.sbNewQSO.Panels[4].Text := IntToStr(edtSpeed.Value)+'WPM';
 end;
 procedure TfrmCWType.fraCWKeys1Resize(Sender: TObject);
  var
@@ -561,7 +561,7 @@ Begin
     begin
       speed := frmNewQSO.CWint.GetSpeed+change;
       frmNewQSO.CWint.SetSpeed(speed);
-      frmNewQSO.sbNewQSO.Panels[2].Text := IntToStr(speed)+'WPM';
+      frmNewQSO.sbNewQSO.Panels[4].Text := IntToStr(speed)+'WPM';
       edtSpeed.Value := speed;
     end;
 end;
diff --git a/src/fCabrilloExport.lfm b/src/fCabrilloExport.lfm
index f491352..36233f6 100644
--- a/src/fCabrilloExport.lfm
+++ b/src/fCabrilloExport.lfm
@@ -11,7 +11,7 @@ object frmCabrilloExport: TfrmCabrilloExport
   OnClose = FormClose
   OnCreate = FormCreate
   OnShow = FormShow
-  LCLVersion = '2.0.8.0'
+  LCLVersion = '2.0.12.0'
   object lblCabfileName: TLabel
     AnchorSideLeft.Control = Owner
     AnchorSideTop.Control = Owner
@@ -133,6 +133,7 @@ object frmCabrilloExport: TfrmCabrilloExport
     BorderSpacing.Bottom = 12
     Caption = 'Error message'
     ParentColor = False
+    OnClick = lblCabErrorClick
     Visible = False
   end
   object lblCabPower: TLabel
@@ -183,7 +184,7 @@ object frmCabrilloExport: TfrmCabrilloExport
     Height = 15
     Top = 529
     Width = 76
-    BorderSpacing.Top = 6
+    BorderSpacing.Top = 15
     Caption = 'Statistics:'
     Font.Style = [fsBold]
     ParentColor = False
@@ -808,6 +809,20 @@ object frmCabrilloExport: TfrmCabrilloExport
     OnClick = btnCabFrmFltClick
     TabOrder = 16
   end
+  object btnResultFile: TButton
+    AnchorSideRight.Control = btnCabClose
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = mCabStatistics
+    Left = 364
+    Height = 25
+    Top = 528
+    Width = 156
+    Anchors = [akRight, akBottom]
+    BorderSpacing.Bottom = 2
+    Caption = 'Open exported file'
+    OnClick = btnResultFileClick
+    TabOrder = 17
+  end
   object dlgCabSave: TSaveDialog
     Title = 'Save with file name'
     DefaultExt = '.cbr'
diff --git a/src/fCabrilloExport.pas b/src/fCabrilloExport.pas
index 8d935dc..61152cf 100644
--- a/src/fCabrilloExport.pas
+++ b/src/fCabrilloExport.pas
@@ -31,6 +31,7 @@ type
     btnCabBrowse: TButton;
     btCabSave: TButton;
     btCabLoad: TButton;
+    btnResultFile: TButton;
     chkUpCase: TCheckBox;
     chkCabInfoSrst: TCheckBox;
     chkCabInfoRrst: TCheckBox;
@@ -81,6 +82,7 @@ type
     procedure btnCabBrowseClick(Sender: TObject);
     procedure btnCabFrmFltClick(Sender: TObject);
     procedure btnCabHelpClick(Sender: TObject);
+    procedure btnResultFileClick(Sender: TObject);
     procedure cmbCabContestNameChange(Sender: TObject);
     procedure cmbCabContestNameExit(Sender: TObject);
     procedure edtCabCallWdtExit(Sender: TObject);
@@ -92,6 +94,7 @@ type
     procedure FormClose(Sender : TObject; var CloseAction : TCloseAction);
     procedure FormCreate(Sender: TObject);
     procedure FormShow(Sender : TObject);
+    procedure lblCabErrorClick(Sender: TObject);
   private
     procedure SaveSettings;
     function NonZero(s:String):String;
@@ -100,6 +103,7 @@ type
     function CabrilloPower(power: integer): String;
     procedure saveCabLay(filename:string);
     procedure loadCabLay(filename:string);
+    procedure ViewFile(f:string);
   public
     { public declarations }
   end;
@@ -149,6 +153,30 @@ begin
 
   lblCabStats.Visible := False;
   mCabStatistics.Visible:=False;
+  btnResultFile.Visible:=False;
+end;
+
+procedure TfrmCabrilloExport.ViewFile(f:string);
+var
+  prg: string;
+begin
+  try
+    prg := cqrini.ReadString('ExtView', 'txt', '');
+    if prg<>'' then
+      dmUtils.RunOnBackground(prg + ' ' + f)
+     else ShowMessage('No external text viewer defined!'+#10+'See: prefrences/External viewers');
+  finally
+   //done
+  end;
+
+end;
+
+procedure TfrmCabrilloExport.lblCabErrorClick(Sender: TObject);
+begin
+  if  lblCabError.Font.Color = clRed then
+    Begin
+      ViewFile('/tmp/CabrilloReject.log');
+    end;
 end;
 
 procedure TfrmCabrilloExport.SaveSettings;
@@ -180,6 +208,8 @@ begin
 end;
 
 function TfrmCabrilloExport.CabrilloMode(mode: string): String;
+//2022-05-05 OH1KH It seems that Cabrilllo mode can be CqrMode (mainly CW,SSB,AM,FM,RTTY)(I.E. no mode+submode pairs needed)
+//otherwise use dmUtils.ModeFromCqr to get mode and submode at this function
 begin
   Result := '';
   case mode of
@@ -214,6 +244,9 @@ begin
   '1.25CM':     Result := '24G';
      '6MM':     Result := '47G';
      '4MM':     Result := '75G';
+     '2.5MM':   Result := '122G';
+     '2MM':     Result := '134G';
+     '1MM':     Result := '241G';
     else
      Result := '';
   end; //case
@@ -257,6 +290,7 @@ end;
 
 procedure TfrmCabrilloExport.btnCabBrowseClick(Sender : TObject);
 begin
+  dlgCabSave.InitialDir:=dmData.UsrHomeDir;
   if dlgCabSave.Execute then
     edtCabFileName.Text := dlgCabSave.FileName
 end;
@@ -292,6 +326,11 @@ begin
   ShowHelp;
 end;
 
+procedure TfrmCabrilloExport.btnResultFileClick(Sender: TObject);
+Begin
+  ViewFile(edtCabFileName.Text);
+end;
+
 procedure TfrmCabrilloExport.cmbCabContestNameChange(Sender: TObject);
   var i:    integer;
     s:    string;
@@ -382,6 +421,7 @@ type
  end;
 var
   f,r        : TextFile;
+  RejectQso  : boolean;
   tmp        : String;
   mycall,call,
   myloc, loc,
@@ -398,7 +438,7 @@ var
   cont, WAZ, posun, ITU, lat, long, pfx, country: string;
   category_band: String;
   category_mode: String;
-  address: TStringArray;
+  address: String;
   Operators : TStringList;
   OpString : String;
 
@@ -417,6 +457,8 @@ var
 
 
 begin
+  lblCabError.Visible := False;
+  btnResultFile.Visible:=False;
   SaveSettings;
   date := dmUtils.GetDateTime(0);
   mycall := cqrini.ReadString('Station','Call','');
@@ -426,8 +468,11 @@ begin
   if length(myloc) = 4 then myloc := myloc +'ll';
   myname := cqrini.ReadString('Station','Name','');
   mailingaddress := cqrini.ReadString('Station','MailingAddress','');
-  zipcity := cqrini.ReadString('Station','ZipCity','');
-  address := zipcity.Split(' ');
+
+  address :=  cqrini.ReadString('Station','ZipCity','');
+  zipcity := trim(ExtractDelimited(1,address,[' ']));
+  address := trim(copy(address,length(zipcity)+1,length(address)));
+
   email := cqrini.ReadString('Station','Email','');
   club := cqrini.ReadString('Station','Club','');
   Operators := TStringList.Create;
@@ -452,7 +497,10 @@ begin
                               +mb_IconQuestion)=mrYes then
       DeleteFileUTF8(edtCabFileName.Text)
     else
-      exit
+      exit;
+    Application.ProcessMessages;   //closes hanging message box with QT5
+    sleep(10);                     //sleep and
+    Application.ProcessMessages;   //second time is needed for GTK2 to work same way
   end;
   if (trim(edtCabFileName.Text)='') then
   begin
@@ -478,94 +526,95 @@ begin
     begin
       tmp:='';
       // Check for missing mandatory fields
-      if (
-          (dmData.qCQRLOG.FieldByName('qsodate').AsString  = '')
-       or (dmData.qCQRLOG.FieldByName('time_on').AsString  = '')
-       or (dmData.qCQRLOG.FieldByName('callsign').AsString = '')
-       or (CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString) = '')  //warc or missing band
-       or (dmData.qCQRLOG.FieldByName('mode').AsString  = '')  //missing mode
-         ) then
-      begin
-        writeln(r,dmData.qCQRLOG.FieldByName('qsodate').AsString,' ',
-                dmData.qCQRLOG.FieldByName('time_on').AsString,' ',
-                dmData.qCQRLOG.FieldByName('callsign').AsString,' ',
-                dmData.qCQRLOG.FieldByName('band').AsString,' ',
-                dmData.qCQRLOG.FieldByName('mode').AsString ,' ',
-                CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString));
-        pbCabExport.StepIt;
-        dmData.qCQRLOG.Prior;
-        Continue;
-      end;
-
-      // Check for single or ALL band
-      if ( category_band='') then
-          category_band:= dmData.qCQRLOG.FieldByName('band').AsString //initial band
-        else
-       begin
-          if (dmData.qCQRLOG.FieldByName('band').AsString <> category_band) then  //if other bands found then ALL
-            category_band := 'ALL';
-       end;
-        // Check for single or MIXED mode
-      if ( category_mode='') then
-          category_mode:= dmData.qCQRLOG.FieldByName('mode').AsString //initial mode
-        else
-       begin
-          if (dmData.qCQRLOG.FieldByName('mode').AsString <> category_mode) then  //if other modes found then MIXED
-            category_mode := 'MIXED';
-       end;
-
-      loc  := copy(dmData.qCQRLOG.FieldByName('loc').AsString,1,4);
-      call := Format('%-'+edtCabCallWdt.Text+'.'+edtCabCallWdt.Text+'s', [dmData.qCQRLOG.FieldByName('callsign').AsString]);
-      adif := dmDXCC.id_country(call,date,pfx,cont,country,itu,waz,posun,lat,long);
-      TotalCountryList.Add(pfx);
-
-      if ((CountryToCount<>0) and (adif = CountryToCount)) then inc(UsrCountryCount);
-      case cont of
-             'NA':       Begin
-                           inc(Continents[0].QsoCount);
-                           if (pos(pfx,Continents[0].WkdPfxs)=0 )then
-                              Continents[0].WkdPfxs:= Continents[0].WkdPfxs+pfx+' ';
-                         end;
-             'SA':       Begin
-                           inc(Continents[1].QsoCount);
-                           if (pos(pfx,Continents[1].WkdPfxs)=0 )then
-                              Continents[1].WkdPfxs:= Continents[1].WkdPfxs+pfx+' ';
-                         end;
-             'OC':       Begin
-                           inc(Continents[2].QsoCount);
-                           if (pos(pfx,Continents[2].WkdPfxs)=0 )then
-                              Continents[2].WkdPfxs:= Continents[2].WkdPfxs+pfx+' ';
-                         end;
-             'AS':       Begin
-                           inc(Continents[3].QsoCount);
-                           if (pos(pfx,Continents[3].WkdPfxs)=0 )then
-                              Continents[3].WkdPfxs:= Continents[3].WkdPfxs+pfx+' ';
-                         end;
-             'EU':       Begin
-                           inc(Continents[4].QsoCount);
-                           if (pos(pfx,Continents[4].WkdPfxs)=0 )then
-                              Continents[4].WkdPfxs:= Continents[4].WkdPfxs+pfx+' ';
-                         end;
-             'AF':       Begin
-                           inc(Continents[5].QsoCount);
-                           if (pos(pfx,Continents[5].WkdPfxs)=0 )then
-                              Continents[5].WkdPfxs:= Continents[5].WkdPfxs+pfx+' ';
-                         end;
-       end; //case
-
-       if (length(loc)=4) then
-                         Begin
-                           if (pos(loc,Continents[6].WkdPfxs)=0 )then
-                            begin
-                              Continents[6].WkdPfxs:= Continents[6].WkdPfxs+loc+' ';
-                              inc(Continents[6].QsoCount);  //here not total, but different count
-                            end;
-                         end;
-      if (dmData.qCQRLOG.FieldByName('operator').AsString <> '') and (Operators.IndexOf(dmData.qCQRLOG.FieldByName('operator').AsString) < 0) then
-         Operators.Add(dmData.qCQRLOG.FieldByName('operator').AsString);
-
-      tmp:= 'QSO: '+
-            Format('%5s', [CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString)])+' '+
+      if (dmData.qCQRLOG.FieldByName('qsodate').AsString  = '') then
+                                                           tmp:=tmp+'Missing qsodate, ';
+      if (dmData.qCQRLOG.FieldByName('time_on').AsString  = '') then
+                                                           tmp:=tmp+'Missing time_on, ';
+      if (dmData.qCQRLOG.FieldByName('callsign').AsString = '') then
+                                                           tmp:=tmp+'Missing callsign, ';
+      if (CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString) = '') then
+                                                           tmp:=tmp+'Missing or WARC band, ';
+      if (dmData.qCQRLOG.FieldByName('mode').AsString  = '') then
+                                                           tmp:=tmp+'Missing mode, ';
+
+      RejectQso := (tmp <> '');
+
+      if not RejectQso then
+       Begin
+              // Check for single or ALL band
+              if ( category_band='') then
+                  category_band:= dmData.qCQRLOG.FieldByName('band').AsString //initial band
+                else
+               begin
+                  if (dmData.qCQRLOG.FieldByName('band').AsString <> category_band) then  //if other bands found then ALL
+                    category_band := 'ALL';
+               end;
+                // Check for single or MIXED mode
+              if ( category_mode='') then
+                  category_mode:= dmData.qCQRLOG.FieldByName('mode').AsString //initial mode
+                else
+               begin
+                  if (dmData.qCQRLOG.FieldByName('mode').AsString <> category_mode) then  //if other modes found then MIXED
+                    category_mode := 'MIXED';
+               end;
+
+              loc  := copy(dmData.qCQRLOG.FieldByName('loc').AsString,1,4);
+              call := Format('%-'+edtCabCallWdt.Text+'.'+edtCabCallWdt.Text+'s', [dmData.qCQRLOG.FieldByName('callsign').AsString]);
+              adif := dmDXCC.id_country(call,date,pfx,cont,country,itu,waz,posun,lat,long);
+              TotalCountryList.Add(pfx);
+
+              if ((CountryToCount<>0) and (adif = CountryToCount)) then inc(UsrCountryCount);
+              case cont of
+                     'NA':       Begin
+                                   inc(Continents[0].QsoCount);
+                                   if (pos(pfx,Continents[0].WkdPfxs)=0 )then
+                                      Continents[0].WkdPfxs:= Continents[0].WkdPfxs+pfx+' ';
+                                 end;
+                     'SA':       Begin
+                                   inc(Continents[1].QsoCount);
+                                   if (pos(pfx,Continents[1].WkdPfxs)=0 )then
+                                      Continents[1].WkdPfxs:= Continents[1].WkdPfxs+pfx+' ';
+                                 end;
+                     'OC':       Begin
+                                   inc(Continents[2].QsoCount);
+                                   if (pos(pfx,Continents[2].WkdPfxs)=0 )then
+                                      Continents[2].WkdPfxs:= Continents[2].WkdPfxs+pfx+' ';
+                                 end;
+                     'AS':       Begin
+                                   inc(Continents[3].QsoCount);
+                                   if (pos(pfx,Continents[3].WkdPfxs)=0 )then
+                                      Continents[3].WkdPfxs:= Continents[3].WkdPfxs+pfx+' ';
+                                 end;
+                     'EU':       Begin
+                                   inc(Continents[4].QsoCount);
+                                   if (pos(pfx,Continents[4].WkdPfxs)=0 )then
+                                      Continents[4].WkdPfxs:= Continents[4].WkdPfxs+pfx+' ';
+                                 end;
+                     'AF':       Begin
+                                   inc(Continents[5].QsoCount);
+                                   if (pos(pfx,Continents[5].WkdPfxs)=0 )then
+                                      Continents[5].WkdPfxs:= Continents[5].WkdPfxs+pfx+' ';
+                                 end;
+               end; //case
+
+               if (length(loc)=4) then
+                                 Begin
+                                   if (pos(loc,Continents[6].WkdPfxs)=0 )then
+                                    begin
+                                      Continents[6].WkdPfxs:= Continents[6].WkdPfxs+loc+' ';
+                                      inc(Continents[6].QsoCount);  //here not total, but different count
+                                    end;
+                                 end;
+              if (dmData.qCQRLOG.FieldByName('operator').AsString <> '') and (Operators.IndexOf(dmData.qCQRLOG.FieldByName('operator').AsString) < 0) then
+                 Operators.Add(dmData.qCQRLOG.FieldByName('operator').AsString);
+       end;   //skip with rejected ends
+
+         if ( dmData.qCQRLOG.FieldByName('freq').AsFloat < 50 ) then
+                tmp:=tmp +  'QSO: '+Format('%5s',[FloatToStrF(dmData.qCQRLOG.FieldByName('freq').AsFloat*1000,ffFixed,0,0)])+' '
+               else
+                tmp:=tmp +  'QSO: '+Format('%5s',[CabrilloBandToFreq(dmData.qCQRLOG.FieldByName('band').AsString)])+' ';
+
+         tmp:=tmp +
             CabrilloMode(dmData.qCQRLOG.FieldByName('mode').AsString)+' '+
             dmData.qCQRLOG.FieldByName('qsodate').AsString+' '+
             StringReplace(dmData.qCQRLOG.FieldByName('time_on').AsString,':','',[rfReplaceAll, rfIgnoreCase])+' '+
@@ -610,10 +659,18 @@ begin
              if (cmbCabTailTxCount.Text<>'') then tmp:=tmp+' '+Format('%1s',[ cmbCabTailTxCount.Text]);
 
       if chkUpCase.Checked then tmp:=UpperCase(tmp);
-      s.Add(tmp);
 
-      inc(i);
+      if not RejectQso then
+         Begin
+             s.Add(tmp);      //add to cabrillo export
+             inc(i);
+         end
+       else
+             writeln(r,tmp); //add to rejected file
+
       pbCabExport.StepIt;
+      pbCabExport.Update;  //GTK2 needs this to show progress, QT5 works even without
+
       dmData.qCQRLOG.Prior
     end;
   except
@@ -625,6 +682,7 @@ begin
   end
   finally
     lblCabDone.Visible := True;
+    btnResultFile.Visible:=True;
     CloseFile(r);
   end;
 
@@ -675,10 +733,10 @@ begin
        Writeln(f,'OPERATORS: '+OpString);
     Writeln(f,'NAME: '+myname);
     Writeln(f,'ADDRESS: '+mailingaddress);
-    Writeln(f,'ADDRESS-CITY: '+address[1]);
+    Writeln(f,'ADDRESS-CITY: '+address);
     Writeln(f,'ADDRESS-COUNTRY: '+mycountry);
     Writeln(f,'ADDRESS-STATE-PROVINCE: ');
-    Writeln(f,'ADDRESS-POSTALCODE: '+address[0]);
+    Writeln(f,'ADDRESS-POSTALCODE: '+zipcity);
     Writeln(f,'EMAIL: '+email);
     Writeln(f,'SOAPBOX:'+edtCabSoapBox.Text);
 
@@ -694,14 +752,15 @@ begin
                                mb_OK+mb_IconError)
       end
   end;
+  lblCabError.Visible := True;
   if ((pbCabExport.Max - i) > 0) then
   begin
-    lblCabError.Caption := IntToStr(pbCabExport.Max - i)+' of '+IntToStr(pbCabExport.Max)+' entries were ignored! Please check /tmp/CabrilloReject.log entries.';
+    lblCabError.Caption := IntToStr(pbCabExport.Max - i)+' of '+IntToStr(pbCabExport.Max)+' qsos were ignored! Please check: /tmp/CabrilloReject.log';
     lblCabError.Font.Color := clRed;
-    lblCabError.Visible := True;
-  end;
-
+  end
+  else
     lblCabError.Caption := IntToStr(s.Count)+' entries were exported.';
+
     lblCabStats.Visible := True;
     lblCabStats.Font.Style:=[fsBold]; //Bold disappears when visible false->true (why?)
     mCabStatistics.Clear;
diff --git a/src/fCallAttachment.pas b/src/fCallAttachment.pas
index f6ea7fb..ada28e2 100644
--- a/src/fCallAttachment.pas
+++ b/src/fCallAttachment.pas
@@ -58,7 +58,7 @@ begin
   CurrentDir := GetCurrentDir;
   try
     SetCurrentDir(flAttach.Directory);
-    dmUtils.RunOnBackgroud('/usr/bin/xdg-open' + ' "' + flAttach.FileName + '"');
+    dmUtils.RunOnBackground('/usr/bin/xdg-open' + ' "' + flAttach.FileName + '"');
   finally
     SetCurrentDir(CurrentDir)
   end;
diff --git a/src/fContest.lfm b/src/fContest.lfm
index 4219057..664145c 100644
--- a/src/fContest.lfm
+++ b/src/fContest.lfm
@@ -1,29 +1,30 @@
 object frmContest: TfrmContest
   Left = 370
-  Height = 154
+  Height = 178
   Top = 281
-  Width = 700
+  Width = 706
   HelpType = htKeyword
   HelpKeyword = 'help/contest.html'
   Caption = 'Contest'
-  ClientHeight = 154
-  ClientWidth = 700
+  ClientHeight = 178
+  ClientWidth = 706
   OnClose = FormClose
   OnCreate = FormCreate
   OnHide = FormHide
   OnKeyDown = FormKeyDown
   OnShow = FormShow
-  LCLVersion = '2.0.8.0'
+  LCLVersion = '2.0.12.0'
   object edtCall: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideTop.Control = lblCall
     AnchorSideTop.Side = asrBottom
     Left = 17
-    Height = 33
-    Top = 55
+    Height = 34
+    Top = 59
     Width = 140
     AutoSelect = False
     CharCase = ecUppercase
+    MaxLength = 20
     OnChange = edtCallChange
     OnExit = edtCallExit
     OnKeyDown = edtCallKeyDown
@@ -35,20 +36,21 @@ object frmContest: TfrmContest
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtCall
     Left = 157
-    Height = 33
-    Top = 55
+    Height = 34
+    Top = 59
     Width = 50
+    MaxLength = 20
     OnKeyDown = edtCallKeyDown
-    TabOrder = 6
+    TabOrder = 7
   end
   object edtSTX: TEdit
     AnchorSideLeft.Control = edtRSTs
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtRSTs
     Left = 207
-    Height = 33
+    Height = 34
     Hint = 'contest serial number sent, max 6 characters'
-    Top = 55
+    Top = 59
     Width = 50
     MaxLength = 6
     OnExit = edtSTXExit
@@ -56,16 +58,16 @@ object frmContest: TfrmContest
     OnKeyPress = edtSTXKeyPress
     ParentShowHint = False
     ShowHint = True
-    TabOrder = 7
+    TabOrder = 8
   end
   object edtSTXStr: TEdit
     AnchorSideLeft.Control = edtSTX
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtSTX
     Left = 257
-    Height = 33
+    Height = 34
     Hint = 'contest exchange message sent, max 50 characters'
-    Top = 55
+    Top = 59
     Width = 100
     MaxLength = 50
     OnEnter = edtSTXStrEnter
@@ -73,17 +75,18 @@ object frmContest: TfrmContest
     OnKeyDown = edtCallKeyDown
     ParentShowHint = False
     ShowHint = True
-    TabOrder = 8
+    TabOrder = 13
   end
   object edtRSTr: TEdit
     AnchorSideLeft.Control = edtSTXStr
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtSTXStr
     Left = 373
-    Height = 33
-    Top = 55
+    Height = 34
+    Top = 59
     Width = 50
     BorderSpacing.Left = 16
+    MaxLength = 20
     OnKeyDown = edtCallKeyDown
     TabOrder = 1
   end
@@ -92,9 +95,9 @@ object frmContest: TfrmContest
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtRSTr
     Left = 423
-    Height = 33
+    Height = 34
     Hint = 'contest serial number received, max 6 characters'
-    Top = 55
+    Top = 59
     Width = 50
     MaxLength = 6
     OnExit = edtSRXExit
@@ -105,14 +108,16 @@ object frmContest: TfrmContest
     TabOrder = 2
   end
   object btSave: TButton
-    AnchorSideLeft.Control = edtSRXStr
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = lblMSGr
-    Left = 589
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    Left = 609
     Height = 30
-    Top = 40
+    Top = 42
     Width = 80
-    BorderSpacing.Left = 16
+    Anchors = [akTop, akRight]
+    BorderSpacing.Right = 17
     Caption = 'Save QSO'
     OnClick = btSaveClick
     TabOrder = 4
@@ -122,9 +127,9 @@ object frmContest: TfrmContest
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtRSTr
     Left = 473
-    Height = 33
+    Height = 34
     Hint = 'contest exchange message sent, max 50 characters'
-    Top = 55
+    Top = 59
     Width = 100
     MaxLength = 50
     OnChange = edtSRXStrChange
@@ -138,8 +143,8 @@ object frmContest: TfrmContest
     AnchorSideTop.Control = chkTabAll
     AnchorSideTop.Side = asrBottom
     Left = 17
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 25
     BorderSpacing.Top = 1
     Caption = 'Call'
@@ -148,8 +153,8 @@ object frmContest: TfrmContest
   object lblRSTs: TLabel
     AnchorSideTop.Control = lblCall
     Left = 161
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 36
     Caption = 'RST s'
     ParentColor = False
@@ -157,8 +162,8 @@ object frmContest: TfrmContest
   object lblMSGs: TLabel
     AnchorSideTop.Control = lblNRs
     Left = 257
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 41
     Caption = 'MSG s'
     ParentColor = False
@@ -166,8 +171,8 @@ object frmContest: TfrmContest
   object lblRSTr: TLabel
     AnchorSideTop.Control = lblMSGs
     Left = 377
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 34
     Caption = 'RST r'
     ParentColor = False
@@ -175,8 +180,8 @@ object frmContest: TfrmContest
   object lblNRr: TLabel
     AnchorSideTop.Control = lblRSTr
     Left = 425
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 28
     Caption = 'NR r'
     ParentColor = False
@@ -184,8 +189,8 @@ object frmContest: TfrmContest
   object lblMSGr: TLabel
     AnchorSideTop.Control = lblNRr
     Left = 481
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 39
     Caption = 'MSG r'
     ParentColor = False
@@ -195,19 +200,19 @@ object frmContest: TfrmContest
     AnchorSideTop.Control = chkTrueRST
     Left = 207
     Height = 23
-    Top = 88
+    Top = 93
     Width = 45
     Caption = 'Inc'
     OnChange = chkNRIncChange
     OnClick = chkNRIncClick
-    TabOrder = 13
+    TabOrder = 9
     TabStop = False
   end
   object lblNRs: TLabel
     AnchorSideTop.Control = lblRSTs
     Left = 209
-    Height = 15
-    Top = 40
+    Height = 17
+    Top = 42
     Width = 30
     Caption = 'NR s'
     ParentColor = False
@@ -217,9 +222,10 @@ object frmContest: TfrmContest
     AnchorSideTop.Control = chkNoNr
     Left = 473
     Height = 23
-    Top = 88
-    Width = 101
-    Caption = 'MSG is LOC'
+    Top = 93
+    Width = 102
+    Caption = 'MSG is Grid'
+    PopupMenu = popSetMsg
     TabOrder = 14
     TabStop = False
   end
@@ -229,10 +235,10 @@ object frmContest: TfrmContest
     AnchorSideTop.Side = asrBottom
     Left = 17
     Height = 23
-    Top = 88
+    Top = 93
     Width = 113
     Caption = 'SPACE is TAB'
-    TabOrder = 10
+    TabOrder = 11
     TabStop = False
   end
   object chkNoNr: TCheckBox
@@ -240,11 +246,11 @@ object frmContest: TfrmContest
     AnchorSideTop.Control = chkNRInc
     Left = 423
     Height = 23
-    Top = 88
+    Top = 93
     Width = 44
     Caption = 'No'
     OnChange = chkNoNrChange
-    TabOrder = 12
+    TabOrder = 15
     TabStop = False
   end
   object chkTrueRST: TCheckBox
@@ -252,31 +258,31 @@ object frmContest: TfrmContest
     AnchorSideTop.Control = chkSpace
     Left = 157
     Height = 23
-    Top = 88
+    Top = 93
     Width = 46
     Caption = 'Tru'
     OnChange = chkTrueRSTChange
-    TabOrder = 11
+    TabOrder = 12
     TabStop = False
   end
-  object btClearAll: TButton
+  object btClearQso: TButton
     AnchorSideLeft.Control = btSave
     AnchorSideTop.Control = btSave
     AnchorSideTop.Side = asrBottom
-    Left = 589
+    Left = 609
     Height = 30
-    Top = 72
+    Top = 74
     Width = 80
     BorderSpacing.Top = 2
-    Caption = 'Clear all'
-    OnClick = btClearAllClick
-    TabOrder = 5
+    Caption = 'Clear QSO'
+    OnClick = btClearQsoClick
+    TabOrder = 6
   end
   object btnHelp: TSpeedButton
     AnchorSideTop.Control = Owner
     AnchorSideRight.Control = Owner
     AnchorSideRight.Side = asrBottom
-    Left = 672
+    Left = 678
     Height = 25
     Hint = 'Help'
     Top = 3
@@ -324,7 +330,7 @@ object frmContest: TfrmContest
     AnchorSideLeft.Control = Owner
     AnchorSideTop.Control = cmbContestName
     Left = 17
-    Height = 15
+    Height = 17
     Top = 1
     Width = 91
     BorderSpacing.Left = 17
@@ -332,17 +338,19 @@ object frmContest: TfrmContest
     ParentColor = False
   end
   object cmbContestName: TComboBox
-    AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = Owner
-    Left = 114
-    Height = 33
+    AnchorSideRight.Control = edtSRXStr
+    AnchorSideRight.Side = asrBottom
+    Left = 141
+    Height = 34
     Hint = 'contestname, choose ADIF contest_id via combobox or type freestyle max 40 characters'
     Top = 1
     Width = 432
+    Anchors = [akTop, akRight]
     AutoComplete = True
     AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
-    BorderSpacing.Left = 6
+    BorderSpacing.Left = 30
     BorderSpacing.Top = 1
     ItemHeight = 0
     Items.Strings = (
@@ -574,7 +582,7 @@ object frmContest: TfrmContest
     MaxLength = 40
     ParentShowHint = False
     ShowHint = True
-    TabOrder = 9
+    TabOrder = 10
     TabStop = False
   end
   object chkQsp: TCheckBox
@@ -582,11 +590,11 @@ object frmContest: TfrmContest
     AnchorSideTop.Control = chkNRInc
     Left = 257
     Height = 23
-    Top = 88
+    Top = 93
     Width = 51
     Caption = 'Qsp'
     OnChange = chkQspChange
-    TabOrder = 15
+    TabOrder = 16
     TabStop = False
   end
   object chkTabAll: TCheckBox
@@ -595,11 +603,11 @@ object frmContest: TfrmContest
     AnchorSideTop.Side = asrBottom
     Left = 17
     Height = 23
-    Top = 16
-    Width = 73
-    Caption = 'TAB All'
+    Top = 18
+    Width = 106
+    Caption = 'TAB in order'
     OnChange = chkTabAllChange
-    TabOrder = 16
+    TabOrder = 17
     TabStop = False
   end
   object sbContest: TStatusBar
@@ -607,9 +615,9 @@ object frmContest: TfrmContest
     AnchorSideRight.Control = Owner
     AnchorSideBottom.Control = Owner
     Left = 0
-    Height = 18
-    Top = 136
-    Width = 700
+    Height = 19
+    Top = 159
+    Width = 706
     Panels = <    
       item
         Text = '0'
@@ -633,10 +641,145 @@ object frmContest: TfrmContest
       end>
     SimplePanel = False
   end
+  object lblSpeed: TLabel
+    AnchorSideLeft.Control = cmbContestName
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = cmbContestName
+    AnchorSideTop.Side = asrCenter
+    Left = 591
+    Height = 1
+    Top = 18
+    Width = 1
+    BorderSpacing.Left = 18
+    ParentColor = False
+  end
+  object rbDupeCheck: TRadioButton
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = chkSpace
+    AnchorSideTop.Side = asrBottom
+    Left = 17
+    Height = 23
+    Top = 124
+    Width = 102
+    BorderSpacing.Left = 17
+    BorderSpacing.Top = 8
+    Caption = 'Dupe check'
+    Checked = True
+    TabOrder = 21
+    TabStop = True
+  end
+  object rbNoMode4Dupe: TRadioButton
+    AnchorSideLeft.Control = btDupChkStart
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = rbDupeCheck
+    Left = 156
+    Height = 23
+    Top = 124
+    Width = 122
+    BorderSpacing.Left = 18
+    Caption = 'NoMode4Dupe'
+    TabOrder = 19
+  end
+  object rbIgnoreDupes: TRadioButton
+    AnchorSideLeft.Control = rbNoMode4Dupe
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = rbDupeCheck
+    Left = 296
+    Height = 23
+    Top = 124
+    Width = 110
+    BorderSpacing.Left = 18
+    Caption = 'Ignore dupes'
+    OnChange = rbIgnoreDupesChange
+    TabOrder = 20
+  end
+  object btClearAll: TButton
+    AnchorSideLeft.Control = btSave
+    AnchorSideTop.Control = rbDupeCheck
+    AnchorSideTop.Side = asrCenter
+    Left = 609
+    Height = 30
+    Top = 120
+    Width = 80
+    Caption = 'Clear All'
+    OnClick = btClearAllClick
+    TabOrder = 5
+    TabStop = False
+  end
+  object btDupChkStart: TButton
+    AnchorSideLeft.Control = rbDupeCheck
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = rbDupeCheck
+    AnchorSideTop.Side = asrCenter
+    Left = 122
+    Height = 33
+    Hint = 'When using common log, set date of dupe check begin (contest start date)'
+    Top = 119
+    Width = 16
+    AutoSize = True
+    BorderSpacing.Left = 3
+    Constraints.MaxHeight = 35
+    Constraints.MaxWidth = 180
+    OnClick = btDupChkStartClick
+    TabOrder = 22
+    TabStop = False
+  end
+  object Label1: TLabel
+    Left = 270
+    Height = 1
+    Top = 150
+    Width = 1
+    ParentColor = False
+  end
   object tmrESC2: TTimer
     Enabled = False
     OnTimer = tmrESC2Timer
-    left = 544
-    top = 8
+    Left = 536
+    Top = 120
+  end
+  object cdDupeDate: TCalendarDialog
+    Title = 'Set start date'
+    DialogPosition = poScreenCenter
+    Date = 44563
+    OKCaption = 'OK'
+    CancelCaption = 'Cancel'
+    Left = 488
+    Top = 120
+  end
+  object popSetMsg: TPopupMenu
+    Left = 440
+    Top = 120
+    object mnuName: TMenuItem
+      Caption = 'MSG is Name'
+      OnClick = mnuNameClick
+    end
+    object mnuGrid: TMenuItem
+      Caption = 'MSG is Grid'
+      OnClick = mnuGridClick
+    end
+    object mnyIOTA: TMenuItem
+      Caption = 'MSG is IOTA'
+      OnClick = mnyIOTAClick
+    end
+    object mnuState: TMenuItem
+      Caption = 'Msg is State'
+      OnClick = mnuStateClick
+    end
+    object mnuCounty: TMenuItem
+      Caption = 'MSG is County'
+      OnClick = mnuCountyClick
+    end
+    object mnuAward: TMenuItem
+      Caption = 'MSG is Award'
+      OnClick = mnuAwardClick
+    end
+    object mnuQSLvia: TMenuItem
+      Caption = 'MSG is QSl via'
+      OnClick = mnuQSLviaClick
+    end
+    object mnuComment: TMenuItem
+      Caption = 'MSG is Comment'
+      OnClick = mnuCommentClick
+    end
   end
 end
diff --git a/src/fContest.pas b/src/fContest.pas
index 3fa477e..9c4bd1f 100644
--- a/src/fContest.pas
+++ b/src/fContest.pas
@@ -6,15 +6,18 @@ interface
 
 uses
   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
-  StdCtrls, ExtCtrls, LCLType, Buttons, ComCtrls;
+  StdCtrls, ExtCtrls, LCLType, Buttons, ComCtrls, ExtDlgs, Menus, uMyIni;
 
 type
 
   { TfrmContest }
 
   TfrmContest = class(TForm)
+    btClearAll: TButton;
     btSave: TButton;
-    btClearAll : TButton;
+    btClearQso : TButton;
+    btDupChkStart: TButton;
+    cdDupeDate: TCalendarDialog;
     chkTabAll: TCheckBox;
     chkQsp: TCheckBox;
     chkTrueRST: TCheckBox;
@@ -30,6 +33,8 @@ type
     edtRSTr: TEdit;
     edtSRX: TEdit;
     edtSRXStr: TEdit;
+    Label1: TLabel;
+    lblSpeed: TLabel;
     lblContestName: TLabel;
     lblCall: TLabel;
     lblRSTs: TLabel;
@@ -39,10 +44,24 @@ type
     lblMSGr: TLabel;
     lblNRs: TLabel;
     btnHelp : TSpeedButton;
+    mnuGrid: TMenuItem;
+    mnyIOTA: TMenuItem;
+    mnuState: TMenuItem;
+    mnuCounty: TMenuItem;
+    mnuAward: TMenuItem;
+    mnuQSLvia: TMenuItem;
+    mnuComment: TMenuItem;
+    mnuName: TMenuItem;
+    popSetMsg: TPopupMenu;
+    rbDupeCheck: TRadioButton;
+    rbNoMode4Dupe: TRadioButton;
+    rbIgnoreDupes: TRadioButton;
     sbContest: TStatusBar;
     tmrESC2: TTimer;
+    procedure btClearAllClick(Sender: TObject);
+    procedure btDupChkStartClick(Sender: TObject);
     procedure btSaveClick(Sender: TObject);
-    procedure btClearAllClick(Sender : TObject);
+    procedure btClearQsoClick(Sender : TObject);
     procedure chkNoNrChange(Sender: TObject);
     procedure chkNRIncChange(Sender: TObject);
     procedure chkNRIncClick(Sender : TObject);
@@ -65,6 +84,15 @@ type
     procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
     procedure FormShow(Sender: TObject);
     procedure btnHelpClick(Sender : TObject);
+    procedure mnuGridClick(Sender: TObject);
+    procedure mnyIOTAClick(Sender: TObject);
+    procedure mnuStateClick(Sender: TObject);
+    procedure mnuCountyClick(Sender: TObject);
+    procedure mnuAwardClick(Sender: TObject);
+    procedure mnuQSLviaClick(Sender: TObject);
+    procedure mnuCommentClick(Sender: TObject);
+    procedure mnuNameClick(Sender: TObject);
+    procedure rbIgnoreDupesChange(Sender: TObject);
     procedure tmrESC2Timer(Sender: TObject);
   private
     { private declarations }
@@ -74,9 +102,12 @@ type
     procedure TabStopAllOn;
     procedure QspMsg;
     procedure ClearStatusBar;
-    procedure ShowStatusBarInfo();
+    procedure ShowStatusBarInfo;
+    procedure MsgIsPopChk(nr:integer);
+
   public
     { public declarations }
+    procedure SaveSettings;
   end;
 
 var
@@ -85,6 +116,8 @@ var
   RSTstxAdd: string = ''; //contest mode additional string store
   //RSTsrx         :string = '';
   EscFirstTime: boolean = False;
+  DupeFromDate :string = '1900-01-01';
+  MsgIs        :integer = 0;
 
 implementation
 
@@ -118,6 +151,8 @@ begin
          frmNewQSO.edtQth.Text  :='';        //and qrz, if one wants)
          frmNewQSO.edtGrid.Text :='';        //otherwise we do not get cursor at the end of call
          edtCall.SetFocus;
+         edtCall.SelStart:=length(edtCall.Text);
+         edtCall.SelLength:=0;
       //else
       if Assigned(frmNewQSO.CWint) then
         frmNewQSO.CWint.StopSending;
@@ -142,8 +177,8 @@ begin
     else
     if Assigned(frmNewQSO.CWint) then
       frmNewQSO.CWint.SendText(dmUtils.GetCWMessage(
-        dmUtils.GetDescKeyFromCode(Key),frmNewQSO.edtCall.Text,
-      frmNewQSO.edtHisRST.Text, frmNewQSO.edtContestSerialSent.Text,frmNewQSO.edtContestExchangeMessageSent.Text,
+        dmUtils.GetDescKeyFromCode(Key),edtCall.Text,
+      edtRSTs.Text, edtSTX.Text,edtSTXStr.Text,
       frmNewQSO.edtName.Text,frmNewQSO.lblGreeting.Caption,''));
     key := 0;
   end;
@@ -154,7 +189,8 @@ begin
     begin
       speed := frmNewQSO.CWint.GetSpeed + 2;
       frmNewQSO.CWint.SetSpeed(speed);
-      frmNewQSO.sbNewQSO.Panels[2].Text := IntToStr(speed) + 'WPM';
+      frmNewQSO.sbNewQSO.Panels[4].Text := IntToStr(speed) + 'WPM';
+      lblSpeed.Caption:= frmNewQSO.sbNewQSO.Panels[4].Text;
     end;
     key := 0;
   end;
@@ -165,7 +201,8 @@ begin
     begin
       speed := frmNewQSO.CWint.GetSpeed - 2;
       frmNewQSO.CWint.SetSpeed(speed);
-      frmNewQSO.sbNewQSO.Panels[2].Text := IntToStr(speed) + 'WPM';
+      frmNewQSO.sbNewQSO.Panels[4].Text := IntToStr(speed) + 'WPM';
+      lblSpeed.Caption:= frmNewQSO.sbNewQSO.Panels[4].Text;
     end;
     key := 0;
   end;
@@ -185,6 +222,8 @@ end;
 
 
 procedure TfrmContest.edtCallExit(Sender: TObject);
+var
+  dupe : Integer;
 begin
   // if frmNewQSO is in viewmode or editmode it overwrites old data or will not save
   // because saving is disabled in view mode. this if statement starts a fresh newqso form
@@ -199,27 +238,38 @@ begin
 
   frmNewQSO.edtCall.Text := edtCall.Text;
 
-  //dupe check
-  if frmWorkedGrids.WkdCall(edtCall.Text, dmUtils.GetBandFromFreq(frmNewQSO.cmbFreq.Text) ,frmNewQSO.cmbMode.Text) = 1 then
-       Begin        //dupe
+  if not (rbIgnoreDupes.Checked) then
+  begin
+    //dupe check
+    dupe := frmWorkedGrids.WkdCall(edtCall.Text, dmUtils.GetBandFromFreq(frmNewQSO.cmbFreq.Text) ,frmNewQSO.cmbMode.Text);
+    // 1= wkd this band and mode
+    // 2= wkd this band but NOT this mode
+    if  ( (rbNoMode4Dupe.Checked) and (dupe = 1) )
+     or ( (not rbNoMode4Dupe.Checked) and ((dupe = 1) or (dupe=2)) )then
+       Begin
          edtCall.Font.Color:=clRed;
          edtCall.Font.Style:= [fsBold];
+         frmNewQSO.edtRemQSO.Caption:='Dupe';
        end
     else
-      Begin         //clear dupe if user press 1xESC and change call not to be dupe
+        Begin
          edtCall.Font.Color:=clDefault;
          edtCall.Font.Style:= [];
-      end;
-
+         frmNewQSO.edtRemQSO.Caption:='';
+        end;
+   end;
   //report in NEwQSO changes to 59 to late (after passing cmbMode)
   //NOTE! if mode is not in list program dies! In that case skip next
   if frmNewQSO.cmbMode.ItemIndex >=0 then
    begin
      case frmNewQSO.cmbMode.Items[frmNewQSO.cmbMode.ItemIndex] of
-          'SSB','AM','FM' : Begin
-                                 edtRSTs.Text := copy(edtRSTs.Text,0,2);
-                                 edtRSTr.Text := copy(edtRSTr.Text,0,2);
-                            end;
+       'SSB',
+       'AM',
+       'FM' :
+         begin
+           edtRSTs.Text := copy(edtRSTs.Text,0,2);
+           edtRSTr.Text := copy(edtRSTr.Text,0,2);
+         end;
      end;
    end;
 
@@ -237,7 +287,24 @@ end;
 procedure TfrmContest.btSaveClick(Sender: TObject);
 begin
   if chkLoc.Checked then
-    frmNewQSO.edtGrid.Text := edtSRXStr.Text;
+   begin
+     case MsgIs of
+     0:   frmNewQSO.edtName.Caption:=edtSRXStr.Text;             //Name
+     1:   if dmUtils.isLocOK(edtSRXStr.Text) then
+             frmNewQSO.edtGrid.Text := edtSRXStr.Text;           //Grid copied only if it is valid
+     2:   frmNewQSO.cmbIOTA.Caption:= edtSRXStr.Text;            //IOTA
+     3:   Begin
+              if frmNewQSO.edtState.Visible then
+                frmNewQSO.edtState.Caption:= edtSRXStr.Text       //State
+               else
+                frmNewQSO.edtDOK.Caption:=edtSRXStr.Text;         //DOK
+          end;
+     4:   frmNewQSO.edtCounty.Caption:= edtSRXStr.Text;          //County
+     5:   frmNewQSO.edtAward.Caption:= edtSRXStr.Text;           //Award
+     6:   frmNewQSO.edtQSL_VIA.Caption:= edtSRXStr.Text;         //QSL via
+     7:   frmNewQSO.edtRemQSO.Caption:=frmNewQSO.edtRemQSO.Caption+' '+edtSRXStr.Text;    //Comment. Preserves "DUPE"
+    end;
+   end;
 
   frmNewQSO.edtHisRST.Text := edtRSTs.Text;
   frmNewQSO.edtMyRST.Text := edtRSTr.Text;
@@ -249,12 +316,43 @@ begin
 
   frmNewQSO.btnSave.Click;
   if dmData.DebugLevel >= 1 then
-                       writeln('input finale');
+    Writeln('input finale');
   ChkSerialNrUpd(chkNRInc.Checked);
   initInput;
+
 end;
 
-procedure TfrmContest.btClearAllClick(Sender : TObject);
+procedure TfrmContest.btClearAllClick(Sender: TObject);
+begin
+  rbDupeCheck.Checked := True;
+  rbNoMode4Dupe.Checked := False;
+  rbIgnoreDupes.Checked := False;
+
+  chkSpace.Checked :=  False;
+  chkTrueRST.Checked := False;
+  chkNRInc.Checked := False;
+  chkQsp.Checked := False;
+  chkNoNr.Checked := False;
+  chkLoc.Checked := False;
+
+  edtSTX.Text := '';
+  edtSTXStr.Text := '';
+  cmbContestName.Text:= '';
+end;
+
+procedure TfrmContest.btDupChkStartClick(Sender: TObject);
+begin
+  cdDupeDate.Date := StrToDate(DupeFromDate,'-');
+  if cdDupeDate.Execute then
+    begin
+      DupeFromDate:=FormatDateTime( 'yyyy-mm-dd',cdDupeDate.Date );
+      cqrini.WriteString('frmContest', 'DupeFrom', DupeFromDate);
+      btDupChkStart.Caption:='from '+DupeFromDate;
+    end
+
+end;
+
+procedure TfrmContest.btClearQsoClick(Sender : TObject);
 begin
   frmNewQSO.ClearAll;
   initInput
@@ -321,10 +419,16 @@ end;
 
 procedure TfrmContest.edtSRXStrChange(Sender: TObject);
 begin
-  if chkLoc.Checked then
+  if ((chkLoc.Checked) and (MsgIs=1 ))then
   begin
    edtSRXStr.Text := dmUtils.StdFormatLocator(edtSRXStr.Text);
    edtSRXStr.SelStart := Length(edtSRXStr.Text);
+   if ( Length(edtSRXStr.Text) in [1,3,5] )then
+       edtSRXStr.Font.Color:=clRed
+      else
+       edtSRXStr.Font.Color:=clDefault;
+   if ( Length(edtSRXStr.Text) > 6 )then
+          edtSRXStr.Text:=copy(edtSRXStr.Text,1,6); //accept only 6chr locator input here
   end;
 end;
 procedure TfrmContest.edtSRXExit(Sender: TObject);
@@ -360,10 +464,32 @@ begin
   frmContest.KeyPreview := True;
   dmUtils.InsertContests(cmbContestName);
 end;
-
-procedure TfrmContest.FormClose(Sender: TObject; var CloseAction: TCloseAction);
+procedure TfrmContest.SaveSettings;
 begin
   dmUtils.SaveWindowPos(frmContest);
+
+  cqrini.WriteBool('frmContest', 'DupeCheck', rbDupeCheck.Checked);
+  cqrini.WriteBool('frmContest', 'NoMode4Dupe', rbNoMode4Dupe.Checked);
+  cqrini.WriteBool('frmContest', 'IgnoreDupes', rbIgnoreDupes.Checked);
+  cqrini.WriteString('frmContest', 'DupeFrom', DupeFromDate);
+
+  cqrini.WriteBool('frmContest', 'SpaceIsTab', chkSpace.Checked);
+  cqrini.WriteBool('frmContest', 'TrueRST', chkTrueRST.Checked);
+  cqrini.WriteBool('frmContest', 'NRInc', chkNRInc.Checked);
+  cqrini.WriteBool('frmContest', 'QSP', chkQsp.Checked);
+  cqrini.WriteBool('frmContest', 'NoNR', chkNoNr.Checked);
+  cqrini.WriteBool('frmContest', 'Loc', chkLoc.Checked);
+  cqrini.WriteString('frmContest','MsgIsStr',chkLoc.Caption);
+  cqrini.WriteInteger('frmContest','MsgIs',MsgIs);
+
+  cqrini.WriteString('frmContest', 'STX', edtSTX.Text);
+  cqrini.WriteString('frmContest', 'STXStr', edtSTXStr.Text);
+  cqrini.WriteString('frmContest', 'ContestName', cmbContestName.Text);
+
+end;
+procedure TfrmContest.FormClose(Sender: TObject; var CloseAction: TCloseAction);
+Begin
+  SaveSettings;
 end;
 
 procedure TfrmContest.FormHide(Sender: TObject);
@@ -377,6 +503,26 @@ procedure TfrmContest.FormShow(Sender: TObject);
 begin
   frmNewQSO.gbContest.Visible := true;
   dmUtils.LoadWindowPos(frmContest);
+
+  rbDupeCheck.Checked := cqrini.ReadBool('frmContest', 'DupeCheck', True);
+  rbNoMode4Dupe.Checked := cqrini.ReadBool('frmContest', 'NoMode4Dupe', False);
+  rbIgnoreDupes.Checked := cqrini.ReadBool('frmContest', 'IgnoreDupes', False);
+  DupeFromDate:= cqrini.ReadString('frmContest', 'DupeFrom', '1900-01-01');
+
+  chkSpace.Checked := cqrini.ReadBool('frmContest', 'SpaceIsTab', False);
+  chkTrueRST.Checked := cqrini.ReadBool('frmContest', 'TrueRST', False);
+  chkNRInc.Checked := cqrini.ReadBool('frmContest', 'NRInc', False);
+  chkQsp.Checked := cqrini.ReadBool('frmContest', 'QSP', False);
+  chkNoNr.Checked := cqrini.ReadBool('frmContest', 'NoNR', False);
+  chkLoc.Checked := cqrini.ReadBool('frmContest', 'Loc', False);
+  chkLoc.Caption:=cqrini.ReadString('frmContest','MsgIsStr','MSG is Grid');
+  MsgIs:=cqrini.ReadInteger('frmContest','MsgIs',1); //defaults to MSG is Grid
+
+  edtSTX.Text := cqrini.ReadString('frmContest', 'STX', '');
+  edtSTXStr.Text := cqrini.ReadString('frmContest', 'STXStr', '');
+
+  popSetMsg.Items[MsgIs].Checked:=true;
+
   InitInput;
 
   sbContest.Panels[0].Width := 450;
@@ -384,6 +530,18 @@ begin
   sbContest.Panels[2].Width := 65;
   sbContest.Panels[3].Width := 65;
   sbContest.Panels[4].Width := 20;
+  lblSpeed.Caption:= frmNewQSO.sbNewQSO.Panels[4].Text;
+  cmbContestName.Text := cqrini.ReadString('frmContest', 'ContestName','');
+  btDupChkStart.Caption := 'from '+DupeFromDate;
+  btDupChkStart.Visible:=not(rbIgnoreDupes.Checked);
+end;
+
+procedure TfrmContest.MsgIsPopChk(nr:integer);
+var i:integer ;
+begin
+   for i:=0 to popSetMsg.Items.Count-1 do
+       popSetMsg.Items[i].Checked:=false;
+   popSetMsg.Items[nr].Checked:=true;
 end;
 
 procedure TfrmContest.btnHelpClick(Sender : TObject);
@@ -391,6 +549,66 @@ begin
   ShowHelp
 end;
 
+procedure TfrmContest.mnuNameClick(Sender: TObject);
+begin
+  MsgIs:=0;
+  chkLoc.Caption:='MSG is Name';
+  MsgIsPopChk(MsgIs);
+end;
+procedure TfrmContest.mnuGridClick(Sender: TObject);
+begin
+  MsgIs:=1;
+  chkLoc.Caption:='MSG is Grid';
+  MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.mnyIOTAClick(Sender: TObject);
+begin
+  MsgIs:=2;
+  chkLoc.Caption:='MSG is IOTA';
+  MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.mnuStateClick(Sender: TObject);
+begin
+  MsgIs:=3;
+  chkLoc.Caption:='MSG is Stat';
+  MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.mnuCountyClick(Sender: TObject);
+begin
+    MsgIs:=4;
+    chkLoc.Caption:='MSG is Cnty';
+    MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.mnuAwardClick(Sender: TObject);
+begin
+  MsgIs:=5;
+  chkLoc.Caption:='MSG is Awrd';
+  MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.mnuQSLviaClick(Sender: TObject);
+begin
+  MsgIs:=6;
+  chkLoc.Caption:='MSG is Qvia';
+  MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.mnuCommentClick(Sender: TObject);
+begin
+  MsgIs:=7;
+  chkLoc.Caption:='MSG is Cmnt';
+  MsgIsPopChk(MsgIs);
+end;
+
+procedure TfrmContest.rbIgnoreDupesChange(Sender: TObject);
+begin
+  btDupChkStart.Visible:=not(rbIgnoreDupes.Checked);
+end;
+
 procedure TfrmContest.tmrESC2Timer(Sender: TObject);
 begin
   EscFirstTime := True; //time for double esc passed
@@ -414,22 +632,7 @@ begin
   edtCall.Font.Style:= [];
   edtCall.Clear;
   EscFirstTime := True;
-  {
-  Next 3 lines of procedure will cause
-  ----
-  either (dbg msg:input finale):
 
-  NOTE: Window with stalled focus found!, faking focus-out event
-  (cqrlog:2643): Pango-CRITICAL **: pango_layout_get_cursor_pos: assertion 'index >= 0 && index <= layout->length' failed
-  ----
-  or(dbg msg: Clear all done next focus ):
-
-  NOTE: Window with stalled focus found!, faking focus-out event
-
-  ----
-  All works, but this needs attention and I can not resolve this at the moment.
-
-  }
   SetTabOrders;
   frmContest.ShowOnTop;
   frmContest.SetFocus;
@@ -519,8 +722,16 @@ Begin
 
     btSave.TabStop      := True;
     btSave.TabOrder     := 7;
-    btClearAll.TabStop  := True;
-    btClearAll.TabOrder := 8;
+    btClearQso.TabStop  := True;
+    btClearQso.TabOrder := 8;
+
+    rbDupeCheck.TabStop:=false;
+    rbNoMode4Dupe.TabStop:=false;
+    rbIgnoreDupes.TabStop:=false;
+    btClearAll.TabStop:=false;
+    chkTabAll.TabStop:=false;
+    cmbContestName.TabStop:=false;
+    btDupChkStart.TabStop:=False;
 end;
 procedure TfrmContest.QspMsg;
 Begin
@@ -542,7 +753,7 @@ Begin
    end;
 end;
 
-procedure TfrmContest.ClearStatusBar();
+procedure TfrmContest.ClearStatusBar;
 var
   i : Integer;
 begin
@@ -550,9 +761,9 @@ begin
     sbContest.Panels.Items[i].Text := '';
 end;
 
-procedure TfrmContest.ShowStatusBarInfo();
+procedure TfrmContest.ShowStatusBarInfo;
 begin
-  sbContest.Panels.Items[0].Text := Trim(frmNewQSO.mCountry.Text);
+  sbContest.Panels.Items[0].Text := StringReplace(Trim(frmNewQSO.mCountry.Text),#$0A,'|',[rfReplaceAll]);
   sbContest.Panels.Items[1].Text := 'WAZ: ' + frmNewQSO.lblWAZ.Caption;
   sbContest.Panels.Items[2].Text := 'ITU: ' + frmNewQSO.lblITU.Caption;
   sbContest.Panels.Items[3].Text := 'AZ: ' + frmNewQSO.lblAzi.Caption;
diff --git a/src/fDBConnect.pas b/src/fDBConnect.pas
index a48849c..65b8c96 100644
--- a/src/fDBConnect.pas
+++ b/src/fDBConnect.pas
@@ -73,7 +73,6 @@ type
   private
     RemoteMySQL : Boolean;
     AskForDB    : Boolean;
-
     procedure SaveLogin;
     procedure LoadLogin;
     procedure UpdateGridFields;
@@ -91,7 +90,7 @@ var
 implementation
 {$R *.lfm}
 
-uses dData, dUtils, fNewLog;
+uses dData, dUtils, fNewLog, fDbSqlSel;
 
 { TfrmDBConnect }
 
@@ -523,28 +522,47 @@ var
   Connect : Boolean = True;
 begin
   tmrAutoConnect.Enabled := False;
+
   if AskForDB then
   begin
-    if Application.MessageBox('It seems you are trying to run this program for the first time, '+
-                              'are you going to save data to local machine?'#10#13'If you say Yes, '+
-                              'new databases will be created. This may take a while, please be patient.' ,'Question ...',
-                              mb_YesNo+mb_IconQuestion) =  idYes then
-    begin
-      dmData.StartMysqldProcess;
-      Sleep(3000)
-    end
-    else begin
-      Connect     := False;
-      RemoteMySQL := True;
-      chkSaveToLocal.Checked := False;
-      chkSaveToLocalClick(nil);
-      edtServer.SetFocus
-    end
+      if (frmDbSqlSel = nil) then  Application.CreateForm(TfrmDbSqlSel, frmDbSqlSel);
+      frmDbSqlSel.Show;
+
+      repeat   //wait for user to make selection on other window
+       Begin
+        sleep(100);
+        Application.ProcessMessages;
+       end;
+        until frmDbSqlSel.rdy;
+
+      if frmDbSqlSel.loc then
+       begin
+        dmData.StartMysqldProcess;
+        Sleep(3000)
+       end
+      else
+       begin
+        Connect     := True;
+        RemoteMySQL := True;
+
+        edtUser.Text:=frmDbSqlSel.user;
+        edtPass.Text:=frmDbSqlSel.pass;
+        edtPort.Text:=frmDbSqlSel.port;
+        edtServer.Text:=frmDbSqlSel.ip;
+        chkAutoConn.Checked:= frmDbSqlSel.Acon;
+        chkSavePass.Checked:= frmDbSqlSel.Rmbr;
+
+        chkSaveToLocal.Checked := False;
+        chkSaveToLocalClick(nil);
+       end;
+
+      FreeAndNil(frmDbSqlSel);
+
   end;
   if (not OpenFromMenu) and Connect then
-    btnConnect.Click;
+                                        btnConnect.Click;
   if btnOpenLog.Enabled then
-    btnOpenLog.SetFocus
+                            btnOpenLog.SetFocus
 end;
 
 procedure TfrmDBConnect.OpenDefaultLog;
diff --git a/src/fDXCCStat.lfm b/src/fDXCCStat.lfm
index 8471dac..dfb3179 100644
--- a/src/fDXCCStat.lfm
+++ b/src/fDXCCStat.lfm
@@ -1,12 +1,11 @@
 object frmDXCCStat: TfrmDXCCStat
-  Left = 258
-  Height = 529
-  Top = 209
-  Width = 711
-  ActiveControl = grdDXCCStat
+  Left = 293
+  Height = 612
+  Top = 37
+  Width = 768
   Caption = 'DXCC Statistic'
-  ClientHeight = 529
-  ClientWidth = 711
+  ClientHeight = 612
+  ClientWidth = 768
   Icon.Data = {
     BE0C00000000010001002020000001001800A80C000016000000280000002000
     0000400000000100180000000000000C00006400000064000000000000000000
@@ -115,22 +114,34 @@ object frmDXCCStat: TfrmDXCCStat
   OnClose = FormClose
   OnCreate = FormCreate
   OnShow = FormShow
-  LCLVersion = '1.2.2.0'
-  object Panel1: TPanel
+  LCLVersion = '2.0.12.0'
+  object pnlStatSum: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = Owner
+    AnchorSideBottom.Side = asrBottom
     Left = 0
-    Height = 81
-    Top = 448
-    Width = 711
-    Align = alBottom
-    ClientHeight = 81
-    ClientWidth = 711
+    Height = 80
+    Top = 532
+    Width = 768
+    Anchors = [akLeft, akRight, akBottom]
+    ClientHeight = 80
+    ClientWidth = 768
     TabOrder = 0
-    object Button1: TButton
-      Left = 624
+    object btClose: TButton
+      AnchorSideRight.Control = pnlStatSum
+      AnchorSideRight.Side = asrBottom
+      AnchorSideBottom.Control = pnlStatSum
+      AnchorSideBottom.Side = asrBottom
+      Left = 686
       Height = 25
       Top = 48
       Width = 75
-      Anchors = [akTop, akRight]
+      Anchors = [akRight, akBottom]
+      BorderSpacing.Right = 6
+      BorderSpacing.Bottom = 6
       BorderSpacing.InnerBorder = 4
       Cancel = True
       Caption = '&Close'
@@ -138,179 +149,215 @@ object frmDXCCStat: TfrmDXCCStat
       TabOrder = 0
     end
     object btnHTMLExport: TButton
-      Left = 488
+      AnchorSideRight.Control = btClose
+      AnchorSideBottom.Control = btClose
+      AnchorSideBottom.Side = asrBottom
+      Left = 565
       Height = 25
       Top = 48
       Width = 115
-      Anchors = [akTop, akRight]
+      Anchors = [akRight, akBottom]
+      BorderSpacing.Right = 6
       BorderSpacing.InnerBorder = 4
       Caption = 'Export to HTML'
       OnClick = btnHTMLExportClick
       TabOrder = 1
     end
-    object GroupBox1: TGroupBox
-      Left = 120
+    object gbCW: TGroupBox
+      AnchorSideLeft.Control = gbPhone
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideBottom.Control = gbPhone
+      AnchorSideBottom.Side = asrBottom
+      Left = 117
       Height = 61
-      Top = 8
+      Top = 12
       Width = 104
+      Anchors = [akLeft, akBottom]
+      BorderSpacing.Left = 6
       Caption = ' CW '
-      ClientHeight = 45
+      ClientHeight = 43
       ClientWidth = 102
       TabOrder = 2
       object lblCWWKD: TLabel
+        AnchorSideLeft.Control = gbCW
+        AnchorSideTop.Control = gbCW
         Left = 6
         Height = 15
         Top = 0
-        Width = 25
+        Width = 31
+        BorderSpacing.Left = 6
         Caption = 'wkd:'
         ParentColor = False
       end
       object lblCWCmf: TLabel
+        AnchorSideLeft.Control = lblCWWKD
+        AnchorSideTop.Control = lblCWWKD
+        AnchorSideTop.Side = asrBottom
         Left = 6
         Height = 15
-        Top = 22
-        Width = 26
+        Top = 18
+        Width = 29
+        BorderSpacing.Top = 3
         Caption = 'cfm:'
         ParentColor = False
       end
     end
-    object GroupBox2: TGroupBox
-      Left = 8
+    object gbPhone: TGroupBox
+      AnchorSideLeft.Control = pnlStatSum
+      AnchorSideBottom.Control = pnlStatSum
+      AnchorSideBottom.Side = asrBottom
+      Left = 7
       Height = 61
-      Top = 8
+      Top = 12
       Width = 104
+      Anchors = [akLeft, akBottom]
+      BorderSpacing.Left = 6
+      BorderSpacing.Bottom = 6
       Caption = ' PHONE'
-      ClientHeight = 45
+      ClientHeight = 43
       ClientWidth = 102
       TabOrder = 3
       object lblFoneWKD: TLabel
+        AnchorSideLeft.Control = gbPhone
+        AnchorSideTop.Control = gbPhone
         Left = 6
         Height = 15
-        Top = -1
-        Width = 25
+        Top = 0
+        Width = 31
+        BorderSpacing.Left = 6
         Caption = 'wkd:'
         ParentColor = False
       end
       object lblFoneCmf: TLabel
+        AnchorSideLeft.Control = lblFoneWKD
+        AnchorSideTop.Control = lblFoneWKD
+        AnchorSideTop.Side = asrBottom
         Left = 6
         Height = 15
-        Top = 23
-        Width = 26
+        Top = 18
+        Width = 29
+        BorderSpacing.Top = 3
         Caption = 'cfm:'
         ParentColor = False
       end
     end
-    object GroupBox3: TGroupBox
-      Left = 232
+    object gbDigi: TGroupBox
+      AnchorSideLeft.Control = gbCW
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideBottom.Control = gbCW
+      AnchorSideBottom.Side = asrBottom
+      Left = 227
       Height = 61
-      Top = 8
+      Top = 12
       Width = 104
+      Anchors = [akLeft, akBottom]
+      BorderSpacing.Left = 6
       Caption = ' DIGI '
-      ClientHeight = 45
+      ClientHeight = 43
       ClientWidth = 102
       TabOrder = 4
       object lblDIGIWKD: TLabel
+        AnchorSideLeft.Control = gbDigi
+        AnchorSideTop.Control = gbDigi
         Left = 6
         Height = 15
         Top = 0
-        Width = 25
+        Width = 31
+        BorderSpacing.Left = 6
         Caption = 'wkd:'
         ParentColor = False
       end
       object lblDIGICmf: TLabel
+        AnchorSideLeft.Control = lblDIGIWKD
+        AnchorSideTop.Control = lblDIGIWKD
+        AnchorSideTop.Side = asrBottom
         Left = 6
         Height = 15
-        Top = 22
-        Width = 26
+        Top = 18
+        Width = 29
+        BorderSpacing.Top = 3
         Caption = 'cfm:'
         ParentColor = False
       end
     end
-    object GroupBox4: TGroupBox
-      Left = 344
+    object gbMix: TGroupBox
+      AnchorSideLeft.Control = gbDigi
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideBottom.Control = gbDigi
+      AnchorSideBottom.Side = asrBottom
+      Left = 337
       Height = 61
-      Top = 8
+      Top = 12
       Width = 104
+      Anchors = [akLeft, akBottom]
+      BorderSpacing.Left = 6
       Caption = ' MIX '
-      ClientHeight = 45
+      ClientHeight = 43
       ClientWidth = 102
       TabOrder = 5
       object lblWkdMix: TLabel
+        AnchorSideLeft.Control = gbMix
+        AnchorSideTop.Control = gbMix
         Left = 6
         Height = 15
         Top = 0
-        Width = 25
+        Width = 31
+        BorderSpacing.Left = 6
         Caption = 'wkd:'
         ParentColor = False
       end
       object lblCfmMix: TLabel
+        AnchorSideLeft.Control = lblWkdMix
+        AnchorSideTop.Control = lblWkdMix
+        AnchorSideTop.Side = asrBottom
         Left = 6
         Height = 15
-        Top = 22
-        Width = 26
+        Top = 18
+        Width = 29
+        BorderSpacing.Top = 3
         Caption = 'cfm:'
         ParentColor = False
       end
     end
   end
-  object grdStat: TStringGrid
-    Left = 0
-    Height = 144
-    Top = 304
-    Width = 711
-    Align = alBottom
-    ColCount = 27
-    DefaultColWidth = 50
-    DefaultRowHeight = 25
-    FixedCols = 0
-    Font.Name = 'courier [biznet]'
-    ParentFont = False
-    RowCount = 10
-    TabOrder = 1
-    TitleFont.Name = 'courier [biznet]'
-    TitleStyle = tsNative
-  end
-  object grdDXCCStat: TStringGrid
+  object PnlDXCCStat: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = Owner
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
     Left = 0
-    Height = 254
-    Top = 50
-    Width = 711
-    Align = alClient
-    ColCount = 27
-    DefaultColWidth = 55
-    DefaultRowHeight = 25
-    FixedCols = 0
-    Font.Name = 'dejavu sans mono [dejavu]'
-    Font.Pitch = fpFixed
-    ParentFont = False
-    TabOrder = 2
-    TitleFont.Name = 'dejavu sans mono [dejavu]'
-    TitleFont.Pitch = fpFixed
-    TitleStyle = tsNative
-  end
-  object Panel2: TPanel
-    Left = 0
-    Height = 50
+    Height = 60
     Top = 0
-    Width = 711
-    Align = alTop
+    Width = 768
+    Anchors = [akTop, akLeft, akRight]
     BevelOuter = bvNone
-    ClientHeight = 50
-    ClientWidth = 711
-    TabOrder = 3
-    object Label1: TLabel
-      Left = 19
-      Height = 15
-      Top = 18
-      Width = 91
-      Caption = 'Confirmed type:'
-      ParentColor = False
+    ClientHeight = 60
+    ClientWidth = 768
+    TabOrder = 1
+    object btnRefresh: TButton
+      AnchorSideLeft.Control = cmbCfmType
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = cmbCfmType
+      AnchorSideTop.Side = asrCenter
+      Left = 447
+      Height = 25
+      Top = 13
+      Width = 147
+      BorderSpacing.Left = 32
+      Caption = 'Refresh statistic'
+      OnClick = btnRefreshClick
+      TabOrder = 1
     end
     object cmbCfmType: TComboBox
-      Left = 133
-      Height = 19
-      Top = 10
+      AnchorSideLeft.Control = lblDXCCType
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = lblDXCCType
+      AnchorSideTop.Side = asrCenter
+      Left = 155
+      Height = 29
+      Top = 11
       Width = 260
+      BorderSpacing.Left = 32
       ItemHeight = 0
       ItemIndex = 6
       Items.Strings = (
@@ -326,19 +373,65 @@ object frmDXCCStat: TfrmDXCCStat
       TabOrder = 0
       Text = 'paper QSL, LoTW and eQSL'
     end
-    object btnRefresh: TButton
-      Left = 432
-      Height = 25
-      Top = 14
-      Width = 147
-      Caption = 'Refresh statistic'
-      OnClick = btnRefreshClick
-      TabOrder = 1
+    object lblDXCCType: TLabel
+      AnchorSideLeft.Control = PnlDXCCStat
+      AnchorSideTop.Control = PnlDXCCStat
+      Left = 18
+      Height = 15
+      Top = 18
+      Width = 105
+      BorderSpacing.Left = 18
+      BorderSpacing.Top = 18
+      Caption = 'Confirmed type:'
+      ParentColor = False
     end
   end
+  object grdDXCCStat: TStringGrid
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = PnlDXCCStat
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = grdStatSum
+    Left = 0
+    Height = 212
+    Top = 60
+    Width = 768
+    Anchors = [akTop, akLeft, akRight, akBottom]
+    ColCount = 27
+    DefaultColWidth = 55
+    DefaultRowHeight = 25
+    FixedCols = 0
+    Font.Name = 'dejavu sans mono [dejavu]'
+    Font.Pitch = fpFixed
+    ParentFont = False
+    TabOrder = 2
+    TitleStyle = tsNative
+  end
+  object grdStatSum: TStringGrid
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = pnlStatSum
+    Left = 0
+    Height = 260
+    Top = 272
+    Width = 768
+    Anchors = [akLeft, akRight, akBottom]
+    ColCount = 27
+    DefaultColWidth = 50
+    DefaultRowHeight = 25
+    FixedCols = 0
+    Font.Name = 'courier [biznet]'
+    ParentFont = False
+    RowCount = 10
+    TabOrder = 3
+    TitleStyle = tsNative
+  end
   object dlgSave: TSaveDialog
     FilterIndex = 0
-    left = 568
-    top = 232
+    Left = 568
+    Top = 232
   end
 end
diff --git a/src/fDXCCStat.pas b/src/fDXCCStat.pas
index 1c8082c..878970e 100644
--- a/src/fDXCCStat.pas
+++ b/src/fDXCCStat.pas
@@ -24,15 +24,17 @@ type
   { TfrmDXCCStat }
 
   TfrmDXCCStat = class(TForm)
-    Button1: TButton;
+    btnRefresh: TButton;
+    btClose: TButton;
     btnHTMLExport: TButton;
-    btnRefresh : TButton;
-    cmbCfmType : TComboBox;
-    GroupBox1: TGroupBox;
-    GroupBox2: TGroupBox;
-    GroupBox3: TGroupBox;
-    GroupBox4: TGroupBox;
-    Label1 : TLabel;
+    cmbCfmType: TComboBox;
+    grdDXCCStat: TStringGrid;
+    gbCW: TGroupBox;
+    gbPhone: TGroupBox;
+    gbDigi: TGroupBox;
+    gbMix: TGroupBox;
+    grdStatSum: TStringGrid;
+    lblDXCCType: TLabel;
     lblCfmMix: TLabel;
     lblWkdMix: TLabel;
     lblFoneCmf: TLabel;
@@ -41,11 +43,9 @@ type
     lblFoneWKD: TLabel;
     lblCWWKD: TLabel;
     lblDIGIWKD: TLabel;
-    Panel1: TPanel;
-    grdStat: TStringGrid;
-    grdDXCCStat: TStringGrid;
+    PnlDXCCStat: TPanel;
+    pnlStatSum: TPanel;
     dlgSave: TSaveDialog;
-    Panel2 : TPanel;
     procedure btnHTMLExportClick(Sender: TObject);
     procedure btnRefreshClick(Sender : TObject);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
@@ -101,20 +101,21 @@ end;
 procedure TfrmDXCCStat.FormShow(Sender: TObject);
 begin
   dmUtils.LoadFontSettings(self);
+  grdStatSum.Constraints.MinHeight:=(grdStatSum.Font.Size+6)*10;
   LoadBandsSettings;
 
   if cqrini.ReadBool('Fonts','GridGreenBar',False) = True then
   begin
     grdDXCCStat.AlternateColor:=$00E7FFEB;
-    grdStat.AlternateColor:=$00E7FFEB;
+    grdStatSum.AlternateColor:=$00E7FFEB;
     grdDXCCStat.Options:=[goRowSelect,goRangeSelect,goSmoothScroll,goVertLine,goFixedVertLine];
-    grdStat.Options:=[goRowSelect,goRangeSelect,goSmoothScroll,goVertLine,goFixedVertLine];
+    grdStatSum.Options:=[goRowSelect,goRangeSelect,goSmoothScroll,goVertLine,goFixedVertLine];
   end
   else begin
     grdDXCCStat.AlternateColor:=clWindow;
-    grdStat.AlternateColor:=clWindow;
+    grdStatSum.AlternateColor:=clWindow;
     grdDXCCStat.Options:=[goRangeSelect,goSmoothScroll,goVertLine,goFixedVertLine,goFixedHorzLine,goHorzline];
-    grdStat.Options:=[goRangeSelect,goSmoothScroll,goVertLine,goFixedVertLine,goFixedHorzLine,goHorzline];
+    grdStatSum.Options:=[goRangeSelect,goSmoothScroll,goVertLine,goFixedVertLine,goFixedHorzLine,goHorzline];
   end;
 
   grdDXCCStat.Cells[0,0] := 'DXCC';
@@ -296,7 +297,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40 bgcolor="#333366" class="hlava">');
-    tmp := grdStat.Cells[i,0];
+    tmp := grdStatSum.Cells[i,0];
     Writeln(f,'<div align="center" class="popis">' + tmp +  '</div>');
     Writeln(f,'</TD>');
   end;  //^^ table header
@@ -309,7 +310,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=60>');
-    tmp := grdStat.Cells[i,1];
+    tmp := grdStatSum.Cells[i,1];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2>' + tmp +  '</FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -322,7 +323,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,2];
+    tmp := grdStatSum.Cells[i,2];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2><B>' + tmp +  '</B></FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -335,7 +336,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,4];
+    tmp := grdStatSum.Cells[i,4];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2>' + tmp +  '</FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -348,7 +349,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,5];
+    tmp := grdStatSum.Cells[i,5];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2><B>' + tmp +  '</B></FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -361,7 +362,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,6];
+    tmp := grdStatSum.Cells[i,6];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2>' + tmp +  '</FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -374,7 +375,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,7];
+    tmp := grdStatSum.Cells[i,7];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2><B>' + tmp +  '</B></FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -387,7 +388,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,8];
+    tmp := grdStatSum.Cells[i,8];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2>' + tmp +  '</FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -400,7 +401,7 @@ begin
   for i:=1 to grdDXCCStat.ColCount -1 do
   begin
     Writeln(f,'<TD WIDTH=40>');
-    tmp := grdStat.Cells[i,9];
+    tmp := grdStatSum.Cells[i,9];
     Writeln(f,'<P ALIGN=CENTER><FONT SIZE=2><B>' + tmp +  '</B></FONT></P>');
     Writeln(f,'</TD>');
   end;
@@ -488,20 +489,20 @@ var
   i : Integer = 0;
 begin
   grdDXCCStat.ColCount := cMaxBandsCount;
-  grdStat.ColCount     := cMaxBandsCount;
+  grdStatSum.ColCount     := cMaxBandsCount;
   for i:=0 to cMaxBandsCount-1 do
   begin
     if dmUtils.MyBands[i][0]='' then
     begin
       grdDXCCStat.ColCount := i+2;
-      grdStat.ColCount     := i+1;
+      grdStatSum.ColCount     := i+1;
       break
     end;
     grdDXCCStat.Cells[i+2,0] := dmUtils.MyBands[i][1];
-    grdStat.Cells[i+1,0]     := dmUtils.MyBands[i][1];
+    grdStatSum.Cells[i+1,0]     := dmUtils.MyBands[i][1];
   end;
-  grdDXCCStat.ColWidths[grdStat.ColCount-1] := 50;
-  grdStat.ColWidths[grdStat.ColCount-1]     := 50
+  grdDXCCStat.ColWidths[grdStatSum.ColCount-1] := 50;
+  grdStatSum.ColWidths[grdStatSum.ColCount-1]     := 50
 end;
 
 procedure TfrmDXCCStat.CreateModeStatistic;
@@ -523,9 +524,9 @@ var
       end;
       BandPos := BandPos + 1;
       if dmData.Q.Fields[1].AsString = '' then
-        grdStat.Cells[BandPos,Row] := '0'
+        grdStatSum.Cells[BandPos,Row] := '0'
       else
-        grdStat.Cells[BandPos,Row] := dmData.Q.Fields[1].AsString;
+        grdStatSum.Cells[BandPos,Row] := dmData.Q.Fields[1].AsString;
       dmData.Q.Next
     end
   end;
@@ -582,18 +583,18 @@ const
   C_SEL = 'select band,count(distinct adif) from cqrlog_main where adif <> 0 and ';
 
 begin
-  grdStat.ColWidths[0] := 110;
-  grdStat.Cells[0,1] := 'DXCC';
-  grdStat.Cells[0,2] := 'DXCC CFM';
+  grdStatSum.ColWidths[0] := 110;
+  grdStatSum.Cells[0,1] := 'DXCC';
+  grdStatSum.Cells[0,2] := 'DXCC CFM';
 
-  grdStat.Cells[0,4] := 'DXCC PHONE';
-  grdStat.Cells[0,5] := 'DXCC CFM PHONE';
+  grdStatSum.Cells[0,4] := 'DXCC PHONE';
+  grdStatSum.Cells[0,5] := 'DXCC CFM PHONE';
 
-  grdStat.Cells[0,6] := 'DXCC CW';
-  grdStat.Cells[0,7] := 'DXCC CFM CW';
+  grdStatSum.Cells[0,6] := 'DXCC CW';
+  grdStatSum.Cells[0,7] := 'DXCC CFM CW';
 
-  grdStat.Cells[0,8] := 'DXCC DIGI';
-  grdStat.Cells[0,9] := 'DXCC CFM DIGI';
+  grdStatSum.Cells[0,8] := 'DXCC DIGI';
+  grdStatSum.Cells[0,9] := 'DXCC CFM DIGI';
 
   ShowDel := cqrini.ReadBool('Program','ShowDeleted',False);
 
@@ -1192,22 +1193,22 @@ var
   y   : Integer;
   sum : Word;
 begin
-  grdStat.ColCount := grdStat.ColCount+1;
-  grdStat.Cells[grdStat.ColCount-1,0] := 'Total';
+  grdStatSum.ColCount := grdStatSum.ColCount+1;
+  grdStatSum.Cells[grdStatSum.ColCount-1,0] := 'Total';
 
-  for y:=1 to grdStat.RowCount-1 do
+  for y:=1 to grdStatSum.RowCount-1 do
   begin
-    if grdStat.Cells[0,y] = '' then
+    if grdStatSum.Cells[0,y] = '' then
       Continue;
     sum := 0;
-    for i:=1 to grdStat.ColCount -1 do
+    for i:=1 to grdStatSum.ColCount -1 do
     begin
-      if grdStat.Cells[i,y] <> '' then
-        sum := sum + StrToInt(grdStat.Cells[i,y])
+      if grdStatSum.Cells[i,y] <> '' then
+        sum := sum + StrToInt(grdStatSum.Cells[i,y])
       else
-        grdStat.Cells[i,y] := '0'
+        grdStatSum.Cells[i,y] := '0'
     end;
-    grdStat.Cells[grdStat.ColCount-1,y] := IntToStr(sum)
+    grdStatSum.Cells[grdStatSum.ColCount-1,y] := IntToStr(sum)
   end
 end;
 
diff --git a/src/fDXCluster.pas b/src/fDXCluster.pas
index f5a844f..f5c02ff 100644
--- a/src/fDXCluster.pas
+++ b/src/fDXCluster.pas
@@ -771,7 +771,7 @@ begin
                  Assert(Assigned(cmds)) ;
                  cmds.Clear;
                  cmds.StrictDelimiter := true;
-                 cmds.Delimiter := ',';
+                 cmds.Delimiter := ';';
                  cmds.DelimitedText := cqrini.ReadString('DXCluster','StartCmd','') ;
                  for K:=0 to cmds.Count-1 do
                   Begin
diff --git a/src/fDXClusterList.lfm b/src/fDXClusterList.lfm
index 51b5490..553e055 100644
--- a/src/fDXClusterList.lfm
+++ b/src/fDXClusterList.lfm
@@ -12,7 +12,7 @@ object frmDXClusterList: TfrmDXClusterList
   ClientHeight = 376
   ClientWidth = 515
   OnShow = FormShow
-  LCLVersion = '0.9.30.2'
+  LCLVersion = '2.0.12.0'
   object dbgrdDXClusterList: TDBGrid
     Left = 0
     Height = 334
@@ -24,6 +24,7 @@ object frmDXClusterList: TfrmDXClusterList
     Options = [dgTitles, dgIndicator, dgColumnResize, dgColumnMove, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
     TabOrder = 0
     TitleStyle = tsNative
+    OnCellClick = dbgrdDXClusterListCellClick
     OnDblClick = dbgrdDXClusterListDblClick
   end
   object Panel1: TPanel
@@ -90,4 +91,4 @@ object frmDXClusterList: TfrmDXClusterList
       TabOrder = 4
     end
   end
-end
\ No newline at end of file
+end
diff --git a/src/fDXClusterList.pas b/src/fDXClusterList.pas
index af8cffb..3562143 100644
--- a/src/fDXClusterList.pas
+++ b/src/fDXClusterList.pas
@@ -20,6 +20,7 @@ type
     btnApply: TButton;
     dbgrdDXClusterList: TDBGrid;
     Panel1: TPanel;
+    procedure dbgrdDXClusterListCellClick(Column: TColumn);
     procedure dbgrdDXClusterListDblClick(Sender : TObject);
     procedure FormShow(Sender: TObject);
     procedure btnDeleteClick(Sender: TObject);
@@ -83,6 +84,12 @@ begin
     btnEdit.Click
 end;
 
+procedure TfrmDXClusterList.dbgrdDXClusterListCellClick(Column: TColumn);
+begin
+   btnApply.Font.Color:=clGreen;
+   btnApply.Font.Style:=[fsBold];
+end;
+
 procedure TfrmDXClusterList.btnDeleteClick(Sender: TObject);
 var
   id : Integer;
@@ -114,6 +121,7 @@ begin
     edtPort.Text        := dmData.qDXClusters.Fields[3].AsString;
     edtUserName.Text    := dmData.qDXClusters.Fields[4].AsString;
     edtPassword.Text    := dmData.qDXClusters.Fields[5].AsString;
+    Caption:='Edit DXCluster';
     ShowModal;
     if ModalResult = mrOK then
     begin
@@ -128,7 +136,9 @@ begin
       dmData.trDXClusters.Rollback;
       dmData.trDXClusters.StartTransaction;
       dmData.qDXClusters.ExecSQL;
-      dmData.trDXClusters.Commit
+      dmData.trDXClusters.Commit;
+      btnApply.Font.Color:=clGreen;
+      btnApply.Font.Style:=[fsBold];
     end
   finally
     Free;
@@ -140,6 +150,7 @@ procedure TfrmDXClusterList.btnNewClick(Sender: TObject);
 begin
   with TfrmNewDXCluster.Create(self) do
   try
+    Caption:='New DXCluster';
     ShowModal;
     if ModalResult = mrOK then
     begin
diff --git a/src/fDbError.pas b/src/fDbError.pas
index d8798a7..deedbff 100644
--- a/src/fDbError.pas
+++ b/src/fDbError.pas
@@ -37,12 +37,12 @@ uses dUtils, dData;
 
 procedure TfrmDbError.btnOpenErrFileClick(Sender : TObject);
 begin
-  dmUtils.RunOnBackgroud('xdg-open ' + dmData.DataDir + 'mysql.err')
+  dmUtils.RunOnBackground('xdg-open ' + dmData.DataDir + 'mysql.err')
 end;
 
 procedure TfrmDbError.btnVisitFAQClick(Sender : TObject);
 begin
-  dmUtils.RunOnBackgroud('xdg-open https://www.cqrlog.com/faq')
+  dmUtils.RunOnBackground('xdg-open https://www.cqrlog.com/faq')
 end;
 
 end.
diff --git a/src/fDbSqlSel.lfm b/src/fDbSqlSel.lfm
new file mode 100644
index 0000000..0e045a5
--- /dev/null
+++ b/src/fDbSqlSel.lfm
@@ -0,0 +1,642 @@
+object frmDbSqlSel: TfrmDbSqlSel
+  Left = 393
+  Height = 306
+  Top = 141
+  Width = 441
+  Caption = 'Select SQL for logs'
+  ClientHeight = 306
+  ClientWidth = 441
+  Color = clWhite
+  OnClose = FormClose
+  OnCreate = FormCreate
+  LCLVersion = '2.2.0.4'
+  object gbLocalUser: TGroupBox
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = rbExternal
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    Left = 6
+    Height = 89
+    Top = 176
+    Width = 429
+    Anchors = [akTop, akLeft, akRight]
+    BorderSpacing.Left = 6
+    BorderSpacing.Top = 12
+    BorderSpacing.Right = 6
+    Caption = 'Define Local SQL user'
+    ClientHeight = 71
+    ClientWidth = 427
+    TabOrder = 6
+    TabStop = True
+    Visible = False
+    object edtUserName: TEdit
+      AnchorSideTop.Control = gbLocalUser
+      AnchorSideTop.Side = asrCenter
+      AnchorSideRight.Control = edtPassword
+      Left = 229
+      Height = 34
+      Top = 18
+      Width = 90
+      Anchors = [akTop, akRight]
+      BorderSpacing.Right = 12
+      OnExit = edtUserNameExit
+      TabOrder = 2
+      Text = 'cqrlog'
+    end
+    object edtPassword: TEdit
+      AnchorSideTop.Control = gbLocalUser
+      AnchorSideTop.Side = asrCenter
+      AnchorSideRight.Control = gbLocalUser
+      AnchorSideRight.Side = asrBottom
+      Left = 331
+      Height = 34
+      Top = 18
+      Width = 90
+      Anchors = [akTop, akRight]
+      BorderSpacing.Right = 6
+      OnExit = edtPasswordExit
+      TabOrder = 3
+      Text = 'cqrlog'
+    end
+    object lblPass: TLabel
+      AnchorSideLeft.Control = edtPassword
+      AnchorSideBottom.Control = edtPassword
+      Left = 331
+      Height = 17
+      Top = 1
+      Width = 66
+      Anchors = [akLeft, akBottom]
+      Caption = 'Password'
+    end
+    object lblUsername: TLabel
+      AnchorSideLeft.Control = edtUserName
+      AnchorSideBottom.Control = edtUserName
+      Left = 229
+      Height = 17
+      Top = 1
+      Width = 68
+      Anchors = [akLeft, akBottom]
+      Caption = 'Username'
+    end
+    object lblIp: TLabel
+      AnchorSideLeft.Control = edtIP
+      AnchorSideBottom.Control = edtIP
+      Left = 6
+      Height = 17
+      Top = 1
+      Width = 63
+      Anchors = [akLeft, akBottom]
+      Caption = 'IP addres'
+    end
+    object lblPort: TLabel
+      AnchorSideLeft.Control = edtPort
+      AnchorSideBottom.Control = edtPort
+      Left = 108
+      Height = 17
+      Top = 1
+      Width = 30
+      Anchors = [akLeft, akBottom]
+      Caption = 'Port'
+    end
+    object edtPort: TEdit
+      AnchorSideLeft.Control = edtIP
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = gbLocalUser
+      AnchorSideTop.Side = asrCenter
+      Left = 108
+      Height = 34
+      Top = 18
+      Width = 90
+      BorderSpacing.Left = 12
+      MaxLength = 5
+      NumbersOnly = True
+      OnExit = edtPortExit
+      TabOrder = 1
+      Text = '3306'
+    end
+    object edtIP: TEdit
+      AnchorSideLeft.Control = gbLocalUser
+      AnchorSideTop.Control = gbLocalUser
+      AnchorSideTop.Side = asrCenter
+      Left = 6
+      Height = 34
+      Top = 18
+      Width = 90
+      BorderSpacing.Left = 6
+      OnExit = edtIPExit
+      TabOrder = 0
+      Text = 'localhost'
+    end
+  end
+  object lblQuestion: TLabel
+    AnchorSideLeft.Control = Owner
+    AnchorSideLeft.Side = asrCenter
+    AnchorSideTop.Control = pnlWelcome
+    AnchorSideTop.Side = asrBottom
+    Left = 34
+    Height = 34
+    Top = 43
+    Width = 372
+    BorderSpacing.Top = 6
+    Caption = 'It seems you are trying to run this program for '#10'the first time. Do you want to save your Log data to:'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object rbFolder: TRadioButton
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = lblQuestion
+    AnchorSideTop.Side = asrBottom
+    Left = 24
+    Height = 23
+    Top = 89
+    Width = 288
+    BorderSpacing.Left = 24
+    BorderSpacing.Top = 12
+    Caption = 'your linux user folder (CQRLOG default)'
+    Checked = True
+    OnClick = rbFolderClick
+    ParentShowHint = False
+    TabOrder = 1
+    TabStop = True
+  end
+  object rbLocal: TRadioButton
+    AnchorSideLeft.Control = rbFolder
+    AnchorSideTop.Control = rbFolder
+    AnchorSideTop.Side = asrBottom
+    Left = 24
+    Height = 23
+    Top = 115
+    Width = 203
+    BorderSpacing.Top = 3
+    Caption = 'local machine''s SQL server'
+    OnChange = rbLocalChange
+    ParentShowHint = False
+    TabOrder = 2
+    TabStop = True
+  end
+  object rbExternal: TRadioButton
+    AnchorSideLeft.Control = rbFolder
+    AnchorSideTop.Control = rbLocal
+    AnchorSideTop.Side = asrBottom
+    Left = 24
+    Height = 23
+    Top = 141
+    Width = 231
+    BorderSpacing.Top = 3
+    Caption = 'external networked SQL server'
+    OnChange = rbExternalChange
+    ParentShowHint = False
+    TabOrder = 3
+    TabStop = True
+  end
+  object btnOK: TButton
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = Owner
+    AnchorSideBottom.Side = asrBottom
+    Left = 354
+    Height = 25
+    Hint = 'Confirm your selection'
+    Top = 269
+    Width = 75
+    Anchors = [akRight, akBottom]
+    BorderSpacing.Right = 12
+    BorderSpacing.Bottom = 12
+    Caption = 'OK'
+    OnClick = btnOKClick
+    TabOrder = 5
+  end
+  object pnlWelcome: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = Owner
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    Left = 30
+    Height = 31
+    Top = 6
+    Width = 381
+    Anchors = [akTop, akLeft, akRight]
+    AutoSize = True
+    BorderSpacing.Left = 30
+    BorderSpacing.Top = 6
+    BorderSpacing.Right = 30
+    ClientHeight = 31
+    ClientWidth = 381
+    Color = clWhite
+    ParentColor = False
+    TabOrder = 0
+    object lblWelcome: TLabel
+      AnchorSideLeft.Control = pnlWelcome
+      AnchorSideLeft.Side = asrCenter
+      AnchorSideTop.Control = pnlWelcome
+      AnchorSideTop.Side = asrCenter
+      Left = 71
+      Height = 29
+      Top = 1
+      Width = 238
+      Caption = 'Welcome to CQRLOG'
+      Font.Color = clOlive
+      Font.Height = 25
+      Font.Style = [fsBold, fsItalic]
+      ParentFont = False
+    end
+  end
+  object imLogo: TImage
+    AnchorSideLeft.Control = btnOK
+    AnchorSideTop.Control = rbFolder
+    AnchorSideRight.Side = asrBottom
+    Left = 354
+    Height = 64
+    Top = 89
+    Width = 64
+    Picture.Data = {
+      1754506F727461626C654E6574776F726B47726170686963E423000089504E47
+      0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE00000A
+      4D6943435050686F746F73686F70204943432070726F66696C65000078DA9D53
+      775893F7163EDFF7650F5642D8F0B1976C81002223AC08C81059A21092006184
+      101240C585880A561415119C4855C482D50A489D88E2A028B867418A885A8B55
+      5C38EE1FDCA7B57D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A
+      003952853C3AD81F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F003
+      79787E74B03FFC01AF6F00020070D52E2412C7E1FF83BA50265700209100E022
+      12E70B01905200C82E54C81400C81800B053B3640A009400006C797C422200AA
+      0D00ECF4493E0500D8A993DC1700D8A21CA908008D0100992847240240BB0060
+      5581522C02C0C200A0AC40222E04C0AE018059B632470280BD0500768E58900F
+      4060008099422CCC0020380200431E13CD03204C03A030D2BFE0A95F7085B848
+      0100C0CB95CD974BD23314B895D01A77F2F0E0E221E2C26CB142611729106609
+      E4229C979B231348E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEF
+      F4C5A2FE6BF06F223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B0
+      75BF6BA95B00DA560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C8
+      3C1D1C0A0B0BED2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF00071
+      9A4099ADC0A383FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1
+      E234B15C2C158AF15889B850224DC779B952914421C995E212E97F32F11F96FD
+      0993770D00AC864FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A
+      0B91001067343279F7000093BFF98F402B0100CD97A4E30000BCE8185CA89417
+      4CC608000044A0812AB041070CC114ACC00E9CC11DBCC01702610644400C24C0
+      3C104206E4801C0AA11896411954C03AD804B5B0031AA0119AE110B4C131380D
+      E7E0125C81EB70170660189EC218BC86090441C8081361213A8811628ED822CE
+      0817998E04226148349280A420E988145122C5C872A402A9426A915D4823F22D
+      7214398D5C40FA90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8A
+      C6A073D174340F5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380
+      D1310E668CD9615C8C87456089581A26C71663E55835568F35631D583776151B
+      C09E61EF0824028B8013EC085E8410C26C82909047584C5843A825EC23B412BA
+      085709838431C2272293A84FB4257A12F9C478623AB1905846AC26EE211E219E
+      255E270E135F9348240EC992E44E0A21259032490B496B48DB482DA453A43ED2
+      10699C4C26EB906DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC5
+      88E24C09A22452A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A
+      9F5A496DA076502F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F768
+      2FE974BA09DD831E4597D097D26BE807E9E7E983F4770C0D860D83C748622819
+      6B197B19A718B7192F994CA605D39799C85430D7321B9967980F986F55582AF6
+      2A7C1591CA12953A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567D
+      A64655B350E3A909D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD
+      82FA630DB2868546A08648A35463B7C6198D2116C63265F15842D6725603EB2C
+      6B984D625BB2F9EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010E
+      C6B1E0F039D99C4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABE
+      DA62ED72ED16EDEBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB
+      75CFEA3ED363EB79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F3730
+      34083690196C313863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D1
+      49A327B826EE8767E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4
+      A4C5E4BE29CD946B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61
+      BED9BCDBFC8D85A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E5679
+      56F556D7AC49D65CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B
+      6DDF14E2148F29D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF
+      1DCC1C121DD63B743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67
+      A1739DF33517A64B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3
+      F5A39BBB9BDCADD96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E2
+      71CCE39DA79BA7C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45B
+      E0BDCB7B603A3E3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E
+      997E07FC9EFB3BFACBFD8FF8BFE179F216F14E056001C101E501BD811A81B303
+      6B031F049904A50735058D05BB062F0C3E15420C090D591F72936FC017F21BF9
+      6333DC672C9AD115CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F9
+      4CE9CCB60888E0476C88B81F69199917F97D14292A32AA2EEA51B453747174F7
+      2CD6ACE459FB67BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8
+      AAB8817887F845F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A
+      54967463AEE5DCA2B917E6E9CECB9E773C593559907C3885981297B23FE58320
+      42502F184FE5A76E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695
+      F638DD3B7D43FA68864F4675C633094F522B79911992B923F34D5644D6DEACCF
+      D971D92D39949C949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA
+      1B9387CAF7E423F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78
+      B848BD485AD433DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF
+      45BB16238B5317772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A
+      79DCF28E5283D2A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A
+      97D55B567F2A17955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4A
+      B7CAEDEB48EBA4EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4A
+      DE74A17A6AF58ECDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB
+      56FDADABB7BED926DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD45
+      7DF56ED2EE82DD8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A
+      746F6CDCAFBFBFB2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC2
+      41E5C127DFA67C7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC
+      2DA36DA03DA1BDEFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D
+      283DF1F9E48293E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF
+      9E3F1774EE4CB75FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E
+      70FDE148AF5B6FEB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D7
+      2E5D9F79BDEFC6EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78
+      AFFCBEDAFDEA07FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE
+      94FFD387E1D247CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CF
+      CA7E56FF79EB73ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9
+      AF3AC723C71FBCCE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3
+      D1FA63C7A7D04FF73EE77CFEFC2FF784F3FB25D29F3300000006624B474400FF
+      00FF00FFA0BDA793000000097048597300000B1300000B1301009A9C18000000
+      0774494D4507E00B180D0E1F23BE4C6B000019184944415478DAE59A69D02557
+      79DF9FE52CBDDCED5D675F352369461AB4039230428A1196B12C8535E02AC29A
+      18873521840AC4C4B84C3081220E8905C1612B3621B064CB0A06814162119201
+      210909493323349A7DE69D77B9EFBDB76FF739E779F261820B2863B619598E7E
+      9FBA4F777555FFEBFF2CFD9C46F805B8EBDD6BE02FBEB2D23E54395CE5872625
+      106F52EA624C6FB8F101F9C9FBFFE4B9E7C36BAFFB163C96C1BF6FF13D579F0B
+      AFBFE13BF0B6CB4F839A8D1781CD407CAEB566E3D10A278F0C70360A4A699302
+      48451A964075C9B31E6E395D42E403A9893BDF7BEB037313300D0B30072FB8F0
+      3CF8E46DDF7E6C0BF047579F016FBEE15E000078FD65A74F1BA6B6B7FC9446F0
+      85FD06679683E901A2393460B334D6AC9BA9384AF5380293D4CA08A396E7501A
+      89E3A4FB1DA4AFDD3769DF7EDE08D6FED92DF7EC050078C525DBE003B77CFFB1
+      27C01BAF3C13DE79E3F7E08D976F77E3A45789C01506F5DCB19A3B7A85C1B911
+      3FBB5FE3F0D0885A4989162A6055858E13A9A3808228431211AA9C0547A0E029
+      CD753C7C84881F2690952B5BE9BA6BBE7CDF3E0080773CFF1C78D3B5773E7604
+      F8C08B77E0AEC33023A22F1D047CCA91216D89A21C129402B4B0BA673E75A06F
+      DE324E3AAA2265E3A832A8D17A03D1629471548EB1498C088A5C1B544602F014
+      B193FBDF6C62FCC8A48B7BD6B79B6B8AD2FCD516D38C5F79E3AE7F74011800E0
+      AD57ED3007E7E56C49E9950A78C920D029C72AEA1CABA88D888E088B2AC025AB
+      3BF0E6A8E63714400CA3515569842DA38A3784519992260534AC80181570D4A0
+      7A0E8351B4AB176BDDDA727ABE51DDBA7719765F7ECE9AA5AF3F7858FE3105A0
+      575FF4248CC9AE70DE9CEBAC5949A8BE6342CA299163297A99BA75ED54AE6DA5
+      D4E6F05FB7CF84F75EB026E1BA9EA48D53AC6DA72A681CA2D1CC1964726C5859
+      C99261466399E72B7A2D117D569465D7BC59DD083DFD70635EB7B4503DEFE517
+      6FDEA4BA170000C2B16BA1DAF35F1E5D015A538A75ACAD2459A1A05B54604A25
+      D9CD9D303E63B28E3399D8AE17EAD950943645A7CD1B3C866F6E9B123963BA49
+      DB574AEC790520E0DC32786B4881D031309131CE3000710DC43E014F354A78B4
+      A2F6389AAB86C24F64E4D7BFF2924B77BCE2A95B377DF47F7CD664EBDF04697C
+      3D1DBEEF3D000010173F737243E02567AFD631F124213E97904E614245420440
+      973BA6CC215B6642B6C0C65845524971738872C4B1146D9BC05BC05103149392
+      B3087544420044364A00680D271141639C719CF2A8C8B923BB30C6EE7481DCCE
+      EDFA26EAFAC5B9E5DE87DEFD8E23575EF504E99DF29A948637A1E95C7DF293E0
+      DB9E75814F29FE2B44FC3712250B31A1A8A088DA98C425019300398A5A2632ED
+      D21113031055921A072A727048B873DE6212824641C78D289217C38804126352
+      9395C54DD08C9E3E9905291DD6470612D775E5A12D5D6847D4DB5C9685237383
+      AFCDAE9D1813E7DF7CC5BFBFE2D8C4CAD9F4D56F5A7DC6339F070000F5C267C1
+      4F3CFB8409603EF1CAA7C20BAFB9B5FE83679DF72911ED1843971AC6892892D7
+      41B351A3746808BE4929B41C7ED332E6735573B60078CFEA8B2CC3DC3B9A2922
+      1C581CCBD10A09D9251125D40613666A2D710251033AC5D69A22D338D1E25449
+      5221ECD82C7532363DB4A63739D9398CC26765A53BFF63D77CE31B573EEB095F
+      BAFC37DF125496A1E9DF0E507F574FB803DEF1FC73E14DD77E07FEF09F9FB32E
+      89BE3825FD17F323983F3AD45B6BC13D8661FBD1DA6D1E35F01B8E911921882A
+      D541B08E114310F24E71752F837E15607ED008A09104844039786B94415251E6
+      777B4A67777D4CA7AC300B833A85DCD9232BB2B0DA5AB3D36459A789F26D63F3
+      6D93B3ED7E7F44C77C69AFDD71D6A95F6C6DDC213BCE988BA18A90EA9EF8C933
+      80CCA927AE0F78C7D5E7C19B6EF836FCFE6F9FD58284BE013C7FD8C0EBE72ABE
+      F8D8D8C42A112725C36C8EA708156A628410023521601DC738AE03784374CACA
+      0E3C3237D07183EAB21C009D7AA3C9B96CCF644E9BBBA5C453579BA5C271DFDA
+      72DE6AB59E89F7DB2C77C0F8882F3AB36C69518D07326E3909BEA735B5A239ED
+      EC6DDFDDBA662F71D68DDC7B61AC8F7E10B2D997FD6A21F0C38337DD70BC4FBF
+      7CE3E6C1CD3FD81538511112A9AACE21480791909092825214445116414621D6
+      44040A0A0082C326C89D3F98A3D3D6743125C5438B4329DB16538C24A9318D38
+      6A65A80681A63BB9A2CD58222742C8B3B2A360A0C8CB0E02A977792E64CBF5C3
+      AABEDAFB4C0EED3DD0EE9870C7EC8A21C5831FD07EFF8174523E8600007EE7D2
+      F3AD04BD7AB9A1578D226D5C6EB0AC127B11263686990918110514420898520D
+      A119430C35C558434A09677B396D9E6DEBDD7B9660DDAA691DF4470B65ABEC9E
+      B69AE3A6293B5AB56AA60F900DACA749540845776234AE47F3336BD6B4FA0BC3
+      C1ECBA4E1EA543D5A89A2F27665159EE6F65FAA9BCA30FAC99AE96B3C9756341
+      A36979A0E5EAE7FD727DC04FBBF0F12F7F2BCC1478C36C11FE67D7350F9726D6
+      169A6831A885463D36E8305041097B39413777D82D4B2C8BB6E67947B22CD77E
+      D5E8EE434BF894EDB3D8F48FC2DA559D0994AA6E1A2006A558477445DECB8A52
+      7DDE322EF3A93D315974263A59D1E96579DE2E26A6275CA7D79EC98BB29D65D9
+      465FB69F5987F613F71CCA564173982D052E666AD4E183303AF2BE5FAE15FE69
+      DCBEFB809CBB6AEDF7C9A4FB09751D2AAEAA53324110A21004410D6021815340
+      0FC84ED91845624432CA6C409460FFD165BCF0CC7518160FC2CCAA358ACD9027
+      5A1964DE86B23B915B63C07ACF45271FFA56D7F7A60A9B24A376AFC88CCBD1E5
+      B6E3B38E902593E5D603BA4E1D801616E89115D34D1CCDF573631792CB4FD337
+      BEE6A9F0F677DD7062040000B873DF01BDFB91C3FB2E3973DD57188013F06C93
+      B08C820688C830A225446B58ADB16099C19041224622D2940498490F1E5B8633
+      B7ACA3BC9EE3F59B3651A80658B6BAA9D56B65653B2397B798D9F68B4E9175A7
+      273262D3CA5B5DF01E8DB145E67397801D9685B3A2A4C430356E6869A19F8EF4
+      8ADA834405EAC76AB9037FFC27D7FEEA21F0A3BCF4B7CE87F77FFE6F8F74BDFC
+      F18ABCFEF06C363ED8E2F190A46E343521A690620C12639024008246C9E6EAF3
+      16F6BA13DA2A5B1212CB37771D13E9ADC56AFE08AEDCB0C5A65417D52871DEEE
+      DAA2B464F396EB4C946D766DDFEA6485712DF4197A9715602CDB562B6F596B5B
+      4591CF3AE737B0CD9EB6B8943D757EB9C89B3A1919D5DC9AAE49465FC013E600
+      00803B1F3C006FF9AD27C27B3EFFADF0E475B377012569926E1F36D01947B588
+      48806408C913A1C9BCE356E6C859370F64763A671E593D93D9CCAA5F585A864D
+      A76CC2345CC2755BB731CA08BBB31BB06C0B5ADF4EB6287CABE34AA042AD3762
+      3892F5DEA06D25366CAD0141B62109B8246C15F4A2AA265CE84BC84D33EFBD82
+      E93E275587AE833F7AD775BF7C15F849C67BAF85A69C80CEE4E5704E7106AE3C
+      55AF1846F38648D901247B9B2B5B4B459E77DAADBC638D2D24C14A82746A9EC3
+      A6588F6749EBD8CB417A2D6BE2A8321B366EB6C610AE3F75ABA20E65E5A6D59A
+      C40D4DD1E16EBB72C033406406C4A26C4A154904DC16C67E2DE01786A3F1783C
+      8EA36A3498A99B786F532F2E1F3A3C7EFB39DBD2FE0D9BA6C6D87A8E56F33742
+      3E79E58911E087D47337619D6A78E7D7FA70F7FBDE6765A97A6904F7AAB1B833
+      943261EB52BBC853ABB0A9CC314C9626AC992D9A6EDB69BD5C8BA626CB5B5981
+      4499E1927B933D5C7BEA060568A437DBD6043D2D4A01326D22841AC8D4C69409
+      30664A1D35540D63D26108218CAA548D86FD6ED3344746A3BE3936577DD299FA
+      5BDBB684DBA6278A2494007085E6D357EACF6C847E5EFCF43375D5D44A3878EC
+      10BCEEB26D9E7AAC95A6A3D6C90FAC4B2E90307A34B3D3659AEDE5CDD4441E2D
+      5B20622AD73967BC3383A55A626862D969837105CF1D3A0AEB4FDF40603275D6
+      8292576244E48C140C11B351CC10891029F784122CA2E30831CB1B8784655367
+      9C17E99C710DDBEEBA6FBCEFB28BEA035967A2A997D38975C08FA2AA70CD8B9E
+      4EFB1617AE12E4FF38487EE3A1B1750D643033D50E176C5F355C3DD3AB26263B
+      9CB5B25CD2F1F25076BC57341634B1B186159996E6FBB061FB665030607DA986
+      5981B384C8B5B596158D1212224394047D498D86504B351A9926D4FDC5C51155
+      C3C587C675E3FB4B4B9F5E3B5D7DE9B44D7CA8B5E1D5CBC3BDFF0DDCC4D9E0DA
+      97FEEA0EF831F5104175499E73D9E5FF471B59C326BDB8DBCA266726B3B4714D
+      27AC9C28A06C65E0CBCC32E7A933D97636CF6D8AA04492F276CE31812009B2CB
+      70EFAE7DB076EB661005143000026C9C310A16008115095411908800843CA57C
+      34CEFBDE269FE505A88C5B88C44D5D5F72F058A87B5DBDD9BA8F0D7D7B126DFB
+      D2541FFD28F899179D38018E8BD00555ADFFFCADCFFFB3DD7B1777F9BC7C6ED9
+      EE6CE94D77D8E7A57179AF85A64CBE5DB2290AB559165B99B3404E43931A9FB1
+      4506623F066083071FDE0FAB4FD908020E55150C1816554030A00A88A080441E
+      8111D0AB7360347AE894E252EC7A823E84E0D72E85E6B29D7B9A875CEBE881A9
+      947B1D7FB5C2ECD7F497EA037E16C383D7C1B3DFF6E9F1E4CAE9AF64EDCE874C
+      56DC0E9CF5B3B255FA326FE765ABEDB3B2642A0C8227850CC964266F778DC95A
+      246A955D07CAC929287B6D38F0D05E9058034840D5444D53B38AA0A400AA8031
+      248B800E90D91A6BD97AF659E6B23C2F7D9E1BE2DC4C74DD36C1FCD7F7EDB5EB
+      8A896C5CF71FC4139204FF3E5AAB9F07CDE046B4E596FA2FFEF4530F22BBB9BC
+      6CE5B6EC4493954334AE41E7ADC9AD63E3198C4B80B661E319980C196FC7D5B2
+      0174D89E98244484437BF6C1CCBA55000D132882AAC7D834681CA9A818224250
+      6C8C610BE0122250E69B366191DAAD818B751E07E3B423C4E689DFB863E9E859
+      679F59FDD29DE0CF83CDDA0070BA5EF57B67CD8524D7F7FB83AF2F2F2D2E55C3
+      01C410383649257122B2C9590FD679464683A0CCCCD06A4F269F950AE4B4D59B
+      049B59983F7814C2B88F31D4A8123149C4941A044D9C522251604422636D8626
+      136B30F7CE3A624F79E178B2431B464D7E6A7F09BBE5C404DCFCB95B0100607E
+      E77FFFC53AC19F590D9A4F82861A8707FFC6A4C1D09EBE3D1F3DB2A75942F693
+      C665CEE5A5F832579739B5D68A8269102912504236919025C6864368D818A729
+      25B4D660538F613C1A83CB18880C3231C4D0A0B51E4405090015108818401515
+      92326AAAEBDA205223AA14A3A4A38BE98EBD7BEE597CC633AF9457BFF4029CDA
+      FC9213EB00742F002A9EA3C3B943315FF3BB63B7EAF706975CDAF96ED636DF21
+      8B03E4044CC24C84CC06B2CC1A9F59B4D6281121A01AEB7C6AB52682B15E8DF1
+      C0C6437BA20B0808D5F23284F112C450638A0DA4D490A440498251150244A3AA
+      8C600488BCB18EDB593DA1E805C973A79D9D2FB1DBD9BFF373D45BFF2C7DE8FB
+      5F39F1210000D05BBF0642FF468C47DEC7BEC874CDDAECCB68CDEEA8149B8492
+      347282C625686C9268130A226144B243501C27899190229B2CB0CD13DB4CDB13
+      254802A8AB01C43004808092028A08484A28124955304934485614D0650E2CD8
+      36108223B6CE5BB3CDBB62E39AADCB601061CF5E3CB149F0EFE2C9F4202C3CA4
+      3CF104B1B9D6A7CE2E1FDCF599E50F57CD5882984D51DDAA52A19B2B9499D78C
+      317A057180C4880886AD468544AC209288381755A5BC15B1A9049C1B03400E92
+      1A54604074201208C480A4A4CC6C18926343758C59C8B3A66C9A66534AE660CE
+      CDCA9DF7084755E1853F3C3902D88917020040357F8B021CA3F1E181B9E03CD9
+      73D7F7EB5D21B9278538ECC5809978E0268218B40DA6844C0A8060450223221C
+      1FBA820210025A655B8287118646212F2348AC01D9A3A4A4284A894855051193
+      414436949C1228336BE6750D08AC1E0DA5DABFDF4F16F4A7736BCFFCFD745242
+      E08738DE059AD6AA161BC2ECE6978C96FACD5FD7E3EAFAA6AE1F8CA15E884D5D
+      835400690C4C5A019963487CCC302DA514EAA61E89481091A00800C6668A2657
+      6280F128029100A1804A449584004292122280052044328E896CE69A56488532
+      4185ECCFCD7C3A7FC0E70200C091FD0F9E7807FC5D28745F068383FF5B893B18
+      FB9F6168EAE53BEEA96E018153EB1A56B1C10468463E434E1A2D6172486855C4
+      000259EF150013A842686A88A122E73D080368125041204AA0AAC06C21860644
+      0144C40022006680D8CF927662EE964DBFC9D63A1BDB29658FCC1F7CA0ABAAF3
+      88080FDC77E7C9710000406BD5CB00C82A165B848B7278D6A9F86035ACAFAD46
+      D591500F41E2424BC27C1BD2C881D6C640ED332736CF7CB4C60404C1181310B1
+      90F11A2302B25397659092800A00A102112202A2AA804822002240A3C42E0350
+      62EBC7B90F3D05DF4284A9A4983FB0FB363C7CE0113C6DFB3927C7013FA498BE
+      1A0040012081F970BAECFC8F7EFD2DFFF9A5C9BAECE964CC99ECDC6A4BA6638C
+      7564FCB22A66922057490E14C05A42554424924612A4A82498D479874D2D6033
+      03220A88C7F72400091135A980477448942C53CC158A5936CDFDE351759AB3FC
+      A5D3B75CA4272509FE83DF0B0F23DE76D795D4D40BFBEA51DAE54C3C2D9871C6
+      E21D789FA9B116C95A22624056000A2981A69828A548CCAC402CAA099208B105
+      6C6A00EB048808D8182044101112516B08A231069A8612198732AE5BC670AF69
+      AA0A00E0AE7BBE0267ED78DAA323C0FCAEF7819B3A432F79CA2E3DB26FFEF0DE
+      23E1DED8341754E37C8328F782FA606CDE186B959888101C917A2235CA6414C0
+      8A4416397E999821C6A8488A2110382FC0E830A5A48880CC8422A844CAD65872
+      66345733AEA91AB9ADD5993EA6F512017A05007D540498DCF2BBFF6F80F27559
+      B9661047E3D1CEB9C5F8374D33B64DBE3C9BE5ED6E59966D83AE6D29CB883300
+      B451002581082828A065643121345604D5398F755D41D38C41C440515A002454
+      11456440F2ACD8242235929093CAC0FBECF0B05A30E8BBD5492D833F7D767031
+      08CF6AB7C31124ED26943E114DB231280A4E555D8C439FE250635C164943AF52
+      172154793D5ECE9A7175DC1F883A1E574ACC8A84508DC620E978694F2902A101
+      4981D86408C489ACCD8A3CDB9D52B8BBEB3BB27FFFDDFCBD073E0FFDD1CE472F
+      07FC5DB3D4FE6D9DD3AF35ABAB7B1EE90F9B9B535C827A142F945428483EF479
+      59297206C425A21B596B466C14AAE1721153F4A1694441C93ACB8488CEA08A05
+      5C5A5A86A2CC61341A61A7434A6C3086618A510135EE2382DBBCB338DF5FC4C9
+      04B461C519DA2ED60A3FDA0254735F826274BF751C69614197E707669502AD54
+      E458476BC635FB26444A292968040591109A165B720A101121309101158E31A8
+      F30E091597874348512049046B2C02AA12214A6C8E89C8EDAAA9DF2AFD3D9393
+      B352CC6C1C4C7457CB68B4F0E83B209FFE6700000100C2C2DE8F5647EF1E5DB7
+      B008BBED48AECAB26695F7E319487ECA702E680D21107BE70621240B020911BD
+      88F489A070967282084CA4ADC2C170149008A0694650981255D2988D038AB015
+      0516EA201BBBCEDE323E3A540080A298787473C04F32B1EE457A6C797E213483
+      43A11E7EB1AE4641D3B0E7CCB0D138ACAB61BDB038BF385C5898AFEA66FC5096
+      FB5DADB2757796676311A8EB0697EA00B5AA883108DE1128200C07CB52554389
+      210E42080F11A49B2D854F38676E4F64A5D54EB47BD7C3BFFA58FC840C53F401
+      D87FFFCDF6DE07D2E9C6954FF6DEADB2D69DC7860A6B4C27CB73B0367FB82CDB
+      07C9640791F93200CA538A456C469B4043C10C6858ED68142044C0A64950B68B
+      DA5BB793887757E3C16D4D35BAD3E2C22D939D2AB4D7FE4B3D21FB022782E6D8
+      F538AC024CAC7D9E7EE1C6F7AF71969E45A4EBADB181ADDD9E67D9C39DCEC46E
+      76E5619B153329E9246AAA8D91CB9A68D7A14A8F74C08834610C6A88C80B8B95
+      218243ED4E5B9B7175538A4BEF767977E07C313F33D31E933D4D1E1302A4C52F
+      00F72E87F77EFA2668DC00CE7547332469A56835CBE8CC76BB2C9DCF45A97B3F
+      A2854EAF5520F091A2E0678CC7D213D173484756807688C8B4B3101532B7DC5F
+      E27DFBE6DCD6AD6BFE03B2D1BA0EF396E63FD776BBEBDBDFF33ABDF06D7BA055
+      6E786C38E047B9E5B61BE1920B8F6F661E3B70933F74309170C9EDF6CC78C3E6
+      1D0960644275645B5D8FDB21360BB15A3CAB3F92686C7BDADBFA3283548DA355
+      C3C97DFF7BBB9F3CBB6AF20F564EDBBF44DBE54670E0F34E3339B1359DB0ADB1
+      93C95F7DE98BB86126A71D4FB838A9F6A13FDF87B215A710A049314068FA082A
+      BA7BCF21DBEBAD9AF43C7C86A1746C7ED90F732FAD7D3FD8DD7FF007FD67FEFA
+      1517FD27A76E916DAE132BB68AAA00229D9C99E089E48A4B9FAA3B9E70713ADE
+      4176A0D50166E79786836A908406D675968BB2359A9ADE80DFBE77B05B217D8D
+      A1FFD713ADE57BCA5CBEF0A4CB2EFAAA23B362F59AF38F8D23406F768B1C7F16
+      C13F0907FC24A3FE6E704E41C2006218631396B4B7E219F0C0CEEFF0695BCF4D
+      3AFE18253D1D511791B229397228645FFDE2779E361C87B52F7AC5ABFE17E23F
+      9957FD39FF5358BAEDC7CEF7DCFFB9E365353D024B073E09F5E04E0400F8E487
+      AEB9E357FE47E8B188EF5EF863E71B4EBFE2B8A5793D7457BF000E1C8E7A7C52
+      6D6E7DE79BFFED96B7BEF625F0B8E45D6F7ECDDAEB3FF5E18FC1E3993FFFC407
+      FFF6A70E701F0F02FCEB97BFD8FFDA93CE9BBEE8FCB3767EF1D66F3C0EC3E075
+      BFD3FECBEB3E76FDE33A0CAEFDC8FBEFFAFFAA0AFCC273C99999EFFDBB97BF60
+      EBE35680E5A5FEB7B69DF3C48B1FB7027CEFDE7BEF5FEAF78BC7AD002D4AF785
+      A5231FFCF8C73FF063EBFF173FD6EBA9961184F10000000049454E44AE426082
+    }
+  end
+  object pnlInfo: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = rbExternal
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Side = asrBottom
+    Left = 30
+    Height = 89
+    Top = 176
+    Width = 381
+    Anchors = [akTop, akLeft, akRight]
+    BorderSpacing.Left = 30
+    BorderSpacing.Top = 12
+    BorderSpacing.Right = 30
+    ClientHeight = 89
+    ClientWidth = 381
+    Color = clWhite
+    ParentColor = False
+    TabOrder = 4
+    Visible = False
+    object lblInfo: TLabel
+      AnchorSideLeft.Control = pnlInfo
+      AnchorSideTop.Control = pnlInfo
+      AnchorSideRight.Control = pnlInfo
+      Left = 1
+      Height = 34
+      Top = 1
+      Width = 370
+      Caption = 'Cqrlog is creatng your first log, it might take some time.'#10'Please be patient!'
+      Font.Color = clMaroon
+      ParentFont = False
+      ShowAccelChar = False
+      WordWrap = True
+    end
+  end
+  object lblError: TLabel
+    AnchorSideLeft.Control = Owner
+    AnchorSideBottom.Control = btnOK
+    AnchorSideBottom.Side = asrBottom
+    Left = 6
+    Height = 1
+    Top = 293
+    Width = 1
+    Anchors = [akLeft, akBottom]
+    BorderSpacing.Left = 6
+    Font.Color = clRed
+    ParentFont = False
+  end
+  object btnHelp: TSpeedButton
+    AnchorSideTop.Control = btnOK
+    AnchorSideRight.Control = btnOK
+    Left = 232
+    Height = 25
+    Top = 269
+    Width = 116
+    Anchors = [akTop, akRight]
+    BorderSpacing.Right = 6
+    Caption = '(Please read)'
+    Glyph.Data = {
+      F6030000424DF6030000000000003600000028000000100000000F0000000100
+      200000000000C003000064000000640000000000000000000000FFFFFF00FFFF
+      FF0095564AFB89463BFF8A4437FF8B4437FF8C4538FF8D4639FF8E4739FF8F48
+      3AFF90493BFF914A3CFF924B3DFF985346F8FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00784641F5DBDCDCFFD4DCDCFFD4DCDCFFD4DCDCFFD3DCDCFFD3DCDCFFD3DC
+      DCFFD3DCDCFFD3DCDCFFD6DCDCFFB0928B8BFFFFFF00FFFFFF00FFFFFF00FFFF
+      FF0096574BF589463BFF8A4437FF8B4437FF8C4538FF8D4639FF8E4739FF8F48
+      3AFF90493BFF914A3CFF924B3DFF9A5547F0FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00AF7467F5AD7568FFB0705EFFB27160FFB47462FFB36E5CFFB56F5DFFBB78
+      66FFBD7B68FFBF7D6BFFC17F6BFFB87563F7FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B4776AF5AE7568FFB37362FFB57462FFB4705DFFDDBEB4FFE7D1CCFFBB79
+      66FFBF7D69FFC17F6CFFC3816DFFBA7664F7FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00DAB2AAFAAF7668FFB97865FFBB7967FFB76F5AFFFDFAFAFFFFFFFFFFC485
+      73FFC3826EFFC68470FFC88672FFBD7966E1FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00AD7062F5B87D70FFBE7D69FFC07E6BFFBF7A66FFDFBCB1FFD9B5ACFFC67F
+      68FFCA8873FFCC8A75FFCE8C76FFBF7D69E2FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B17668F5BC8373FFC3826FFFC5836FFFC27A64FFFDFBFAFFFFFFFFFFC07B
+      68FFCF8B73FFD18F79FFD3917BFFC37F6CE2FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B27769F5C08676FFCA8773FFC88470FFCA846EFFE7C7BCFFFFFFFFFFFBF8
+      F7FFCF9888FFD69178FFD8967FFFC6846FE2FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B2796AF5C58A7BFFCC866FFFE0B8ABFFC8856FFFCF876FFFE3B7A8FFFEFB
+      FAFFFFFFFFFFD19A89FFDE9A81FFCB8772E2FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B07465F5C88C7AFFDFAC9CFFFFFFFFFFF8F2F0FFD28970FFD6896DFFEBC2
+      B6FFFFFFFFFFEED8D1FFE19B82FFCE8B76E2FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00DDB6AFFACB8E7BFFD58B73FFFBF4F1FFFFFFFFFFF9F5F3FFF9EAE5FFFFFF
+      FFFFFFFFFFFFE8B8A4FFEAA48AFFCE8A74E7FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B27667F5D29784FFDE9B82FFDD9981FFEFCABBFFFBF1EEFFFBEFEBFFF9E9
+      E3FFEDB6A2FFEAA589FFEFAC91FFCE8B75E7FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00B67A6CF5D79B88FFE5A088FFE5A288FFE6A086FFE79F84FFE8A185FFEAA4
+      88FFEEAA8EFFF0AE93FFF4B297FFCE8C76E7FFFFFF00FFFFFF00FFFFFF00FFFF
+      FF00E2A289A4D0927FD7D49078DAD39079DAD5927BDAD7947CDAD8947DDADB96
+      7FDADB9880DADC9A81DAE19F86DBD4937CAEFFFFFF00FFFFFF00
+    }
+    OnClick = btnHelpClick
+    ShowHint = True
+    ParentShowHint = False
+  end
+end
diff --git a/src/fDbSqlSel.pas b/src/fDbSqlSel.pas
new file mode 100644
index 0000000..a98292c
--- /dev/null
+++ b/src/fDbSqlSel.pas
@@ -0,0 +1,411 @@
+unit fDbSqlSel;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
+  ExtCtrls, Buttons, LazFileUtils;
+
+type
+
+  { TfrmDbSqlSel }
+
+  TfrmDbSqlSel = class(TForm)
+    btnHelp: TSpeedButton;
+    btnOK: TButton;
+    edtPort: TEdit;
+    edtIP: TEdit;
+    edtUserName: TEdit;
+    edtPassword: TEdit;
+    gbLocalUser: TGroupBox;
+    imLogo: TImage;
+    lblError: TLabel;
+    lblIp: TLabel;
+    lblPort: TLabel;
+    lblInfo: TLabel;
+    lblUsername: TLabel;
+    lblPass: TLabel;
+    lblQuestion: TLabel;
+    lblWelcome: TLabel;
+    pnlWelcome: TPanel;
+    pnlInfo: TPanel;
+    rbFolder: TRadioButton;
+    rbLocal: TRadioButton;
+    rbExternal: TRadioButton;
+    procedure btnHelpClick(Sender: TObject);
+    procedure btnOKClick(Sender: TObject);
+    procedure edtIPExit(Sender: TObject);
+    procedure edtPasswordExit(Sender: TObject);
+    procedure edtPortExit(Sender: TObject);
+    procedure edtUserNameExit(Sender: TObject);
+    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
+    procedure FormCreate(Sender: TObject);
+    procedure rbExternalChange(Sender: TObject);
+    procedure rbFolderClick(Sender: TObject);
+    procedure rbLocalChange(Sender: TObject);
+  private
+    procedure ChkValues;
+    procedure MakeScript1;
+    procedure MakeScript2;
+    procedure ExecuteScript;
+
+  public
+    ip, port, user, pass: string;
+    loc, rdy, Acon, Rmbr: boolean;
+  end;
+
+const
+  C_PATH = '/bin:/usr/bin/:/usr/local/bin/:~/.local/bin:/sbin:/usr/sbin:/usr/local/sbin';
+  C_HEIGHT = 230;
+
+var
+  frmDbSqlSel: TfrmDbSqlSel;
+
+implementation
+
+{ TfrmDbSqlSel }
+
+uses fDBConnect, dUtils;
+
+procedure TfrmDbSqlSel.rbLocalChange(Sender: TObject);
+begin
+  if rbLocal.Checked then
+  begin
+    btnOK.Enabled := True;
+    lblError.Caption := '';
+    lblError.Visible := False;
+    gbLocalUser.Visible := True;
+    frmDbSqlSel.Height := C_HEIGHT + gbLocalUser.Height + btnOK.Height;
+    edtIp.ReadOnly := True;
+    edtIp.Font.Color := clGray;
+    edtport.ReadOnly := True;
+    edtport.Font.Color := clGray;
+    edtIP.Text := 'localhost';
+    edtPort.Text := '3306';
+    repaint;
+    edtUsername.SetFocus;
+    edtUsername.SelectAll;
+  end
+  else
+    frmDbSqlSel.Height := C_HEIGHT;
+end;
+
+procedure TfrmDbSqlSel.rbExternalChange(Sender: TObject);
+begin
+  if rbExternal.Checked then
+  begin
+    btnOK.Enabled := True;
+    lblError.Caption := '';
+    lblError.Visible := False;
+    gbLocalUser.Visible := True;
+    frmDbSqlSel.Height := C_HEIGHT + gbLocalUser.Height + btnOK.Height;
+    edtIp.ReadOnly := False;
+    edtIp.Font.Color := clDefault;
+    edtport.ReadOnly := False;
+    edtport.Font.Color := clDefault;
+    edtIP.Text := '';
+    edtPort.Text := '3306';
+    repaint;
+    edtIP.SetFocus;
+    edtIP.SelectAll;
+  end
+  else
+    frmDbSqlSel.Height := C_HEIGHT;
+end;
+
+procedure TfrmDbSqlSel.rbFolderClick(Sender: TObject);
+begin
+  rbFolder.SetFocus;
+  lblError.Caption := '';
+  lblError.Visible := False;
+  gbLocalUser.Visible := False;
+  btnOK.Enabled := True;
+end;
+
+procedure TfrmDbSqlSel.MakeScript1;   //"create_cqr_user.sh"
+var
+  UsrHome: string;
+  f: TextFile;
+begin
+  UsrHome := dmUtils.GetHomeDirectory;
+
+  AssignFile(f, UsrHome + 'create_cqr_user.sh');
+  rewrite(f);
+  Writeln(f, '#!/bin/bash');
+  Writeln(f);
+  Writeln(f, 'echo -e "\nCreating user ' + user + '@localhost for CQRLOG use\n"');
+  Writeln(f, 'sudo -p "Give user %u password for sudo: " mysql<<EOFSQL');
+  Writeln(f);
+  Writeln(f, 'CREATE USER IF NOT EXISTS ' + #$27 + user + #$27 + '@' + #$27 +
+    'localhost' + #$27 + ' IDENTIFIED BY ' + #$27 + pass + #$27 + ';');
+  Writeln(f, 'GRANT ALL PRIVILEGES ON *.* TO ' + #$27 + user + #$27 + '@' +
+    #$27 + 'localhost' + #$27 + ';');
+  Writeln(f, 'FLUSH PRIVILEGES;');
+  Writeln(f, 'EOFSQL');
+  Writeln(f);
+  Writeln(f, 'status=$?');
+  Writeln(f, '[ $status -eq 0 ] && echo -e "\nUser creation SUCCESS !"');
+  Writeln(f, '[ $status -eq 0 ] && echo $status > /tmp/cqrSQLUsrCreate');
+  Writeln(f, '[ $status -ne 0 ] && echo -e "\nUser creation FAILED !\n\nCheck error !"');
+  Writeln(f, 'read -p "Press enter to continue"');
+  Writeln(f, 'echo Done! > /tmp/cqrBashDone');
+  Writeln(f, 'exit $status');
+  closeFile(f);
+  dmUtils.ExecuteCommand('chmod a+rwx ' + UsrHome + 'create_cqr_user.sh');
+end;
+
+procedure TfrmDbSqlSel.MakeScript2;   //"backup_all_cqr.sh"
+var
+  UsrHome: string;
+  f: TextFile;
+begin
+  UsrHome := dmUtils.GetHomeDirectory;
+
+  AssignFile(f, UsrHome + 'backup_all_cqr.sh');
+  rewrite(f);
+  Writeln(f, '#!/bin/bash');
+  Writeln(f);
+  Writeln(f, 'stamp=$(date +_%Y%m%d-%H%M)');
+  Writeln(f, 'echo -e "\nStarted$stamp"');
+  Writeln(f, 'echo -e "Creating common backup of all CQRLOG logs in database to /tmp/allcqrlogs$stamp.sql"');
+  Writeln(f, '$(mysql -u' + user + ' -p' + pass + ' -B -N -h' + ip + ' -P' + port +
+             ' -e " show databases like ' + #$27 + 'cqr%' + #$27 + '" |\');
+  Writeln(f, 'xargs  echo -n mysqldump -q -h' + ip + ' -P' + port + ' -u' +
+              user + ' -p' + pass + ' --databases) > /tmp/allcqrlogs$stamp.sql');
+
+  Writeln(f, 'echo -e "Creating separate backups of each CQRLOG logXXX in database to /tmp/cqrlogXXX$stamp.sql(s)\n"');
+  Writeln(f, 'mysql -u' + user + ' -p' + pass + ' -B -N -h' + ip + ' -P' + port +
+             ' -e " show databases like ' + #$27 + 'cqr%' + #$27 + '" |\');
+  Writeln(f, 'xargs -d\ | while read line; do if [[ $line != "" ]];then\');
+  Writeln(f, ' echo "mysqldump -q -h' + ip + ' -P' + port + ' -u' +
+              user + ' -p' + pass + ' $line > /tmp/$line$stamp.sql";fi;done > /tmp/sepsql.sh');
+  Writeln(f, 'chmod a+x /tmp/sepsql.sh');
+  Writeln(f, '/tmp/sepsql.sh');
+  Writeln(f, 'rm /tmp/sepsql.sh');
+
+
+  Writeln(f, 'echo -e "\nDone!\nCopy backup files to your safe place.\n'+
+             'They will be erased from /tmp at next Linux start\n\n"');
+  Writeln(f, 'echo "To restore all CQRLOG logs use command:"');
+  Writeln(f, 'echo -e "mysql -h' + ip + ' -P' + port + ' -u' + user + ' -p' + pass +
+             ' < /tmp/allcqrlogs$stamp.sql\n\n"');
+  Writeln(f, 'echo "To restore single a log use command:"');
+  Writeln(f, 'echo "mysql -h' + ip + ' -P' + port + ' -u' + user + ' -p' + pass +
+             ' cqrlog001 < /tmp/cqrlog001$stamp.sql"');
+  Writeln(f, 'echo -e "\nBe sure that both log numbers used in line are equal"');
+  closeFile(f);
+  dmUtils.ExecuteCommand('chmod a+rwx ' + UsrHome + 'backup_all_cqr.sh');
+end;
+
+procedure TfrmDbSqlSel.ExecuteScript;
+var
+  UsrHome, Terminal, msg: string;
+  c: integer;
+begin
+  UsrHome := dmUtils.GetHomeDirectory;
+  //try to find three well-known terminals
+  Terminal := FileSearch('xterm', C_PATH, True);
+  if Terminal = '' then
+    Terminal := FileSearch('gnome-terminal', C_PATH, True);
+  if Terminal = '' then
+    Terminal := FileSearch('lxterminal', C_PATH, True);
+  if Terminal = '' then
+    ShowMessage('CQRLOG did not find command-line terminal from your system!')
+  else
+    dmUtils.ExecuteCommand(Terminal + ' -e ' + UsrHome + 'create_cqr_user.sh');
+
+  c := 60;   //max timeout in seconds
+  repeat   //we need this stupid wait because [poWaitOnExit] did not work with Mint 20 !
+    begin
+      sleep(1000);
+      Application.ProcessMessages;
+      Dec(c);
+    end;
+  until ((Terminal = '') or (c < 1) or (FileExists('/tmp/cqrBashDone')));
+
+  if FileExists('/tmp/cqrSQLUsrCreate') then
+  begin
+    msg := 'It looks like SQL user addition went ok.' +
+      LineEnding + 'You can press OK now.' + LineEnding + LineEnding;
+  end
+  else begin
+    msg := 'If you did not see terminal and enter your password there'
+      + LineEnding + 'then do this:' + LineEnding +
+      'Open linux command-line terminal and type:' + LineEnding + UsrHome +
+      'create_cqr_user.sh (and press enter)' + LineEnding +
+      LineEnding + 'After that is done without errors close terminal and press OK here'
+      + LineEnding + LineEnding;
+  end;
+
+
+  msg := msg + 'Backup of all CQRLOG SQL databases can be done at any '
+    + LineEnding + 'time from command-line terminal by typing:'
+    + LineEnding + UsrHome + 'backup_all_cqr.sh (and pressing enter)';
+
+  ShowMessage(msg);
+  Application.ProcessMessages;
+end;
+
+procedure TfrmDbSqlSel.btnOKClick(Sender: TObject);
+
+begin
+  btnOK.SetFocus;
+  gbLocalUser.Visible := True;
+  //these lines are needed for RPi graphics
+  frmDbSqlSel.Height := C_HEIGHT + gbLocalUser.Height + btnOK.Height;
+  //to show lblInfo ok in default selection !?!?!
+  gbLocalUser.SendToBack;
+  gbLocalUser.Visible := False;
+  frmDbSqlSel.Height := C_HEIGHT + pnlInfo.Height;
+
+  if rbExternal.Checked then
+  begin
+    //set info text and return value
+    lblInfo.Caption := 'CQRLOG is connecting to SQL server and ' +
+      LineEnding + 'creating a new log if needed. Please be patient!';
+    pnlInfo.Visible := True;
+    pnlInfo.BringToFront;
+    pnlInfo.Repaint;
+    ip := edtIp.Text;
+    port := edtPort.Text;
+    user := edtUsername.Text;
+    pass := edtPassword.Text;
+    loc := False;
+    Acon := True;
+    Rmbr := True;
+    MakeScript2;
+  end;
+  if rbLocal.Checked then
+  begin
+    lblInfo.Caption := 'CQRLOG is connecting to SQL server and ' +
+      LineEnding + 'creating a new log if needed. Please be patient!';
+    pnlInfo.Visible := True;
+    pnlInfo.BringToFront;
+    pnlInfo.Repaint;
+    ip := edtIp.Text;
+    port := edtPort.Text;
+    user := edtUsername.Text;
+    pass := edtPassword.Text;
+    loc := False;
+    Acon := True;
+    Rmbr := True;
+    //create script for making sql user, save it and then exceute it
+    //set values to database connect and exit
+    MakeScript1;
+    MakeScript2;
+    ExecuteScript;
+  end;
+
+  btnOK.Visible := False;
+  btnHelp.Visible := False;
+  pnlInfo.Visible := True;
+  pnlInfo.BringToFront;
+  pnlInfo.Repaint;
+  rdy := True;
+  Application.ProcessMessages;
+  sleep(4000);
+
+  Close;
+end;
+
+procedure TfrmDbSqlSel.btnHelpClick(Sender: TObject);
+var
+  xdg: string;
+  pathToHelp : string;
+begin
+  xdg := FileSearch('xdg-open', C_PATH, True);
+  if xdg <> '' then
+  begin
+    pathToHelp := ExpandFileNameUTF8('..' + DirectorySeparator + 'share' + DirectorySeparator + 'cqrlog' + DirectorySeparator +
+                                     'help' + DirectorySeparator + 'firsttime.html');
+
+    dmUtils.RunOnBackground(xdg + ' ' + pathToHelp);
+  end;
+end;
+
+procedure TfrmDbSqlSel.ChkValues;
+begin
+  btnOK.Enabled := True;
+  lblError.Caption := '';
+  lblError.Visible := False;
+  if edtIP.Text = '' then
+  begin
+    btnOK.Enabled := False;
+    lblError.Caption := 'IP address can not be empty !';
+    lblError.Visible := True;
+    exit;
+  end;
+  if edtPort.Text = '' then
+  begin
+    btnOK.Enabled := False;
+    lblError.Caption := 'Port can not be empty !';
+    lblError.Visible := True;
+    exit;
+  end;
+  if length(edtUsername.Text) < 4 then
+  begin
+    btnOK.Enabled := False;
+    lblError.Caption := 'Username must be at least 4 characters long !';
+    lblError.Visible := True;
+    exit;
+  end;
+  if edtPassword.Text = '' then
+  begin
+    btnOK.Enabled := False;
+    lblError.Caption := 'Password can not be empty !';
+    lblError.Visible := True;
+    exit;
+  end;
+end;
+
+procedure TfrmDbSqlSel.edtIPExit(Sender: TObject);
+begin
+  ChkValues;
+end;
+
+procedure TfrmDbSqlSel.edtPasswordExit(Sender: TObject);
+begin
+  ChkValues;
+end;
+
+procedure TfrmDbSqlSel.edtPortExit(Sender: TObject);
+begin
+  ChkValues;
+end;
+
+procedure TfrmDbSqlSel.edtUserNameExit(Sender: TObject);
+begin
+  ChkValues;
+end;
+
+procedure TfrmDbSqlSel.FormClose(Sender: TObject; var CloseAction: TCloseAction);
+begin
+  rdy := True;
+end;
+
+procedure TfrmDbSqlSel.FormCreate(Sender: TObject);
+begin
+  ip := 'localhost';
+  port := '64000';
+  user := 'cqrlog';
+  pass := 'cqrlog';
+  loc := True;
+  rdy := False;
+  Acon := False;
+  Rmbr := False;
+  frmDbSqlSel.Height := C_HEIGHT;
+  lblError.Caption := '';
+  lblError.Visible := False;
+  DeleteFile('/tmp/cqrSQLUsrCreate');
+  DeleteFile('/tmp/cqrBashDone');
+end;
+
+
+
+
+initialization
+  {$I fDbSqlSel.lrs}
+
+end.
diff --git a/src/fEDIExport.lfm b/src/fEDIExport.lfm
index 469a656..ce312bb 100644
--- a/src/fEDIExport.lfm
+++ b/src/fEDIExport.lfm
@@ -1,234 +1,363 @@
 object frmEDIExport: TfrmEDIExport
-  Left = 819
-  Height = 414
+  Left = 760
+  Height = 457
   Top = 254
   Width = 516
   Caption = 'Export for contests'
-  ClientHeight = 414
+  ClientHeight = 457
   ClientWidth = 516
   OnClose = FormClose
   OnShow = FormShow
-  LCLVersion = '1.8.2.0'
-  object Label1: TLabel
-    Left = 8
+  LCLVersion = '2.0.12.0'
+  object lblFilename: TLabel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = Owner
+    Left = 6
     Height = 17
-    Top = 8
-    Width = 66
+    Top = 7
+    Width = 63
+    BorderSpacing.Left = 6
+    BorderSpacing.Top = 7
     Caption = 'Filename:'
     ParentColor = False
   end
   object edtFileName: TEdit
-    Left = 8
-    Height = 25
-    Top = 32
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = lblFilename
+    AnchorSideTop.Side = asrBottom
+    Left = 6
+    Height = 34
+    Top = 27
     Width = 421
+    BorderSpacing.Top = 3
     TabOrder = 0
   end
-  object Button1: TButton
-    Left = 433
+  object btnBrowse: TButton
+    AnchorSideLeft.Control = edtFileName
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtFileName
+    AnchorSideTop.Side = asrCenter
+    Left = 430
     Height = 25
-    Top = 34
+    Top = 32
     Width = 75
+    BorderSpacing.Left = 3
     Caption = 'Browse'
-    OnClick = Button1Click
+    OnClick = btnBrowseClick
     TabOrder = 1
   end
   object btnClose: TButton
-    Left = 434
+    AnchorSideTop.Side = asrCenter
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = Owner
+    AnchorSideBottom.Side = asrBottom
+    Left = 435
     Height = 25
-    Top = 368
+    Top = 420
     Width = 75
+    Anchors = [akRight, akBottom]
+    BorderSpacing.Right = 6
+    BorderSpacing.Bottom = 12
     Cancel = True
     Caption = 'Close'
     ModalResult = 2
     TabOrder = 10
   end
   object btnExport: TButton
+    AnchorSideTop.Control = btnClose
+    AnchorSideTop.Side = asrCenter
+    AnchorSideRight.Control = btnClose
     Left = 345
     Height = 25
-    Top = 368
-    Width = 75
+    Top = 420
+    Width = 79
+    Anchors = [akTop, akLeft, akRight]
+    BorderSpacing.Right = 11
     Caption = 'Export'
     OnClick = btnExportClick
     TabOrder = 9
   end
   object pbExport: TProgressBar
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = btnClose
+    AnchorSideTop.Side = asrCenter
+    Left = 6
     Height = 20
-    Top = 370
+    Top = 422
     Width = 264
     Step = 1
     TabOrder = 11
   end
   object lblDone: TLabel
-    Left = 289
+    AnchorSideLeft.Control = pbExport
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = btnClose
+    AnchorSideTop.Side = asrCenter
+    Left = 282
     Height = 17
-    Top = 372
-    Width = 37
+    Top = 424
+    Width = 34
+    Anchors = [akTop, akLeft, akRight]
+    BorderSpacing.Left = 12
     Caption = 'Done'
     ParentColor = False
     Visible = False
   end
   object lblContestName: TLabel
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtContestName
+    AnchorSideTop.Side = asrCenter
+    Left = 6
     Height = 17
-    Top = 72
-    Width = 99
+    Top = 74
+    Width = 95
     Caption = 'Contest name:'
     ParentColor = False
   end
   object lblTxEquipment: TLabel
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtTxEquipment
+    AnchorSideTop.Side = asrCenter
+    Left = 6
     Height = 17
-    Top = 104
-    Width = 100
+    Top = 111
+    Width = 95
     Caption = 'TX Equipment:'
     ParentColor = False
   end
   object edtContestName: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
-    AnchorSideTop.Control = lblContestName
-    AnchorSideTop.Side = asrCenter
-    Left = 122
-    Height = 25
-    Top = 68
+    AnchorSideTop.Control = edtFileName
+    AnchorSideTop.Side = asrBottom
+    Left = 116
+    Height = 34
+    Top = 65
     Width = 307
     BorderSpacing.Left = 15
+    BorderSpacing.Top = 4
     TabOrder = 2
   end
   object edtTxEquipment: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtContestName
     AnchorSideTop.Side = asrBottom
-    Left = 122
-    Height = 25
-    Top = 100
+    Left = 116
+    Height = 34
+    Top = 102
     Width = 307
     BorderSpacing.Left = 15
+    BorderSpacing.Top = 3
     TabOrder = 3
   end
   object lblRxEquipment: TLabel
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtRxEquipment
+    AnchorSideTop.Side = asrCenter
+    Left = 6
     Height = 17
-    Top = 168
-    Width = 101
+    Top = 185
+    Width = 96
     Caption = 'RX Equipment:'
     ParentColor = False
   end
   object edtRxEquipment: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtTxPower
     AnchorSideTop.Side = asrBottom
-    Left = 122
-    Height = 25
-    Top = 164
+    Left = 116
+    Height = 34
+    Top = 176
     Width = 307
     BorderSpacing.Left = 15
+    BorderSpacing.Top = 3
     TabOrder = 5
   end
   object lblAntenna: TLabel
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtAntenna
+    Left = 6
     Height = 17
-    Top = 200
-    Width = 62
+    Top = 213
+    Width = 58
     Caption = 'Antenna:'
     ParentColor = False
   end
   object edtAntenna: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtRxEquipment
     AnchorSideTop.Side = asrBottom
-    Left = 122
-    Height = 25
-    Top = 196
+    Left = 116
+    Height = 34
+    Top = 213
     Width = 307
     BorderSpacing.Left = 15
-    TabOrder = 6
+    BorderSpacing.Top = 3
+    TabOrder = 12
   end
   object lblAntennaHeight: TLabel
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtAntennaHeightGroundLevel
+    AnchorSideTop.Side = asrCenter
+    Left = 6
     Height = 17
-    Top = 232
-    Width = 137
+    Top = 259
+    Width = 132
     Caption = 'Antenna Height (m):'
     ParentColor = False
   end
   object edtAntennaHeightGroundLevel: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtAntenna
     AnchorSideTop.Side = asrBottom
     Left = 152
-    Height = 25
-    Top = 228
+    Height = 34
+    Top = 250
     Width = 48
     Anchors = [akTop]
     BorderSpacing.Left = 15
+    BorderSpacing.Top = 3
     NumbersOnly = True
     TabOrder = 7
   end
   object lblAntennaHeightSeaLevel: TLabel
-    Left = 208
+    AnchorSideLeft.Control = edtAntennaHeightGroundLevel
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtAntennaHeightGroundLevel
+    AnchorSideTop.Side = asrCenter
+    Left = 213
     Height = 17
-    Top = 232
-    Width = 94
+    Top = 259
+    Width = 89
+    BorderSpacing.Left = 13
     Caption = 'above ground'
     ParentColor = False
   end
   object edtAntennaHeightSeaLevel: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtAntennaHeightGroundLevel
     AnchorSideTop.Side = asrBottom
     Left = 152
-    Height = 25
-    Top = 260
+    Height = 34
+    Top = 287
     Width = 48
     Anchors = [akTop]
     BorderSpacing.Left = 15
+    BorderSpacing.Top = 3
     NumbersOnly = True
     TabOrder = 8
   end
   object lblAntennaHeightGroundLevel: TLabel
+    AnchorSideTop.Control = edtAntennaHeightSeaLevel
+    AnchorSideTop.Side = asrCenter
     Left = 208
     Height = 17
-    Top = 264
-    Width = 104
+    Top = 296
+    Width = 103
     Caption = 'above sea level'
     ParentColor = False
   end
   object lblTxPower: TLabel
-    Left = 7
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtTxPower
+    AnchorSideTop.Side = asrCenter
+    Left = 6
     Height = 17
-    Top = 136
-    Width = 96
+    Top = 148
+    Width = 92
     Caption = 'TX Power (W):'
     ParentColor = False
   end
   object edtTxPower: TEdit
     AnchorSideLeft.Control = lblContestName
     AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtTxEquipment
     AnchorSideTop.Side = asrBottom
-    Left = 122
-    Height = 25
-    Top = 132
+    Left = 116
+    Height = 34
+    Top = 139
     Width = 78
     BorderSpacing.Left = 15
+    BorderSpacing.Top = 3
     NumbersOnly = True
     TabOrder = 4
   end
+  object lblDigitalModes: TLabel
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = edtDigitalModes
+    AnchorSideTop.Side = asrCenter
+    Left = 6
+    Height = 17
+    Top = 333
+    Width = 94
+    Caption = 'Digital Modes:'
+    ParentColor = False
+  end
+  object edtDigitalModes: TEdit
+    AnchorSideLeft.Control = lblContestName
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = edtAntennaHeightSeaLevel
+    AnchorSideTop.Side = asrBottom
+    Left = 116
+    Height = 34
+    Top = 324
+    Width = 307
+    BorderSpacing.Left = 15
+    BorderSpacing.Top = 3
+    TabOrder = 6
+  end
   object lblError: TLabel
-    Left = 8
+    AnchorSideLeft.Control = lblFilename
+    AnchorSideTop.Control = chcSerialNr
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 17
-    Top = 344
-    Width = 98
+    Top = 387
+    Width = 94
+    BorderSpacing.Top = 6
     Caption = 'Error message'
     ParentColor = False
     Visible = False
   end
+  object btnResultFile: TButton
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = btnClose
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = btnClose
+    Left = 347
+    Height = 25
+    Top = 389
+    Width = 163
+    Anchors = [akRight, akBottom]
+    BorderSpacing.Bottom = 6
+    Caption = 'Open exported file'
+    OnClick = btnResultFileClick
+    TabOrder = 13
+    Visible = False
+  end
+  object chcSerialNr: TCheckBox
+    AnchorSideLeft.Control = edtDigitalModes
+    AnchorSideTop.Control = edtDigitalModes
+    AnchorSideTop.Side = asrBottom
+    Left = 116
+    Height = 23
+    Top = 358
+    Width = 240
+    Caption = 'Export requires serial nr (stx/srx)'
+    Checked = True
+    State = cbChecked
+    TabOrder = 14
+  end
   object dlgSave: TSaveDialog
     DefaultExt = '.edi'
     Filter = 'EDI file|*.edi'
-    left = 477
-    top = 236
+    Left = 477
+    Top = 236
   end
 end
diff --git a/src/fEDIExport.pas b/src/fEDIExport.pas
index 999eccb..2d5ebbb 100644
--- a/src/fEDIExport.pas
+++ b/src/fEDIExport.pas
@@ -6,7 +6,7 @@ interface
 
 uses
   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
-  StdCtrls, ComCtrls, LCLType, LazFileUtils;
+  StdCtrls, ComCtrls, LCLType, LazFileUtils, StrUtils;
 
 type
 
@@ -15,7 +15,9 @@ type
   TfrmEDIExport = class(TForm)
     btnClose: TButton;
     btnExport: TButton;
-    Button1: TButton;
+    btnBrowse: TButton;
+    btnResultFile: TButton;
+    chcSerialNr: TCheckBox;
     dlgSave: TSaveDialog;
     edtAntennaHeightSeaLevel: TEdit;
     edtContestName: TEdit;
@@ -25,7 +27,8 @@ type
     edtAntenna: TEdit;
     edtAntennaHeightGroundLevel: TEdit;
     edtTxPower: TEdit;
-    Label1: TLabel;
+    edtDigitalModes: TEdit;
+    lblFilename: TLabel;
     lblError: TLabel;
     lblAntennaHeight: TLabel;
     lblAntennaHeightSeaLevel: TLabel;
@@ -36,11 +39,14 @@ type
     lblDone: TLabel;
     lblRxEquipment: TLabel;
     lblTxPower: TLabel;
+    lblDigitalModes: TLabel;
     pbExport: TProgressBar;
     procedure btnExportClick(Sender: TObject);
-    procedure Button1Click(Sender: TObject);
+    procedure btnBrowseClick(Sender: TObject);
+    procedure btnResultFileClick(Sender: TObject);
     procedure FormClose(Sender : TObject; var CloseAction : TCloseAction);
     procedure FormShow(Sender : TObject);
+
   private
     procedure SaveSettings;
 
@@ -62,6 +68,7 @@ uses dData,dUtils,dDXCC,fWorkedGrids, uMyIni;
 
 procedure TfrmEDIExport.FormShow(Sender : TObject);
 begin
+  btnResultFile.Visible:=false;
   dmUtils.LoadWindowPos(self);
   lblError.Visible := False;
   edtFileName.Text  := cqrini.ReadString('EdiExport','FileName','');
@@ -72,6 +79,7 @@ begin
   edtContestName.Text := cqrini.ReadString('EdiExport','ContestName','');
   edtTxEquipment.Text := cqrini.ReadString('EdiExport','TxEquipment','');
   edtTxPower.Text := cqrini.ReadString('EdiExport','TxPower','');
+  edtDigitalModes.Text := cqrini.ReadString('EdiExport','DigitalModes','');
   edtRxEquipment.Text := cqrini.ReadString('EdiExport','RxEquipment','');
   edtAntenna.Text := cqrini.ReadString('EdiExport','Antenna','');
   edtAntennaHeightGroundLevel.Text := cqrini.ReadString('EdiExport','AntennaHeightGroundLevel','');
@@ -79,12 +87,14 @@ begin
 
 end;
 
+
 procedure TfrmEDIExport.SaveSettings;
 begin
   cqrini.WriteString('EdiExport','FileName',edtFileName.Text);
   cqrini.WriteString('EdiExport','ContestName',edtContestName.Text);
   cqrini.WriteString('EdiExport','TxEquipment',edtTxEquipment.Text);
   cqrini.WriteString('EdiExport','TxPower',edtTxPower.Text);
+  cqrini.WriteString('EdiExport','DigitalModes',edtDigitalModes.Text);
   cqrini.WriteString('EdiExport','RxEquipment',edtRxEquipment.Text);
   cqrini.WriteString('EdiExport','Antenna',edtAntenna.Text);
   cqrini.WriteString('EdiExport','AntennaHeightGroundLevel',edtAntennaHeightGroundLevel.Text);
@@ -92,6 +102,8 @@ begin
 end;
 
 function TfrmEDIExport.EdiMode(mode: string): String;
+//2022-05-05 OH1KH It seems that EDI mode can be CqrMode (I.E. no mode+submode pairs needed)
+//otherwise use dmUtils.ModeFromCqr to get mode and submode at this point
 begin
   Result := '0';
   case mode of
@@ -103,6 +115,11 @@ begin
     'SSTV': Result := '8';
     'ATV':  Result := '9';
   end; //case
+  if Result = '0' then
+  begin
+    if PosEx(mode, edtDigitalModes.Text) > 0 then
+      Result := '7';
+  end; //if
 end;
 
 function TfrmEDIExport.EdiBand(band: string): String;
@@ -111,8 +128,8 @@ begin
   case band of
     '6M':       Result := '50 MHz';
     '4M':       Result := '70 MHz';
-    '2M':       Result := '144 MHz';
-    '70CM':     Result := '432 MHz';
+    '2M':       Result := '145 MHz';
+    '70CM':     Result := '435 MHz';
     '23CM':     Result := '1,3 GHz';
     '13CM':     Result := '2,3 GHz';
     '9CM':      Result := '3,4 GHz';
@@ -129,12 +146,26 @@ begin
   dmUtils.SaveWindowPos(self)
 end;
 
-procedure TfrmEDIExport.Button1Click(Sender : TObject);
+procedure TfrmEDIExport.btnBrowseClick(Sender : TObject);
 begin
   if dlgSave.Execute then
     edtFileName.Text := dlgSave.FileName
 end;
 
+procedure TfrmEDIExport.btnResultFileClick(Sender: TObject);
+var
+  prg: string;
+begin
+  try
+    prg := cqrini.ReadString('ExtView', 'txt', '');
+    if prg<>'' then
+      dmUtils.RunOnBackground(prg + ' ' + edtFileName.Text)
+     else ShowMessage('No external text viewer defined!'+#10+'See: prefrences/External viewers');
+  finally
+   //done
+  end;
+end;
+
 procedure TfrmEDIExport.btnExportClick(Sender: TObject);
 var
   AllQSO     : Boolean=False;
@@ -150,6 +181,7 @@ var
   qrb, qrc   : String;
   odx        : Integer = 0;
   odx_call, odx_wwl : String;
+  QsoMax     : Integer = 0;
   i          : Integer = 0;
   j          : Integer = 0;
   startdate, enddate: String;
@@ -240,6 +272,7 @@ begin
     pbExport.Max := dmData.Q.RecordCount;
     while not dmData.Q.Eof do
     begin
+      inc(QsoMax);
       // Check for missing mandatory fields
       if (dmData.Q.FieldByName('rst_s').AsString = '') then
       begin
@@ -253,17 +286,20 @@ begin
         dmData.Q.Next;
         Continue;
       end;
-      if (dmData.Q.FieldByName('stx').AsString = '') then
-      begin
-        pbExport.StepIt;
-        dmData.Q.Next;
-        Continue;
-      end;
-      if (dmData.Q.FieldByName('srx').AsString = '') then
-      begin
-        pbExport.StepIt;
-        dmData.Q.Next;
-        Continue;
+      if chcSerialNr.Checked then
+      begin;
+        if (dmData.Q.FieldByName('stx').AsString = '') then
+        begin
+          pbExport.StepIt;
+          dmData.Q.Next;
+          Continue;
+        end;
+        if (dmData.Q.FieldByName('srx').AsString = '') then
+        begin
+          pbExport.StepIt;
+          dmData.Q.Next;
+          Continue;
+        end;
       end;
       loc := UpperCase(dmData.Q.FieldByName('srx_string').AsString);
       if (loc = '') then //or not frmWorkedGrids.GridOK(loc) then
@@ -409,17 +445,19 @@ begin
                                mb_OK+mb_IconError)
       end
   end;
-  if ((pbExport.Max - i) > 0) then
+  if ((QsoMax - i) > 0) then
   begin
-    lblError.Caption := IntToStr(pbExport.Max - i)+' of '+IntToStr(pbExport.Max)+' entries were ignored! Please check log entries.';
+    lblError.Caption := IntToStr(QsoMax - i)+' of '+IntToStr(QsoMax)+' entries were ignored! Please check log entries.';
     lblError.Font.Color := clRed;
     lblError.Visible := True;
   end
   else
   begin
-    lblError.Caption := IntToStr(pbExport.Max)+' entries were exported.';
+    lblError.Caption := IntToStr(QsoMax)+' entries were exported.';
+    lblError.Font.Color := clGreen;
     lblError.Visible := True;
   end;
+  btnResultFile.Visible:=True;
 end;
 
 end.
diff --git a/src/fExLabelPrint.lfm b/src/fExLabelPrint.lfm
index 8509d59..642fbcc 100644
--- a/src/fExLabelPrint.lfm
+++ b/src/fExLabelPrint.lfm
@@ -1,7 +1,7 @@
 object frmExLabelPrint: TfrmExLabelPrint
-  Left = 709
+  Left = 2485
   Height = 522
-  Top = 11
+  Top = 248
   Width = 424
   HelpType = htKeyword
   HelpKeyword = 'help/h22.html#bh4'
@@ -14,15 +14,15 @@ object frmExLabelPrint: TfrmExLabelPrint
   OnClose = FormClose
   OnShow = FormShow
   Position = poMainFormCenter
-  LCLVersion = '2.0.4.0'
+  LCLVersion = '2.0.10.0'
   object Label1: TLabel
     AnchorSideLeft.Control = gchkExport
     AnchorSideTop.Control = edtQSOsToLabel
     AnchorSideTop.Side = asrCenter
     Left = 5
-    Height = 17
+    Height = 15
     Top = 139
-    Width = 34
+    Width = 36
     BorderSpacing.Top = 11
     Caption = 'Print '
     ParentColor = False
@@ -32,21 +32,21 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtQSOsToLabel
     AnchorSideTop.Side = asrCenter
-    Left = 94
-    Height = 17
+    Left = 96
+    Height = 15
     Top = 139
-    Width = 119
+    Width = 121
     BorderSpacing.Left = 4
     Caption = 'QSOs on one label'
     ParentColor = False
   end
   object lblProgress: TLabel
     AnchorSideLeft.Control = chkMarkSent
-    AnchorSideTop.Control = chkMarkSent
+    AnchorSideTop.Control = chkKeepCsvStructure
     AnchorSideTop.Side = asrBottom
     Left = 5
     Height = 20
-    Top = 431
+    Top = 456
     Width = 412
     Alignment = taCenter
     AutoSize = False
@@ -93,7 +93,7 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideTop.Side = asrBottom
     Left = 5
     Height = 97
-    Top = 303
+    Top = 302
     Width = 412
     Caption = ' Export to '
     ClientHeight = 79
@@ -106,7 +106,7 @@ object frmExLabelPrint: TfrmExLabelPrint
       AnchorSideRight.Side = asrBottom
       Left = 320
       Height = 25
-      Top = 43
+      Top = 42
       Width = 75
       Anchors = [akTop, akRight]
       BorderSpacing.Top = 3
@@ -119,7 +119,7 @@ object frmExLabelPrint: TfrmExLabelPrint
       AnchorSideLeft.Side = asrCenter
       AnchorSideTop.Control = GroupBox1
       Left = 16
-      Height = 34
+      Height = 33
       Top = 6
       Width = 379
       BorderSpacing.Top = 6
@@ -131,8 +131,8 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = gchkExport
     AnchorSideTop.Side = asrBottom
-    Left = 42
-    Height = 34
+    Left = 44
+    Height = 33
     Top = 130
     Width = 48
     BorderSpacing.Left = 3
@@ -147,7 +147,7 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideTop.Side = asrBottom
     Left = 5
     Height = 136
-    Top = 167
+    Top = 166
     Width = 412
     BorderSpacing.Top = 3
     Caption = ' Remarks '
@@ -160,7 +160,7 @@ object frmExLabelPrint: TfrmExLabelPrint
       Left = 9
       Height = 23
       Top = 3
-      Width = 198
+      Width = 203
       BorderSpacing.Left = 9
       BorderSpacing.Top = 3
       Caption = 'Print ''Comment(s) to QSO'''
@@ -185,7 +185,7 @@ object frmExLabelPrint: TfrmExLabelPrint
       AnchorSideTop.Control = rbOwnRemarks
       AnchorSideTop.Side = asrBottom
       Left = 17
-      Height = 34
+      Height = 33
       Top = 52
       Width = 376
       BorderSpacing.Top = 3
@@ -198,8 +198,8 @@ object frmExLabelPrint: TfrmExLabelPrint
       AnchorSideTop.Side = asrBottom
       Left = 9
       Height = 23
-      Top = 87
-      Width = 256
+      Top = 86
+      Width = 262
       BorderSpacing.Top = 1
       Caption = 'Remove separator (;) from remarks'
       TabOrder = 3
@@ -211,8 +211,8 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideTop.Side = asrBottom
     Left = 5
     Height = 23
-    Top = 403
-    Width = 208
+    Top = 402
+    Width = 215
     BorderSpacing.Top = 3
     Caption = 'Mark QSLs sent after export'
     TabOrder = 4
@@ -223,7 +223,7 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideTop.Side = asrBottom
     Left = 11
     Height = 25
-    Top = 463
+    Top = 488
     Width = 75
     BorderSpacing.Left = 6
     BorderSpacing.Top = 12
@@ -238,7 +238,7 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideTop.Side = asrBottom
     Left = 174
     Height = 25
-    Top = 463
+    Top = 488
     Width = 75
     BorderSpacing.Top = 12
     Caption = 'Help'
@@ -252,7 +252,7 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideRight.Side = asrBottom
     Left = 336
     Height = 25
-    Top = 463
+    Top = 488
     Width = 75
     Anchors = [akTop, akRight]
     BorderSpacing.Top = 12
@@ -268,7 +268,7 @@ object frmExLabelPrint: TfrmExLabelPrint
     Left = 5
     Height = 23
     Top = 3
-    Width = 127
+    Width = 131
     BorderSpacing.Left = 5
     BorderSpacing.Top = 3
     Caption = 'Export all QSOs'
@@ -280,19 +280,31 @@ object frmExLabelPrint: TfrmExLabelPrint
     AnchorSideLeft.Side = asrBottom
     AnchorSideTop.Control = edtQSOsToLabel
     AnchorSideTop.Side = asrCenter
-    Left = 229
+    Left = 233
     Height = 25
-    Top = 135
+    Top = 134
     Width = 184
     BorderSpacing.Left = 16
     Caption = 'Choose fields for export'
     OnClick = btnExportFieldsPrefClick
     TabOrder = 9
   end
+  object chkKeepCsvStructure: TCheckBox
+    AnchorSideLeft.Control = GroupBox1
+    AnchorSideTop.Control = chkMarkSent
+    AnchorSideTop.Side = asrBottom
+    Left = 5
+    Height = 23
+    Top = 428
+    Width = 149
+    BorderSpacing.Top = 3
+    Caption = 'Keep csv structure'
+    TabOrder = 10
+  end
   object dlgSave: TSaveDialog
     DefaultExt = '.csv'
     Filter = 'CSV files|*.csv'
-    left = 360
-    top = 192
+    Left = 360
+    Top = 192
   end
 end
diff --git a/src/fExLabelPrint.pas b/src/fExLabelPrint.pas
index 1148928..7383b10 100644
--- a/src/fExLabelPrint.pas
+++ b/src/fExLabelPrint.pas
@@ -22,6 +22,7 @@ type
     btnHelp: TButton;
     btnExportFieldsPref : TButton;
     Cancel: TButton;
+    chkKeepCsvStructure: TCheckBox;
     chkRemoveSep: TCheckBox;
     chkAllQSOs: TCheckBox;
     chkMarkSent: TCheckBox;
@@ -87,6 +88,8 @@ begin
   edtQSOsToLabel.Text   := cqrini.ReadString('QslExport','QSOs','6');
   edtRemarks.Text       := cqrini.ReadString('QslExport','Remarks','');
   chkRemoveSep.Checked  := cqrini.ReadBool('QslExport','RemoveSep',True);
+  chkKeepCsvStructure.Checked := cqrini.ReadBool('QSLExport', 'KeepCsvStructure', False);
+
   if edtRemarks.Text <> '' then
     rbOwnRemarks.Checked
 end;
@@ -206,9 +209,17 @@ begin
 
       dmData.Q.ParamByName('id_cqrlog_main').AsInteger := dmData.qCQRLOG.FieldByName('id_cqrlog_main').AsInteger;
 
-      if dmUtils.IsQSLViaValid(dmData.qCQRLOG.FieldByName('qsl_via').AsString) then
+      //if QSOs are imported from other source they may not have QSLmgr set even it exists
+      //then we look from cqrlog's manager database before making label
+      if dmData.qCQRLOG.FieldByName('qsl_via').AsString='' then
+         dmData.QSLMgrFound(dmData.qCQRLOG.FieldByName('callsign').AsString,
+                            dmData.qCQRLOG.FieldByName('qsodate').AsString,
+                            qsl_via)
+       else
+         qsl_via := dmData.qCQRLOG.FieldByName('qsl_via').AsString;
+
+      if dmUtils.IsQSLViaValid(qsl_via) then
       begin
-        qsl_via := dmData.qCQRLOG.FieldByName('qsl_via').AsString;
         dmData.Q.ParamByName('idcall').AsString  := dmUtils.GetIDCall(qsl_via);
         dmData.Q.ParamByName('dxcc').AsString    := dmDXCC.id_country(dmData.Q.ParamByName('idcall').AsString,
                                                                      dmData.qCQRLOG.FieldByName('qsodate').AsDateTime);
@@ -253,7 +264,7 @@ begin
       dmData.Q.ParamByName('qsl_r').AsString      := dmData.qCQRLOG.FieldByName('qsl_r').AsString;
       dmData.Q.ParamByName('iota').AsString       := dmData.qCQRLOG.FieldByName('iota').AsString;
       dmData.Q.ParamByName('pwr').AsString        := dmData.qCQRLOG.FieldByName('pwr').AsString;
-      dmData.Q.ParamByName('loc').AsString        := dmData.qCQRLOG.FieldByName('loc').AsString;
+      dmData.Q.ParamByName('loc').AsString        := Copy(dmData.qCQRLOG.FieldByName('loc').AsString, 1, 6);
       dmData.Q.ParamByName('my_loc').AsString     := dmData.qCQRLOG.FieldByName('my_loc').AsString;
       dmData.Q.ParamByName('award').AsString      := Rep(dmData.qCQRLOG.FieldByName('award').AsString);
       dmData.Q.ParamByName('band').AsString       := dmData.qCQRLOG.FieldByName('band').AsString;
@@ -327,17 +338,36 @@ var
         Write(f,FormatDateTime('mm/dd/yyyy',dmData.Q.FieldByName('qsodate').AsDateTime),C_SEP);
         FormatSettings.DateSeparator:=sep;
       end;
+    end
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
     end;
     if cqrini.ReadBool('QSLExport', 'time_on', True) then
-      Write(f,dmData.Q.FieldByName('time_on').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('time_on').AsString,C_SEP)
+    else
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
     if cqrini.ReadBool('QSLExport', 'time_off', True) then
-      Write(f,dmData.Q.FieldByName('time_off').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('time_off').AsString,C_SEP)
+    else
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
     if cqrini.ReadBool('QSLExport', 'CallSign', True) then
-      Write(f,dmData.Q.FieldByName('callsign').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('callsign').AsString,C_SEP)
+    else
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
     if cqrini.ReadBool('QSLExport', 'Mode', True) then
-      Write(f,dmData.Q.FieldByName('mode').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('mode').AsString,C_SEP)
+    else
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
     if cqrini.ReadBool('QSLExport', 'Freq', True) then
-      Write(f,FloatToStr(dmData.Q.FieldByName('freq').AsFloat),C_SEP);
+      Write(f,FormatFloat('0.0000;;',dmData.Q.FieldByName('freq').AsFloat),C_SEP)
+    else
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
 
     if cqrini.ReadBool('QSLExport', 'RST_S', True) then
     begin
@@ -351,6 +381,15 @@ var
         Write(f,rst_tmp[2],C_SEP);
         Write(f,rst_tmp[3],C_SEP);
       end;
+    end
+    else begin
+        if chkKeepCsvStructure.Checked then
+	begin
+           if not cqrini.ReadBool('QSLExport','SplitRST_R',False) then
+	      Write(f,C_SEP)
+           else
+	      Write(f,C_SEP,C_SEP,C_SEP);
+        end;
     end;
     if cqrini.ReadBool('QSLExport', 'RST_R', True) then
     begin
@@ -364,49 +403,142 @@ var
         Write(f,rst_tmp[2],C_SEP);
         Write(f,rst_tmp[3],C_SEP);
       end;
+    end
+    else begin
+        if chkKeepCsvStructure.Checked then
+	begin
+           if not cqrini.ReadBool('QSLExport','SplitRST_R',False) then
+	      Write(f,C_SEP)
+           else
+	      Write(f,C_SEP,C_SEP,C_SEP);
+        end;
     end;
     if cqrini.ReadBool('QSLExport', 'Name', True) then
-      Write(f,dmData.Q.FieldByName('name').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('name').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'QTH', True) then
-      Write(f,dmData.Q.FieldByName('qth').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('qth').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'band', True) then
-      Write(f,dmData.Q.FieldByName('band').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('band').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'Propagation', True) then
-      Write(f,dmData.Q.FieldByName('prop_mode').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('prop_mode').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'Satellite',  True) then
-      Write(f,dmData.Q.FieldByName('satellite').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('satellite').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'ContestName',  True) then
-      Write(f, dmData.Q.FieldByName('contestname').AsString,C_SEP);
+      Write(f, dmData.Q.FieldByName('contestname').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'QSL_S', True) then
-      Write(f,dmData.Q.FieldByName('qsl_s').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('qsl_s').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'QSL_R', True) then
-      Write(f,dmData.Q.FieldByName('qsl_r').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('qsl_r').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'QSL_VIA', True) then
-      Write(f,dmData.Q.FieldByName('qsl_via').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('qsl_via').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'locator', True) then
-      Write(f,dmData.Q.FieldByName('loc').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('loc').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'MyLoc', True) then
-      Write(f,dmData.Q.FieldByName('my_loc').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('my_loc').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'Distance', True) then
-      Write(f,frmMain.CalcQrb(dmData.Q.FieldByName('my_loc').AsString,dmData.Q.FieldByName('loc').AsString,False),C_SEP);
+      Write(f,frmMain.CalcQrb(dmData.Q.FieldByName('my_loc').AsString,dmData.Q.FieldByName('loc').AsString,False),C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'IOTA', True) then
-      Write(f,dmData.Q.FieldByName('iota').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('iota').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'award', True) then
-      Write(f,dmData.Q.FieldByName('award').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('award').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'power', True) then
-      Write(f,dmData.Q.FieldByName('pwr').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('pwr').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'Remarks', True) then
-      Write(f,dmData.Q.FieldByName('remarks').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('remarks').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'QSLMsg', True) then
-      Write(f,dmData.Q.FieldByName('qslmsg').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('qslmsg').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'ContestNrS', True) then
-      Write(f,dmData.Q.FieldByName('stx').AsString ,C_SEP);
+      Write(f,dmData.Q.FieldByName('stx').AsString ,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'ContestMsgS', True) then
-      Write(f,dmData.Q.FieldByName('stx_string').AsString,C_SEP);
+      Write(f,dmData.Q.FieldByName('stx_string').AsString,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'ContestNrR',  True) then
-      Write(f,dmData.Q.FieldByName('srx').AsString ,C_SEP);
+      Write(f,dmData.Q.FieldByName('srx').AsString ,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
     if cqrini.ReadBool('QSLExport', 'ContestMsgR',  True) then
-      Write(f,dmData.Q.FieldByName('srx_string').AsString ,C_SEP);
+      Write(f,dmData.Q.FieldByName('srx_string').AsString ,C_SEP)
+    else begin
+        if chkKeepCsvStructure.Checked then
+	    Write(f,C_SEP);
+    end;
 
   end;
 
@@ -540,7 +672,8 @@ begin
   cqrini.WriteString('QslExport','Path',edtFile.Text);
   cqrini.WriteString('QslExport','QSOs',edtQSOsToLabel.Text);
   cqrini.WriteString('QslExport','Remarks',edtRemarks.Text);
-  cqrini.ReadBool('QslExport','RemoveSep',chkRemoveSep.Checked)
+  cqrini.WriteBool('QSLExport', 'KeepCsvStructure', chkKeepCsvStructure.Checked);
+  cqrini.WriteBool('QslExport','RemoveSep',chkRemoveSep.Checked)
 end;
 
 procedure TfrmExLabelPrint.btnExportFieldsPrefClick(Sender : TObject);
diff --git a/src/fExportProgress.pas b/src/fExportProgress.pas
index 6875923..bdd1d82 100644
--- a/src/fExportProgress.pas
+++ b/src/fExportProgress.pas
@@ -188,7 +188,10 @@ var
                      srx, stx_string, srx_string, contestname, Darc_Dok : String);
 
   var
-     station_callsign : String;
+     station_callsign  : String;
+     OutMode,
+     OutSubmode        :String;
+
   begin
     station_callsign := cqrini.ReadString('Station', 'Call', '');
     leng := 0;
@@ -219,36 +222,18 @@ var
     if ExCall then
       SaveTag(dmUtils.StringToADIF('<CALL',dmUtils.RemoveSpaces(call)),leng);
     if ExMode then
-    begin
-      case Mode of
-        'JS8'     : begin
-                      tmp := '<MODE:4>MFSK<SUBMODE:3>JS8';
-                      SaveTag(tmp,leng);
-                    end;
-        'FT4'     : begin
-                      tmp := '<MODE:4>MFSK<SUBMODE:3>FT4';
-                      SaveTag(tmp,leng);
-                    end;
-        'FST4'    : begin
-                      tmp := '<MODE:4>MFSK<SUBMODE:4>FST4';
-                      SaveTag(tmp,leng);
-                    end;
-        'PACKET'  :  begin
-                        tmp := '<MODE:3>PKT';
-                        SaveTag(tmp,leng);
-                     end;
-      else           begin
-                        tmp := '<MODE';
-                        SaveTag(dmUtils.StringToADIF(tmp,Mode),leng);
-                     end;
-      end;
+    Begin
+        dmUtils.ModeFromCqr(mode,OutMode,OutSubmode,dmData.DebugLevel>=1);
+        SaveTag(dmUtils.StringToADIF('<MODE',OutMode),leng);
+        if OutSubmode<>'' then
+                          SaveTag(dmUtils.StringToADIF('<SUBMODE',OutSubmode),leng);
     end;
     if ExFreq then
     begin
       if pos(',',freq) > 0 then
         freq[pos(',',freq)] := '.';
       SaveTag(dmUtils.StringToADIF('<FREQ',Freq),leng);
-      SaveTag(dmUtils.StringToADIF('<BAND',dmUtils.GetAdifBandFromFreq(Freq)),leng);
+      SaveTag(dmUtils.StringToADIF('<BAND',lowercase(dmUtils.GetAdifBandFromFreq(Freq))),leng);
     end;
     if ExRSTS then
       SaveTag(dmUtils.StringToADIF('<RST_SENT',ExtractWord(1,RSTS,[' '])),leng);
@@ -456,6 +441,7 @@ begin   //TfrmExportProgress
 
   AssignFile(f, FileName);
   Rewrite(f);
+  Writeln(f);
   Writeln(f, 'ADIF export from CQRLOG for Linux version '+dmData.VersionString);
   Writeln(f, 'Copyright (C) ',YearOf(now),' by Petr, OK2CQR and Martin, OK1RR');
   Writeln(f);
diff --git a/src/fFilter.lfm b/src/fFilter.lfm
index 42209a3..5295b35 100644
--- a/src/fFilter.lfm
+++ b/src/fFilter.lfm
@@ -206,7 +206,6 @@ object frmFilter: TfrmFilter
       Width = 74
       BorderSpacing.Top = 1
       Caption = 'Exactly'
-      Checked = True
       TabOrder = 1
       TabStop = True
     end
@@ -219,6 +218,7 @@ object frmFilter: TfrmFilter
       Top = 63
       Width = 73
       Caption = 'Include'
+      Checked = True
       TabOrder = 2
     end
   end
diff --git a/src/fFreq.pas b/src/fFreq.pas
index c565609..e8f5cb2 100644
--- a/src/fFreq.pas
+++ b/src/fFreq.pas
@@ -143,7 +143,7 @@ begin
   dbgrdFreq.Columns[8].Title.Caption := 'TX offset';
 
   for i:=2 to dbgrdFreq.Columns.Count-1 do
-    dbgrdFreq.Columns[i].DisplayFormat   := '#####0.000;;'
+    dbgrdFreq.Columns[i].DisplayFormat   := '####0.000;;'
 end;
 
 end.
diff --git a/src/fGrayline.lfm b/src/fGrayline.lfm
index b50b64f..22a98ad 100644
--- a/src/fGrayline.lfm
+++ b/src/fGrayline.lfm
@@ -121,7 +121,7 @@ object frmGrayline: TfrmGrayline
   OnPaint = FormPaint
   OnShow = FormShow
   ShowHint = True
-  LCLVersion = '2.0.8.0'
+  LCLVersion = '2.0.12.0'
   object sbtnGrayLine: TSpeedButton
     Left = 400
     Height = 16
@@ -168,8 +168,8 @@ object frmGrayline: TfrmGrayline
   end
   object sbGrayLine: TStatusBar
     Left = 0
-    Height = 21
-    Top = 227
+    Height = 19
+    Top = 229
     Width = 419
     Panels = <>
   end
@@ -177,28 +177,48 @@ object frmGrayline: TfrmGrayline
     Enabled = False
     Interval = 60000
     OnTimer = tmrGrayLineTimer
-    left = 40
-    top = 32
+    Left = 40
+    Top = 32
   end
   object popGrayLine: TPopupMenu
-    left = 336
-    top = 24
+    OnPopup = popGrayLinePopup
+    Left = 336
+    Top = 24
     object pumConnect: TMenuItem
       Action = acConnect
     end
-    object MenuItem2: TMenuItem
+    object pumLinkToRBNMonitor: TMenuItem
+      Action = acLinkToRbnMonitor
+    end
+    object pumMnuLine1: TMenuItem
       Caption = '-'
     end
     object pumShowStatusbar: TMenuItem
       Action = acShowStatusBar
     end
-    object pumLinkToRBNMonitor: TMenuItem
-      Action = acLinkToRbnMonitor
+    object pumShowShortPath: TMenuItem
+      Caption = 'Show ShortPath'
+      OnClick = pumShowShortPathClick
+    end
+    object pumShowLongPath: TMenuItem
+      Caption = 'Show LongPath'
+      OnClick = pumShowLongPathClick
+    end
+    object pumMnuLine2: TMenuItem
+      Caption = '-'
+    end
+    object pumClearAllSpots: TMenuItem
+      Caption = 'Clear all spots'
+      OnClick = pumClearAllSpotsClick
+    end
+    object pumWatchFor: TMenuItem
+      Caption = 'Watch for: '
+      OnClick = pumWatchForClick
     end
   end
   object acGrayLine: TActionList
-    left = 336
-    top = 80
+    Left = 336
+    Top = 80
     object acConnect: TAction
       Caption = 'Connect to RBN'
       OnExecute = acConnectExecute
@@ -216,13 +236,13 @@ object frmGrayline: TfrmGrayline
     Enabled = False
     Interval = 2000
     OnTimer = tmrAutoConnectTimer
-    left = 158
-    top = 32
+    Left = 158
+    Top = 32
   end
-  object tmrRemoveDots: TTimer
-    Interval = 60000
-    OnTimer = tmrRemoveDotsTimer
-    left = 40
-    top = 32
+  object tmrSpotDots: TTimer
+    Enabled = False
+    OnTimer = tmrSpotDotsTimer
+    Left = 40
+    Top = 32
   end
 end
diff --git a/src/fGrayline.pas b/src/fGrayline.pas
index dfc7d36..68aea6d 100644
--- a/src/fGrayline.pas
+++ b/src/fGrayline.pas
@@ -7,7 +7,7 @@ interface
 uses
   Classes,SysUtils,LResources,Forms,Controls,Graphics,Dialogs,gline2,TAGraph,
   ExtCtrls,Buttons,inifiles,FileUtil,Menus,ActnList,ComCtrls,lNetComponents,
-  lnet, lclType, LazFileUtils, StrUtils;
+  lnet, lclType, LazFileUtils, StrUtils, DateUtils, Math;
 
 type
   TRBNList = record
@@ -22,27 +22,6 @@ type
 const
   MAX_ITEMS = 300;
 
-type
-  TRBNThread = class(TThread)
-  private
-    lTelnet    : TLTelnetClientComponent;
-    login      : String;
-    watchFor   : String;
-    delAfter   : Word;
-    cs         : TRTLCriticalSection;
-
-    function  ConnectToRBN : Boolean;
-    function  GetEmptyPos : Word;
-    function  SpotterExists(spotter : String) : Word;
-
-    procedure lConnect(aSocket: TLSocket);
-    procedure lDisconnect(aSocket: TLSocket);
-    procedure lReceive(aSocket: TLSocket);
-    procedure AddToList(spot : String);
-  protected
-    procedure Execute; override;
-end;
-
 
 type
 
@@ -53,8 +32,13 @@ type
     acConnect : TAction;
     acShowStatusBar : TAction;
     acLinkToRbnMonitor: TAction;
+    pumShowLongPath: TMenuItem;
+    pumShowShortPath: TMenuItem;
+    pumMnuLine2: TMenuItem;
+    pumClearAllSpots: TMenuItem;
+    pumWatchFor: TMenuItem;
     pumConnect : TMenuItem;
-    MenuItem2 : TMenuItem;
+    pumMnuLine1 : TMenuItem;
     pumShowStatusbar : TMenuItem;
     pumLinkToRBNMonitor: TMenuItem;
     popGrayLine : TPopupMenu;
@@ -62,7 +46,7 @@ type
     sbtnGrayLine : TSpeedButton;
     tmrAutoConnect : TTimer;
     tmrGrayLine: TTimer;
-    tmrRemoveDots: TTimer;
+    tmrSpotDots: TTimer;
     procedure acConnectExecute(Sender : TObject);
     procedure acLinkToRbnMonitorExecute(Sender: TObject);
     procedure acShowStatusBarExecute(Sender : TObject);
@@ -74,14 +58,29 @@ type
     procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     procedure FormPaint(Sender: TObject);
     procedure FormShow(Sender: TObject);
+    procedure popGrayLinePopup(Sender: TObject);
+    procedure pumClearAllSpotsClick(Sender: TObject);
+    procedure pumShowLongPathClick(Sender: TObject);
+    procedure pumShowShortPathClick(Sender: TObject);
+    procedure pumWatchForClick(Sender: TObject);
     procedure sbtnGrayLineClick(Sender : TObject);
     procedure tmrAutoConnectTimer(Sender : TObject);
     procedure tmrGrayLineTimer(Sender: TObject);
-    procedure tmrRemoveDotsTimer(Sender: TObject);
+    procedure tmrSpotDotsTimer(Sender: TObject);
   private
+    lTelnet    : TLTelnetClientComponent;
     csRBN : TRTLCriticalSection;
-    RBNThread : TRBNThread;
+    login      : String;
+    delAfter : integer;
+    watchFor : String;
+    LocalDbg : boolean;
 
+    procedure lConnect(aSocket: TLSocket);
+    procedure lDisconnect(aSocket: TLSocket);
+    procedure lReceive(aSocket: TLSocket);
+
+    function  ConnectToRBN : Boolean;
+    procedure CalculateBearing(lat0, long0, lat1, long1: extended; var bearing: extended);
   public
     RBNSpotList : array[1..MAX_ITEMS] of TRBNList;
     band   : String;
@@ -90,11 +89,12 @@ type
     pfx : String;
     rbn_status  : String;
     procedure kresli;
+    procedure PlotGreatCircleArcLine(longitude1,latitude1,longitude2,latitude2:extended; LongP:boolean);
     procedure SavePosition;
     procedure SynRBN;
     function  GetEmptyPos : Word;
     function  SpotterExists(spotter : String) : Word;
-    procedure RemoveOldSpots;
+    procedure RemoveOldSpots(RemoveAfter:integer);
     procedure AddSpotToList(spot : String);
   end;
 
@@ -107,19 +107,17 @@ implementation
 
 uses dUtils, dData, uMyIni, dDXCluster, fNewQSO;
 
-procedure TRBNThread.lConnect(aSocket: TLSocket);
+procedure TfrmGrayline.lConnect(aSocket: TLSocket);
 begin
-  frmGrayline.rbn_status := 'Connected';
-  Synchronize(@frmGrayline.SynRBN)
+  rbn_status := 'Connected';
 end;
 
-procedure TRBNThread.lDisconnect(aSocket: TLSocket);
+procedure TfrmGrayline.lDisconnect(aSocket: TLSocket);
 begin
-  frmGrayline.rbn_status := 'Disconnected';
-  Synchronize(@frmGrayline.SynRBN)
+  rbn_status := 'Disconnected';
 end;
 
-procedure TRBNThread.lReceive(aSocket: TLSocket);
+procedure TfrmGrayline.lReceive(aSocket: TLSocket);
 const
   CR = #13;
   LF = #10;
@@ -140,19 +138,19 @@ begin
   begin
     tmp  := Copy(Buffer, sStart, sStop - sStart);
     tmp  := trim(tmp);
-    if dmData.DebugLevel >=1 then Writeln(tmp);
+    if LocalDbg then Writeln('Rcvd:',tmp);
     itmp := Pos('DX DE',UpperCase(tmp));
     if (itmp > 0) or TryStrToFloat(copy(tmp,1,Pos(' ',tmp)-1),f)  then
     begin
-      //Writeln('RBN:',tmp);
-      AddToList(tmp);
+     if LocalDbg then Writeln('  RBN:',tmp);
+      AddSpotToList(tmp);
     end
     else begin
       if (Pos('LOGIN',UpperCase(tmp)) > 0) and (cqrini.ReadString('RBN','login','') <> '') then
         lTelnet.SendMessage(cqrini.ReadString('RBN','login','')+#13+#10);
       if (Pos('please enter your call',LowerCase(tmp)) > 0) and (cqrini.ReadString('RBN','login','') <> '') then
         lTelnet.SendMessage(cqrini.ReadString('RBN','login','')+#13+#10);
-      //Writeln('RBN:',tmp)
+      if LocalDbg then Writeln('RBN:',tmp)
     end;
     sStart := sStop + 1;
     if sStart > Length(Buffer) then
@@ -166,14 +164,14 @@ begin
   lTelnet.CallAction
 end;
 
-function TRBNThread.GetEmptyPos : Word;
+function TfrmGrayline.GetEmptyPos : Word;
 var
   i : Integer;
 begin
   Result := 0;
   for i:= 1 to MAX_ITEMS do
   begin
-    if frmGrayline.RBNSpotList[i].band='' then
+    if RBNSpotList[i].band='' then
     begin
       Result := i;
       break
@@ -181,14 +179,14 @@ begin
   end
 end;
 
-function TRBNThread.SpotterExists(spotter : String) : Word;
+function TfrmGrayline.SpotterExists(spotter : String) : Word;
 var
   i : Integer;
 begin
   Result := 0;
   for i:= 1 to MAX_ITEMS do
   begin
-    if frmGrayline.RBNSpotList[i].spotter=spotter then
+    if RBNSpotList[i].spotter=spotter then
     begin
       Result := i;
       break
@@ -196,145 +194,7 @@ begin
   end
 end;
 
-procedure TRBNThread.AddToList(spot : String);
-  procedure GetRealCoordinate(lat,long : String; var latitude, longitude: Currency);
-  var
-    s,d : String;
-  begin
-    s := lat;
-    d := long;
-    if ((Length(s)=0) or (Length(d)=0)) then
-    begin
-      longitude := 0;
-      latitude  := 0;
-      exit
-    end;
-
-    if s[Length(s)] = 'S' then
-      s := '-' +s ;
-    s := copy(s,1,Length(s)-1);
-    if pos('.',s) > 0 then
-      s[pos('.',s)] := FormatSettings.DecimalSeparator;
-    if not TryStrToCurr(s,latitude) then
-      latitude := 0;
-
-    if d[Length(d)] = 'W' then
-      d := '-' + d ;
-    d := copy(d,1,Length(d)-1);
-    if pos('.',d) > 0 then
-      d[pos('.',d)] := FormatSettings.DecimalSeparator;
-    if not TryStrToCurr(d,longitude) then
-      longitude := 0;
-    if dmData.DebugLevel>=4 then
-    begin
-      //Writeln('Lat:  ',latitude);
-      //Writeln('Long: ',longitude);
-    end;
-  end;
-
-  procedure ParseSpot(spot : String; var spotter, dxstn, freq, mode, stren : String);
-  var
-    i : Integer;
-    y : Integer;
-    b : Array of String[50];
-    p : Integer=0;
-  begin
-    SetLength(b,1);
-    for i:=1 to Length(spot) do
-    begin
-      if spot[i]<>' ' then
-        b[p] := b[p]+spot[i]
-      else begin
-        if (b[p]<>'') then
-        begin
-          inc(p);
-          SetLength(b,p+1)
-        end
-      end
-    end;
-
-    spotter := b[2];
-    i := pos('-', spotter);
-    if i > 0 then
-      spotter := copy(spotter, 1, i-1);
-    dxstn := b[4];
-    freq  := b[3];
-    mode  := b[5];
-    stren := b[6]
-  end;
-
-var
-  spotter : String;
-  call    : String;
-  stren   : String;
-  freq    : String;
-  lat     : String;
-  long    : String;
-  index   : Word;
-  band    : String;
-  tmp     : Integer;
-  wCall   : String;
-  mode    : String;
-  latitude, longitude: Currency;
-begin
-  ParseSpot(spot, spotter, call, freq, mode, stren);
-  if watchFor<>'' then
-  begin
-    if Pos('*',watchFor) > 0 then   //ZL*
-    begin
-      wCall := copy(watchFor,1,Pos('*',watchFor)-1);
-      if (Pos(wCall,call) <> 1) then    //all callsign started with ZL
-        exit
-    end
-    else begin
-      if (call <> watchFor) then exit;
-    end
-  end;
-
-  if dmData.DebugLevel>=1 then
-  begin
-    Writeln('Spotter:',spotter,'*');
-    Writeln('Signal: ',stren,'*');
-    Writeln('*Freq:  ',freq,'*')
-  end;
-
-  dmDXCluster.id_country(spotter,lat,long);
-
-  index := SpotterExists(spotter);
-  if index = 0 then //spotter doesn't exist, we need new position
-    index := GetEmptyPos;
-
-  if index = 0 then
-  begin
-    Writeln('CRITICAL ERROR! THIS SHOULD NOT HAPPEN, RBN LIST IS FULL');
-    exit
-  end;
-  band := dmDXCluster.GetBandFromFreq(freq,True);
-
-  frmGrayline.RBNSpotList[index].band    := band;
-  frmGrayline.RBNSpotList[index].spotter := spotter;
-  frmGrayline.RBNSpotList[index].time    := now;
-  if TryStrToInt(stren,tmp) then
-    frmGrayline.RBNSpotList[index].strengt := tmp
-  else
-    frmGrayline.RBNSpotList[index].strengt := 0;
-
-  GetRealCoordinate(lat,long,latitude, longitude);
-  frmGrayline.RBNSpotList[index].lat  := latitude;
-  frmGrayline.RBNSpotList[index].long := longitude;
-  if dmData.DebugLevel>=1 then
-   begin
-    Writeln('call:   ',call);
-    Writeln('spotter:',spotter);
-    Writeln('stren:  ',stren);
-    Writeln('freq:   ',freq);
-    Writeln('band:   ',dmDXCluster.GetBandFromFreq(freq,True));
-    Writeln('Lat:    ',lat);
-    Writeln('Long:   ',long)
-   end;
-end;
-
-function TRBNThread.ConnectToRBN : Boolean;
+function TfrmGrayline.ConnectToRBN : Boolean;
 var
   server : String;
   port   : Integer;
@@ -349,7 +209,7 @@ begin
     if not TryStrToInt(tmp,port) then
       port := 7000; //default value
 
-    if dmData.DebugLevel>=1 then Writeln('Server:',server,' Port:',port);
+    if LocalDbg then Writeln('Server:',server,' Port:',port);
 
     lTelnet.OnConnect    := @lConnect;
     lTelnet.OnDisconnect := @lDisconnect;
@@ -362,66 +222,11 @@ begin
     on E : Exception do
     begin
       Result := False;
-      if dmData.DebugLevel>=1 then Writeln('Can not connect to RBN! ',E.Message)
+      if LocalDbg then Writeln('Can not connect to RBN! ',E.Message)
     end
   end
 end;
 
-procedure TRBNThread.Execute;
-begin
-  if not ConnectToRBN then
-  begin
-    if dmData.DebugLevel>=1 then Writeln('Can not connect to RBN!');
-    FreeAndNil(lTelnet);
-    exit
-  end;
-
-  InitCriticalSection(cs);
-  while not Terminated do
-  begin
-    EnterCriticalsection(cs);
-    try
-      login      := cqrini.ReadString('RBN','login','');
-      watchFor   := cqrini.ReadString('RBN','watch','');
-      delAfter   := cqrini.ReadInteger('RBN','deleteAfter',60)
-    finally
-      LeaveCriticalsection(cs)
-    end;
-    //RemoveOldSpots;    done now by tmrRemoveDots
-    Synchronize(@frmGrayline.SynRBN);
-    sleep(1000)
-  end;
-  lTelnet.Disconnect(true);
-  DoneCriticalsection(cs)
-end;
-
-procedure TfrmGrayline.FormCreate(Sender: TObject);
-var
-  ImageFile : String;
-  i : Integer;
-begin
-  InitCriticalSection(csRBN);
-  RBNThread := nil;
-  for i:=1 to MAX_ITEMS do
-    RBNSpotList[i].band := '';
-  ImageFile := dmData.HomeDir+'images'+PathDelim+'grayline.bmp';
-  if not FileExists(ImageFile) then
-    ImageFile := ExpandFileNameUTF8('..'+PathDelim+'share'+PathDelim+'cqrlog'+
-                 PathDelim+'images'+PathDelim+'grayline.bmp');
-  ob:=new(Pgrayline,init(ImageFile));
-
-   tmrRemoveDots.Interval:= cqrini.ReadInteger('RBN','deleteAfter',60)*1000;
-   tmrRemoveDots.Enabled:=true;
-
-end;
-
-procedure TfrmGrayline.FormClose(Sender: TObject; var CloseAction: TCloseAction);
-begin
-  if RBNThread<>nil then RBNThread.Terminate;
-  cqrini.WriteBool('Grayline','Statusbar',sbGrayLine.Visible);
-  dmUtils.SaveWindowPos(frmGrayline)
-end;
-
 procedure TfrmGrayline.acShowStatusBarExecute(Sender : TObject);
 begin
   if acShowStatusBar.Checked then
@@ -443,16 +248,17 @@ begin
   else begin
     if acConnect.Caption = 'Disconnect' then
     begin
-      RBNThread.Terminate;
-      acConnect.Caption     := 'Connect to RBN';
-      sbGrayLine.SimpleText := 'Disconnected';
-      pumLinkToRBNMonitor.Enabled:=true;
+      if ltelnet <> nil then
+       Begin
+         lTelnet.Disconnect;
+         sleep(100);
+         FreeAndNil(lTelnet);
+         rbn_status := 'Disconnected';
+       end;
     end
     else begin
       acLinkToRbnMonitor.Checked :=false;
-      RBNThread := TRBNThread.Create(True);
-      RBNThread.FreeOnTerminate := True;
-      RBNThread.Start
+      ConnectToRBN;
     end
   end
 end;
@@ -466,20 +272,78 @@ begin
      rbn_status := 'Linked to RBNMonitor'
     else
      rbn_status := 'Disconnected';
-    sbGrayLine.SimpleText := rbn_status;
+end;
+
+procedure TfrmGrayline.FormCreate(Sender: TObject);
+var
+  ImageFile : String;
+  i : Integer;
+begin
+  InitCriticalSection(csRBN);
+  tmrSpotDots.Enabled:=false;
+  for i:=1 to MAX_ITEMS do
+   begin
+    RBNSpotList[i].band    := '';
+    RBNSpotList[i].spotter := '';
+    RBNSpotList[i].time    := DateTimeToUnix(now);
+    RBNSpotList[i].strengt := 0;
+    RBNSpotList[i].lat  := 0;
+    RBNSpotList[i].long := 0;
+   end;
+  ImageFile := dmData.HomeDir+'images'+PathDelim+'grayline.bmp';
+  if not FileExists(ImageFile) then
+    ImageFile := ExpandFileNameUTF8('..'+PathDelim+'share'+PathDelim+'cqrlog'+
+                 PathDelim+'images'+PathDelim+'grayline.bmp');
+  ob:=new(Pgrayline,init(ImageFile));
+
+  //set debug rules for this form
+  // bit 5, %10000,  ---> -16 for routines in this form
+  LocalDbg := dmData.DebugLevel >= 1 ;
+  if dmData.DebugLevel < 0 then
+      LocalDbg :=  LocalDbg or ((abs(dmData.DebugLevel) and 16) = 16 );
+
+end;
+
+procedure TfrmGrayline.FormShow(Sender: TObject);
+begin
+  dmUtils.LoadWindowPos(frmGrayline);
+  sbGrayLine.Visible        := cqrini.ReadBool('Grayline','Statusbar',True);
+  pumShowShortPath.Checked  := cqrini.ReadBool('Grayline','ShortPath',False);
+  pumShowLongPath.Checked   := cqrini.ReadBool('Grayline','LongPath',False);
+  acShowStatusBar.Checked   := sbGrayLine.Visible;
+  rbn_status                :='Disconnected';
+  sbGrayLine.SimpleText     := rbn_status;
+  tmrGrayLine.Enabled       := True;
+  tmrGrayLineTimer(nil);
+  tmrAutoConnect.Enabled    := True;
+  delAfter                  := cqrini.ReadInteger('RBN','deleteAfter',60);
+  tmrSpotDots.Interval      :=1000;  //remove Spots(DOts) timer will always run 1 sec period.
+  tmrSpotDots.Enabled       :=true;
 end;
 
 procedure TfrmGrayline.FormCloseQuery(Sender: TObject; var CanClose: boolean);
 begin
   tmrGrayLine.Enabled := False;
   tmrAutoConnect.Enabled:=False;
-  tmrRemoveDots.Enabled:=False;
-  sleep(100)
+  tmrSpotDots.Enabled:=False;
+  if ltelnet <> nil then
+       Begin
+         lTelnet.Disconnect;
+         sleep(100);
+         FreeAndNil(lTelnet);
+       end;
+  RemoveOldSpots(0);
+end;
+
+procedure TfrmGrayline.FormClose(Sender: TObject; var CloseAction: TCloseAction);
+begin
+  cqrini.WriteBool('Grayline','Statusbar',sbGrayLine.Visible);
+  dmUtils.SaveWindowPos(frmGrayline)
 end;
 
 procedure TfrmGrayline.FormDestroy(Sender: TObject);
 begin
-  if dmData.DebugLevel>=1 then Writeln('Closing GrayLine window');
+  if LocalDbg then Writeln('Closing GrayLine window');
   dispose(ob,done);
   DoneCriticalsection(csRBN)
 end;
@@ -514,16 +378,46 @@ begin
   ob^.kresli(r,Canvas)
 end;
 
-procedure TfrmGrayline.FormShow(Sender: TObject);
+
+procedure TfrmGrayline.popGrayLinePopup(Sender: TObject);
 begin
-  dmUtils.LoadWindowPos(frmGrayline);
-  sbGrayLine.Visible      := cqrini.ReadBool('Grayline','Statusbar',True);
-  acShowStatusBar.Checked := sbGrayLine.Visible;
-  rbn_status              :='Disconnected';
-  sbGrayLine.SimpleText   := rbn_status;
-  tmrGrayLine.Enabled     := True;
-  tmrGrayLineTimer(nil);
-  tmrAutoConnect.Enabled  := True
+   watchFor := cqrini.ReadString('RBN','watch','');
+   pumWatchFor.Caption:='Watch for: '+watchFor;
+end;
+
+procedure TfrmGrayline.pumClearAllSpotsClick(Sender: TObject);
+begin
+  tmrSpotDots.Enabled:=False;
+  RemoveOldSpots(0);
+  delAfter := cqrini.ReadInteger('RBN','deleteAfter',60);
+  tmrSpotDots.Enabled:=true;
+end;
+
+procedure TfrmGrayline.pumShowLongPathClick(Sender: TObject);
+begin
+  pumShowLongPath.Checked:= not pumShowLongPath.Checked;
+  cqrini.WriteBool('Grayline','LongPath',pumShowLongPath.Checked);
+end;
+
+procedure TfrmGrayline.pumShowShortPathClick(Sender: TObject);
+begin
+  pumShowShortPath.Checked:= not pumShowShortPath.Checked;
+  cqrini.WriteBool('Grayline','ShortPath',pumShowShortPath.Checked);
+end;
+
+procedure TfrmGrayline.pumWatchForClick(Sender: TObject);
+var inpWF:string;
+begin
+   inpWF := cqrini.ReadString('RBN','watch','');
+   if InputQuery('Watch for:','Enter up- or lowcase callsign or prefix and asterisk like OK2* ', false, inpWF) then
+     Begin
+          EnterCriticalsection(csRBN);
+           watchFor:= uppercase(inpWF);
+           pumWatchFor.Caption:='Watch for: '+watchFor;
+           cqrini.WriteString('RBN','watch',watchFor);
+          LeaveCriticalsection(csRBN);
+          RemoveOldSpots(0);
+     end;
 end;
 
 procedure TfrmGrayline.sbtnGrayLineClick(Sender : TObject);
@@ -545,7 +439,9 @@ begin
          exit;
         end;
     if cqrini.ReadBool('RBN','AutoConnect',False) and (cqrini.ReadString('RBN','login','') <> '')
-       and (RBNThread = nil) then  acConnect.Execute;
+       and (lTelnet = nil) then  acConnect.Execute;
+
+    tmrAutoConnect.Enabled:=False; //job is done, nex initiate when FormShow run
 end;
 
 procedure TfrmGrayline.tmrGrayLineTimer(Sender: TObject);
@@ -553,9 +449,32 @@ begin
   Refresh
 end;
 
-procedure TfrmGrayline.tmrRemoveDotsTimer(Sender: TObject);
+procedure TfrmGrayline.tmrSpotDotsTimer(Sender: TObject);
 begin
-  RemoveOldSpots
+   tmrSpotDots.Enabled:=false;
+
+   dec(delAfter);
+   if delAfter < 1 then
+     Begin
+      delAfter := cqrini.ReadInteger('RBN','deleteAfter',60);
+      RemoveOldSpots(delAfter);
+     end;
+    
+  sbGrayLine.SimpleText := rbn_status;
+  if rbn_status='Connected' then
+   Begin
+    acConnect.Caption := 'Disconnect';
+    pumLinkToRBNMonitor.Enabled:=false;
+   end
+  else
+   Begin
+     acConnect.Caption := 'Connect to RBN';
+     pumLinkToRBNMonitor.Enabled:=True;
+   end;
+
+   SynRBN;
+
+   tmrSpotDots.Enabled:=true;
 end;
 
 procedure TfrmGrayline.kresli;
@@ -564,11 +483,11 @@ var
   lat1,long1 : Currency;
   my_loc : String;
 begin
-    my_loc := cqrini.ReadString('Station','LOC','JO70GG');
+    my_loc := frmNewQSO.CurrentMyLoc;   //cqrini.ReadString('Station','LOC','JO70GG');
   if (s='') or (d='') then
     dmUtils.GetCoordinate(pfx,lat1,long1)
   else begin
-    if s[Length(s)] = 'S' then  //pokud je tam S musi byt udaj zaporny
+    if s[Length(s)] = 'S' then  //if S is there, the data must be negative
       s := '-' +s ;
     s := copy(s,1,Length(s)-1);
     if pos('.',s) > 0 then
@@ -576,7 +495,7 @@ begin
     if not TryStrToCurr(s,lat1) then
       lat1 := 0;
 
-    if d[Length(d)] = 'W' then  //pokud je tam W musi byt udaj zaporny
+    if d[Length(d)] = 'W' then  //  if there is a W it must be negative
       d := '-' + d ;
     d := copy(d,1,Length(d)-1);
     if pos('.',d) > 0 then
@@ -587,12 +506,142 @@ begin
   s := '';
   d := '';
   dmUtils.CoordinateFromLocator(dmUtils.CompleteLoc(my_loc),lat,long);
-  lat := lat*-1;
-  lat1 := lat1*-1;
-  ob^.jachcucaru(true,long,lat,long1,lat1);
+  if pumShowShortPath.Checked or pumShowLongPath.Checked then
+    Begin
+      if pumShowShortPath.Checked then
+                                      PlotGreatCircleArcLine(long,lat,long1,lat1,false);
+      if pumShowLongPath.Checked then
+                                      PlotGreatCircleArcLine(long,lat,long1,lat1,true);
+    end
+   else
+    ob^.jachcucaru(true,long,lat*-1,long1,lat1*-1);
   Refresh
 end;
 
+procedure TfrmGrayline.CalculateBearing(lat0, long0, lat1, long1: extended; var bearing: extended);
+    var
+     x, y: extended;
+    begin
+      // bearing
+      y := Sin(long1 - long0) * Cos(lat1);
+      x := Cos(lat0) * Sin(lat1) - Sin(lat0) * Cos(lat1) * Cos(long1 - long0);
+      bearing := ArcTan2(y, x);
+    end;
+
+procedure TfrmGrayline.PlotGreatCircleArcLine(longitude1,latitude1,longitude2,latitude2:extended; LongP:boolean);
+ { Ref: http://www.movable-type.co.uk/scripts/latlong.html }
+
+Const
+  MEC       = 170  *pi/180;       // Map image horizontal Edge Crossing "no print" limit in degrees (converted to radians)
+
+var
+  lat1,lat2,lon1,lon2,
+  latFrom,lonFrom,
+  BaseStep,step,                  // degree steps (converted to radians) for path line
+  PolarStep,                      // steps in polar regions where distances/degrees are smaller
+  bearing, oldbearing : extended;
+  CountLimit,
+  LP                  : integer;  //LongPath instead of ShortPath
+
+Begin
+BaseStep  := cqrini.ReadFloat('Program', 'GraylineGCstep',15E-001) * pi/180;
+PolarStep := Basestep/cqrini.ReadInteger('Program', 'GraylineGCstep',10);
+
+
+if LocalDbg then
+      begin
+        writeln ('-------------------------------------------------------------------');
+        writeln ('Start:',round(latitude1),' ',round(longitude1),' ',round(latitude2),' ',round(longitude2));
+      end;
+
+step := BaseStep;
+
+if LongP then
+               LP:=1
+         else
+               LP:=0;
+ob^.GC_line_clear(LP);
+longitude1 := degToRad(longitude1);
+latitude1 := degToRad(latitude1);
+longitude2 := degToRad(longitude2);
+latitude2 := degToRad(latitude2);
+
+CalculateBearing(latitude1, longitude1, latitude2, longitude2, bearing);
+bearing:=bearing+LP*pi;
+oldbearing:=bearing;
+CountLimit:=ob^.GC_Points_Max;
+
+if LocalDbg then
+         writeln ('Bearing:',round(radTodeg(bearing)));
+while (CountLimit > 0) do
+ Begin
+  latFrom:=latitude1;
+  lonFrom:=longitude1;
+  dec(CountLimit);
+
+  if abs(latFrom) > 1.45 then
+     step:=PolarStep
+    else
+     step:=BaseStep;
+
+ if LocalDbg then
+         writeln (LineEnding,'FROM (',Round(RadToDeg(latFrom)),' ',Round(RadToDeg(lonFrom)),')','  To: ',Round(RadToDeg(latitude2)),' ',Round(RadToDeg(longitude2)));
+
+  CalculateBearing(latFrom, lonFrom, latitude2, longitude2,bearing);
+  bearing:=bearing+LP*pi; //makes LongPath if LP=1 counting plot points in "wrong direction"
+
+  if abs(oldbearing -bearing) > (pi/2) then
+         Begin
+         if LocalDbg then
+           Begin
+             writeln('Obe:',round(radtodeg(oldbearing)));
+             writeln('Nbe:',round(radtodeg(bearing)));
+           end;
+          if LP = 1 then
+           begin
+            if LocalDbg then
+                         writeln ('Release LP value in count round ',CountLimit);
+            LP:=0;  //we are on globe's opposite side of target. Release LP and now on calculate rest via ShortPath
+            CalculateBearing(latFrom, lonFrom, latitude2, longitude2, bearing);
+           end
+          else
+           begin
+           if LocalDbg then
+                         writeln ('Stop counting in round ',CountLimit);
+            CountLimit:=0;
+           end;
+         end;
+  if LocalDbg then
+    writeln ('Bearing:',round(radTodeg(bearing)));
+
+  longitude1 := longitude1 + (sin(bearing) * step) / cos(latitude1);
+  latitude1 :=  latitude1 + (cos(bearing) * step);
+
+  //swap on horizontal or veritcal edges
+  if longitude1 < -Pi  then longitude1 :=  2*Pi+longitude1;
+  if longitude1 >  Pi  then longitude1 := -2*Pi+longitude1;
+
+  if latitude1 > Pi/2 then latitude1:= Pi/2 - (latitude1-Pi/2);
+  if latitude1 < -Pi/2 then latitude1:= -Pi/2 - (latitude1+Pi/2);
+
+  if LocalDbg then
+    writeln ('From (',Round(RadToDeg(latFrom)),' ',Round(RadToDeg(lonFrom)),')','  To: ',Round(RadToDeg(latitude1)),' ',Round(RadToDeg(longitude1)));
+
+  //map image horizontal edge crossing check. Allow plot if we are not in edge of image.
+  if not (((lonFrom >  MEC) and (longitude1 < -MEC))  //right crossing
+     or   ((lonFrom < -MEC) and (longitude1 >  MEC))  //left crossing
+     ) then
+      begin
+       if not LongP then
+         ob^.GC_line_part(RadToDeg(lonFrom),RadToDeg(latFrom)*-1,RadToDeg(longitude1),RadToDeg(latitude1)*-1)
+        else
+         ob^.GC_Lline_part(RadToDeg(lonFrom),RadToDeg(latFrom)*-1,RadToDeg(longitude1),RadToDeg(latitude1)*-1)
+      end;
+
+  oldbearing:=bearing;
+ end;
+end;
+
 procedure TfrmGrayline.SavePosition;
 begin
   cqrini.WriteInteger('Grayline','Height',Height);
@@ -605,36 +654,30 @@ procedure TfrmGrayline.SynRBN;
 var
   i : Integer;
   c : TColor;
+  CqrBand:String;
+
 begin
-  sbGrayLine.SimpleText := rbn_status;
-  if rbn_status='Connected' then
-   Begin
-    acConnect.Caption := 'Disconnect';
-    pumLinkToRBNMonitor.Enabled:=false;
-   end
-  else
-   Begin
-     acConnect.Caption := 'Connect to RBN';
-     pumLinkToRBNMonitor.Enabled:=True;
-   end;
   ob^.body_smaz;
+  CqrBand := dmUtils.GetBandFromFreq(frmNewQSO.cmbFreq.Text);
+
   for i:=1 to MAX_ITEMS do
   begin
-    if (RBNSpotList[i].band='') then
+
+   if (RBNSpotList[i].band='') then  //skip empty
       Continue;
 
-    if (band <> '') then
+    if (CqrBand = '') or (CqrBand<>RBNSpotList[i].band) then //skip if no cqrlog band or it differs from spot band
+        Continue;
+
+    if LocalDbg then
     begin
-      if band<>RBNSpotList[i].band then
-        Continue
+      writeln('Cqr:band:   ',cqrband);
+      Writeln('Syn:spotter:',RBNSpotList[i].spotter);
+      Writeln('Syn:stren:  ',RBNSpotList[i].strengt);
+      Writeln('Syn:band:   ',RBNSpotList[i].band);
+      Writeln('Syn:lat:    ',RBNSpotList[i].lat);
+      Writeln('Syn:long:   ',RBNSpotList[i].long);
     end;
-    {
-    Writeln('Syn:spotter:',RBNSpotList[i].spotter);
-    Writeln('Syn:stren:  ',RBNSpotList[i].strengt);
-    Writeln('Syn:band:   ',RBNSpotList[i].band);
-    Writeln('Syn:lat:    ',RBNSpotList[i].lat);
-    Writeln('Syn:long:   ',RBNSpotList[i].long);
-    }
     case RBNSpotList[i].strengt of
       11..20  : c := cqrini.ReadInteger('RBN','20db',clPurple);
       21..30  : c := cqrini.ReadInteger('RBN','30db',clMaroon);
@@ -642,59 +685,28 @@ begin
       else
         c := cqrini.ReadInteger('RBN','10db',clWhite)
     end; //case
-    //procedure body_add(typ:byte;x1,y1,x2,y2:extended;popis:string;barva:tcolor;vel_bodu:longint);
     ob^.body_add(3,RBNSpotList[i].long,RBNSpotList[i].lat*-1,RBNSpotList[i].long,RBNSpotList[i].lat*-1,RBNSpotList[i].spotter,c,1);
   end;
   Refresh
 end;
 
-function  TfrmGrayline.GetEmptyPos : Word;
+procedure  TfrmGrayline.RemoveOldSpots(RemoveAfter:integer); //setting RemoveAfter:=0 removes all Spots
 var
-  i : Integer;
-begin
-  Result := 0;
-  for i:= 1 to MAX_ITEMS do
-  begin
-    if frmGrayline.RBNSpotList[i].band='' then
-    begin
-      Result := i;
-      break
-    end
-  end
-end;
-
-function  TfrmGrayline.SpotterExists(spotter : String) : Word;
-var
-  i : Integer;
-begin
-  Result := 0;
-  for i:= 1 to MAX_ITEMS do
-  begin
-    if frmGrayline.RBNSpotList[i].spotter=spotter then
-    begin
-      Result := i;
-      break
-    end
-  end
-end;
+  i        : Integer;
+  time,
+  SpotTime: int64;
 
-procedure  TfrmGrayline.RemoveOldSpots;
-var
-  i       : Integer;
-  time    : TDateTime;
-  delAfter: word;
 begin
-   tmrRemoveDots.Enabled:=false;
-   delAfter   := cqrini.ReadInteger('RBN','deleteAfter',60);
-   tmrRemoveDots.Interval:=delAfter*1000;
-  time := now;
+  time := DateTimeToUnix(now);
+  EnterCriticalsection(csRBN);
   for i:=1 to MAX_ITEMS do
-  begin
-    if frmGrayline.RBNSpotList[i].time+delAfter/86400 < time then
-      frmGrayline.RBNSpotList[i].band := ''
-  end;
+   begin
+     if ((time - RBNSpotList[i].time) > RemoveAfter) then
+         RBNSpotList[i].band :='';
+   end;
   SynRBN;
-  tmrRemoveDots.Enabled:=true;
+  LeaveCriticalsection(csRBN);
+
 end;
 procedure TfrmGrayline.AddSpotToList(spot : String);
 
@@ -726,10 +738,10 @@ procedure TfrmGrayline.AddSpotToList(spot : String);
       d[pos('.',d)] := FormatSettings.DecimalSeparator;
     if not TryStrToCurr(d,longitude) then
       longitude := 0;
-    if dmData.DebugLevel>=4 then
+    if LocalDbg then
     begin
-      //Writeln('Lat:  ',latitude);
-      //Writeln('Long: ',longitude);
+      Writeln('Lat:  ',latitude);
+      Writeln('Long: ',longitude);
     end;
   end;
 
@@ -748,7 +760,6 @@ procedure TfrmGrayline.AddSpotToList(spot : String);
   end;
 
 var
-  watchFor: String;
   spotter : String;
   call    : String;
   stren   : String;
@@ -778,7 +789,7 @@ begin
     end
   end;
 
-  if dmData.DebugLevel>=1 then
+  if LocalDbg then
   begin
     Writeln('Spotter:',spotter,'*');
     Writeln('Signal: ',stren,'*');
@@ -800,7 +811,7 @@ begin
 
   frmGrayline.RBNSpotList[index].band    := band;
   frmGrayline.RBNSpotList[index].spotter := spotter;
-  frmGrayline.RBNSpotList[index].time    := now;
+  frmGrayline.RBNSpotList[index].time    := DateTimeToUnix(now);
   if TryStrToInt(stren,tmp) then
     frmGrayline.RBNSpotList[index].strengt := tmp
   else
@@ -809,17 +820,18 @@ begin
   GetRealCoordinate(lat,long,latitude, longitude);
   frmGrayline.RBNSpotList[index].lat  := latitude;
   frmGrayline.RBNSpotList[index].long := longitude;
-  if dmData.DebugLevel>=1 then
+  if  LocalDbg then
    begin
-    Write('call:   ',call);
-    Write(' spotter:',spotter);
-    Write(' stren:  ',stren);
-    Write(' freq:   ',freq);
-    Write(' band:   ',dmDXCluster.GetBandFromFreq(freq,True));
-    Write(' Lat:    ',lat);
-    Writeln(' Long:   ',long)
+    Write('Add call:   ',call);
+    Write('Add spotter:',spotter);
+    Write('Add stren:  ',stren);
+    Write('Add freq:   ',freq);
+    Write('Add band:   ',band);
+    Write('Add Lat:    ',lat);
+    Writeln('Add Long:   ',long)
    end;
-  SynRBN;
 end;
+
+
 end.
 
diff --git a/src/fGroupEdit.lfm b/src/fGroupEdit.lfm
index 7d730fa..2cf6871 100644
--- a/src/fGroupEdit.lfm
+++ b/src/fGroupEdit.lfm
@@ -234,6 +234,7 @@ object frmGroupEdit: TfrmGroupEdit
         'Propagation mode'
         'Satellite name'
         'Operator̈́'
+        'DOK'
       )
       OnChange = cmbFieldChange
       Style = csDropDownList
diff --git a/src/fGroupEdit.pas b/src/fGroupEdit.pas
index 3622bbf..9381090 100644
--- a/src/fGroupEdit.pas
+++ b/src/fGroupEdit.pas
@@ -41,6 +41,7 @@ type
     procedure lblFieldClick(Sender: TObject);
   private
     { private declarations }
+    WhereTo: String;
   public
     Selected : Boolean;
     { public declarations }
@@ -112,6 +113,7 @@ begin
    end;
    pnlGrpEdt.Color:=clRed;
    lblInfo.Caption := 'Backup your log! Operations can not be undone!';
+   btnCancel.Caption:='Cancel';
    pnlGrpEdt.Repaint;
    lblInfo.Repaint;
 end;
@@ -120,6 +122,7 @@ procedure TfrmGroupEdit.cmbValueChange(Sender: TObject);
 begin
   pnlGrpEdt.Color:=clRed;
   lblInfo.Caption := 'Backup your log! Operations can not be undone!';
+  btnCancel.Caption:='Cancel';
   pnlGrpEdt.Repaint;
   lblInfo.Repaint;
 
@@ -135,12 +138,13 @@ begin
   dmUtils.LoadFontSettings(self);
   pnlGrpEdt.Color:=clDefault;
   if Selected then
-     lblInfo.Caption := 'Apply will afftect to selected qso(s)'
+     WhereTo := 'to selected qsos'
     else
      if dmData.IsFilter then
-       lblInfo.Caption := 'Apply will afftect to filtered qso(s)'
+       WhereTo := 'to filtered qsos'
       else
-       lblInfo.Caption := 'Apply will afftect to whole log';
+       WhereTo := 'to whole log';
+  lblInfo.Caption := 'Apply will afftect '+WhereTo;
   pnlGrpEdt.Repaint;
   lblInfo.Repaint;
 end;
@@ -187,7 +191,8 @@ var
     end
     else begin
       dmData.Q.SQL.Text := 'update cqrlog_main set '+sql+' where id_cqrlog_main='+IntToStr(idx);
-      if dmData.DebugLevel>=1 then Writeln(dmData.Q.SQL.Text);
+      if dmData.DebugLevel>=1 then
+                       Writeln(dmData.Q.SQL.Text);
       dmData.trQ.StartTransaction;
       dmData.Q.ExecSQL;
       dmData.trQ.Commit
@@ -408,13 +413,22 @@ begin
           sql := 'qsl_via='+QuotedStr(UpperCase(cmbValue.Text))
         end;
    22 : begin
-          if (cmbValue.ItemIndex=0) and (Application.MessageBox('Do you really want to clear QSL_S field?',
+          if (cmbValue.ItemIndex=0) and (Application.MessageBox('Do you really want to clear QSL_S field?'
+             +#10+'It also clears QSLS_DATE.',
              'Question ...',mb_YesNo+mb_IconQuestion+mb_DefButton2) in [idNo, idCancel]) then
           begin
             cmbValue.SetFocus;
             exit
           end;
-          sql := 'qsl_s='+QuotedStr(cmbValue.Text)
+          if (cmbValue.Text <> '') then
+           begin
+           sql := 'qsl_s='+QuotedStr(cmbValue.Text);
+           if Application.MessageBox('Do you also want to set QSLS_DATE to current date?',
+             'Question ...',mb_YesNo+mb_IconQuestion+mb_DefButton2) = idYes then
+               sql:=sql+',qsls_date='+ QuotedStr(dmUtils.MyDateToStr(now));
+           end
+          else
+           sql := 'qsl_s="",qsls_date=null'
         end;
    23 : begin
           if (not dmUtils.IsDateOK(cmbValue.Text))then
@@ -423,19 +437,25 @@ begin
             cmbValue.SetFocus;
             exit
           end;
-          if cmbValue.Text = '' then
-            sql := 'qsls_date= NULL'
-          else
             sql := 'qsls_date='+QuotedStr(cmbValue.Text)
         end;
    24 : begin
-          if (cmbValue.ItemIndex=0) and (Application.MessageBox('Do you really want to clear QSL_R field?',
+          if (cmbValue.ItemIndex=0) and (Application.MessageBox('Do you really want to clear QSL_R field?'
+              +#10+'It also clears QSLR_DATE.',
              'Question ...',mb_YesNo+mb_IconQuestion+mb_DefButton2) in [idNo, idCancel]) then
           begin
             cmbValue.SetFocus;
             exit
           end;
-          sql := 'qsl_r='+QuotedStr(cmbValue.Text)
+          if (cmbValue.Text <> '') then
+           begin
+           sql := 'qsl_r='+QuotedStr(cmbValue.Text);
+           if Application.MessageBox('Do you also want to set QSLR_DATE to current date?',
+             'Question ...',mb_YesNo+mb_IconQuestion+mb_DefButton2) = idYes then
+               sql:=sql+',qslr_date='+ QuotedStr(dmUtils.MyDateToStr(now));
+           end
+          else
+           sql := 'qsl_r="",qslr_date=null'
         end;
    25 : begin
           if (not dmUtils.IsDateOK(cmbValue.Text))then
@@ -444,9 +464,6 @@ begin
             cmbValue.SetFocus;
             exit
           end;
-          if cmbValue.Text = '' then
-            sql := 'qslr_date= NULL'
-          else
             sql := 'qslr_date='+QuotedStr(cmbValue.Text)
         end;
    26 : begin
@@ -472,7 +489,7 @@ begin
             sql := 'lotw_qslr='+QuotedStr(cmbValue.Text)+',lotw_qslrdate='+
                    QuotedStr(dmUtils.MyDateToStr(now))
           else
-            sql := 'lotw_qslr="",lotw_qslrdate=null';
+            sql := 'lotw_qslr="",lotw_qslrdate=null'
         end;
 
    29 : begin
@@ -491,7 +508,7 @@ begin
             sql := 'eqsl_qsl_sent='+QuotedStr(cmbValue.Text)+',eqsl_qslsdate='+
                    QuotedStr(dmUtils.MyDateToStr(now))
           else
-            sql := 'eqsl_qsl_sent="",eqsl_qslsdate=null';
+            sql := 'eqsl_qsl_sent="",eqsl_qslsdate=null'
         end;
    31 : begin
           if (not dmUtils.IsDateOK(cmbValue.Text))then
@@ -546,6 +563,12 @@ begin
              exit;
            sql := 'operator='+QuotedStr(cmbValue.Text)
          end;
+   38 : begin
+           if (cmbValue.Text='') and (Application.MessageBox('Do you really want to clear DOK field?',
+              'Question ...',mb_YesNo+mb_IconQuestion+mb_DefButton2) in [idNo, idCancel]) then
+             exit;
+           sql := 'dok='+QuotedStr(cmbValue.Text)
+         end;
 
   end;
   if sql = '' then exit;
@@ -575,7 +598,8 @@ begin
     dmData.qCQRLOG.EnableControls;
     frmMain.acRefresh.Execute
   end;
-  lblInfo.Caption := 'Edit done! (Press Cancel to exit)';
+  lblInfo.Caption := 'Group edit done '+WhereTo;
+  btnCancel.Caption:= 'Close';
   pnlGrpEdt.Color:= clLime;
   pnlGrpEdt.Repaint;
   lblInfo.Repaint;
diff --git a/src/fImportLoTWWeb.lfm b/src/fImportLoTWWeb.lfm
index 672c783..74f09b6 100644
--- a/src/fImportLoTWWeb.lfm
+++ b/src/fImportLoTWWeb.lfm
@@ -1,9 +1,9 @@
 object frmImportLoTWWeb: TfrmImportLoTWWeb
-  Left = 611
+  Left = 632
   Height = 583
-  Top = 190
+  Top = 98
   Width = 572
-  ActiveControl = Panel1
+  ActiveControl = pnlSettings
   Caption = 'Import from LoTW web site'
   ClientHeight = 583
   ClientWidth = 572
@@ -115,20 +115,32 @@ object frmImportLoTWWeb: TfrmImportLoTWWeb
   OnCloseQuery = FormCloseQuery
   OnShow = FormShow
   Position = poMainFormCenter
-  LCLVersion = '2.0.4.0'
-  object GroupBox1: TGroupBox
+  LCLVersion = '2.0.12.0'
+  object gbProgress: TGroupBox
+    AnchorSideLeft.Control = pnlSettings
+    AnchorSideTop.Control = pnlSettings
+    AnchorSideRight.Control = pnlSettings
+    AnchorSideRight.Side = asrBottom
+    AnchorSideBottom.Control = pnlButtons
+    AnchorSideBottom.Side = asrBottom
     Left = 0
-    Height = 405
-    Top = 128
+    Height = 377
+    Top = 153
     Width = 572
     Align = alClient
     Caption = 'Progress'
-    ClientHeight = 387
+    ClientHeight = 359
     ClientWidth = 570
     TabOrder = 0
     object mStat: TMemo
+      AnchorSideLeft.Control = gbProgress
+      AnchorSideTop.Control = gbProgress
+      AnchorSideRight.Control = gbProgress
+      AnchorSideRight.Side = asrBottom
+      AnchorSideBottom.Control = gbProgress
+      AnchorSideBottom.Side = asrBottom
       Left = 0
-      Height = 387
+      Height = 359
       Top = 0
       Width = 570
       Align = alClient
@@ -137,102 +149,167 @@ object frmImportLoTWWeb: TfrmImportLoTWWeb
       TabOrder = 0
     end
   end
-  object Panel1: TPanel
-    Left = 0
-    Height = 128
-    Top = 0
-    Width = 572
+  object pnlSettings: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = Owner
+    AnchorSideRight.Control = Owner
+    Left = 3
+    Height = 150
+    Top = 3
+    Width = 566
     Align = alTop
+    BorderSpacing.Left = 3
+    BorderSpacing.Top = 3
+    BorderSpacing.Right = 3
     BevelOuter = bvNone
-    ClientHeight = 128
-    ClientWidth = 572
+    ClientHeight = 150
+    ClientWidth = 566
     TabOrder = 1
     object btnDownload: TButton
-      Left = 88
+      AnchorSideLeft.Control = gbSettings
+      AnchorSideTop.Control = gbSettings
+      AnchorSideTop.Side = asrBottom
+      AnchorSideRight.Control = gbSettings
+      AnchorSideRight.Side = asrBottom
+      Left = 0
       Height = 25
-      Top = 96
-      Width = 412
+      Top = 116
+      Width = 566
       Anchors = [akTop, akLeft, akRight]
+      BorderSpacing.Top = 6
       Caption = 'Download data from ARRL website'
       OnClick = btnDownloadClick
       TabOrder = 0
     end
-    object GroupBox5: TGroupBox
+    object gbSettings: TGroupBox
+      AnchorSideLeft.Control = pnlSettings
+      AnchorSideTop.Control = pnlSettings
+      AnchorSideRight.Control = pnlSettings
+      AnchorSideRight.Side = asrBottom
       Left = 0
-      Height = 88
+      Height = 110
       Top = 0
-      Width = 572
+      Width = 566
       Anchors = [akTop, akLeft, akRight]
-      Caption = ' '
-      ClientHeight = 70
-      ClientWidth = 570
+      Caption = 'Settings'
+      ClientHeight = 92
+      ClientWidth = 564
       TabOrder = 1
-      object Label3: TLabel
-        Left = 10
+      object lblReturnQsl: TLabel
+        AnchorSideLeft.Control = gbSettings
+        AnchorSideTop.Control = gbSettings
+        Left = 6
         Height = 17
         Top = 12
-        Width = 259
+        Width = 260
+        BorderSpacing.Left = 6
+        BorderSpacing.Top = 12
         Caption = 'Return QSL records received on or after '
         ParentColor = False
       end
       object edtDateFrom: TEdit
-        Left = 280
+        AnchorSideLeft.Control = lblReturnQsl
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = lblReturnQsl
+        AnchorSideTop.Side = asrCenter
+        Left = 269
         Height = 34
-        Top = 6
-        Width = 96
+        Top = 3
+        Width = 123
+        BorderSpacing.Left = 3
         TabOrder = 0
       end
       object chkShowNew: TCheckBox
+        AnchorSideLeft.Control = lblReturnQsl
+        AnchorSideTop.Control = edtCall
+        AnchorSideTop.Side = asrBottom
         Left = 6
         Height = 23
-        Top = 39
-        Width = 382
+        Top = 40
+        Width = 383
+        BorderSpacing.Top = 3
         Caption = 'Show new comfirmed QSOs after download and import'
         TabOrder = 1
       end
-      object Label1: TLabel
-        Left = 384
+      object lblForCall: TLabel
+        AnchorSideLeft.Control = edtDateFrom
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = lblReturnQsl
+        Left = 395
         Height = 17
         Top = 12
         Width = 45
+        BorderSpacing.Left = 3
         Caption = 'for call'
         ParentColor = False
       end
       object edtCall: TEdit
-        Left = 448
+        AnchorSideLeft.Control = lblForCall
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = lblForCall
+        AnchorSideTop.Side = asrCenter
+        Left = 443
         Height = 34
-        Top = 6
-        Width = 104
+        Top = 3
+        Width = 109
+        BorderSpacing.Left = 3
         TabOrder = 2
       end
+      object cbImports: TCheckBox
+        AnchorSideLeft.Control = chkShowNew
+        AnchorSideTop.Control = chkShowNew
+        AnchorSideTop.Side = asrBottom
+        Left = 6
+        Height = 23
+        Top = 63
+        Width = 439
+        Caption = 'Import station information from LoTW if it is not set during qso.'
+        Checked = True
+        OnChange = cbImportsChange
+        State = cbChecked
+        TabOrder = 3
+      end
     end
   end
-  object Panel2: TPanel
+  object pnlButtons: TPanel
+    AnchorSideLeft.Control = pnlSettings
+    AnchorSideRight.Control = pnlSettings
+    AnchorSideBottom.Control = Owner
     Left = 0
     Height = 50
-    Top = 533
+    Top = 530
     Width = 572
     Align = alBottom
+    BorderSpacing.Bottom = 3
     BevelOuter = bvNone
     ClientHeight = 50
     ClientWidth = 572
     TabOrder = 2
     object btnClose: TButton
-      Left = 485
+      AnchorSideTop.Control = pnlButtons
+      AnchorSideTop.Side = asrCenter
+      AnchorSideRight.Control = pnlButtons
+      AnchorSideRight.Side = asrBottom
+      Left = 494
       Height = 25
       Top = 13
       Width = 72
       Anchors = [akTop, akRight]
+      BorderSpacing.Right = 6
       Cancel = True
       Caption = 'Close'
       ModalResult = 2
       TabOrder = 0
     end
     object btnPreferences: TButton
-      Left = 8
+      AnchorSideLeft.Control = pnlButtons
+      AnchorSideTop.Control = pnlButtons
+      AnchorSideTop.Side = asrCenter
+      Left = 6
       Height = 25
       Top = 13
       Width = 96
+      BorderSpacing.Left = 6
       Caption = 'Preferences'
       OnClick = btnPreferencesClick
       TabOrder = 1
diff --git a/src/fImportLoTWWeb.pas b/src/fImportLoTWWeb.pas
index a811668..5f0af7b 100644
--- a/src/fImportLoTWWeb.pas
+++ b/src/fImportLoTWWeb.pas
@@ -17,17 +17,19 @@ type
     btnDownload: TButton;
     btnClose: TButton;
     btnPreferences: TButton;
+    cbImports: TCheckBox;
     chkShowNew: TCheckBox;
     edtCall: TEdit;
     edtDateFrom: TEdit;
-    GroupBox1: TGroupBox;
-    GroupBox5: TGroupBox;
-    Label1: TLabel;
-    Label3: TLabel;
+    gbProgress: TGroupBox;
+    gbSettings: TGroupBox;
+    lblForCall: TLabel;
+    lblReturnQsl: TLabel;
     Label4: TLabel;
     mStat: TMemo;
-    Panel1: TPanel;
-    Panel2: TPanel;
+    pnlSettings: TPanel;
+    pnlButtons: TPanel;
+    procedure cbImportsChange(Sender: TObject);
     procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
     procedure FormShow(Sender: TObject);
     procedure btnDownloadClick(Sender: TObject);
@@ -207,6 +209,7 @@ begin
   edtDateFrom.Text   := cqrini.ReadString('LoTWImp','DateFrom','1990-01-01');
   edtCall.Text       := cqrini.ReadString('LoTWImp','Call',
                         cqrini.ReadString('Station','Call',''));
+  cbImports.Checked  := cqrini.ReadBool('LoTWImp','Import',True);
   Done := False
 end;
 
@@ -215,6 +218,12 @@ procedure TfrmImportLoTWWeb.FormCloseQuery(Sender: TObject;
 begin
   dmUtils.SaveWindowPos(self)
 end;
+
+procedure TfrmImportLoTWWeb.cbImportsChange(Sender: TObject);
+begin
+  cqrini.WriteBool('LoTWImp','Import',cbImports.Checked);
+end;
+
 procedure TfrmImportLoTWWeb.SockCallBack (Sender: TObject; Reason:  THookSocketReason; const  Value: string);
 begin
   case Reason of
diff --git a/src/fImportProgress.pas b/src/fImportProgress.pas
index 7a7c534..6436fe6 100644
--- a/src/fImportProgress.pas
+++ b/src/fImportProgress.pas
@@ -20,6 +20,10 @@ uses
   ComCtrls,lcltype, synachar, ExtCtrls, httpsend, blcksock, iniFiles, FileUtil,
   LazFileUtils;
 
+const
+  C_EErrorFile ='errors_eQSL.adi';
+  C_LErrorFile ='errors_LoTW.adi';
+
 type
   TImportProgressType = (imptRegenerateDXCC, imptImportDXCCTables, imptDownloadDXCCData, imptImportLoTWAdif,
                          imptImportQSLMgrs, imptDownloadQSLData, imptInsertQSLManagers, imptImporteQSLAdif,
@@ -41,12 +45,17 @@ type
     procedure FormShow(Sender: TObject);
     procedure tmrImportTimer(Sender: TObject);
   private
-    running : Boolean;
+    running,
+    LocalDbg : Boolean;
     FileSize : Int64;
     procedure ImportDXCCTables;
     procedure RegenerateDXCCStat;
     procedure DownloadDXCCData;
     procedure DownloadDOKData;
+    procedure CommonImport(var PosEOR:word;var f:TextFile;var call,band,modeorig,mode,submodeorig,submode,qsodate,time_on,qslr,
+                                                      qslrdate,cqz,ituz,iota,grid,state,county,qsorecord:String);
+    procedure WriteErrorRecord(f:char;call,band,modeorig,submodeorig,qsodate,time_on,qslr,qslrdate,
+                                              cqz,ituz,iota,grid,state,county,qsorecord:string;var s:Tstringlist);
     procedure ImportLoTWAdif;
     procedure ImportQSLMgrs;
     procedure DownloadQSLData;
@@ -77,7 +86,7 @@ implementation
 {$R *.lfm}
 { TfrmImportProgress }
 
-uses dData, dUtils, fImportTest, dDXCC, uMyini, dLogUpload, dMembership, dSatellite;
+uses dData, dUtils, fImportTest, dDXCC, uMyini, dLogUpload, dMembership, dSatellite, fAdifImport;
 
 procedure TfrmImportProgress.FormActivate(Sender: TObject);
 begin
@@ -108,7 +117,12 @@ begin
   LoTWQSOList := TStringList.Create;
   LoTWQSOList.Clear;
   eQSLQSOList := TStringList.Create;
-  eQSLQSOList.Clear
+  eQSLQSOList.Clear;
+   //set debug rules for this form
+  // bit 1, %1,  ---> -2 for routines in this form
+  LocalDbg := dmData.DebugLevel >= 1 ;
+  if dmData.DebugLevel < 0 then
+      LocalDbg :=  LocalDbg or ((abs(dmData.DebugLevel) and 2) = 2 );
 end;
 
 procedure TfrmImportProgress.FormDestroy(Sender: TObject);
@@ -176,7 +190,7 @@ begin
                                     QuotedStr(Result[4])+','+QuotedStr(Result[5])+','+
                                     QuotedStr(Result[6])+','+QuotedStr(Result[7])+','+
                                     IntToStr(ADIF)+',0)';
-        if dmData.DebugLevel >=1 then Writeln(dmDXCC.qDXCCRef.SQL.Text);
+        if LocalDbg then Writeln(dmDXCC.qDXCCRef.SQL.Text);
         dmDXCC.qDXCCRef.ExecSQL;
       end;
     end;
@@ -202,7 +216,7 @@ begin
                                     QuotedStr(Result[4])+','+QuotedStr(Result[5])+','+
                                     QuotedStr(Result[6])+','+QuotedStr(Result[7])+','+
                                     IntToStr(ADIF)+','+'1'+')';
-        if dmData.DebugLevel >=1 then
+        if LocalDbg  then
           Writeln(dmDXCC.qDXCCRef.SQL.Text);
         dmDXCC.qDXCCRef.ExecSQL;
       end;
@@ -319,7 +333,7 @@ begin
                                      QuotedStr(Result[1]) + ',' + QuotedStr(Result[2])
                                      + ',' + QuotedStr(tmp) + ')';
       end;
-      if dmData.DebugLevel>=1 then
+      if LocalDbg then
         Writeln(dmData.qIOTAList.SQL.Text);
 
       if length(Result[1]) > 250 then ShowMessage(Result[0]);
@@ -540,8 +554,127 @@ begin
     Application.ProcessMessages;
   end;
 end;
+procedure TfrmImportProgress.CommonImport(var PosEOR:word;var f:TextFile;var call,band,modeorig,mode,submodeorig,submode,qsodate,time_on,qslr,
+                                                      qslrdate,cqz,ituz,iota,grid,state,county,qsorecord:String);
+var
+  a,
+  prik,
+  data,
+  Cstamp,
+  Dstamp,
+  Buf  :string;
+
+Begin
+  Buf:='';
+  Dstamp:=FormatDateTime('YYYYMMDD',Now);
+  while not ((PosEOR > 0) or eof(f)) do //combine one record. LoTW adif has one tag per line
+    Begin
+     Readln(f, a);
+     a      := Trim(a);
+     PosEOR := Pos('<EOR>',UpperCase(a));
+     Buf    := Buf+a;
+    end;
+  if Pos('<EOR>',UpperCase(Buf))=0 then
+     Buf:=buf+'<EOR>'; //in case we have broken record in broken file (hit eof before it is time)
+  if LocalDbg then
+                  Writeln('one record read: ',Buf);
+  //check SWL and is so change contest_id to find those easier
+  //if there is tag QSLMSG move data of it to (comment to qso).
+  if pos('APP_EQSL_SWL:1>Y',uppercase(buf))>0 then
+              Begin
+               Cstamp:= '<CONTEST_ID:25>SWL_was_not_found_in_log!';
+               Buf:=StringReplace(buf,'<QSLMSG:','<COMMENT:',[rfIgnoreCase]);
+               Buf:=StringReplace(buf,'<RST_RCVD:0>','<RST_SENT+:3>SWL',[rfIgnoreCase]); //we need this for temp use
+               Buf:=StringReplace(buf,'<RST_SENT:','<RST_RCVD:',[rfIgnoreCase]);
+               Buf:=StringReplace(buf,'<RST_SENT+:','<RST_SENT:',[rfIgnoreCase]);
+              end
+              else
+               Cstamp:= '<CONTEST_ID:25>Qso_was_not_found_in_log!';
+
+  //Here we create a qso record that has comment and lotw+eqsl sent set.
+  //user can add this record to log to get rid of lotw/eqsl error "Not found in log"
+  //in case this qso is really wanted to be confirmed (maybe is SWL report) user can wipe out
+  //the first 1-3 lines (lotw,eqsl sent, comment) and import only the last line to log and so
+  //it will be added to log and sent to lotw/eqsl during next upload
+  qsorecord:= '<LOTW_QSL_SENT:1>Y<LOTW_QSLSDATE:8>'+Dstamp+'<APP_CQRLOG_NOTE:36>This line prevents reupload to LoTW'
+              +LineEnding+'<EQSL_QSL_SENT:1>Y<EQSL_QSLSDATE:8>'+Dstamp+'<APP_CQRLOG_NOTE:36>This line prevents reupload to eQSL'
+              +LineEnding+Cstamp
+              +LineEnding+Buf;
+
+  mode := ''; //be sure there is no mode at this point
+  repeat
+   begin
+     if frmAdifImport.getNextAdifTag(Buf,prik,data) then
+       if LocalDbg then
+         Begin
+          write(prik,'->');
+          writeln(data);
+         end;
+          case uppercase(prik) of
+           'CALL'       : call    := uppercase(data);
+           'GRIDSQUARE' : if dmUtils.IsLocOK(data) then
+                             grid := dmUtils.StdFormatLocator(data);
+                        //if not mode set by submode then set mode
+           'MODE'       : mode    := uppercase(data);
+           'SUBMODE'    : submode := uppercase(data);
+           'BAND'       : band    := uppercase(data);
+           'QSO_DATE'   : qsodate := data;
+           'TIME_ON'    : time_on := data;
+           'IOTA'       : iota    := data;
+           'STATE'      : state   := data;
+           'CQZ'        : cqz     := data;
+           'ITUZ'       : ituz    := data;
+           'CNTY'       : county  := data;
+           'QSL_RCVD'   : qslr    :=uppercase(data);
+           'QSLRDATE'   : qslrdate:= data;
+          end; //case
+       end;  //repeat
+  until pos('<EOR>',uppercase(Buf))=1;
+  //store original modes
+  modeorig:=uppercase(mode);
+  submodeorig:=uppercase(submode);
+  //after this line mode will be changed to Cqrmode. submodeorig & modeorig has orignal ones stored for possible error reports
+  mode :=dmUtils.ModeToCqr(mode,submode,LocalDbg);
+end;
+procedure TfrmImportProgress.WriteErrorRecord(f:char;call,band,modeorig,submodeorig,qsodate,time_on,qslr,qslrdate,
+                                              cqz,ituz,iota,grid,state,county,qsorecord:string;var s:Tstringlist);
+var
+  l,
+  tmp:String;
+
+
+Begin
+             tmp:=LineEnding
+                  +'------------------------------------------------'+LineEnding
+                  +'QSO NOT FOUND in log'+LineEnding
+                  +'Call:     '+call+LineEnding
+                  +'Band:     '+band+LineEnding
+                  +'Mode:     '+modeorig+LineEnding
+                  +'Submode:  '+submodeorig+lineEnding
+                  +'QSO_date: '+qsodate+LineEnding
+                  +'Time_on:  '+time_on+LineEnding;
+             if f='L' then
+               begin
+                 tmp:=tmp
+                 +'QSLR:     '+qslr+LineEnding
+                 +'QSLRDate: '+qslrdate+LineEnding
+                 +'CQZ:      '+cqz+LineEnding
+                 +'ITUZ:     '+ituz+LineEnding
+                 +'IOTA:     '+iota+LineEnding
+                 +'Grid:     '+grid+LineEnding
+                 +'State:    '+state+LineEnding
+                 +'County:   '+county+LineEnding;
+               end;
+             tmp:=tmp+'------------------------------------------------'+LineEnding;
+             l:=IntToStr(length(tmp));
+             //end of APP_CQRLOG_ERROR tag
+             tmp:=tmp
+             +qsorecord+LineEnding
+             +LineEnding;
+
+             s.Add('<APP_CQRLOG_ERROR:'+l+'>'+tmp);
 
-
+end;
 procedure TfrmImportProgress.ImportLoTWAdif;
 var
   num      : Word = 1;
@@ -553,32 +686,23 @@ var
   f        : TextFile;
   PosEOH   : Word;
   PosEOR   : Word;
-  call     : String;
-  band     : String;
-  mode     : String;
-  qsodate  : String;
-  time_on  : String;
-  qslr     : String;
-  qslrdate : String;
-  cqz      : String;
-  ituz     : String;
-  iota     : String;
-  grid     : String;
-  state    : String;
+  qsorecord,
+  call,
+  band,
+  mode,
+  modeorig,
+  submode,
+  submodeorig,
+  qsodate,
+  time_on,
+  qslr,
+  qslrdate,
+  cqz,
+  ituz,
+  iota,
+  grid,
+  state,
   county   : String;
-  PosCall     : Word;
-  PosBand     : Word;
-  PosMode     : Word;
-  PosQsoDate  : Word;
-  PosTime_on  : Word;
-  PosQslr     : Word;
-  PosQslrDate : Word;
-  PosCqz      : Word;
-  PosItuz     : Word;
-  PosIota     : Word;
-  PosGrid     : Word;
-  PosState    : Word;
-  PosCounty   : Word;
 
   qso_in_log  : Boolean = False;
   ErrorCount  : Word = 0;
@@ -595,7 +719,17 @@ begin
 
 
   l := TStringList.Create;
+  l.Add('<ADIF_VER:5>3.1.0');
+  l.Add('<CREATED_TIMESTAMP:15>'+FormatDateTime('YYYYMMDD hhmmss',dmUtils.GetDateTime(0)));
+  l.Add('LoTW import errors from CQRLOG for Linux version '+dmData.VersionString);
+  l.Add('Copyright (C) '+FormatDateTime('YYYY',now)+' by Petr, OK2CQR and Martin, OK1RR');
+  l.Add('');
+  l.Add('Internet: http://www.cqrlog.com');
+  l.Add('');
+  l.Add('<EOH>');
+  l.Add('');
   AssignFile(f,FileName);
+
   try
     if cqrini.ReadBool('OnlineLog','IgnoreLoTWeQSL',False) and dmLogUpload.LogUploadEnabled then
       dmLogUpload.DisableOnlineLogSupport;
@@ -621,6 +755,9 @@ begin
         call     := '';
         band     := '';
         mode     := '';
+        modeorig := '';
+        submode  := '';
+        submodeorig := '';
         qsodate  := '';
         time_on  := '';
         qslr     := '';
@@ -632,208 +769,23 @@ begin
         state    := '';
         county   := '';
         PosEOR   := 0;
-        while not ((PosEOR > 0) or eof(f)) do
+        while not ((PosEOR > 0) or eof(f)) do //read all records
         begin
           qso_in_log := False;
-          Readln(f, a);
-          a    := Trim(a);
-          orig := a;
-          a    := UpperCase(a);
-
-          PosCall     := Pos('<CALL:',a);
-          PosBand     := Pos('<BAND:',a);
-          PosMode     := Pos('<MODE:',a);
-          PosQsoDate  := Pos('<QSO_DATE:',a);
-          PosTime_on  := Pos('<TIME_ON:',a);
-          PosQslr     := Pos('<QSL_RCVD:',a);
-          PosQslrDate := Pos('<QSLRDATE:',a);
-          PosCqz      := Pos('<CQZ:',a);
-          PosItuz     := Pos('<ITUZ:',a);
-          PosIota     := Pos('<IOTA:',a);
-          PosGrid     := Pos('<GRIDSQUARE:',a);
-          PosState    := Pos('<STATE:',a);
-          PosCounty   := Pos('<CNTY:',a);
-          PosEOR      := Pos('<EOR>',a);
-
-          if PosCall > 0 then
-          begin
-            sSize   := '';
-            PosCall := PosCall + 6;
-            while not (a[PosCall] = '>') do
-            begin
-              sSize := sSize + a[PosCall];
-              inc(PosCall)
-            end;
-            Size := StrToInt(sSize);
-            call := copy(orig,PosCall+1,Size)
-          end;
-
-          if PosBand > 0 then
-          begin
-            sSize   := '';
-            PosBand := PosBand + 6;
-            while not (a[PosBand] = '>') do
-            begin
-              sSize := sSize + a[PosBand];
-              inc(PosBand)
-            end;
-            Size := StrToInt(sSize);
-            band := copy(orig,PosBand+1,Size)
-          end;
-
-          if PosMode > 0 then
-          begin
-            sSize   := '';
-            PosMode := PosMode + 6;
-            while not (a[PosMode] = '>') do
-            begin
-              sSize := sSize + a[PosMode];
-              inc(PosMode)
-            end;
-            Size := StrToInt(sSize);
-            mode := copy(orig,PosMode+1,Size)
-          end;
-
-          if PosQsoDate > 0 then
-          begin
-            sSize      := '';
-            PosQsoDate := PosQsoDate + 10;
-            while not (a[PosQsoDate] = '>') do
-            begin
-              sSize := sSize + a[PosQsoDate];
-              inc(PosQsoDate)
-            end;
-            Size    := StrToInt(sSize);
-            qsodate := copy(orig,PosQsoDate+1,Size)
-          end;
-
-          if PosTime_on > 0 then
-          begin
-            sSize      := '';
-            PosTime_on := PosTime_on + 9;
-            while not (a[PosTime_on] = '>') do
-            begin
-              sSize := sSize + a[PosTime_on];
-              inc(PosTime_on)
-            end;
-            Size    := StrToInt(sSize);
-            time_on := copy(orig,PosTime_on+1,Size)
-          end;
-
-
-          if PosQslr > 0 then
-          begin
-            sSize   := '';
-            PosQslr := PosQslr + 10;
-            while not (a[PosQslr] = '>') do
-            begin
-              sSize := sSize + a[PosQslr];
-              inc(PosQslr)
-            end;
-            Size := StrToInt(sSize);
-            qslr := copy(orig,PosQslr+1,Size)
-          end;
-
-          if PosQslrDate > 0 then
-          begin
-            sSize      := '';
-            PosQslrDate := PosQslrDate + 10;
-            while not (a[PosQslrDate] = '>') do
-            begin
-              sSize := sSize + a[PosQslrDate];
-              inc(PosQslrDate)
-            end;
-            Size     := StrToInt(sSize);
-            qslrdate := copy(orig,PosQslrDate+1,Size)
-          end;
-
-          if PosCqz > 0 then
-          begin
-            sSize  := '';
-            PosCqz := PosCqz + 5;
-            while not (a[PosCqz] = '>') do
-            begin
-              sSize := sSize + a[PosCqz];
-              inc(PosCqz)
-            end;
-            Size := StrToInt(sSize);
-            cqz  := copy(orig,PosCqz+1,Size)
-          end;
-
-          if PosItuz > 0 then
-          begin
-            sSize   := '';
-            PosItuz := PosItuz + 6;
-            while not (a[PosItuz] = '>') do
-            begin
-              sSize := sSize + a[PosItuz];
-              inc(PosItuz)
-            end;
-            Size  := StrToInt(sSize);
-            ituz  := copy(orig,PosItuz+1,Size)
-          end;
-
-          if PosIota > 0 then
-          begin
-            sSize   := '';
-            PosIota := PosIota + 6;
-            while not (a[PosIota] = '>') do
-            begin
-              sSize := sSize + a[PosIota];
-              inc(PosIota)
-            end;
-            Size  := StrToInt(sSize);
-            iota  := copy(orig,PosIota+1,Size)
-          end;
-
-          if PosGrid > 0 then
-          begin
-            sSize   := '';
-            PosGrid := PosGrid + 12;
-            while not (a[PosGrid] = '>') do
-            begin
-              sSize := sSize + a[PosGrid];
-              inc(PosGrid)
-            end;
-            Size  := StrToInt(sSize);
-            grid  := copy(orig,PosGrid+1,Size)
-          end;
-
-          if PosState > 0 then
-          begin
-            sSize    := '';
-            PosState := PosState + 7;
-            while not (a[PosState] = '>') do
-            begin
-              sSize := sSize + a[PosState];
-              inc(PosState)
-            end;
-            Size  := StrToInt(sSize);
-            state := copy(orig,PosState+1,Size)
-          end;
-
-          if PosCounty > 0 then
-          begin
-            sSize     := '';
-            PosCounty := PosCounty + 6;
-            while not (a[PosCounty] = '>') do
-            begin
-              sSize := sSize + a[PosCounty];
-              inc(PosCounty)
-            end;
-            Size   := StrToInt(sSize);
-            county := copy(orig,PosCounty+1,Size)
-          end;
-
+          CommonImport(PosEOR,f,call,band,modeorig,mode,submodeorig,submode,qsodate,time_on,qslr,
+                        qslrdate,cqz,ituz,iota,grid,state,county,qsorecord);
+          //for now on the mode is converted Cqrmode
           if PosEOR > 0 then
           begin
-            //inc(qsln);
-            if dmData.DebugLevel >= 1 then
+            if LocalDbg  then
             begin
-             // Writeln('Number:   ',IntToStr(qsln));
+              Writeln('------------------------------------------------');
+              Writeln('Record Number:   ',IntToStr(qsln));
               Writeln('Call:     ',call);
               Writeln('Band:     ',band);
-              Writeln('Mode:     ',mode);
+              Writeln('Mode:     ',modeorig);
+              Writeln('Submode:  ',submodeorig);
+              Writeln('Cqrmode:  ',mode);
               Writeln('QSO_date: ',qsodate);
               Writeln('Time_on:  ',time_on);
               Writeln('QSLR:     ',qslr);
@@ -850,17 +802,21 @@ begin
             qsodate  := dmUtils.ADIFDateToDate(qsodate);
             qslrdate := dmUtils.ADIFDateToDate(qslrdate);
 
-            mode := UpperCase(mode);
-            if mode='JT65' then
-              mode := 'JT65A';
-
             dmData.Q.Close;
+            //we compare Cqrmode in log to mode and submode received and Cqrmode created.
+            //If any of these is ok, qso is ok by mode.
+            //this makes backward compatible to old cqrlog loggings.
+            //Actually qso is ok even without mode check if other items fit!
             dmData.Q.SQL.Text := 'select time_on,lotw_qslr,waz,itu,iota,loc,state,county,id_cqrlog_main from cqrlog_main ' +
                                  'where (qsodate ='+QuotedStr(qsodate)+') '+
                                  'and (band = ' + QuotedStr(band) + ')'+
-//                                 'and (mode = ' + QuotedStr(mode) + ') and (band = ' + QuotedStr(band) + ')'+
+                                 'and ('+
+                                      '(mode = ' + QuotedStr(mode) +') or '+
+                                      '(mode = ' + QuotedStr(modeorig)+') or '+
+                                      '(mode = ' + QuotedStr(submodeorig)+') '+
+                                      ')' +
                                  'and (callsign = ' + QuotedStr(call) + ')';
-            if dmData.DebugLevel >=1 then Writeln(dmData.Q.SQL.Text);
+            if LocalDbg then Writeln(dmData.Q.SQL.Text);
             //if dmData.trQ.Active then dmData.trQ.Rollback;
             //dmData.trQ.StartTransaction;
             dmData.Q.Open();
@@ -876,10 +832,18 @@ begin
               t_log := EncodeTime(StrToInt(copy(dmData.Q.Fields[0].AsString,1,2)),
                         StrToInt(copy(dmData.Q.Fields[0].AsString,4,2)),0,0);
 
-              t_lotw_min := t_lotw-5/1440;
-              t_lotw_max := t_lotw+5/1440;
+             if copy(time_on,1,2)='00' then
+                t_lotw_min := 0      //if lotw time is from 1st hour 00:00-00:59 low limit must be set to 00:00
+              else                   //as day is set at sql query and we can not go backwards to yesterday
+                t_lotw_min := t_lotw-5/1440;
 
-              if dmData.DebugLevel >=1 then Writeln(call,'|',TimeToStr(t_log),' | ',TimeToStr(t_lotw_min),'|',TimeToStr(t_lotw_max));
+             if t_lotw > EncodeTime(23,54,0,0) then
+                t_lotw_max :=EncodeTime(23,59,0,0)
+                                     //this fails too in qsos past 23:54 as we can not set high limit to next day
+              else                   //as day is set at sql query and we can not go forward to tomorrow
+                t_lotw_max := t_lotw+5/1440;
+
+              if LocalDbg  then Writeln(call,'|',TimeToStr(t_log),' | ',TimeToStr(t_lotw_min),'|',TimeToStr(t_lotw_max));
 
               if (t_log >=t_lotw_min) and (t_log<=t_lotw_max)  then
               begin
@@ -891,21 +855,24 @@ begin
                   dmData.Q1.SQL.Clear;
                   dmData.Q1.SQL.Add('update cqrlog_main set lotw_qslr = ' + QuotedStr('L'));
                   dmData.Q1.SQL.Add(',lotw_qslrdate = ' + QuotedStr(qslrdate));
-                  if cqz<>'' then
-                    dmData.Q1.SQL.Add(',waz = ' + QuotedStr(cqz));
-                  if ituz<>'' then
-                    dmData.Q1.SQL.Add(',itu = ' + QuotedStr(ituz));
-                  if iota<>'' then
-                    dmData.Q1.SQL.Add(',iota = ' + QuotedStr(iota));
-                  if (grid <> '') and (dmData.Q.Fields[5].AsString='') then
-                    dmData.Q1.SQL.Add(',loc = ' + QuotedStr(grid));
-                  if (state<>'') and (dmData.Q.Fields[6].AsString='') then
-                    dmData.Q1.SQL.Add(',state = ' + QuotedStr(state));
-                  if (county<>'') and (dmData.Q.Fields[7].AsString='') then
-                    dmData.Q1.SQL.Add(',county = ' + QuotedStr(county));
+                  if cqrini.ReadBool('LoTWImp','Import',True) then
+                    Begin
+                      if cqz<>'' then
+                        dmData.Q1.SQL.Add(',waz = ' + QuotedStr(cqz));
+                      if ituz<>'' then
+                        dmData.Q1.SQL.Add(',itu = ' + QuotedStr(ituz));
+                      if iota<>'' then
+                        dmData.Q1.SQL.Add(',iota = ' + QuotedStr(iota));
+                      if (grid <> '') and (dmData.Q.Fields[5].AsString='') then
+                        dmData.Q1.SQL.Add(',loc = ' + QuotedStr(grid));
+                      if (state<>'') and (dmData.Q.Fields[6].AsString='') then
+                        dmData.Q1.SQL.Add(',state = ' + QuotedStr(state));
+                      if (county<>'') and (dmData.Q.Fields[7].AsString='') then
+                        dmData.Q1.SQL.Add(',county = ' + QuotedStr(county));
+                    end;
                   dmData.Q1.SQL.Add(' where id_cqrlog_main = ' + dmData.Q.Fields[8].AsString);
                   inc(qsln);
-                  if dmData.DebugLevel>=1 then Writeln(dmData.Q1.SQL.Text+ '  qsl number:'+ IntToStr(qsln));
+                  if LocalDbg then Writeln(dmData.Q1.SQL.Text+ '  qsl number:'+ IntToStr(qsln));
                   dmData.Q1.ExecSQL
                 end;
                 qso_in_log := True;
@@ -915,22 +882,7 @@ begin
             end;
             if not qso_in_log then
             begin
-              l.Add('QSO NOT FOUND in log');
-              l.Add('Call:     '+call);
-              l.Add('Band:     '+band);
-              l.Add('Mode:     '+mode);
-              l.Add('QSO_date: '+qsodate);
-              l.Add('Time_on:  '+time_on);
-              l.Add('QSLR:     '+qslr);
-              l.Add('QSLRDate: '+qslrdate);
-              l.Add('CQZ:      '+cqz);
-              l.Add('ITUZ:     '+ituz);
-              l.Add('IOTA:     '+iota);
-              l.Add('Grid:     '+grid);
-              l.Add('State:    '+state);
-              l.Add('County:   '+county);
-              l.Add('------------------------------------------------');
-              l.Add('');
+              WriteErrorRecord('L',call,band,modeorig,submodeorig,qsodate,time_on,qslr,qslrdate,cqz,ituz,iota,grid,state,county,qsorecord,l);
               inc(ErrorCount)
             end
           end
@@ -943,18 +895,17 @@ begin
       dmData.trQ1.Commit;
       if ErrorCount > 0 then
       begin
-        l.SaveToFile(dmData.HomeDir + 'lotw_error.txt');
-        if Application.MessageBox(PChar(IntToStr(ErrorCount)+' QSO(s) were not found in your log. '#13' QSO(s) are stored to '+dmData.HomeDir + 'lotw_error.txt'+
+        l.SaveToFile(dmData.UsrHomeDir + C_LErrorFile);
+        if Application.MessageBox(PChar(IntToStr(ErrorCount)+' QSO(s) were not found in your log.'+LineEnding+'QSO(s) are stored to '+dmData.UsrHomeDir + C_LErrorFile +
                                   LineEnding+LineEnding+'Do you want to show the file?'),'Question ....',mb_YesNo+mb_IconQuestion)=idYes then
-           dmUtils.OpenInApp(dmData.HomeDir + 'lotw_error.txt')
-        //ShowMessage(IntToStr(ErrorCount)+' QSO(s) were not found in your log. '#13' QSO(s) are stored to '+dmData.HomeDir + 'lotw_error.txt')
+          frmAdifImport.OpenInTextEditor(dmData.UsrHomeDir + C_LErrorFile)
       end
     end
     else begin
       if Application.MessageBox('Something is wrong because LoTW server returned invalid adif file header.'+LineEnding+
                                 'Your LoTW username/password could be wrong or LoTW server is down.'+LineEnding+LineEnding+'Do you want to show the file?',
                                 'Error ...',mb_YesNo+mb_IconQuestion) = idYes then
-        dmUtils.OpenInApp(FileName)
+        frmAdifImport.OpenInTextEditor(FileName)
     end
   finally
     dmData.Q.Close();
@@ -1060,7 +1011,7 @@ begin
         dmData.trQ.StartTransaction;
         dmData.Q.SQL.Text := 'update cqrlog_main set qsl_via = ' + QuotedStr(qsl_via) +
                              ' where id_cqrlog_main = '+ IntToStr(dmData.qCQRLOG.FieldByName('id_cqrlog_main').AsInteger);
-        if dmData.DebugLevel>=1 then Writeln(dmData.Q.SQL.Text);
+        if LocalDbg then Writeln(dmData.Q.SQL.Text);
         dmData.Q.ExecSQL;
         dmData.trQ.Commit
       end;
@@ -1078,39 +1029,60 @@ end;
 
 procedure TfrmImportProgress.ImporteQSLAdif;
 var
-  num      : Word = 1;
-  size     : Word;
-  sSize    : String;
-  a        : String;
-  orig     : String;
   f        : TextFile;
-  PosEOH   : Word;
+  num      : Word = 1;
+  size,
+  PosEOH,
   PosEOR   : Word;
-  call     : String;
-  band     : String;
-  mode     : String;
-  submode  : String;
-  qsodate  : String;
-  time_on  : String;
-  qslr     : String;
-  PosCall     : Word;
-  PosBand     : Word;
-  PosMode     : Word;
-  PosSubmode  : Word;
-  PosQsoDate  : Word;
-  PosTime_on  : Word;
+  sSize,
+  a,
+  orig,
+  qsorecord,
+  call,
+  band,
+  mode,
+  modeorig,
+  submode,
+  submodeorig,
+  qsodate,
+  time_on,
+  qslr,
+  qslrdate,
+  cqz,
+  ituz,
+  iota,
+  grid,
+  state,
+  county,
+  Buf         : String;
+
+  PosCall,
+  PosBand,
+  PosMode,
+  PosSubmode,
+  PosQsoDate,
+  PosTime_on,
   PosQslr     : Word;
 
   qso_in_log  : Boolean = False;
   ErrorCount  : Word = 0;
   l           : TStringList;
-  t_eQSL      : TDateTime;
-  t_eQSL_min  : TDateTime;
-  t_eQSL_max  : TDateTime;
+  t_eQSL,
+  t_eQSL_min,
+  t_eQSL_max,
   t_log       : TDateTime;
 
 begin
   l := TStringList.Create;
+  l.Add('<ADIF_VER:5>3.1.0');
+  l.Add('<CREATED_TIMESTAMP:15>'+FormatDateTime('YYYYMMDD hhmmss',dmUtils.GetDateTime(0)));
+  l.Add('eQSL import errors from CQRLOG for Linux version '+dmData.VersionString);
+  l.Add('Copyright (C) '+FormatDateTime('YYYY',now)+' by Petr, OK2CQR and Martin, OK1RR');
+  l.Add('');
+  l.Add('Internet: http://www.cqrlog.com');
+  l.Add('');
+  l.Add('<EOH>');
+  l.Add('');
   if dmData.trQ.Active then
     dmData.trQ.RollBack;
   if dmData.trQ1.Active then
@@ -1139,166 +1111,71 @@ begin
     begin
       call     := '';
       band     := '';
+      modeorig := '';
       mode     := '';
+      submodeorig
+               := '';
       submode  := '';
       qsodate  := '';
       time_on  := '';
       qslr     := '';
-      PosEOR   := 0;
-      while not ((PosEOR > 0) or eof(f)) do
-      begin
-        Readln(f, a);
-        a    := Trim(a);
-        orig := a;
-        a    := UpperCase(a);
-
-        PosCall     := Pos('<CALL:',a);
-        PosBand     := Pos('<BAND:',a);
-        PosMode     := Pos('<MODE:',a);
-        PosSubmode  := Pos('<SUBMODE:',a);
-        PosQsoDate  := Pos('<QSO_DATE:8:D',a);
-        PosTime_on  := Pos('<TIME_ON:',a);
-        PosQslr     := Pos('<QSL_RCVD:',a);
-        PosEOR      := Pos('<EOR>',a);
-
-        if PosCall > 0 then
-        begin
-          sSize   := '';
-          PosCall := PosCall + 6;
-          while not (a[PosCall] = '>') do
-          begin
-            sSize := sSize + a[PosCall];
-            inc(PosCall)
-          end;
-          Size := StrToInt(sSize);
-          call := copy(orig,PosCall+1,Size)
-        end;
-
-        if PosBand > 0 then
-        begin
-          sSize   := '';
-          PosBand := PosBand + 6;
-          while not (a[PosBand] = '>') do
-          begin
-            sSize := sSize + a[PosBand];
-            inc(PosBand)
-          end;
-          Size := StrToInt(sSize);
-          band := copy(orig,PosBand+1,Size)
-        end;
-
-        if PosMode > 0 then
-        begin
-          sSize   := '';
-          PosMode := PosMode + 6;
-          while not (a[PosMode] = '>') do
-          begin
-            sSize := sSize + a[PosMode];
-            inc(PosMode)
-          end;
-          Size := StrToInt(sSize);
-          mode := copy(orig,PosMode+1,Size)
-        end;
+      //these are not needed with eQSL
+      qslrdate := '';
+      cqz      := '';
+      ituz     := '';
+      iota     := '';
+      grid     := '';
+      state    := '';
+      county   := '';
 
-        if PosSubmode > 0 then
-        begin
-          sSize   := '';
-          PosSubmode := PosSubmode + 9;
-          while not (a[PosSubmode] = '>') do
-          begin
-            sSize := sSize + a[PosSubmode];
-            inc(PosSubmode)
-          end;
-          Size := StrToInt(sSize);
-          submode := copy(orig,PosSubmode+1,Size)
-        end;
-
-        if PosQsoDate > 0 then
-        begin
-          qsodate :=copy(orig,PosQsoDate+14,8);
-          {
-          sSize      := '';
-          PosQsoDate := PosQsoDate + 13;
-          while not (a[PosQsoDate] = '>') do
-          begin
-            sSize := sSize + a[PosQsoDate];
-            inc(PosQsoDate)
-          end;
-          Size    := StrToInt(sSize);
-          qsodate := copy(orig,PosQsoDate+1,Size)
-          }
-        end;
-
-        if PosTime_on > 0 then
-        begin
-          sSize      := '';
-          PosTime_on := PosTime_on + 9;
-          while not (a[PosTime_on] = '>') do
-          begin
-            sSize := sSize + a[PosTime_on];
-            inc(PosTime_on)
-          end;
-          Size    := StrToInt(sSize);
-          time_on := copy(orig,PosTime_on+1,Size)
-        end;
+      PosEOR   := 0;
 
-        if PosQslr > 0 then
-        begin
-          sSize   := '';
-          PosQslr := PosQslr + 10;
-          while not (a[PosQslr] = '>') do
-          begin
-            sSize := sSize + a[PosQslr];
-            inc(PosQslr)
-          end;
-          Size := StrToInt(sSize);
-          qslr := copy(orig,PosQslr+1,Size)
-        end;
 
+      while not ((PosEOR > 0) or eof(f)) do
+      begin
+        qso_in_log := False;
+        CommonImport(PosEOR,f,call,band,modeorig,mode,submodeorig,submode,qsodate,time_on,qslr,
+                        qslrdate,cqz,ituz,iota,grid,state,county,qsorecord);
+        //for now on the mode is converted Cqrmode
         if PosEOR > 0 then
         begin
-          band    := UpperCase(band);
-          mode    := UpperCase(mode);
-          submode := UpperCase(submode);
-          qslr    := UpperCase(qslr);
-          call    := UpperCase(call);
-          if dmData.DebugLevel >= 1 then
+          if LocalDbg then
           begin
+            Writeln('------------------------------------------------');
             Writeln('Call:     ',call);
             Writeln('Band:     ',band);
-            Writeln('Mode:     ',mode);
-            Writeln('Submode:  ',submode);
+            Writeln('Mode:     ',modeorig);
+            Writeln('Submode:  ',submodeorig);
+            Writeln('CqrMode:  ',mode);
             Writeln('QSO_date: ',qsodate);
             Writeln('Time_on:  ',time_on);
             Writeln('QSLR:     ',qslr);
-            Writeln('------------------------------------------------')
+            Writeln('------------------------------------------------');
           end;
           qsodate  := dmUtils.ADIFDateToDate(qsodate);
-          mode     := UpperCase(mode);
-
 
           dmData.Q.Close;
 
-          if (mode='JT65') then  //since implementing submodes below, this can most probably be removed
-          begin
-            dmData.Q.SQL.Text := 'select id_cqrlog_main,eqsl_qsl_rcvd,time_on from cqrlog_main ' +
-                                 'where (qsodate ='+QuotedStr(qsodate)+') '+
-                                 'and ((mode = ' + QuotedStr('JT65') + ') or (mode='+QuotedStr('JT65A')+') '+
-                                 'or (mode='+QuotedStr('JT65B')+') or (mode='+QuotedStr('JT65C')+')) '+
-                                 'and (band = ' + QuotedStr(band) + ') '+
-                                 'and (callsign = ' + QuotedStr(call) + ')'
-          end
-          else begin
-            dmData.Q.SQL.Text := 'select id_cqrlog_main,eqsl_qsl_rcvd,time_on from cqrlog_main ' +
+          //we compare Cqrmode in log to mode and submode received and Cqrmode created.
+          //If any of these is ok, qso is ok by mode.
+          //this makes backward compatible to old cqrlog loggings.
+          //Actually qso is ok even without mode check if other items fit!
+          dmData.Q.SQL.Text := 'select id_cqrlog_main,eqsl_qsl_rcvd,time_on from cqrlog_main ' +
                                  'where (qsodate ='+QuotedStr(qsodate)+') '+
-                                 'and ((mode = ' + QuotedStr(mode) + ') or (mode = ' + QuotedStr(submode) + ')) '+
+                                 'and ('+
+                                      '(mode = ' + QuotedStr(mode) +') or '+
+                                      '(mode = ' + QuotedStr(modeorig)+') or '+
+                                      '(mode = ' + QuotedStr(submodeorig)+') '+
+                                      ')' +
                                  'and (band = ' + QuotedStr(band) + ') '+
-                                 'and (callsign = ' + QuotedStr(call) + ')'
-          end;
-          if dmData.DebugLevel >=1 then Writeln(dmData.Q.SQL.Text);
+                                 'and (callsign = ' + QuotedStr(call) + ')';
+
+          if LocalDbg  then Writeln(dmData.Q.SQL.Text);
           //if dmData.trQ.Active then dmData.trQ.Rollback;
           //dmData.trQ.StartTransaction;
           dmData.Q.Open();
+          dmData.Q.First;
+          if dmData.Q.Eof then  qso_in_log := False;
           while not dmData.Q.Eof do
           begin
             qso_in_log := False;
@@ -1309,10 +1186,18 @@ begin
             t_log  := EncodeTime(StrToInt(copy(dmData.Q.Fields[2].AsString,1,2)),
                       StrToInt(copy(dmData.Q.Fields[2].AsString,4,2)),0,0);
 
-            t_eQSL_min := t_eQSL-60/1440;
-            t_eQSL_max := t_eQSL+60/1440;
+             if copy(time_on,1,2)='00' then
+                t_eQSL_min := 0      //if eqsl time is from 1st hour 00:00-00:59 low limit must be set to 00:00
+              else                   //as day is set at sql query and we can not go backwards to yesterday
+                t_eQSL_min := t_eQSL-60/1440;
+
+            if copy(time_on,1,2)='23' then
+                t_eQSL_max :=EncodeTime(23,59,0,0)
+                                     //this fails too in qsos past 23:xx as we can not set high limit to next day
+              else                   //as day is set at sql query and we can not go forward to tomorrow
+                t_eQSL_max := t_eQSL+60/1440;
 
-            if dmData.DebugLevel >=1 then Writeln(call,'|',TimeToStr(t_log),' | ',TimeToStr(t_eQSL_min),'|',TimeToStr(t_eQSL_max));
+            if LocalDbg  then Writeln(call,'|',TimeToStr(t_log),' | ',TimeToStr(t_eQSL_min),'|',TimeToStr(t_eQSL_max));
 
             if (t_log >=t_eQSL_min) and (t_log<=t_eQSL_max)  then
             begin
@@ -1325,7 +1210,7 @@ begin
                 dmData.Q1.SQL.Add('update cqrlog_main set eqsl_qsl_rcvd = ' + QuotedStr('E'));
                 dmData.Q1.SQL.Add(',eqsl_qslrdate = ' + QuotedStr(dmUtils.DateInRightFormat(now)));
                 dmData.Q1.SQL.Add(' where id_cqrlog_main = ' + dmData.Q.Fields[0].AsString);
-                if dmData.DebugLevel>=1 then Writeln(dmData.Q1.SQL.Text);
+                if LocalDbg then Writeln(dmData.Q1.SQL.Text);
                 dmData.Q1.ExecSQL
               end;
               qso_in_log := True;
@@ -1335,15 +1220,7 @@ begin
           end;
           if not qso_in_log then
           begin
-            l.Add('QSO NOT FOUND in log');
-            l.Add('Call:     '+call);
-            l.Add('Band:     '+band);
-            l.Add('Mode:     '+mode);
-            l.Add('Mode:     '+submode);
-            l.Add('QSO_date: '+qsodate);
-            l.Add('Time_on:  '+time_on);
-            l.Add('------------------------------------------------');
-            l.Add('');
+            WriteErrorRecord('E',call,band,modeorig,submodeorig,qsodate,time_on,qslr,qslrdate,cqz,ituz,iota,grid,state,county,qsorecord,l);
             inc(ErrorCount)
           end
         end
@@ -1357,8 +1234,10 @@ begin
     CloseFile(f);
     if ErrorCount > 0 then
     begin
-      l.SaveToFile(dmData.UsrHomeDir + 'eQSL_error.txt');
-      ShowMessage('Some QSO(s) were not found in your log. '#13' QSO(s) are stored to '+dmData.UsrHomeDir + 'eQSL_error.txt')
+      l.SaveToFile(dmData.UsrHomeDir + C_EErrorFile);
+      if Application.MessageBox(PChar(IntToStr(ErrorCount)+' QSO(s) were not found in your log.'+LineEnding+'QSO(s) are stored to '+dmData.UsrHomeDir + C_EErrorFile +
+                                LineEnding+LineEnding+'Do you want to show the file?'),'Question ....',mb_YesNo+mb_IconQuestion)=idYes then
+      frmAdifImport.OpenInTextEditor(dmData.UsrHomeDir + C_EErrorFile)
     end
   finally
     l.Free;
@@ -1378,7 +1257,7 @@ begin
   try try
     dmData.trQ.StartTransaction;
     dmData.Q.SQL.Text := 'create table tempdupes like cqrlog_main';
-    if dmData.DebugLevel>=1 then Writeln(dmData.Q.SQL.Text);
+    if LocalDbg then Writeln(dmData.Q.SQL.Text);
     dmData.Q.ExecSQL;
     dmData.trQ.Commit;
 
@@ -1389,15 +1268,15 @@ begin
     dmData.trQ.StartTransaction;
     dmData.Q.SQL.Text := 'insert into tempdupes ' +
                          '  select * from cqrlog_main group by qsodate,time_on,callsign,mode,band';
-    if dmData.DebugLevel>=1 then Writeln(dmData.Q.SQL.Text);
+    if LocalDbg then Writeln(dmData.Q.SQL.Text);
     dmData.Q.ExecSQL;
 
     dmData.Q.SQL.Text := 'delete from cqrlog_main';
-    if dmData.DebugLevel>=1 then Writeln(dmData.Q.SQL.Text);
+    if LocalDbg then Writeln(dmData.Q.SQL.Text);
     dmData.Q.ExecSQL;
 
     dmData.Q.SQL.Text := 'insert into cqrlog_main select * from tempdupes';
-    if dmData.DebugLevel>=1 then Writeln(dmData.Q.SQL.Text);
+    if LocalDbg then Writeln(dmData.Q.SQL.Text);
     dmData.Q.ExecSQL
   except
     on E : Exception do
diff --git a/src/fLoTWExport.pas b/src/fLoTWExport.pas
index f82cac7..69b280e 100644
--- a/src/fLoTWExport.pas
+++ b/src/fLoTWExport.pas
@@ -365,10 +365,12 @@ end;
 
 function TfrmLoTWExport.ExportToAdif : Word;
 var
-  f    : TextFile;
-  tmp  : String  = '';
-  nr   : Integer = 1;
-  date : String;
+  f         : TextFile;
+  tmp       : String  = '';
+  nr        : Integer = 1;
+  date,
+  ModeOut,
+  SubmodeOut: String;
 begin
   if FileExists(FileName) then
     DeleteFile(FileName);
@@ -385,6 +387,7 @@ begin
   end;
 
   date := FormatDateTime('yyyy-mm-dd',now);
+  Writeln(f);
   Writeln(f, '<ADIF_VER:5>3.1.0');
   Writeln(f, '<CREATED_TIMESTAMP:15>',FormatDateTime('YYYYMMDD hhmmss',dmUtils.GetDateTime(0)));
   Writeln(f, 'ADIF export from CQRLOG for Linux version '+dmData.VersionString);
@@ -447,35 +450,15 @@ begin
 
       tmp := dmUtils.StringToADIF('<CALL',dmUtils.RemoveSpaces(dmData.Q1.FieldByName('callsign').AsString));
       Writeln(f,tmp);
-      case dmData.Q1.FieldByName('mode').AsString of
-         'JS8'        :   begin
-                            tmp := '<MODE:4>MFSK';
-                            Writeln(f,tmp);
-                            tmp := '<SUBMODE:3>JS8';
-                            Writeln(f,tmp);
-                          end;
-         'FT4'        :   begin
-                            tmp := '<MODE:4>MFSK';
-                            Writeln(f,tmp);
-                            tmp := '<SUBMODE:3>FT4';
-                            Writeln(f,tmp);
-                          end;
-         'FST4'        :   begin
-                            tmp := '<MODE:4>MFSK';
-                            Writeln(f,tmp);
-                            tmp := '<SUBMODE:4>FST4';
-                            Writeln(f,tmp);
-                          end;
-         'PACKET'      :  begin
-                              tmp := '<MODE:3>PKT';
-                              Writeln(f,tmp);
-                          end;
-        else
-           begin
-              tmp := dmUtils.StringToADIF('<MODE',dmData.Q1.FieldByName('mode').AsString);
-              Writeln(f,tmp);
-            end;
-       end;
+
+      dmUtils.ModeFromCqr(dmData.Q1.FieldByName('mode').AsString,ModeOut,SubmodeOut,dmData.DebugLevel >= 1);
+      tmp := dmUtils.StringToADIF('<MODE',ModeOut);
+      Writeln(f,tmp);
+      if SubmodeOut<>'' then
+                        Begin
+                          tmp := dmUtils.StringToADIF('<SUBMODE',SubmodeOut);
+                          Writeln(f,tmp);
+                        end;
 
       tmp :=dmUtils.StringToADIF( '<BAND' , dmData.Q1.FieldByName('band').AsString);
       Writeln(f,tmp);
diff --git a/src/fMain.lfm b/src/fMain.lfm
index 8c5d6a1..fa9dad6 100644
--- a/src/fMain.lfm
+++ b/src/fMain.lfm
@@ -1929,7 +1929,7 @@ object frmMain: TfrmMain
     end
     object acSelAll: TAction
       Caption = 'Select all'
-      Hint = 'Select all records'
+      Hint = 'Select all records now in buffer (Max 500)'
       ImageIndex = 21
       OnExecute = acSelAllExecute
     end
diff --git a/src/fMain.pas b/src/fMain.pas
index 78dcdd3..a996ddc 100644
--- a/src/fMain.pas
+++ b/src/fMain.pas
@@ -723,7 +723,8 @@ var
     if dmData.trQ.Active then
       dmData.trQ.RollBack;
     dmData.Q.SQL.Text := 'DELETE FROM cqrlog_main WHERE id_cqrlog_main = ' + IntToStr(idx);
-    WriteLn(dmData.Q.SQL.Text);
+    if dmData.DebugLevel >= 1 then
+                                  WriteLn(dmData.Q.SQL.Text);
     dmData.trQ.StartTransaction;
     dmData.Q.ExecSQL;
     dmData.trQ.Commit
@@ -1166,7 +1167,7 @@ end;
 
 procedure TfrmMain.acSelAllExecute(Sender: TObject);
 begin
-  if application.MessageBox('Do you really want to select all records?',
+  if application.MessageBox('Do you really want to select all records'+#10+#13+'now in buffer (Max 500)?',
     'Question ...', mb_ok + mb_YesNo) in [idNo, idCancel] then
     exit;
   try
@@ -2293,7 +2294,7 @@ procedure TfrmMain.ShowFields;
       if (UpperCase(dbgrdMain.Columns[i].DisplayName) = 'FREQ') then
       begin
         dbgrdMain.Columns[i].Alignment       := taRightJustify;
-        dbgrdMain.Columns[i].DisplayFormat   := '###,##0.0000;;';
+        dbgrdMain.Columns[i].DisplayFormat   := '####0.000;;';
         dbgrdMain.Columns[i].Title.Alignment := taCenter
       end;
       if (UpperCase(dbgrdMain.Columns[i].DisplayName) = 'STATE') then
diff --git a/src/fMonWsjtx.lfm b/src/fMonWsjtx.lfm
index d5f6a1d..78dd8a4 100644
--- a/src/fMonWsjtx.lfm
+++ b/src/fMonWsjtx.lfm
@@ -12,70 +12,7 @@ object frmMonWsjtx: TfrmMonWsjtx
   OnDropFiles = FormDropFiles
   OnHide = FormHide
   OnShow = FormShow
-  LCLVersion = '2.0.0.4'
-  object lblBand: TLabel
-    AnchorSideLeft.Control = Owner
-    AnchorSideTop.Control = Owner
-    AnchorSideBottom.Side = asrBottom
-    Left = 10
-    Height = 17
-    Top = 12
-    Width = 33
-    BorderSpacing.Left = 10
-    BorderSpacing.Top = 12
-    Caption = 'Band'
-    Layout = tlBottom
-    ParentColor = False
-  end
-  object lblMode: TLabel
-    AnchorSideLeft.Side = asrBottom
-    AnchorSideRight.Control = Owner
-    AnchorSideRight.Side = asrBottom
-    AnchorSideBottom.Control = lblBand
-    AnchorSideBottom.Side = asrBottom
-    Left = 536
-    Height = 17
-    Top = 12
-    Width = 36
-    Anchors = [akRight, akBottom]
-    BorderSpacing.Top = 12
-    BorderSpacing.Right = 10
-    Caption = 'Mode'
-    Layout = tlBottom
-    ParentColor = False
-  end
-  object chknoHistory: TCheckBox
-    AnchorSideLeft.Side = asrCenter
-    AnchorSideRight.Control = chknoTxt
-    AnchorSideBottom.Control = lblBand
-    AnchorSideBottom.Side = asrBottom
-    Left = 207
-    Height = 23
-    Top = 6
-    Width = 56
-    Anchors = [akRight, akBottom]
-    BorderSpacing.Top = 6
-    BorderSpacing.Right = 1
-    Caption = 'nHst'
-    OnChange = chknoHistoryChange
-    TabOrder = 0
-  end
-  object chknoTxt: TCheckBox
-    AnchorSideLeft.Control = Owner
-    AnchorSideLeft.Side = asrCenter
-    AnchorSideRight.Side = asrCenter
-    AnchorSideBottom.Control = lblBand
-    AnchorSideBottom.Side = asrBottom
-    Left = 264
-    Height = 23
-    Top = 6
-    Width = 55
-    Anchors = [akLeft, akBottom]
-    BorderSpacing.Top = 6
-    Caption = 'nTxt'
-    OnChange = chknoTxtChange
-    TabOrder = 1
-  end
+  LCLVersion = '2.0.10.0'
   object pnlAlert: TPanel
     AnchorSideLeft.Control = Owner
     AnchorSideTop.Side = asrBottom
@@ -92,7 +29,7 @@ object frmMonWsjtx: TfrmMonWsjtx
     BorderSpacing.Bottom = 2
     ClientHeight = 45
     ClientWidth = 578
-    TabOrder = 2
+    TabOrder = 0
     object tbmyAll: TToggleBox
       AnchorSideLeft.Side = asrBottom
       AnchorSideTop.Control = pnlAlert
@@ -135,8 +72,8 @@ object frmMonWsjtx: TfrmMonWsjtx
       AnchorSideTop.Side = asrCenter
       AnchorSideBottom.Side = asrBottom
       Left = 239
-      Height = 34
-      Top = 5
+      Height = 33
+      Top = 6
       Width = 100
       BorderSpacing.Bottom = 4
       OnEnter = EditAlertEnter
@@ -229,7 +166,7 @@ object frmMonWsjtx: TfrmMonWsjtx
     BorderSpacing.Bottom = 2
     ClientHeight = 45
     ClientWidth = 578
-    TabOrder = 3
+    TabOrder = 1
     Visible = False
     object edtFollow: TEdit
       AnchorSideLeft.Control = edtFollowCall
@@ -239,8 +176,8 @@ object frmMonWsjtx: TfrmMonWsjtx
       AnchorSideRight.Control = pnlFollow
       AnchorSideRight.Side = asrBottom
       Left = 155
-      Height = 34
-      Top = 5
+      Height = 33
+      Top = 6
       Width = 419
       Align = alCustom
       Anchors = [akTop, akLeft, akRight]
@@ -257,8 +194,8 @@ object frmMonWsjtx: TfrmMonWsjtx
       AnchorSideTop.Side = asrCenter
       AnchorSideBottom.Side = asrBottom
       Left = 72
-      Height = 34
-      Top = 5
+      Height = 33
+      Top = 6
       Width = 80
       BorderSpacing.Left = 3
       OnEnter = edtFollowCallEnter
@@ -284,45 +221,13 @@ object frmMonWsjtx: TfrmMonWsjtx
       TabOrder = 2
     end
   end
-  object cbflw: TCheckBox
-    AnchorSideRight.Control = chknoHistory
-    AnchorSideBottom.Control = lblBand
-    AnchorSideBottom.Side = asrBottom
-    Left = 156
-    Height = 23
-    Top = 6
-    Width = 49
-    Anchors = [akRight, akBottom]
-    BorderSpacing.Top = 6
-    BorderSpacing.Right = 2
-    Caption = 'Flw'
-    OnChange = cbflwChange
-    TabOrder = 4
-  end
-  object chkMap: TCheckBox
-    AnchorSideLeft.Control = chknoTxt
-    AnchorSideLeft.Side = asrBottom
-    AnchorSideBottom.Control = lblBand
-    AnchorSideBottom.Side = asrBottom
-    Left = 320
-    Height = 23
-    Top = 6
-    Width = 54
-    Anchors = [akLeft, akBottom]
-    BorderSpacing.Left = 1
-    BorderSpacing.Top = 6
-    Caption = 'Map'
-    OnChange = chkMapChange
-    TabOrder = 5
-  end
   object lblInfo: TLabel
     AnchorSideLeft.Control = Owner
     AnchorSideLeft.Side = asrCenter
-    AnchorSideTop.Control = chknoTxt
     AnchorSideTop.Side = asrBottom
     Left = 52
-    Height = 17
-    Top = 34
+    Height = 15
+    Top = 32
     Width = 479
     BorderSpacing.Top = 5
     Caption = 'Yoy may now minimize this window. Printing back to Wsjt-x Band Activity'
@@ -342,7 +247,7 @@ object frmMonWsjtx: TfrmMonWsjtx
     BorderSpacing.Bottom = 12
     Caption = 'ColorBackCQs'
     OnChange = chkCbCQChange
-    TabOrder = 6
+    TabOrder = 2
     Visible = False
   end
   object chkdB: TCheckBox
@@ -359,38 +264,22 @@ object frmMonWsjtx: TfrmMonWsjtx
     BorderSpacing.Bottom = 12
     Caption = 'dB'
     OnChange = chkdBChange
-    TabOrder = 7
+    TabOrder = 3
     Visible = False
   end
-  object chkStopTx: TCheckBox
-    AnchorSideLeft.Control = chkMap
-    AnchorSideLeft.Side = asrBottom
-    AnchorSideBottom.Control = lblBand
-    AnchorSideBottom.Side = asrBottom
-    Left = 374
-    Height = 23
-    Top = 6
-    Width = 49
-    Anchors = [akLeft, akBottom]
-    BorderSpacing.Top = 6
-    Caption = 'sTx'
-    OnChange = chkStopTxChange
-    TabOrder = 8
-  end
   object sgMonitor: TStringGrid
     AnchorSideLeft.Control = Owner
     AnchorSideTop.Control = Owner
     AnchorSideRight.Control = Owner
     AnchorSideBottom.Control = pnlFollow
     Left = 2
-    Height = 281
-    Top = 30
+    Height = 311
+    Top = 0
     Width = 578
     Align = alClient
     AutoEdit = False
     AutoFillColumns = True
     BorderSpacing.Left = 2
-    BorderSpacing.Top = 30
     BorderSpacing.Right = 2
     BorderSpacing.Bottom = 51
     BorderStyle = bsNone
@@ -484,7 +373,7 @@ object frmMonWsjtx: TfrmMonWsjtx
     HeaderPushZones = []
     ParentFont = False
     PopupMenu = popColors
-    TabOrder = 9
+    TabOrder = 4
     OnDblClick = sgMonitorDblClick
     OnDrawCell = sgMonitorDrawCell
     ColWidths = (
@@ -499,9 +388,160 @@ object frmMonWsjtx: TfrmMonWsjtx
       0
     )
   end
+  object pnlSelects: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideLeft.Side = asrCenter
+    AnchorSideTop.Control = Owner
+    Left = 86
+    Height = 31
+    Top = 0
+    Width = 411
+    AutoSize = True
+    BorderWidth = 3
+    ClientHeight = 31
+    ClientWidth = 411
+    TabOrder = 5
+    Visible = False
+    OnClick = pnlSelectsClick
+    object chknoHistory: TCheckBox
+      AnchorSideLeft.Control = cbflw
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideBottom.Side = asrBottom
+      Left = 100
+      Height = 23
+      Top = 4
+      Width = 56
+      BorderSpacing.Top = 6
+      BorderSpacing.Right = 1
+      Caption = 'nHst'
+      OnChange = chknoHistoryChange
+      TabOrder = 0
+    end
+    object chknoTxt: TCheckBox
+      AnchorSideLeft.Control = chknoHistory
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideRight.Side = asrCenter
+      AnchorSideBottom.Side = asrBottom
+      Left = 157
+      Height = 23
+      Top = 4
+      Width = 55
+      BorderSpacing.Top = 6
+      Caption = 'nTxt'
+      OnChange = chknoTxtChange
+      TabOrder = 1
+    end
+    object cbflw: TCheckBox
+      AnchorSideLeft.Control = lblBand
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideBottom.Side = asrBottom
+      Left = 49
+      Height = 23
+      Top = 4
+      Width = 49
+      BorderSpacing.Top = 6
+      BorderSpacing.Right = 2
+      Caption = 'Flw'
+      OnChange = cbflwChange
+      TabOrder = 2
+    end
+    object chkMap: TCheckBox
+      AnchorSideLeft.Control = chknoTxt
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideBottom.Side = asrBottom
+      Left = 212
+      Height = 23
+      Top = 4
+      Width = 54
+      BorderSpacing.Top = 6
+      Caption = 'Map'
+      OnChange = chkMapChange
+      TabOrder = 3
+    end
+    object chkStopTx: TCheckBox
+      AnchorSideLeft.Control = chkMap
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideBottom.Side = asrBottom
+      Left = 266
+      Height = 23
+      Top = 4
+      Width = 49
+      Caption = 'sTx'
+      OnChange = chkStopTxChange
+      TabOrder = 4
+    end
+    object chkDx: TCheckBox
+      AnchorSideLeft.Control = chkStopTx
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      Left = 315
+      Height = 23
+      Top = 4
+      Width = 44
+      Caption = 'Dx'
+      TabOrder = 5
+    end
+    object lblMode: TLabel
+      AnchorSideLeft.Control = chkDx
+      AnchorSideLeft.Side = asrBottom
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideRight.Side = asrBottom
+      AnchorSideBottom.Side = asrBottom
+      Left = 371
+      Height = 15
+      Top = 8
+      Width = 36
+      BorderSpacing.Left = 12
+      Caption = 'Mode'
+      Layout = tlBottom
+      ParentColor = False
+      OnClick = pnlSelectsClick
+    end
+    object lblBand: TLabel
+      AnchorSideLeft.Control = pnlSelects
+      AnchorSideTop.Control = pnlSelects
+      AnchorSideTop.Side = asrCenter
+      AnchorSideBottom.Side = asrBottom
+      Left = 4
+      Height = 15
+      Top = 8
+      Width = 33
+      BorderSpacing.Right = 12
+      Caption = 'Band'
+      Layout = tlBottom
+      ParentColor = False
+      OnClick = pnlSelectsClick
+    end
+  end
+  object pnlTrigPop: TPanel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = Owner
+    AnchorSideRight.Control = Owner
+    AnchorSideRight.Side = asrBottom
+    Left = 0
+    Height = 3
+    Top = 0
+    Width = 582
+    Anchors = [akTop, akLeft, akRight]
+    BevelOuter = bvNone
+    TabOrder = 6
+    OnMouseEnter = pnlTrigPopMouseEnter
+  end
   object popColors: TPopupMenu
-    left = 104
-    top = 88
+    Left = 104
+    Top = 88
     object cmHead: TMenuItem
       Caption = 'Set color of:'
       object cmNever: TMenuItem
@@ -555,26 +595,26 @@ object frmMonWsjtx: TfrmMonWsjtx
       'ColorS=F0FBFF'
       'ColorT=A4A0A0'
     )
-    left = 160
-    top = 88
+    Left = 160
+    Top = 88
   end
   object popFontDlg: TFontDialog
     Title = 'Choose font'
     MinFontSize = 0
     MaxFontSize = 0
-    left = 224
-    top = 88
+    Left = 224
+    Top = 88
   end
   object tmrCqPeriod: TTimer
     Enabled = False
     OnTimer = tmrCqPeriodTimer
-    left = 160
-    top = 144
+    Left = 160
+    Top = 144
   end
   object tmrFollow: TTimer
     Enabled = False
     OnTimer = tmrFollowTimer
-    left = 224
-    top = 144
+    Left = 224
+    Top = 144
   end
 end
diff --git a/src/fMonWsjtx.pas b/src/fMonWsjtx.pas
index cf9797b..19cff55 100644
--- a/src/fMonWsjtx.pas
+++ b/src/fMonWsjtx.pas
@@ -15,27 +15,30 @@ type
 
   TfrmMonWsjtx = class(TForm)
     btFtxtName: TButton;
-    chkStopTx: TCheckBox;
-    chkCbCQ: TCheckBox;
     cbflw: TCheckBox;
+    chkDx: TCheckBox;
+    chkCbCQ: TCheckBox;
     chkdB: TCheckBox;
     chkMap: TCheckBox;
+    chknoHistory: TCheckBox;
+    chknoTxt: TCheckBox;
+    chkStopTx: TCheckBox;
     EditAlert: TEdit;
     edtFollow: TEdit;
     edtFollowCall: TEdit;
+    lblBand: TLabel;
     lblInfo: TLabel;
+    lblMode: TLabel;
+    pnlTrigPop: TPanel;
+    pnlSelects: TPanel;
     pnlFollow: TPanel;
     pnlAlert: TPanel;
     sgMonitor: TStringGrid;
     tbAlert: TToggleBox;
-    chknoTxt: TCheckBox;
-    chknoHistory: TCheckBox;
     cmCqDx: TMenuItem;
     cmFont: TMenuItem;
     popFontDlg: TFontDialog;
     popColorDlg: TColorDialog;
-    lblBand: TLabel;
-    lblMode: TLabel;
     cmHead: TMenuItem;
     cmNever: TMenuItem;
     cmBand: TMenuItem;
@@ -75,6 +78,8 @@ type
     procedure FormHide(Sender: TObject);
     procedure FormShow(Sender: TObject);
     procedure chknoTxtChange(Sender: TObject);
+    procedure pnlSelectsClick(Sender: TObject);
+    procedure pnlTrigPopMouseEnter(Sender: TObject);
     procedure sgMonitorDblClick(Sender: TObject);
     procedure sgMonitorDrawCell(Sender: TObject; aCol, aRow: Integer;
       aRect: TRect; aState: TGridDrawState);
@@ -155,7 +160,7 @@ var
   //       'text'= text given is found from new monitor line
   timeToAlert: string;                  //only once per event per minute
   MonitorLine: string;                  // complete line as printed to monitor
-
+  AlertLine:   string;                  //copy of monitor line but has spaces between items
   extCqCall: Tcolor;    // extended cq (cq dx, cq na etc.) color
   wkdhere: Tcolor;
   wkdband: Tcolor;
@@ -209,6 +214,7 @@ begin
     AProcess.Executable:=dmData.HomeDir + cAlert;
     AProcess.Parameters.Clear;
     AProcess.Parameters.Add(AFile);
+    AProcess.Parameters.Add(AlertLine);
     if LocalDbg then Writeln('AProcess.Executable: ',AProcess.Executable,' Parameters: ',AProcess.Parameters.Text);
     AProcess.Execute
   finally
@@ -243,7 +249,9 @@ begin
   begin
     if ((Ord(s[i]) >= 32) and (Ord(s[i]) <= 122)) then   //from space to z accepted
       MonitorLine := MonitorLine + s[i];
+      AlertLine := AlertLine + s[i];
   end;
+  AlertLine := AlertLine + ' ';
   if ((not chknoTxt.Checked) and (r > -1)) then
         Begin
              sgMonitor.Cells[c,r]:= s;  //trim ??
@@ -367,6 +375,7 @@ begin
   end;
   SendReply(HexStrToStr(sgMonitor.Cells[8,sgMonitor.row]));
   frmNewQSO.GetCallInfo(DblClickCall,CurMode,sgMonitor.Cells[1,sgMonitor.row]);
+  frmNewQSO.SendToBack;
 end;
 
 procedure TfrmMonWsjtx.FormClose(Sender: TObject; var CloseAction: TCloseAction);
@@ -703,6 +712,19 @@ begin
   lblInfo.Visible := not sgMonitor.Visible;
 end;
 
+procedure TfrmMonWsjtx.pnlSelectsClick(Sender: TObject);
+begin
+  pnlSelects.Visible:=False;
+  sgMonitor.BorderSpacing.Top:= 3;
+end;
+
+
+procedure TfrmMonWsjtx.pnlTrigPopMouseEnter(Sender: TObject);
+begin
+  pnlSelects.Visible:=True;
+  sgMonitor.BorderSpacing.Top:=pnlSelects.Height;
+end;
+
 procedure TfrmMonWsjtx.sgMonitorDrawCell(Sender: TObject; aCol, aRow: Integer;
   aRect: TRect; aState: TGridDrawState);
 //DL7OAP: complete procedure for the coloring, this function is called every time
@@ -959,7 +981,9 @@ begin
   //DL7OAP
   setMonitorColumnHW;
   sgMonitor.FocusRectVisible:=false; // no red dot line in stringgrid
-  chknoHistoryChange(nil); // sure to get historu settings right
+  chknoHistoryChange(nil); // sure to get history settings right
+  pnlTrigPopMouseEnter(nil); //starts with panel visible,
+  chkDx.Checked:=False; //DX filter off
 
   //set debug rules for this form
   LocalDbg := dmData.DebugLevel >= 1 ;
@@ -1053,6 +1077,7 @@ procedure TfrmMonWsjtx.AddOtherMessage(Time,Message, Reply: string;Df,Sr:integer
 var
   msgList: TStringList;
   index: integer;
+  ClLine : char;
 begin
   Message := LineFilter(Message);
 
@@ -1081,7 +1106,13 @@ begin
     if chkMap.Checked then
         begin
           CqPeriodTimerStart;
-          if LocalDbg then Writeln('Other line:', Message);
+          if LocalDbg then
+           Writeln('Other line:', Message);
+          if  (pos('RR73',Message)= length(Message)-3)
+           or (pos('73',Message)= length(Message)-1) then
+              ClLine:='*'
+           else
+              ClLine:=')';
           msgTime := Time;
           Dfreq := Df;
           Snr := Sr;
@@ -1109,6 +1140,9 @@ begin
 
           if LocalDbg then
             Writeln('Other call:', msgCall, '    loc:', msgLocator);
+          //print only DX drops here
+          if (chkDx.Checked) and (not dmUtils.IsHeDX(msgCall)) then exit;
+
           if (not frmWorkedGrids.GridOK(msgLocator)) or (msgLocator = 'RR73') then //disble false used "RR73" being a loc
                   msgLocator := '';
 
@@ -1116,6 +1150,7 @@ begin
           begin
             myAlert := '';
             MonitorLine := '';
+            AlertLine := '';
 
             //starts a row
             if (msgTime <> LastWsjtLineTime) then
@@ -1146,7 +1181,7 @@ begin
               if frmWorkedGrids.GridOK(msgLocator) then  AddXpList(msgCall,msgLocator);
             end;
             //PCallColor closes parenthesis(not-CQ ind) with same color as it was opened with callsign
-            AddColorStr(')', clBlack,6, sgMonitor.rowCount-1);//make in-qso indicator stop
+            AddColorStr(ClLine, clBlack,6, sgMonitor.rowCount-1);//make in-qso indicator stop
 
             if LocalDbg then
               Begin
@@ -1561,6 +1596,7 @@ procedure TfrmMonWsjtx.AddMyCallMessage(Time,mode,WsjtxBand,Message,Reply:string
 var
    Fox73    : boolean;
 begin
+     AlertLine:='';
      if LocalDbg then Writeln('Start AddMyCallMessage');
      isMyCall:= true;
      Dfreq:=Df;
@@ -1604,7 +1640,9 @@ begin
                Writeln('All written in AddMy. Next alerts');
                Writeln;
               end;
-            TryAlerts;
+            if tbmyAll.Checked then TryAlerts
+             else
+               if ( msgLocator <> '*QSO')  then TryAlerts;
          end;
 end;
 
@@ -1643,6 +1681,7 @@ begin
 
   myAlert := '';
   MonitorLine := '';
+  AlertLine:='';
 
   dxcc_number_adif := dmDXCC.id_country(
     UpperCase(cqrini.ReadString('Station', 'Call', '')), '', Now(), pfx,
@@ -1707,6 +1746,8 @@ begin
 
   if (CurMode <> '') AND (msgCall <> 'NOCALL') then //mode and call is known; we can continue
   begin
+    //print only DX drops here
+    if (chkDx.Checked) and (not dmUtils.IsHeDX(msgCall)) then exit;
 
     if LocalDbg then
       Writeln('LOCATOR IS:', msgLocator);
@@ -1792,25 +1833,19 @@ begin
 
      if LocalDbg then
        Writeln('My continent is:', mycont, '  His continent is:', cont);
-     if CqDir <> '' then
+
+      if CqDir <> '' then
        if ((mycont <> '') and (cont <> '')) then
          //we can do some comparisons of continents
        begin
-         if ((CqDir = 'DX') and (mycont = cont)) then
-         begin
+         if not dmUtils.IsHeDx(msgCall,CqDir) then
            //I'm not DX for caller: color to warn directed call
-           extcqprint;
-         end
-         else  //calling specified continent
-         if ((CqDir <> 'DX') and (CqDir <> mycont)) then
-         begin
            //CQ NOT directed to my continent: color to warn directed call
            extcqprint;
          end
          else  // should be ok to answer this directed cq
           if ((not chkMap.Checked) and (not chkCbCQ.Checked))  then
-           AddColorStr(' ' + copy(PadRight(msgRes, CountryLen), 1, CountryLen) + ' ', clBlack,6, sgMonitor.rowCount-1);
-        end
+           AddColorStr(' ' + copy(PadRight(msgRes, CountryLen), 1, CountryLen) + ' ', clBlack,6, sgMonitor.rowCount-1)
        else
         begin
          // we can not compare continents, but it is directed cq. Best to warn with color anyway
@@ -1873,11 +1908,18 @@ function TfrmMonWsjtx.getCurMode(sMode: String): String;
       '#'     : getCurMode := 'JT65';
       '@'     : getCurMode := 'JT9';
       '&'     : getCurMode := 'MSK144';
-      ':'     : getCurMode := 'QRA64';
-      '+'     : getCurMode := 'FT4';
+      ':'     : if frmNewQSO.RemoteName= 'WSJT-X' then
+                          getCurMode:='QRA64'
+                       else
+                          getCurMode:='FT4';
+      '+'     : if frmNewQSO.RemoteName= 'WSJT-X' then
+                          getCurMode:='FT4'
+                       else
+                          getCurMode:='T10';
+      'FT4' : getCurMode := 'FT4'; // For MSHV added by LB2EG nov 7th 2021
       chr(126): getCurMode := 'FT8';    // ~
+      'FT8' : getCurMode := 'FT8'; // For MSHV added by LB2EG nov 7th 2021
       chr(96) : getCurMode := 'FST4';   // `
-      //'+'     : getCurMode := 'T10';
     end;
   end;
 
diff --git a/src/fNewQSO.lfm b/src/fNewQSO.lfm
index 45baefd..62cde40 100644
--- a/src/fNewQSO.lfm
+++ b/src/fNewQSO.lfm
@@ -2138,7 +2138,7 @@ object frmNewQSO: TfrmNewQSO
   OnKeyUp = FormKeyUp
   OnShow = FormShow
   OnWindowStateChange = FormWindowStateChange
-  LCLVersion = '2.0.8.0'
+  LCLVersion = '2.0.12.0'
   object pnlAll: TPanel
     AnchorSideTop.Control = dbgrdQSOBefore
     AnchorSideTop.Side = asrBottom
@@ -2596,6 +2596,7 @@ object frmNewQSO: TfrmNewQSO
           Width = 86
           BorderSpacing.Left = 6
           BorderSpacing.Top = 2
+          MaxLength = 20
           OnEnter = edtMyRSTEnter
           OnExit = edtMyRSTExit
           OnKeyDown = edtMyRSTKeyDown
@@ -2754,7 +2755,7 @@ object frmNewQSO: TfrmNewQSO
           BorderSpacing.Left = 5
           BorderSpacing.Top = 2
           ItemHeight = 0
-          ItemIndex = 1
+          ItemIndex = 0
           Items.Strings = (
             ''
             'MD'
@@ -2768,11 +2769,11 @@ object frmNewQSO: TfrmNewQSO
             'SMB'
             'SPE'
           )
+          MaxLength = 4
           OnEnter = cmbQSL_SEnter
           OnExit = cmbQSL_SExit
           OnKeyDown = cmbQSL_SKeyDown
           TabOrder = 9
-          Text = 'MD'
         end
         object cmbQSL_R: TComboBox
           AnchorSideLeft.Control = cmbQSL_S
@@ -2795,6 +2796,7 @@ object frmNewQSO: TfrmNewQSO
             ''
             ''
           )
+          MaxLength = 3
           OnEnter = cmbQSL_REnter
           OnExit = cmbQSL_RExit
           OnKeyDown = cmbQSL_RKeyDown
@@ -2961,6 +2963,7 @@ object frmNewQSO: TfrmNewQSO
           Top = 232
           Width = 100
           BorderSpacing.Top = 2
+          MaxLength = 10
           OnEnter = edtDateEnter
           OnExit = edtDateExit
           OnKeyDown = edtDateKeyDown
@@ -2979,6 +2982,7 @@ object frmNewQSO: TfrmNewQSO
           Width = 55
           BorderSpacing.Left = 6
           BorderSpacing.Top = 2
+          MaxLength = 5
           OnEnter = edtStartTimeEnter
           OnExit = edtStartTimeExit
           OnKeyDown = edtStartTimeKeyDown
@@ -2997,6 +3001,7 @@ object frmNewQSO: TfrmNewQSO
           Width = 55
           BorderSpacing.Left = 6
           BorderSpacing.Top = 2
+          MaxLength = 5
           OnEnter = edtEndTimeEnter
           OnExit = edtEndTimeExit
           OnKeyDown = edtEndTimeKeyDown
@@ -3110,7 +3115,7 @@ object frmNewQSO: TfrmNewQSO
           Align = alBottom
           Anchors = [akTop, akLeft, akRight, akBottom]
           BorderSpacing.Top = 3
-          TabIndex = 0
+          TabIndex = 1
           TabOrder = 27
           object tabDXCCStat: TTabSheet
             AnchorSideRight.Side = asrBottom
@@ -3158,6 +3163,7 @@ object frmNewQSO: TfrmNewQSO
               Width = 272
               BorderSpacing.Top = 3
               ItemHeight = 0
+              MaxLength = 30
               OnChange = cmbPropagationChange
               ParentFont = False
               Style = csDropDownList
@@ -3199,6 +3205,7 @@ object frmNewQSO: TfrmNewQSO
               Width = 272
               BorderSpacing.Top = 3
               ItemHeight = 0
+              MaxLength = 30
               OnChange = cmbSatelliteChange
               ParentFont = False
               Style = csDropDownList
@@ -3361,7 +3368,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideRight.Control = pnlQSOinput
           AnchorSideRight.Side = asrBottom
           Left = 555
-          Height = 188
+          Height = 205
           Top = 0
           Width = 204
           Anchors = [akTop, akLeft, akRight, akBottom]
@@ -3589,7 +3596,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = pnlSbtn1
           AnchorSideRight.Control = pnlSbtn1
-          Left = 360
+          Left = 335
           Height = 25
           Top = 326
           Width = 25
@@ -3654,7 +3661,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = pnlSbtn2
           AnchorSideRight.Control = pnlSbtn2
-          Left = 385
+          Left = 360
           Height = 25
           Top = 326
           Width = 25
@@ -3719,7 +3726,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = pnlSbtn3
           AnchorSideRight.Control = pnlSbtn3
-          Left = 410
+          Left = 385
           Height = 25
           Top = 326
           Width = 25
@@ -3824,7 +3831,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = pnlSbtn4
           AnchorSideRight.Control = pnlSbtn4
-          Left = 435
+          Left = 410
           Height = 25
           Top = 326
           Width = 25
@@ -3888,7 +3895,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = pnlSbtn5
           AnchorSideRight.Control = pnlSbtn5
-          Left = 460
+          Left = 435
           Height = 25
           Top = 326
           Width = 25
@@ -3952,7 +3959,7 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = pnlSbtn6
           AnchorSideRight.Control = pnlSbtn6
-          Left = 485
+          Left = 460
           Height = 25
           Top = 326
           Width = 25
@@ -4017,9 +4024,8 @@ object frmNewQSO: TfrmNewQSO
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = mComment
           AnchorSideTop.Side = asrBottom
-          AnchorSideRight.Control = mComment
-          AnchorSideRight.Side = asrBottom
-          Left = 510
+          AnchorSideRight.Control = pnlSbtn7
+          Left = 485
           Height = 25
           Top = 326
           Width = 25
@@ -4081,6 +4087,65 @@ object frmNewQSO: TfrmNewQSO
             ParentShowHint = False
           end
         end
+        object pnlSbtn7: TPanel
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = pnlSbtn1
+          AnchorSideRight.Control = mComment
+          AnchorSideRight.Side = asrBottom
+          Left = 510
+          Height = 25
+          Top = 326
+          Width = 25
+          Anchors = [akTop, akRight]
+          BevelOuter = bvNone
+          ClientHeight = 25
+          ClientWidth = 25
+          TabOrder = 38
+          object sbtnUsrbtn: TSpeedButton
+            AnchorSideLeft.Control = pnlSbtn7
+            AnchorSideLeft.Side = asrCenter
+            AnchorSideTop.Control = pnlSbtn7
+            AnchorSideTop.Side = asrCenter
+            AnchorSideRight.Side = asrBottom
+            Left = 1
+            Height = 23
+            Hint = 'User defineable button'
+            Top = 1
+            Width = 23
+            Glyph.Data = {
+              36030000424D3603000000000000360000002800000010000000100000000100
+              1800000000000003000064000000640000000000000000000000FFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFF572BFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFF572BFF572BFF572B
+              FF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF57
+              2BFFFFFFFF572BFF572BFFFFFFFF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFFFFFFFF572BFF572BFFFFFFFF572B
+              FF572BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF57
+              2BFF572BFF572BFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFF572BFF572BFFFFFFFFFFFFFF572B
+              FF572BFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFF572BFFFFFFFF572BFF57
+              2BFFFFFFFF572BFF572BFFFFFFFF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFF
+              572BFF572BFF572BFFFFFFFF572BFF572BFFFFFFFF572BFF572BFFFFFFFF572B
+              FF572BFFFFFFFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFF572BFF572BFF57
+              2BFFFFFFFF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF
+              572BFFFFFFFFFFFFFF572BFF572BFF572BFF572BFF572BFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFF572BFF572BFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF
+              572BFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFF572BFF572BFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF572BFF
+              572BFFFFFFFFFFFFFF572BFF572BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+            }
+            Visible = False
+            OnClick = sbtnUsrbtnClick
+            ShowHint = True
+            ParentShowHint = False
+          end
+        end
       end
     end
     object pnlDXCCinfo: TPanel
@@ -4859,6 +4924,9 @@ object frmNewQSO: TfrmNewQSO
         item
           Width = 50
         end      
+        item
+          Width = 50
+        end      
         item
           Width = 50
         end>
@@ -4886,26 +4954,26 @@ object frmNewQSO: TfrmNewQSO
     Interval = 2000
     OnTimer = tmrStartTimer
     OnStartTimer = tmrStartStartTimer
-    left = 520
-    top = 720
+    Left = 520
+    Top = 720
   end
   object tmrEnd: TTimer
     Enabled = False
     OnTimer = tmrEndTimer
     OnStartTimer = tmrEndStartTimer
-    left = 456
-    top = 720
+    Left = 456
+    Top = 720
   end
   object tmrRadio: TTimer
     Enabled = False
     OnTimer = tmrRadioTimer
-    left = 560
-    top = 32
+    Left = 560
+    Top = 32
   end
   object MainMenu1: TMainMenu
     Images = imgMain1
-    left = 128
-    top = 32
+    Left = 128
+    Top = 32
     object mnuFile: TMenuItem
       Caption = 'File'
       object MenuItem82: TMenuItem
@@ -5420,8 +5488,8 @@ object frmNewQSO: TfrmNewQSO
   end
   object ActionList1: TActionList
     Images = imgMain
-    left = 488
-    top = 32
+    Left = 488
+    Top = 32
     object acClose: TAction
       Category = 'File'
       Caption = 'Close'
@@ -5707,8 +5775,8 @@ object frmNewQSO: TfrmNewQSO
     end
   end
   object imgMain: TImageList
-    left = 264
-    top = 32
+    Left = 264
+    Top = 32
     Bitmap = {
       4C6910000000100000001000000010C4E70010C4E700C88B4DFFC88C4FFFC88C
       4FFFC88C4FFFC88C4FFFC88D4FFFC98C4FFFC78B4FFFC5894BFFC4763BFF4104
@@ -6228,8 +6296,8 @@ object frmNewQSO: TfrmNewQSO
   object popEditQSO: TPopupMenu
     Images = imgMain1
     OnPopup = popEditQSOPopup
-    left = 656
-    top = 32
+    Left = 656
+    Top = 32
     object mnuViewQso: TMenuItem
       Action = acViewQSO
       OnClick = acViewQSOExecute
@@ -6270,8 +6338,8 @@ object frmNewQSO: TfrmNewQSO
     end
   end
   object imgMain1: TImageList
-    left = 344
-    top = 32
+    Left = 344
+    Top = 32
     Bitmap = {
       4C69170000001000000010000000C803EA00C803EA00009B0000009B00000000
       000000000000000000000000000000000000000000003939E7FF000000000000
@@ -7015,44 +7083,44 @@ object frmNewQSO: TfrmNewQSO
   object tmrESC: TTimer
     Enabled = False
     OnTimer = tmrESCTimer
-    left = 736
-    top = 32
+    Left = 736
+    Top = 32
   end
   object tmrFldigi: TTimer
     Enabled = False
     OnTimer = tmrFldigiTimer
-    left = 408
-    top = 32
+    Left = 408
+    Top = 32
   end
   object tmrRotor: TTimer
     Enabled = False
     Interval = 500
-    left = 200
-    top = 32
+    Left = 200
+    Top = 32
   end
   object tmrUploadAll: TTimer
     Enabled = False
     OnTimer = tmrUploadAllTimer
-    left = 40
-    top = 32
+    Left = 40
+    Top = 32
   end
   object tmrWsjtx: TTimer
     Enabled = False
     OnTimer = tmrWsjtxTimer
-    left = 280
-    top = 720
+    Left = 280
+    Top = 720
   end
   object tmrWsjtSpd: TTimer
     Enabled = False
     Interval = 490
     OnTimer = tmrWsjtSpdTimer
-    left = 392
-    top = 720
+    Left = 392
+    Top = 720
   end
   object tmrADIF: TTimer
     Enabled = False
     OnTimer = tmrADIFTimer
-    left = 800
-    top = 32
+    Left = 800
+    Top = 32
   end
 end
diff --git a/src/fNewQSO.pas b/src/fNewQSO.pas
index 965d266..8e9a973 100644
--- a/src/fNewQSO.pas
+++ b/src/fNewQSO.pas
@@ -344,12 +344,14 @@ type
     pnlSbtn4: TPanel;
     pnlSbtn5: TPanel;
     pnlSbtn6: TPanel;
+    pnlSbtn7: TPanel;
     popEditQSO: TPopupMenu;
     sbNewQSO: TStatusBar;
     sbtnAttach: TSpeedButton;
     sbtneQSL: TSpeedButton;
     sbtnHamQTH: TSpeedButton;
     sbtnLocatorMap: TSpeedButton;
+    sbtnUsrbtn: TSpeedButton;
     sbtnLoTW: TSpeedButton;
     sbtnQRZ: TSpeedButton;
     sbtnQSL: TSpeedButton;
@@ -569,6 +571,7 @@ type
     procedure sbtnQSLClick(Sender: TObject);
     procedure sbtnQRZClick(Sender: TObject);
     procedure sbtnHamQTHClick(Sender : TObject);
+    procedure sbtnUsrbtnClick(Sender: TObject);
     procedure tmrESCTimer(Sender: TObject);
     procedure tmrEndStartTimer(Sender: TObject);
     procedure tmrEndTimer(Sender: TObject);
@@ -581,11 +584,10 @@ type
     procedure tmrWsjtSpdTimer(Sender: TObject);
     procedure tmrWsjtxTimer(Sender: TObject);
   private
-    StartRun : Boolean;
-    fEditQSO : Boolean;
-    fViewQSO : Boolean;
+    StartUpCount : integer;
+    StartRun    : Boolean;
     old_stat_adif : Word;
-    TabUsed : Boolean;
+    TabUsed     : Boolean;
     old_cmode   : String;
     old_ccall   : String;
     old_cfreq   : String;
@@ -625,7 +627,7 @@ type
     QSLcfm,
     eQSLcfm,
     LoTWcfm    : String;
-    OffLnBeforeEdit : Boolean;
+    UsrAssignedProfile : String;
     procedure showDOK(stat:boolean);
     procedure ShowDXCCInfo(ref_adif : Word = 0);
     procedure ShowFields;
@@ -672,8 +674,13 @@ type
 
     function CheckFreq(freq : String) : String;
     procedure WaitWeb(secs:integer);
+    procedure ShowOperator;
+    procedure StartUpRemote;
+    procedure NewLogSplash;
 
   public
+    fEditQSO    : Boolean;
+    fViewQSO    : Boolean;
     QTHfromCb   : Boolean;
     FromDXC     : Boolean;
     UseSpaceBar : Boolean;
@@ -681,6 +688,7 @@ type
     ShowWin     : Boolean;
     LastFkey    : Word;
     old_t_band  : String;
+    RemoteName  : String;
 
     WsjtxSock             : TUDPBlockSocket; //receive socket
     WsjtxSockS            : TUDPBlockSocket; //multicast send socket
@@ -703,6 +711,8 @@ type
     ContestNr             : integer;              //wsjtx 2.0 contest type definition in status msg
 
     ModeBeforeChange      : String; //flush CW buffer after mode change
+    CurrentMyLoc          : String; //currently valid my locator global var and public for other units.
+    EditViewMyLoc         : String;  //this is needed for exeption when edit/viev myloc is not CurrentMyloc
 
     property EditQSO : Boolean read fEditQSO write fEditQSO default False;
     property ViewQSO : Boolean read fViewQSO write fViewQSO default False;
@@ -1146,9 +1156,11 @@ Procedure TfrmNewQSO.ShowCountryInfo;
 var
   index : Integer;
 begin
+  if (edtCall.Text = '') then
+    exit;
+
   index := 0;
-  lblCountryInfo.Caption := dmDXCC.DXCCInfo(adif,cmbFreq.Text,
-                            cmbMode.Text,index);
+  lblCountryInfo.Caption := dmDXCC.DXCCInfo(adif, cmbFreq.Text, cmbMode.Text,index);
   if pos('UNKN',Uppercase(lblCountryInfo.Caption))>0 then lblCountryInfo.Font.Color:=clRed;
   if pos('CONF',Uppercase(lblCountryInfo.Caption))>0 then lblCountryInfo.Font.Color:=clGreen;
   if pos('NEW C',Uppercase(lblCountryInfo.Caption))>0 then
@@ -1235,9 +1247,11 @@ procedure TfrmNewQSO.ClearGrayLineMapLine;
 var
   lat,long :currency;
 Begin
-  dmUtils.CoordinateFromLocator(dmUtils.CompleteLoc(copy(sbNewQSO.Panels[0].Text,Length(cMyLoc)+1,6)),lat,long);
+  frmGrayLine.ob^.GC_line_clear;
+  dmUtils.CoordinateFromLocator(dmUtils.CompleteLoc(CurrentMyLoc),lat,long);
   lat := lat*-1;
-  frmGrayLine.ob^.jachcucaru(true,long,lat,long,lat);
+  frmGrayLine.ob^.jachcucaru(true,long,lat,long+0.03,lat+0.03); //trying to make own qth dot a bit bigger
+                                                                //the Grayline window zoom affects to visibility anyhow
   frmGrayline.Refresh;
 end;
 
@@ -1272,11 +1286,11 @@ begin
   sbtneQSL.Visible       := False;
   sbtnHamQTH.Visible     := False;
   sbtnLocatorMap.Visible := False;
+  sbtnUsrBtn.Visible     := False;
   TabUsed    := False;
   fromNewQSO := False;
   FromDXC  := False;
-  fEditQSO := False;
-  fViewQSO := False;
+
   old_stat_adif := 0;
   old_adif := 0;
   lblQSOTakes.Visible := False;
@@ -1352,8 +1366,8 @@ begin
     edtEndTime.Text   := sTimeOff;
     edtDate.Text      := sDate
   end;
-  dmData.InsertProfiles(cmbProfiles,False);
 
+  dmData.InsertProfiles(cmbProfiles,False);
   if old_prof = -1 then
     cmbProfiles.Text := dmData.GetDefaultProfileText
   else begin
@@ -1362,8 +1376,17 @@ begin
   //if cmbProfiles.Text <> '' then
      //cmbProfilesChange(nil);
 
+  if fEditQSO or fViewQSO then
+    Begin
+      cmbProfiles.Text := UsrAssignedProfile;
+      Op := cqrini.ReadString('TMPQSO','OP','');
+      ShowOperator;
+      fEditQSO := False;
+      fViewQSO := False;
+    end;
+
   if sbNewQSO.Panels[0].Text = '' then
-    sbNewQSO.Panels[0].Text := cMyLoc + cqrini.ReadString('Station','LOC','');
+    sbNewQSO.Panels[0].Text := cMyLoc + CurrentMyLoc;
 
   cmbFreq.Text := cqrini.ReadString('TMPQSO','FREQ',cqrini.ReadString(
                   'NewQSO','FREQ','7.025'));
@@ -1416,7 +1439,7 @@ begin
   ClearGrayLineMapLine;
 
   if not AnyRemoteOn then
-    edtCall.SetFocus;
+                       edtCall.SetFocus;
   if not (fEditQSO or fViewQSO or cbOffline.Checked) then
     tmrStart.Enabled := True;
   tmrEnd.Enabled := False;
@@ -1438,11 +1461,10 @@ begin
   dmUtils.LoadBandLabelSettins;
   sbNewQSO.Panels[0].Width := 180;
   sbNewQSO.Panels[1].Width := 200;
-
   sbNewQSO.Panels[2].Width := 200;
-
   sbNewQSO.Panels[3].Text  := 'Ver. '+ dmData.VersionString;
-  sbNewQSO.Panels[3].Width := 60;
+  sbNewQSO.Panels[3].Width := 150;
+  sbNewQSO.Panels[4].Width :=  50;
 
   dmUtils.LoadWindowPos(frmNewQSO);
 
@@ -1754,6 +1776,7 @@ begin
   cqrini.DeleteKey('TMPQSO','FREQ');
   cqrini.DeleteKey('TMPQSO','Mode');
   cqrini.DeleteKey('TMPQSO','PWR');
+  cqrini.DeleteKey('TMPQSO','OP');
   cqrini.WriteBool('NewQSO','AutoMode',chkAutoMode.Checked);
   SavePosition;
   cqrini.WriteBool('NewQSO','ShowGrd',dbgrdQSOBefore.Visible);
@@ -1820,12 +1843,12 @@ begin
   QSLcfm    := '';
   eQSLcfm   := '';
   LoTWcfm   := '';
-  OffLnBeforeEdit := False;
 
   Running      := False;
   EscFirstPressDone := False;
   ChangeDXCC   := False;
 
+  CurrentMyLoc := cqrini.ReadString('Station','LOC','');
   ClearAll;
   AddBandsToStatGrid;
   edtCall.SetFocus;
@@ -1837,6 +1860,9 @@ begin
   dmSatellite.SetListOfPropModes(cmbPropagation);
 
   ModeBeforeChange := cmbMode.Text;
+  UsrAssignedProfile:= cmbProfiles.Text;   //initial value
+  if cqrini.ReadString('Station','Call','')=''
+                                               then NewLogSplash;
 end;
 
 procedure TfrmNewQSO.tmrEndStartTimer(Sender: TObject);
@@ -1895,24 +1921,16 @@ procedure TfrmNewQSO.tmrFldigiTimer(Sender: TObject);
     end;
 
 var
-  ID  : longint;
-  Buf : TMyMsgBuf;
-  i : Integer;
-  call : String;
-  time1 : String;
-  time2 : String;
-  sname : String;
-  qth   : String;
-  loc   : String;
-  mhz   : String;
-  mode  : String;
-  rst   : String;
-  state : String;
-  note  : String;
-  date  : TDateTime;
-  sDate : String='';
-  Mask  : String='';
-  data  : String = '';
+  ID    : longint;
+  Buf   : TMyMsgBuf;
+  i     : Integer;
+  logged,
+  Mo    :TStringList;
+  mhz,
+  mode,
+  submode,
+  Mask,
+  data  : String;
 begin
 
  if FldigiXmlRpc then
@@ -1926,228 +1944,127 @@ begin
   begin
     ClearAll;
     cbOffline.Checked := True;
-    call := '';
-    time1 := '';
-    time2 := '';
-    sname := '';
-    qth   := '';
-    loc   := '';
-    mhz   := '';
-    mode  := '';
-    rst   := '';
-    state := '';
-    note  := '';
+    Mo:= TStringList.create;
+    Mo.Delimiter := ',';
+    Mo.DelimitedText:='JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC';
+    logged:=TStringlist.Create;
     if dmData.DebugLevel>=1 then
-      Writeln ('Type : ',buf.mtype,' Text : ',buf.mtext);
+    Begin
+        Writeln ('Type : ',buf.mtype,' Text : ',buf.mtext);
+        frmMonWsjtx.BufDebug('',buf.mtext);
+    end;
+    data := buf.mtext;
+    While length(data)>0 do
+     Begin
+        i:= pos(#01,data);
+        Mask:=copy(data,1,i-1);
+        data := copy(data,i+1, length(data));
+        Mask[pos(':',Mask)]:='=';
+        if dmData.DebugLevel>=1 then
+               writeln(Mask);
+        logged.Add(Mask);
+     end;
+    {
+     A QSO record contents after placing buf.mtext to string list value pairs:
+     program=fldigi v 4.1.20.36
+     version=1
+     date=30 Mar 2022
+     TIME=1509
+     endtime=1517
+     call=OH1KH
+     mhz=14.097150
+     mode=OLIVIA
+     submode=OLIVIA 8/500      (submode does not exist here if there is no submode for used mode!)
+     tx=599
+     rx=599
+     name=saku
+     qth=Pori
+     state=PO
+     province=SA
+     country=Finland
+     locator=KP01tn
+     serialout=000
+     serialin=
+     free1=
+     notes=remaks
+     power=
+     }
+    edtCall.Text      := logged.ValueFromIndex[logged.IndexOfName('call')];
+    edtCallExit(nil);
 
-    date := dmUtils.GetDateTime(0);
-    edtDate.Clear;
-    dmUtils.DateInRightFormat(date,Mask,sDate);
-    edtDate.Text:=sDate;
+    // set date
+    Mask              := logged.ValueFromIndex[logged.IndexOfName('date')];
+    try
+      data            := IntToStr(Mo.IndexOf(uppercase(ExtractWord(2,Mask,[' '])))+1);
+    finally
+      if length(data)<2 then data:='0'+data;
+    end;
+    data              := ExtractWord(3,Mask,[' '])+'-'+data+'-'+ ExtractWord(1,Mask,[' ']);
+    edtDate.Text      := data;
+    Mask              := logged.ValueFromIndex[logged.IndexOfName('TIME')];
+    edtStartTime.Text := copy(Mask,1,2)+':'+ copy(Mask,3,2);
+    Mask              := logged.ValueFromIndex[logged.IndexOfName('endtime')];
+    edtEndTime.Text   := copy(Mask,1,2)+':'+ copy(Mask,3,2);
+    edtName.Text      := logged.ValueFromIndex[logged.IndexOfName('name')];
+    edtNameExit(nil);
+    edtQTH.Text       := logged.ValueFromIndex[logged.IndexOfName('qth')];
+    edtQTHExit(nil);
+    edtGrid.Text      := logged.ValueFromIndex[logged.IndexOfName('locator')];
+    edtGridExit(nil);
+    edtState.Text     := logged.ValueFromIndex[logged.IndexOfName('state')];
+    edtStateExit(nil);
+    edtRemQSO.Text    := logged.ValueFromIndex[logged.IndexOfName('notes')];
+    edtPWR.text       := logged.ValueFromIndex[logged.IndexOfName('power')];
+    //Contest serial numbers. Test numerical value and >0
+    Mask              := logged.ValueFromIndex[logged.IndexOfName('serialout')];
+    i:= StrToIntDef(Mask,0);
+    if i>0  then
+                      edtContestSerialSent.Text:=Mask;
+    Mask              := logged.ValueFromIndex[logged.IndexOfName('serialin')];
+    i:= StrToIntDef(Mask,0);
+    if i>0  then
+                      edtContestSerialReceived.Text:=Mask;
+
+    //first set mode by mode, then if submode exist replace mode with it.
+    //Here no problem with SSB/USB/LSB combination
+    mode      := logged.ValueFromIndex[logged.IndexOfName('mode')];
+    if logged.IndexOfName('submode')> -1 then
+         submode := logged.ValueFromIndex[logged.IndexOfName('submode')]
+     else
+         submode:='';
+     cmbMode.Text:=dmUtils.ModeToCqr(mode,submode,dmData.DebugLevel>=1);
 
-    data := LowerCase(buf.mtext);
-    case cqrini.ReadInteger('fldigi','freq',0) of
-      0 : begin
-            if frmTRXControl.GetModeFreqNewQSO(mode,mhz) then
-            begin
-              cmbFreq.Text := mhz
-              //cmbMode.Text := mode
-            end
-          end;
+    //set frquency
+    mhz               := logged.ValueFromIndex[logged.IndexOfName('mhz')];
+    if Pos('.', mhz) > 0 then mhz[Pos('.', mhz)] := FormatSettings.DecimalSeparator;
+    if pos(',', mhz) > 0 then mhz[pos(',', mhz)] := FormatSettings.DecimalSeparator;
+    if dmUtils.GetBandFromFreq(mhz) <> '' then
+                         cmbFreq.Text := mhz;
 
-      1 : begin
-            i := Pos('mhz',data);
-            if i > 0 then
-            begin
-              i := i+3;
-              while buf.mtext[i] <> chr(1) do
-              begin
-                mhz := mhz + buf.mtext[i];
-                inc(i)
-              end;
-              if dmData.DebugLevel>=1 then Writeln('mhz:',mhz)
-            end;
-            mhz := Trim(mhz);
-            if Pos('.', mhz) > 0 then mhz[Pos('.', mhz)] := FormatSettings.DecimalSeparator;
-            if pos(',', mhz) > 0 then mhz[pos(',', mhz)] := FormatSettings.DecimalSeparator;
-            if dmUtils.GetBandFromFreq(mhz) <> '' then
-              cmbFreq.Text := mhz;
-          end;
-       2 : cmbFreq.Text := cqrini.ReadString('fldigi','deffreq','3.600')
+    //set RST
+    edtHisRST.Text       := logged.ValueFromIndex[logged.IndexOfName('tx')];
+    edtMyRST.Text        := logged.ValueFromIndex[logged.IndexOfName('rx')];
+
+    //then override with possible defaults for frequency, mode and RST from Cqrlog settings
+    case cqrini.ReadInteger('fldigi','freq',0) of
+      0 : if frmTRXControl.GetModeFreqNewQSO(mode,mhz) then  cmbFreq.Text := mhz;
+      2 : cmbFreq.Text := cqrini.ReadString('fldigi','deffreq','3.600')
     end;
-    mode := '';
-    case cqrini.ReadInteger('fldigi','mode',1) of
-      0 : begin
-            if frmTRXControl.GetModeFreqNewQSO(mode,mhz) then
-            begin
-              //cmbFreq.Text := mhz;
-              cmbMode.Text := mode
-            end
-          end;
-      1 : begin
-            i := Pos('mode',data);
-            if i > 0 then
-            begin
-              i := i+4;
-              while buf.mtext[i] <> chr(1) do
-              begin
-                mode := mode + buf.mtext[i];
-                inc(i)
-              end;
-              if dmData.DebugLevel>=1 then Writeln('mode:',mode);
-              cmbMode.Text := mode
-            end
-          end;
+
+  case cqrini.ReadInteger('fldigi','mode',1) of
+      0 : if frmTRXControl.GetModeFreqNewQSO(mode,mhz) then cmbMode.Text := mode;
       2 : cmbMode.Text := cqrini.ReadString('fldigi','defmode','RTTY')
     end;
 
-    i := Pos('call',data);
-    if i > 0 then
-    begin
-      i := i+4;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        call := call + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('Call:',call);
-      edtCall.Text := call;
-      edtCallExit(nil)
-    end;
-    i := Pos('time',data);
-    if i > 0 then
-    begin
-      i := i+4;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        time1 := time1 + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('Time on:',time1);
-      if Length(time1) = 4 then
-        edtStartTime.Text := time1[1]+time1[2]+':'+time1[3]+time1[4]
-      else
-        edtStartTime.Text := time1
-    end;
-    i := Pos('endtime',data);
-    if i > 0 then
-    begin
-      i := i+7;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        time2 := time2 + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('Time off:',time2);
-      if Length(time2) = 4 then
-        edtEndTime.Text := time2[1]+time2[2]+':'+time2[3]+time2[4]
-      else
-        edtEndTime.Text := time2
-    end;
-    i := Pos('name',data);
-    if i > 0 then
-    begin
-      i := i+4;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        sname := sname + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('Name:',sname);
-      edtName.Text := sname;
-      edtNameExit(nil)
-    end;
-    i := Pos('qth',data);
-    if i > 0 then
-    begin
-      i := i+3;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        qth := qth + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('qth:',qth);
-      edtQTH.Text := qth;
-      edtQTHExit(nil)
-    end;
-    i := Pos('locator',data);
-    if i > 0 then
+  if cqrini.ReadInteger('fldigi','rst',0) = 1 then
     begin
-      i := i+7;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        loc := loc + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('loc:',loc);
-      if dmUtils.IsLocOK(loc) then
-        edtGrid.Text := loc
+          edtHisRST.Text := cqrini.ReadString('fldigi','defrst','599');
+          edtMyRST.Text  := cqrini.ReadString('fldigi','defrst','599')
     end;
 
-
-    case cqrini.ReadInteger('fldigi','rst',0) of
-      0 : begin
-            i := Pos('rx',data);
-            if i > 0 then
-            begin
-              i := i+2;
-              while buf.mtext[i] <> chr(1) do
-              begin
-                rst := rst + buf.mtext[i];
-                inc(i)
-              end;
-              if dmData.DebugLevel>=1 then Writeln('rst_r:',rst);
-              if rst = '' then
-                rst := cqrini.ReadString('fldigi','defrst','599');
-              edtMyRST.Text := rst
-            end;
-            rst := '';
-            i := Pos('tx',data);
-            if i > 0 then
-            begin
-              i := i+2;
-              while buf.mtext[i] <> chr(1) do
-              begin
-                rst := rst + buf.mtext[i];
-                inc(i)
-              end;
-              if dmData.DebugLevel>=1 then Writeln('rst_r:',rst);
-              if rst = '' then
-                rst := cqrini.ReadString('fldigi','defrst','599');
-              edtHisRST.Text := rst
-            end
-          end;
-      1 : begin
-            edtHisRST.Text := cqrini.ReadString('fldigi','defrst','599');
-            edtMyRST.Text  := cqrini.ReadString('fldigi','defrst','599')
-          end
-    end;
-    i := Pos('state',data);
-    if i > 0 then
-    begin
-      i := i+5;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        state := state + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('state:',state);
-      edtState.Text := state;
-      edtStateExit(nil)
-    end;
-    i := Pos('notes',data);
-    if i > 0 then
-    begin
-      i := i+5;
-      while buf.mtext[i] <> chr(1) do
-      begin
-        note := note + buf.mtext[i];
-        inc(i)
-      end;
-      if dmData.DebugLevel>=1 then Writeln('note:',note);
-      edtRemQSO.Text := note
-    end;
     SaveRemote;
+    FreeAndNil(logged);
+    FreeAndNil(Mo);
   end;   //while msgrcv
  end; //else fldigixmlrpc
 
@@ -2155,17 +2072,15 @@ end;
 
 procedure TfrmNewQSO.tmrADIFTimer(Sender: TObject);
 var
-  Buf,
-  buf2,
-  prik,
-  data          :string;
+  Buf, buf2,
+  prik,data     :string;
   chkDuplicates :boolean;
   i             :longint;
   a,b,l         :integer;
   fixed         :Boolean;
+  mode,submode  :string;
 
 begin
-
   fixed:=false;
   tmrADIF.Enabled:=false;
   chkDuplicates:=false;
@@ -2174,7 +2089,7 @@ begin
    if dmData.DebugLevel>=1 then Writeln('rmtADIF has data. JS8CALL mode is now ',IsJS8Callrmt);
    while ADIFsock.WaitingData > 0 do     //do all pending messages in one go
     begin
-      Buf := trim(ADIFsock.RecvPacket(500));    //Read all data waitingtimeout 500ms
+      Buf := trim(ADIFsock.RecvPacket(50));    //Read all data waitingtimeout 50ms
       if dmData.DebugLevel>=1 then Writeln('rmtADIF read data');
       if ADIFSock.lasterror=0 then
        begin
@@ -2233,10 +2148,11 @@ begin
             if pos('<CALL:',uppercase (Buf)) > 0 then
              Begin
               if dmData.DebugLevel>=1 then writeln('Handle qso record: ',Buf);
+              mode:='';
+              submode:='';
               //this is fake as call info(qslmgr) needs date. We use current date if call tag comes before qso_date tag
               //qso_date will then replace this
               edtDate.Text := FormatDateTime('YYYY-MM-DD',now());
-
               repeat
                 begin
                   if frmAdifImport.getNextAdifTag(Buf,prik,data) then
@@ -2258,9 +2174,8 @@ begin
                                                                         if pos(data,edtGrid.Text)=0  then   //if qso loc does not fit to QRZ loc , or qrz loc is empty
                                                                                       edtGrid.Text := data; //replace qrz loc, otherwise keep it
                                                                  end;
-                                                  'MODE' : cmbMode.Text := uppercase(data);
-                                                  //now this overrides MODE, if exists
-                                                  'SUBMODE'    : cmbMode.Text := uppercase(data);
+                                                  'MODE'       : mode := uppercase(data);
+                                                  'SUBMODE'    : submode := uppercase(data);
                                                   'FREQ'       : cmbFreq.Text := data;
                                                   'FREQ_RX'    : edtRXFreq.Text := data;
                                                   'RST_SENT'   : edtHisRST.Text := data;
@@ -2298,6 +2213,10 @@ begin
                                                 end; //case
                     end;  //repeat
                until pos('<EOR>',uppercase(Buf))=1;
+
+              //set the final Cqrlmode
+              cmbMode.Text:=dmUtils.ModeToCqr(mode,submode,dmData.DebugLevel>=1 );
+
               SaveRemote;
 
               //these do not reset in qso save, so they must be cleared here in case there was
@@ -2381,7 +2300,8 @@ procedure TfrmNewQSO.tmrStartTimer(Sender: TObject);
 begin
   if not cbOffline.Checked then
   begin
-    FillDateTimeFields
+    FillDateTimeFields;
+    StartUpRemote;
   end
 end;
 
@@ -2519,7 +2439,6 @@ var
   TXOn     : Boolean;
   i        : word;
   TXmode   : String;
-  RemoteName :String;
   BufEnd     : Boolean;
 
   call  : String;
@@ -3095,10 +3014,10 @@ begin
             begin
                  if dmData.DebugLevel>=1 then Writeln('Tail logging part entered');
                  OpCall := UpperCase(trim(StrBuf(index)));  //operator callsign (in contest, club etc.)
-                 if ((OpCall<>'') and (Op = UpperCase(cqrini.ReadString('Station', 'Call', '')))) then
-                  Begin
-                   Op := OpCall;
-                   sbNewQSO.Panels[2].Text := cOperator+Op;
+                 if ((OpCall<>'') and (Op <> OpCall)) then
+                  Begin           //wsjt-x operator setting wins cqrlog operator setting
+                   Op := OpCall;  //for this qso only as it is currently used operation mode
+                   ShowOperator;  //This only flashes wsjt-x operator during save
                   end;
                  ExchR :=  trim(StrBuf(index));  //fake, this is actually "My call". Not used
                  ExchR :=  trim(StrBuf(index));  //fake, this is actually "My grid". Not used
@@ -3313,7 +3232,11 @@ begin
 
   dmData.SaveComment(edtCall.Text,mComment.Text);
 
-  myloc := copy(sbNewQSO.Panels[0].Text,Length(cMyLoc)+1,6);
+  if fEditQSO then
+    myloc := copy(sbNewQSO.Panels[0].Text,Length(cMyLoc)+1,6)
+   else
+    myloc := CurrentMyLoc;
+
   if NOT dmUtils.IsLocOK(myloc) then
     myloc := '';
 
@@ -3381,12 +3304,10 @@ begin
       dmData.RemoveLoTWUploadedFlag(id)
     end
   end
-  else begin
-    if not AnyRemoteOn then
-      if edtCall.Focused then
-      begin
-        edtCallExit(nil)
-      end;
+  else
+   begin
+     if (not AnyRemoteOn) and edtCall.Focused then
+                                               edtCallExit(nil);
 
     old_prof   := dmData.GetNRFromProfile(cmbProfiles.Text);
     old_sat    := dmSatellite.GetSatShortName(cmbSatellite.Text);
@@ -3468,7 +3389,7 @@ begin
                    edtContestName.Text,
                    Op
                    )
-  end;
+   end;
   if (cmbPropagation.Text = 'SAT|Satellite') then
   begin
      if (cqrini.ReadBool('NewQSO','UpdateAMSATstatus',False)) then
@@ -3479,7 +3400,7 @@ begin
     dmData.RefreshMainDatabase(id)
   end;
   if not AnyRemoteOn then
-    UnsetEditLabel;
+                       UnsetEditLabel;
   dmData.qQSOBefore.Close;
   fEditQSO := False;
   was_call := edtCall.Text;
@@ -3491,20 +3412,28 @@ begin
   if cqrini.ReadBool('NewQSO','ClearRIT',False) then
     frmTRXControl.ClearRIT;
 
-  if (cqrini.ReadBool('NewQSO','RefreshAfterSave',False) and frmMain.Showing) then
+  if (cqrini.ReadBool('NewQSO','RefreshAfterSave', True) and frmMain.Showing) then
     frmMain.acRefresh.Execute;
 
-  if ShowMain and frmMain.Showing then
-  begin
-    frmMain.BringToFront;
-    frmMain.BringToFront;
-    frmMain.dbgrdMain.SetFocus
-  end
-  else
-    if not AnyRemoteOn then
-     edtCall.SetFocus;
   UploadAllQSOOnline;
-  if frmWorkedGrids.Showing then frmWorkedGrids.UpdateMap
+  if frmWorkedGrids.Showing then frmWorkedGrids.UpdateMap;
+  Op := cqrini.ReadString('TMPQSO','OP','');
+  ShowOperator;
+
+  if AnyRemoteOn then
+     frmNewQSO.SendToBack
+    else
+     begin
+      if ShowMain and frmMain.Showing then
+        begin
+          frmMain.BringToFront;
+          frmMain.BringToFront;
+          frmMain.dbgrdMain.SetFocus
+        end
+        else
+          edtCall.SetFocus;
+     end;
+
 end;
 
 procedure TfrmNewQSO.btnCancelClick(Sender: TObject);
@@ -5272,16 +5201,17 @@ begin
 end;
 
 procedure TfrmNewQSO.cmbProfilesChange(Sender: TObject);
-var
-  myloc : String;
+
 begin
-  if cmbProfiles.Text = '' then
-   myloc :=  cqrini.ReadString('Station','LOC','')
+   if cmbProfiles.Text = '' then
+   CurrentMyLoc :=  cqrini.ReadString('Station','LOC','')
   else
-   myloc := dmData.GetMyLocFromProfile(cmbProfiles.Text);
-  if myloc <> '' then
-     sbNewQSO.Panels[0].Text := cMyLoc + myloc;
-  if dmData.DebugLevel >=1 then Writeln(cmbProfiles.Text)
+   CurrentMyLoc := dmData.GetMyLocFromProfile(cmbProfiles.Text);
+  if CurrentMyloc <> '' then
+     sbNewQSO.Panels[0].Text := cMyLoc + CurrentMyLoc;
+
+  UsrAssignedProfile:= cmbProfiles.Text;   //this is only place for change value
+  if dmData.DebugLevel >=1 then Writeln('Set profile: ',cmbProfiles.Text)
 end;
 
 procedure TfrmNewQSO.cmbQSL_RKeyDown(Sender: TObject; var Key: Word;
@@ -5366,6 +5296,7 @@ begin
     exit;
   sbtnQRZ.Visible    := True;
   sbtnHamQTH.Visible := True;
+  sbtnUsrBtn.Visible := True;
   if cqrini.ReadBool('LoTW','ShowInfo',True) then
   begin
     sbtneQSL.Visible := dmData.UseseQSL(edtCall.Text);
@@ -5593,7 +5524,7 @@ begin
       end;
       Caption := dmUtils.GetNewQSOCaption('New QSO');
       fViewQSO := False;
-      fEditQSO := False
+      fEditQSO := False;
     end
   end
   else
@@ -5638,7 +5569,7 @@ begin
     begin
       speed := CWint.GetSpeed+2;
       CWint.SetSpeed(speed);
-      sbNewQSO.Panels[2].Text := IntToStr(speed)+'WPM';
+      sbNewQSO.Panels[4].Text := IntToStr(speed)+'WPM';
       if (frmCWType <> nil ) then frmCWType.edtSpeed.Value := speed;
     end
   end;
@@ -5649,7 +5580,7 @@ begin
     begin
       speed := CWint.GetSpeed-2;
       CWint.SetSpeed(speed);
-      sbNewQSO.Panels[2].Text := IntToStr(speed)+'WPM';
+      sbNewQSO.Panels[4].Text := IntToStr(speed)+'WPM';
       if (frmCWType <> nil ) then frmCWType.edtSpeed.Value := speed;
     end
   end;
@@ -5756,13 +5687,13 @@ begin
     dmUtils.EnterFreq;
     key := 0
   end;
-  if ((Shift = [ssAlt]) and (key = VK_V)) then
+  if ((Shift = [ssAlt]) and (key = VK_V)) then  //Alt+V
     frmTRXControl.btnMemDwn.Click;
-  if ((Shift = [ssAlt]) and (key = VK_W)) then
+  if ((Shift = [ssAlt]) and (key = VK_W)) then  //Alt+W
     cmbQSL_S.text:='SB';
-  if ((Shift = [ssAlt]) and (key = VK_N)) then
+  if ((Shift = [ssAlt]) and (key = VK_N)) then  //Alt+N
     cmbQSL_S.text:='N';
-  if ((Shift = [ssAlt]) and (key = VK_O)) then
+  if ((Shift = [ssAlt]) and (key = VK_O)) then //Alt+O
   begin
     with TfrmChangeOperator.Create(self) do
     try
@@ -5775,9 +5706,8 @@ begin
          else
           Op:= '';
         if dmData.DebugLevel>=1 then writeln('Operator changed: '+Op);
-         if Op<>UpperCase(cqrini.ReadString('Station', 'Call', ''))  then
-              sbNewQSO.Panels[2].Text := cOperator+Op
-           else sbNewQSO.Panels[2].Text :='';
+        cqrini.WriteString('TMPQSO','OP',Op);
+        ShowOperator;
       end;
     finally
       Free;
@@ -5801,20 +5731,22 @@ procedure TfrmNewQSO.FormKeyPress(Sender: TObject; var Key: char);
 begin
   case key of
     #13 : begin                     //enter
-            btnSave.Click;
+            if not AnyRemoteOn then btnSave.Click;
             //SaveGrid;
             key := #0;
           end;
     #12 : begin                    // CTRL+L
             with TfrmChangeLocator.Create(self) do
             try
-              edtLocator.Text := copy(sbNewQSO.Panels[0].Text,Length(cMyLoc)+1,10);
+              edtLocator.Text := CurrentMyLoc;
               ShowModal;
               if ModalResult = mrOk then
               begin
-                sbNewQSO.Panels[0].Text := cMyLoc + edtLocator.Text;
+                CurrentMyLoc := edtLocator.Text;
+                sbNewQSO.Panels[0].Text := cMyLoc + CurrentMyLoc;
                 // We don't want the temporary locator to be saved permanently
                 // cqrini.WriteString('Station','LOC',edtLocator.Text)
+                ClearGrayLineMapLine; //set myqth position to new locator
               end;
             finally
               Free;
@@ -5945,7 +5877,18 @@ begin
 end;
 
 procedure TfrmNewQSO.popEditQSOPopup(Sender: TObject);
+var
+   v:boolean;
 begin
+    v := dmData.qQSOBefore.RecordCount>0;
+    mnuViewQso.Enabled:=v;
+    mnuEditQso.Enabled:=v;
+    mnuHamQth.Enabled:=v;
+    mnuQrz.Enabled:=v;
+    mnuIK3QAR.Enabled:=v;
+    mnueQSLView.Enabled:=v;
+    if not v then exit;
+
     mnueQSLView.Visible :=  pos('E',dmData.qQSOBefore.FieldByName('eqsl_qsl_rcvd').AsString)>0;
     if dmData.DebugLevel>=1 then writeln(dmData.qQSOBefore.FieldByName('callsign').AsString,' ',
                                          dmData.qQSOBefore.FieldByName('eqsl_qsl_rcvd').AsString )
@@ -5989,6 +5932,11 @@ begin
   dmUtils.ShowHamQTHInBrowser(edtCall.Text)
 end;
 
+procedure TfrmNewQSO.sbtnUsrbtnClick(Sender: TObject);
+begin
+  dmUtils.ShowUsrUrl;
+end;
+
 procedure TfrmNewQSO.sbtnLocatorMapClick(Sender: TObject);
 begin
   if dmUtils.isLocOK(edtGrid.Text) then  //there may be case where Grid is empty and button is visible
@@ -6085,7 +6033,7 @@ begin
       if (UpperCase(dbgrdQSOBefore.Columns[i].DisplayName) = 'FREQ') then
       begin
         dbgrdQSOBefore.Columns[i].Alignment       := taRightJustify;
-        dbgrdQSOBefore.Columns[i].DisplayFormat   := '###,##0.0000;;';
+        dbgrdQSOBefore.Columns[i].DisplayFormat   := '####0.000;;';
         dbgrdQSOBefore.Columns[i].Title.Alignment := taCenter
       end;
 
@@ -6314,7 +6262,7 @@ begin
 
   //SunDelta := cqrini.ReadFloat('Program','SunOffset',0);
 
-  myloc := copy(sbNewQSO.Panels[0].Text,Length(cMyLoc)+1,6);
+  myloc := CurrentMyLoc;
   if lblDXCC.Caption = '!' then
   begin
     lblQRA.Caption := '';
@@ -6401,7 +6349,8 @@ begin
   EscFirstPressDone := False;
   ChangeDXCC   := False;
   dmData.InsertProfiles(cmbProfiles,true);
-  
+  EditViewMyLoc :='';
+
   if fromNewQSO then
   begin
     cmbProfiles.Text  := dmData.GetProfileText(dmData.qQSOBefore.FieldByName('profile').AsInteger);
@@ -6454,6 +6403,9 @@ begin
     edtContestSerialReceived.Text := dmData.qQSOBefore.FieldByName('srx').AsString;
     edtContestExchangeMessageSent.Text := dmData.qQSOBefore.FieldByName('stx_string').AsString;
     edtContestExchangeMessageReceived.Text := dmData.qQSOBefore.FieldByName('srx_string').AsString;
+    Op := dmData.qQSOBefore.FieldByName('operator').AsString;
+    ShowOperator;
+    EditViewMyLoc :=  dmData.qQSOBefore.FieldByName('my_loc').AsString;
   end
   else begin
     cmbProfiles.Text := dmData.GetProfileText(dmData.qCQRLOG.FieldByName('profile').AsInteger);
@@ -6493,6 +6445,7 @@ begin
     edtContestExchangeMessageSent.Text := dmData.qCQRLOG.FieldByName('stx_string').AsString;
     edtContestExchangeMessageReceived.Text := dmData.qCQRLOG.FieldByName('srx_string').AsString;
 
+
     if lotw_qslr = 'L' then
            LoTWcfm := dmData.qCQRLOG.FieldByName('lotw_qslrdate').AsString + '  '+
                       dmData.qCQRLOG.FieldByName('band').AsString +'  LoTW cfmd' ;
@@ -6507,6 +6460,8 @@ begin
     dmSatellite.GetListOfPropModes(cmbPropagation, dmData.qCQRLOG.FieldByName('prop_mode').AsString);
     edtRXFreq.Text := FloatToStr(dmData.qCQRLOG.FieldByName('rxfreq').AsFloat);
     Op := dmData.qCQRLOG.FieldByName('operator').AsString;
+    ShowOperator;
+    EditViewMyLoc :=  dmData.qCQRLOG.FieldByName('my_loc').AsString;
   end;
   if (edtRXFreq.Text = '0') then
     edtRXFreq.Text := '';
@@ -6563,6 +6518,7 @@ end;
 procedure TfrmNewQSO.SavePosition;
 begin
   dmUtils.SaveWindowPos(frmNewQSO);
+  if frmContest.Showing then  frmContest.SaveSettings;
   cqrini.WriteBool('NewQSO','StatBar',sbNewQSO.Visible);
   cqrini.SaveToDisk
 end;
@@ -6637,9 +6593,9 @@ begin
       edtState.Text := c_state;
       if ((c_county <> '') and (edtCounty.Text='')) or AlwaysReplace or ReplaceZonesEtc then
       begin
-        if (edtState.Text<>'') then
+        if ((edtState.Text<>'') and (c_county <> '')) then //chk c_county.Might be empty because above if-and-or-or  passes it wnen empty
           edtCounty.Text := edtState.Text+','+c_county
-        else
+          else
           edtCounty.Text := c_county
       end
     end;  //county
@@ -6748,7 +6704,10 @@ begin
     freq := FloatToStr(etmp);
     frmTRXControl.SetModeFreq(mode,freq);
     edtCallExit(nil);
-    BringToFront;
+    if AnyRemoteOn then
+                   SendToBack
+                 else
+                   BringToFront;
     if frmContest.Showing then
      Begin
      //this makes "double round" setting new qso but works with minimal code
@@ -6763,7 +6722,6 @@ begin
   lblCall.Caption    := 'Call (edit mode):';
   lblCall.Font.Color := clRed;
   Caption := dmUtils.GetNewQSOCaption('Edit QSO');
-  OffLnBeforeEdit:=cbOffline.Checked;
   cbOffline.Checked :=true;
 end;
 
@@ -6772,8 +6730,10 @@ begin
   lblCall.Caption    := 'Call:';
   lblCall.Font.Color := clDefault;
   Caption := dmUtils.GetNewQSOCaption('New QSO');
-  cbOffline.Checked :=OffLnBeforeEdit;
-  OffLnBeforeEdit:=cbOffline.Checked;
+  cbOffline.Checked := cqrini.ReadBool('TMPQSO','OFF',False);
+  sbNewQSO.Panels[0].Text := cMyLoc + CurrentMyLoc;
+  cmbProfiles.Text := UsrAssignedProfile;
+  Op := cqrini.ReadString('TMPQSO','OP','');
 end;
 
 procedure TfrmNewQSO.CheckCallsignClub;
@@ -7081,7 +7041,7 @@ begin
       HisName:= edtName.Text;
       tmp := 'DX ' + FloatToStrF(f,ffFixed,8,1) + ' ' + call;
       ModRst := cmbMode.Text+' '+ rst_s;
-      HMLoc := copy(sbNewQSO.Panels[0].Text,Length(cMyLoc)+1,6)+'<'+dmSatellite.GetPropShortName(cmbPropagation.Text)+'>'+edtGrid.Text;
+      HMLoc := CurrentMyLoc+'<'+dmSatellite.GetPropShortName(cmbPropagation.Text)+'>'+edtGrid.Text;
 
     end;
   end
@@ -7257,7 +7217,7 @@ begin
    Begin
      CWint.Open;
      CWint.SetSpeed(UseSpeed);
-     sbNewQSO.Panels[2].Text := IntToStr(UseSpeed) + 'WPM';
+     sbNewQSO.Panels[4].Text := IntToStr(UseSpeed) + 'WPM';
      if frmCWType.Showing then frmCWType.edtSpeed.Value := UseSpeed;
    end;
 end;
@@ -7346,7 +7306,28 @@ begin
   edtStartTime.Text := FormatDateTime('hh:mm',date);
   edtEndTime.Text   := FormatDateTime('hh:mm',date)
 end;
-
+procedure TfrmNewQSO.StartUpRemote;
+var
+  StartKey:String;
+Begin
+    if StartUpCount > 10 then exit; //done already
+    inc(StartUpCount);
+    if StartUpCount = 10 then
+     Begin
+       inc(StartUpCount); //to be 11
+       if not Application.HasOption('r','remote') then exit
+        else
+         Begin
+           StartKey:= Application.GetOptionValue('r','remote');
+           if length(StartKey)>1 then  exit; //must be one letter
+           case UpperCase(StartKey[1]) of
+               'J' :  GoToRemoteMode(rmtWsjt);
+               'M' :  GoToRemoteMode(rmtFldigi);
+               'K' :  GoToRemoteMode(rmtADIF);
+           end;
+         end;
+     end;
+end;
 procedure TfrmNewQSO.GoToRemoteMode(RemoteType : TRemoteModeType);
 var
   run  : Boolean = False;
@@ -7394,6 +7375,7 @@ begin
                   wHiSpeed  := 10;    //mS will be shorter when FT8
                   wLoSpeed  := 1000;
 
+                  frmTRXControl.DisableRitXit; //wsjtx does not do this, so we have to ...
 
                   tmrWsjtx.Interval := wLoSpeed;      //  timer has now dynamic value. Most of time there is nothing to do
 
@@ -7502,9 +7484,11 @@ begin
   lblCall.Font.Color    := clRed;
   edtCall.Enabled       := False;
   cbOffline.Checked     := True;
-  cbOffline.Enabled    := False;
+  cbOffline.Enabled     := False;
+  btnSave.Enabled       := False;  //disable manual saving when remote is on
+  tmrADIF.Interval      := 250;    //rate to read qsos from UDP (msec)
   if run and FileExists(path) then
-    dmUtils.RunOnBackgroud(path)
+    dmUtils.RunOnBackground(path)
 end;
 
 
@@ -7558,9 +7542,10 @@ begin
   edtCall.Enabled           := True;
   cbOffline.Checked         := False;
   cbOffline.Enabled         := True;
+  btnSave.Enabled           := True;
   edtCall.SetFocus;
-
-
+  //clear TMPQSO mode on close. Otherwise it shows up on next remote mode (procedure ClearAll makes it)
+  cqrini.WriteString('TMPQSO','Mode','');
 end;
 procedure  TfrmNewQSO.SaveRemote;
 Begin
@@ -7668,6 +7653,51 @@ begin
   end
 end;
 
+procedure  TfrmNewQSO.ShowOperator;
+Begin
+  if (Op<>UpperCase(cqrini.ReadString('Station', 'Call', ''))) and (Op<>'') then
+         sbNewQSO.Panels[2].Text := cOperator+Op
+       else
+         sbNewQSO.Panels[2].Text :='';
+end;
+
+procedure  TfrmNewQSO.NewLogSplash;
+  var tmp  :String;
+Begin
+
+     tmp:=  'It seems that you have not set Station CALLSIGN for this log.'+LineEnding
+           +LineEnding
+           +'Cqrlog has own settings for every log. You can copy settings'+LineEnding
+           +'between logs using window:'+LineEnding
+           +'Database Connect/Utils/settings/import<->export.'+LineEnding
+           +LineEnding
+           +'For this new log check now from top menu File/Preferences'+LineEnding
+           +'at least following Tabs:'+LineEnding
+           +LineEnding
+           +'PROGRAM:'+LineEnding
+           +'         Basic settings how cqrlog works with this log'+LineEnding
+           +'STATION:'+LineEnding
+           +'         Your station information for this log'+LineEnding
+           +'BANDS:'+LineEnding
+           +'         By default Cqrlog uses Region1 band settings.'+LineEnding
+           +'         If you are in other region please check bands/frequencies'+LineEnding
+           +'         to set correct band start and end frequencies.'+LineEnding
+           +'         This will affect to Cqrlog operations.'+LineEnding
+           +'TRX CONTROL:'+LineEnding
+           +'         Settings if you want Cqrlog to communicate with'+LineEnding
+           +'         your rig using CAT control.'+LineEnding
+           +'EXTERNAL VIEWERS:'+LineEnding
+           +'         Programs that Cqrlog uses for viewing various'+LineEnding
+           +'         documents'+LineEnding
+           +LineEnding
+           +'For other Tabs set their values by your needs.'+LineEnding
+           +LineEnding
+           +'PLEASE use top menu HELP/HELP INDEX for more help for'+LineEnding
+           +'settings and operation. Help opens to your web browser.'+LineEnding
+           +LineEnding
+           +'73, gl DX!';
+           ShowMessage(tmp);
+end;
 
 end.
 
diff --git a/src/fPreferences.lfm b/src/fPreferences.lfm
index d2f20d1..21725c5 100644
--- a/src/fPreferences.lfm
+++ b/src/fPreferences.lfm
@@ -1,121 +1,163 @@
 object frmPreferences: TfrmPreferences
   Left = 74
-  Height = 681
+  Height = 652
   Top = 31
-  Width = 958
+  Width = 1103
   HelpType = htKeyword
   HelpKeyword = 'help/h1.html'
-  HorzScrollBar.Page = 810
-  VertScrollBar.Page = 681
+  HorzScrollBar.Page = 1090
+  VertScrollBar.Page = 639
   ActiveControl = lbPreferences
   AutoScroll = True
   BorderIcons = [biSystemMenu]
   Caption = 'Preferences'
-  ClientHeight = 681
-  ClientWidth = 945
+  ClientHeight = 639
+  ClientWidth = 1090
   OnCloseQuery = FormCloseQuery
   OnCreate = FormCreate
   OnShow = FormShow
   Position = poMainFormCenter
-  LCLVersion = '2.0.8.0'
+  LCLVersion = '2.2.0.4'
   object pgPreferences: TPageControl
     Left = 160
     Height = 703
     Top = 0
-    Width = 697
+    Width = 846
     ActivePage = tabProgram
     Align = alClient
-    TabIndex = 4
+    TabIndex = 0
     TabOrder = 0
     OnChange = pgPreferencesChange
     object tabProgram: TTabSheet
       Caption = 'Program'
       ClientHeight = 672
-      ClientWidth = 687
-      object Label60: TLabel
-        Left = 364
+      ClientWidth = 836
+      object lblWebBrowser: TLabel
+        AnchorSideLeft.Control = gbInternet
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = rgStatistics
+        AnchorSideTop.Side = asrBottom
+        Left = 350
         Height = 17
-        Top = 91
-        Width = 248
+        Top = 78
+        Width = 259
+        BorderSpacing.Left = 3
+        BorderSpacing.Top = 3
         Caption = 'Web browser for cqrlog (if not default)'
-        ParentColor = False
       end
-      object GroupBox2: TGroupBox
-        Left = 14
-        Height = 137
+      object gbInternet: TGroupBox
+        AnchorSideLeft.Control = tabProgram
+        AnchorSideTop.Control = tabProgram
+        Left = 6
+        Height = 129
         Top = 3
         Width = 341
+        BorderSpacing.Left = 6
+        BorderSpacing.Top = 3
         Caption = ' Internet connection '
         ClientHeight = 111
-        ClientWidth = 335
+        ClientWidth = 339
         TabOrder = 0
-        object Label12: TLabel
+        object lblintProxy: TLabel
+          AnchorSideTop.Control = edtProxy
+          AnchorSideTop.Side = asrCenter
           Left = 7
           Height = 17
           Top = 24
-          Width = 43
+          Width = 41
           Caption = 'Proxy:'
-          ParentColor = False
         end
-        object Label13: TLabel
-          Left = 192
+        object lblIntPort: TLabel
+          AnchorSideLeft.Control = lblIntPasswd
+          AnchorSideTop.Control = edtPort
+          AnchorSideTop.Side = asrCenter
+          Left = 169
           Height = 17
           Top = 24
           Width = 34
           Caption = 'Port:'
-          ParentColor = False
         end
-        object Label14: TLabel
+        object lblIntUser: TLabel
+          AnchorSideLeft.Control = lblintProxy
+          AnchorSideTop.Control = edtUser
+          AnchorSideTop.Side = asrCenter
           Left = 7
           Height = 17
-          Top = 69
+          Top = 67
           Width = 35
           Caption = 'User:'
-          ParentColor = False
         end
-        object Label19: TLabel
-          Left = 160
+        object lblIntPasswd: TLabel
+          AnchorSideTop.Control = edtPasswd
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = edtPasswd
+          Left = 169
           Height = 17
-          Top = 69
-          Width = 69
+          Top = 67
+          Width = 70
+          Anchors = [akTop, akRight]
+          BorderSpacing.Right = 6
           Caption = 'Password:'
-          ParentColor = False
         end
         object edtProxy: TEdit
-          Left = 52
-          Height = 25
-          Top = 20
+          AnchorSideLeft.Control = lblintProxy
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = gbInternet
+          Left = 54
+          Height = 34
+          Top = 15
           Width = 100
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 15
           TabOrder = 0
         end
         object edtPort: TEdit
-          Left = 240
-          Height = 25
-          Top = 20
+          AnchorSideTop.Control = edtProxy
+          AnchorSideRight.Control = gbInternet
+          AnchorSideRight.Side = asrBottom
+          Left = 245
+          Height = 34
+          Top = 15
           Width = 88
+          Anchors = [akTop, akRight]
+          BorderSpacing.Right = 6
           TabOrder = 1
         end
         object edtUser: TEdit
-          Left = 52
-          Height = 25
-          Top = 64
+          AnchorSideLeft.Control = edtProxy
+          AnchorSideTop.Control = edtProxy
+          AnchorSideTop.Side = asrBottom
+          Left = 54
+          Height = 34
+          Top = 58
           Width = 100
+          BorderSpacing.Top = 9
           TabOrder = 2
         end
         object edtPasswd: TEdit
-          Left = 240
-          Height = 25
-          Top = 64
+          AnchorSideTop.Control = edtPort
+          AnchorSideTop.Side = asrBottom
+          AnchorSideRight.Control = edtPort
+          AnchorSideRight.Side = asrBottom
+          Left = 245
+          Height = 34
+          Top = 58
           Width = 88
+          Anchors = [akTop, akRight]
+          BorderSpacing.Top = 9
           TabOrder = 3
         end
       end
       object rgStatistics: TRadioGroup
-        Left = 359
+        AnchorSideLeft.Control = gbInternet
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = gbInternet
+        Left = 350
         Height = 72
         Top = 3
         Width = 136
         AutoFill = True
+        BorderSpacing.Left = 3
         Caption = ' Show statistics in '
         ChildSizing.LeftRightSpacing = 6
         ChildSizing.TopBottomSpacing = 6
@@ -125,8 +167,8 @@ object frmPreferences: TfrmPreferences
         ChildSizing.ShrinkVertical = crsScaleChilds
         ChildSizing.Layout = cclLeftToRightThenTopToBottom
         ChildSizing.ControlsPerLine = 1
-        ClientHeight = 46
-        ClientWidth = 130
+        ClientHeight = 54
+        ClientWidth = 134
         Items.Strings = (
           'MHz'
           'meters'
@@ -134,219 +176,389 @@ object frmPreferences: TfrmPreferences
         TabOrder = 1
       end
       object edtWebBrowser: TEdit
-        Left = 360
-        Height = 25
-        Top = 115
+        AnchorSideLeft.Control = lblWebBrowser
+        AnchorSideTop.Control = lblWebBrowser
+        AnchorSideTop.Side = asrBottom
+        Left = 350
+        Height = 34
+        Top = 98
         Width = 176
+        BorderSpacing.Top = 3
         OnClick = edtWebBrowserClick
         OnExit = edtWebBrowserExit
         TabOrder = 2
       end
       object chkNewDXCCTables: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = gbInternet
+        AnchorSideTop.Control = gbInternet
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 152
-        Width = 439
+        Top = 135
+        Width = 434
+        BorderSpacing.Top = 3
         Caption = 'Check for newer version of dxcc tables after program startup'
         TabOrder = 3
       end
       object chkShowDeleted: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = chkNewDXCCTables
+        AnchorSideTop.Control = chkNewDOKTables
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 224
-        Width = 265
+        Top = 204
+        Width = 262
         Caption = 'Show deleted countries in statistics'
         TabOrder = 4
       end
       object chkSunUTC: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = chkNewDXCCTables
+        AnchorSideTop.Control = chkShowDeleted
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 248
-        Width = 212
+        Top = 227
+        Width = 207
         Caption = 'Show sunrise/sunset in UTC'
         TabOrder = 5
       end
       object chkNewQSLTables: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = chkNewDXCCTables
+        AnchorSideTop.Control = chkNewDXCCTables
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 174
-        Width = 522
+        Top = 158
+        Width = 517
         Caption = 'Check for newer version of qsl managers database  after program startup'
         TabOrder = 6
       end
-      object GroupBox33: TGroupBox
-        Left = 14
-        Height = 147
-        Top = 379
+      object gbOffsets: TGroupBox
+        AnchorSideLeft.Control = gbInternet
+        AnchorSideTop.Control = lblQsoColorDate
+        AnchorSideTop.Side = asrBottom
+        Left = 6
+        Height = 195
+        Top = 327
         Width = 626
+        BorderSpacing.Top = 3
         Caption = ' Offsets '
-        ClientHeight = 121
-        ClientWidth = 620
+        ClientHeight = 177
+        ClientWidth = 624
         TabOrder = 7
-        object Label15: TLabel
-          Left = 15
+        object lblUtc: TLabel
+          AnchorSideLeft.Control = edtOffset
+          AnchorSideLeft.Side = asrCenter
+          AnchorSideBottom.Control = edtOffset
+          Left = 469
           Height = 17
-          Top = 50
-          Width = 28
+          Top = 3
+          Width = 27
+          Anchors = [akLeft, akBottom]
           Caption = 'UTC'
-          ParentColor = False
         end
-        object Label59: TLabel
-          Left = 352
+        object lblGrayline: TLabel
+          AnchorSideLeft.Control = LblTimes
+          AnchorSideTop.Control = chkSysUTC
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 17
-          Top = 10
-          Width = 56
-          Caption = 'Grayline'
-          ParentColor = False
+          Top = 64
+          Width = 58
+          BorderSpacing.Top = 15
+          Caption = 'Grayline:'
         end
-        object Label94: TLabel
-          Left = 72
+        object lblSunRiseSet: TLabel
+          AnchorSideLeft.Control = edtSunOffset
+          AnchorSideLeft.Side = asrCenter
+          AnchorSideBottom.Control = edtSunOffset
+          Left = 532
           Height = 17
-          Top = 50
-          Width = 81
+          Top = 3
+          Width = 79
+          Anchors = [akLeft, akBottom]
           Caption = 'Sun rise/set'
-          ParentColor = False
         end
         object edtOffset: TEdit
-          Left = 7
-          Height = 25
-          Top = 74
-          Width = 52
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = chkSysUTC
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = edtSunOffset
+          Left = 452
+          Height = 34
+          Top = 20
+          Width = 60
+          Anchors = [akTop, akRight]
+          BorderSpacing.Right = 30
           TabOrder = 0
           Text = '0'
         end
         object edtGrayLineOffset: TEdit
-          Left = 352
-          Height = 25
-          Top = 34
+          AnchorSideLeft.Control = lblGraylineHint
+          AnchorSideLeft.Side = asrCenter
+          AnchorSideTop.Control = lblGrayline
+          AnchorSideTop.Side = asrBottom
+          Left = 128
+          Height = 34
+          Top = 81
           Width = 50
           TabOrder = 1
           Text = '0'
         end
         object edtSunOffset: TEdit
-          Left = 74
-          Height = 25
-          Top = 74
-          Width = 50
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = edtOffset
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = gbOffsets
+          AnchorSideRight.Side = asrBottom
+          Left = 542
+          Height = 34
+          Top = 20
+          Width = 58
+          Anchors = [akTop, akRight]
+          BorderSpacing.Left = 6
+          BorderSpacing.Right = 24
           TabOrder = 2
           Text = '0'
         end
         object chkSysUTC: TCheckBox
-          Left = 7
+          AnchorSideLeft.Control = gbOffsets
+          AnchorSideTop.Control = LblTimes
+          AnchorSideTop.Side = asrBottom
+          Left = 3
           Height = 23
-          Top = 10
-          Width = 255
+          Top = 26
+          Width = 252
+          BorderSpacing.Left = 3
+          BorderSpacing.Top = 6
           Caption = 'get UTC time from computer time'
           OnClick = chkSysUTCClick
           TabOrder = 3
         end
-        object Label197: TLabel
-          Left = 248
+        object lblGraylineHint: TLabel
+          AnchorSideLeft.Control = LblTimes
+          AnchorSideTop.Control = edtGrayLineOffset
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 34
-          Top = 66
-          Width = 303
+          Top = 115
+          Width = 294
           Caption = 'Sometimes grayline is not accurate, you can '#10'enter the correction here (in hours, try -1.25)'
-          ParentColor = False
+        end
+        object LblTimes: TLabel
+          AnchorSideLeft.Control = gbOffsets
+          AnchorSideTop.Control = gbOffsets
+          Left = 6
+          Height = 17
+          Top = 3
+          Width = 37
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 3
+          Caption = 'Time:'
+        end
+        object edtGCStep: TEdit
+          AnchorSideTop.Control = edtGrayLineOffset
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = edtOffset
+          AnchorSideRight.Side = asrBottom
+          Left = 432
+          Height = 34
+          Top = 81
+          Width = 80
+          Anchors = [akTop, akRight]
+          OnExit = edtGCStepExit
+          TabOrder = 4
+        end
+        object edtGCPolarDivisor: TEdit
+          AnchorSideTop.Control = edtGrayLineOffset
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = lblSunRiseSet
+          AnchorSideRight.Side = asrBottom
+          Left = 531
+          Height = 34
+          Top = 81
+          Width = 80
+          Anchors = [akTop, akRight]
+          NumbersOnly = True
+          OnExit = edtGCPolarDivisorExit
+          TabOrder = 5
+        end
+        object lblGCStep: TLabel
+          AnchorSideLeft.Control = edtGCStep
+          AnchorSideLeft.Side = asrCenter
+          AnchorSideBottom.Control = edtGCStep
+          Left = 457
+          Height = 17
+          Top = 64
+          Width = 31
+          Anchors = [akLeft, akBottom]
+          Caption = 'Step'
+        end
+        object lblGCDivisor: TLabel
+          AnchorSideLeft.Control = edtGCPolarDivisor
+          AnchorSideLeft.Side = asrCenter
+          AnchorSideBottom.Control = edtGCPolarDivisor
+          Left = 548
+          Height = 17
+          Top = 64
+          Width = 47
+          Anchors = [akLeft, akBottom]
+          Caption = 'Divisor'
+        end
+        object lblGCHint: TLabel
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = edtGCPolarDivisor
+          AnchorSideTop.Side = asrBottom
+          AnchorSideRight.Control = edtGCPolarDivisor
+          AnchorSideRight.Side = asrBottom
+          Left = 309
+          Height = 51
+          Top = 115
+          Width = 302
+          Anchors = [akTop, akRight]
+          Caption = 'Great circle plotting setps in desimal degrees'#10'Step divisor is used in polar areas N and S  '#10'where distance/degree is smaller'
+        end
+        object lblGLOffset: TLabel
+          AnchorSideLeft.Control = edtGrayLineOffset
+          AnchorSideLeft.Side = asrCenter
+          AnchorSideBottom.Control = edtGrayLineOffset
+          Left = 132
+          Height = 17
+          Top = 64
+          Width = 43
+          Anchors = [akLeft, akBottom]
+          Caption = 'Offset'
         end
       end
       object chkShowMiles: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = chkNewDXCCTables
+        AnchorSideTop.Control = chkSunUTC
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 273
-        Width = 178
+        Top = 250
+        Width = 175
         Caption = 'Show distance in miles'
         TabOrder = 8
       end
       object btnCfgStorage: TButton
-        Left = 14
-        Height = 27
-        Top = 539
-        Width = 222
+        AnchorSideLeft.Control = gbOffsets
+        AnchorSideTop.Control = gbOffsets
+        AnchorSideTop.Side = asrBottom
+        Left = 6
+        Height = 33
+        Top = 528
+        Width = 220
         AutoSize = True
+        BorderSpacing.Top = 6
         Caption = 'Configuration storage settings'
         OnClick = btnCfgStorageClick
         TabOrder = 9
       end
       object chkQSOColor: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = chkNewDXCCTables
+        AnchorSideTop.Control = chkShowMiles
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 307
-        Width = 130
+        Top = 273
+        Width = 128
         Caption = 'QSO older than'
         TabOrder = 10
       end
       object edtQSOColorDate: TEdit
-        Left = 160
-        Height = 25
-        Top = 307
+        AnchorSideLeft.Control = chkQSOColor
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = chkQSOColor
+        Left = 137
+        Height = 34
+        Top = 273
         Width = 104
+        BorderSpacing.Left = 3
         TabOrder = 11
         Text = '2017-04-18'
       end
-      object Label46: TLabel
-        Left = 274
+      object lblDiffColor: TLabel
+        AnchorSideLeft.Control = edtQSOColorDate
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = edtQSOColorDate
+        Left = 244
         Height = 17
-        Top = 310
-        Width = 172
+        Top = 273
+        Width = 167
+        BorderSpacing.Left = 3
         Caption = 'show with different color'
-        ParentColor = False
       end
       object pnlQSOColor: TPanel
-        Left = 472
+        AnchorSideLeft.Control = lblDiffColor
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = lblDiffColor
+        Left = 414
         Height = 42
-        Top = 298
+        Top = 273
         Width = 106
+        BorderSpacing.Left = 3
         BevelInner = bvRaised
         TabOrder = 12
         OnClick = pnlQSOColorClick
       end
       object btnSelectQSOColor: TButton
-        Left = 587
-        Height = 27
-        Top = 307
-        Width = 56
+        AnchorSideLeft.Control = pnlQSOColor
+        AnchorSideLeft.Side = asrBottom
+        AnchorSideTop.Control = pnlQSOColor
+        AnchorSideTop.Side = asrCenter
+        Left = 532
+        Height = 33
+        Top = 278
+        Width = 57
         AutoSize = True
+        BorderSpacing.Left = 12
         Caption = 'Select'
         OnClick = btnSelectQSOColorClick
         TabOrder = 13
       end
-      object Label47: TLabel
-        Left = 160
+      object lblQsoColorDate: TLabel
+        AnchorSideLeft.Control = edtQSOColorDate
+        AnchorSideLeft.Side = asrCenter
+        AnchorSideTop.Control = edtQSOColorDate
+        AnchorSideTop.Side = asrBottom
+        Left = 140
         Height = 17
-        Top = 340
-        Width = 103
+        Top = 307
+        Width = 99
         Caption = '(YYYY-MM-DD)'
-        ParentColor = False
       end
       object chkNewDOKTables: TCheckBox
-        Left = 14
+        AnchorSideLeft.Control = chkNewDXCCTables
+        AnchorSideTop.Control = chkNewQSLTables
+        AnchorSideTop.Side = asrBottom
+        Left = 6
         Height = 23
-        Top = 197
-        Width = 464
+        Top = 181
+        Width = 458
         Caption = 'Check for newer version of DOK database  after program startup'
         TabOrder = 14
       end
     end
     object tabStation: TTabSheet
       Caption = 'Station'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object GroupBox5: TGroupBox
         Left = 16
         Height = 168
         Top = 16
         Width = 312
         Caption = 'General'
-        ClientHeight = 142
-        ClientWidth = 306
+        ClientHeight = 166
+        ClientWidth = 310
         TabOrder = 0
         object Label4: TLabel
           Left = 104
           Height = 17
           Top = 112
-          Width = 28
+          Width = 27
           Caption = 'Loc:'
-          ParentColor = False
         end
         object Label3: TLabel
           Left = 103
@@ -354,11 +566,10 @@ object frmPreferences: TfrmPreferences
           Top = 16
           Width = 29
           Caption = 'Call:'
-          ParentColor = False
         end
         object edtCall: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 11
           Width = 128
           CharCase = ecUppercase
@@ -370,11 +581,10 @@ object frmPreferences: TfrmPreferences
           Top = 48
           Width = 44
           Caption = 'Name:'
-          ParentColor = False
         end
         object edtName: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 43
           Width = 128
           TabOrder = 1
@@ -383,23 +593,23 @@ object frmPreferences: TfrmPreferences
           Left = 98
           Height = 17
           Top = 80
-          Width = 34
+          Width = 33
           Caption = 'QTH:'
-          ParentColor = False
         end
         object edtQTH: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 75
           Width = 128
           TabOrder = 2
         end
         object edtLoc: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 107
           Width = 128
           OnChange = edtLocChange
+          OnExit = edtLocExit
           TabOrder = 3
         end
       end
@@ -409,8 +619,8 @@ object frmPreferences: TfrmPreferences
         Top = 208
         Width = 312
         Caption = 'Contest Info'
-        ClientHeight = 170
-        ClientWidth = 306
+        ClientHeight = 194
+        ClientWidth = 310
         TabOrder = 1
         object Label10: TLabel
           Left = 20
@@ -418,11 +628,10 @@ object frmPreferences: TfrmPreferences
           Top = 45
           Width = 112
           Caption = 'Mailing Address:'
-          ParentColor = False
         end
         object edtMailingAddress: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 40
           Width = 128
           OnChange = edtLocChange
@@ -432,13 +641,12 @@ object frmPreferences: TfrmPreferences
           Left = 76
           Height = 17
           Top = 77
-          Width = 56
+          Width = 54
           Caption = 'ZIP City:'
-          ParentColor = False
         end
         object edtZipCity: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 72
           Width = 128
           OnChange = edtLocChange
@@ -448,13 +656,12 @@ object frmPreferences: TfrmPreferences
           Left = 86
           Height = 17
           Top = 109
-          Width = 46
+          Width = 45
           Caption = 'E-Mail:'
-          ParentColor = False
         end
         object edtEmail: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 104
           Width = 128
           OnChange = edtLocChange
@@ -464,13 +671,12 @@ object frmPreferences: TfrmPreferences
           Left = 8
           Height = 17
           Top = 141
-          Width = 124
+          Width = 122
           Caption = 'Club Membership:'
-          ParentColor = False
         end
         object edtClub: TEdit
           Left = 147
-          Height = 25
+          Height = 34
           Top = 136
           Width = 128
           OnChange = edtLocChange
@@ -480,9 +686,8 @@ object frmPreferences: TfrmPreferences
           Left = 8
           Height = 17
           Top = 8
-          Width = 149
+          Width = 146
           Caption = '(used for EDI exports)'
-          ParentColor = False
         end
       end
     end
@@ -491,19 +696,18 @@ object frmPreferences: TfrmPreferences
       AnchorSideBottom.Side = asrBottom
       Caption = 'New QSO'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object Label82: TLabel
         AnchorSideLeft.Control = edtRecetQSOs
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = edtRecetQSOs
         AnchorSideTop.Side = asrCenter
-        Left = 330
+        Left = 336
         Height = 17
         Top = 401
-        Width = 31
+        Width = 30
         BorderSpacing.Left = 5
         Caption = 'days'
-        ParentColor = False
       end
       object GroupBox1: TGroupBox
         AnchorSideLeft.Control = tabNewQSO
@@ -515,8 +719,8 @@ object frmPreferences: TfrmPreferences
         BorderSpacing.Left = 20
         BorderSpacing.Top = 10
         Caption = ' Default values '
-        ClientHeight = 134
-        ClientWidth = 594
+        ClientHeight = 158
+        ClientWidth = 598
         TabOrder = 0
         object Label5: TLabel
           AnchorSideLeft.Control = edtRST_S
@@ -528,7 +732,6 @@ object frmPreferences: TfrmPreferences
           Width = 40
           BorderSpacing.Top = 10
           Caption = 'RST_S'
-          ParentColor = False
         end
         object Label6: TLabel
           AnchorSideLeft.Control = edtRST_R
@@ -538,7 +741,6 @@ object frmPreferences: TfrmPreferences
           Top = 10
           Width = 41
           Caption = 'RST_R'
-          ParentColor = False
         end
         object Label7: TLabel
           AnchorSideLeft.Control = edtPWR
@@ -546,9 +748,8 @@ object frmPreferences: TfrmPreferences
           Left = 143
           Height = 17
           Top = 10
-          Width = 30
+          Width = 32
           Caption = 'PWR'
-          ParentColor = False
         end
         object Label8: TLabel
           AnchorSideLeft.Control = cmbFreq
@@ -556,9 +757,8 @@ object frmPreferences: TfrmPreferences
           Left = 263
           Height = 17
           Top = 10
-          Width = 35
+          Width = 36
           Caption = 'FREQ'
-          ParentColor = False
         end
         object Label9: TLabel
           AnchorSideLeft.Control = cmbMode
@@ -566,9 +766,8 @@ object frmPreferences: TfrmPreferences
           Left = 433
           Height = 17
           Top = 10
-          Width = 36
+          Width = 39
           Caption = 'Mode'
-          ParentColor = False
         end
         object Label11: TLabel
           AnchorSideLeft.Control = edtComments
@@ -576,12 +775,11 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Side = asrBottom
           Left = 5
           Height = 17
-          Top = 85
-          Width = 118
+          Top = 101
+          Width = 123
           Anchors = [akLeft, akBottom]
           BorderSpacing.Bottom = 40
           Caption = 'Comment for QSO'
-          ParentColor = False
         end
         object edtRST_S: TEdit
           AnchorSideLeft.Control = GroupBox1
@@ -626,7 +824,7 @@ object frmPreferences: TfrmPreferences
           Width = 100
           AutoSize = False
           BorderSpacing.Left = 70
-          ItemHeight = 17
+          ItemHeight = 0
           TabOrder = 3
         end
         object edtComments: TEdit
@@ -635,7 +833,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Side = asrBottom
           Left = 5
           Height = 34
-          Top = 103
+          Top = 119
           Width = 216
           Anchors = [akLeft, akBottom]
           BorderSpacing.Left = 5
@@ -652,7 +850,7 @@ object frmPreferences: TfrmPreferences
           Width = 100
           AutoSize = False
           BorderSpacing.Left = 40
-          ItemHeight = 17
+          ItemHeight = 0
           TabOrder = 5
         end
         object btnChangeDefFreq: TButton
@@ -689,7 +887,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 254
-        Width = 271
+        Width = 274
         BorderSpacing.Left = 20
         Caption = 'Use spacebar to move between fields'
         TabOrder = 1
@@ -701,7 +899,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 300
-        Width = 210
+        Width = 214
         BorderSpacing.Left = 20
         Caption = 'Refresh data after save QSO'
         TabOrder = 2
@@ -713,7 +911,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 277
-        Width = 387
+        Width = 391
         BorderSpacing.Left = 20
         Caption = 'Skip over mode and frequency when radio is connected'
         TabOrder = 3
@@ -725,7 +923,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 323
-        Width = 332
+        Width = 338
         BorderSpacing.Left = 20
         Caption = 'Enable auto search on HamQTH.com/QRZ.COM'
         TabOrder = 4
@@ -737,7 +935,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 398
-        Width = 244
+        Width = 250
         BorderSpacing.Left = 20
         Caption = 'Show recent QSO records for last '
         TabOrder = 5
@@ -747,7 +945,7 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = chkMvToRem
         AnchorSideTop.Side = asrBottom
-        Left = 269
+        Left = 275
         Height = 34
         Top = 392
         Width = 56
@@ -763,7 +961,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 346
-        Width = 281
+        Width = 288
         BorderSpacing.Left = 20
         Caption = 'Ignore HamQTH.com/QRZ.COM qsl info'
         TabOrder = 7
@@ -775,7 +973,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 369
-        Width = 576
+        Width = 578
         BorderSpacing.Left = 20
         Caption = 'If ''QSL via'' field contains other info than a call sign, move to ''Comment to QSO'' field'
         TabOrder = 8
@@ -787,7 +985,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 180
-        Width = 268
+        Width = 279
         BorderSpacing.Left = 20
         BorderSpacing.Top = 10
         Caption = 'Enable auto mark QSO QSL__S field as'
@@ -798,13 +996,13 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = chkAutoQSLS
         AnchorSideTop.Side = asrCenter
-        Left = 298
+        Left = 309
         Height = 27
         Top = 178
         Width = 74
         AutoSize = False
         BorderSpacing.Left = 10
-        ItemHeight = 17
+        ItemHeight = 0
         TabOrder = 10
       end
       object chkAutoDQSLS: TCheckBox
@@ -814,7 +1012,7 @@ object frmPreferences: TfrmPreferences
         Left = 40
         Height = 23
         Top = 208
-        Width = 414
+        Width = 415
         BorderSpacing.Left = 40
         BorderSpacing.Top = 3
         Caption = 'Mark only QSO which are new country, new band country ...'
@@ -827,7 +1025,7 @@ object frmPreferences: TfrmPreferences
         Left = 40
         Height = 23
         Top = 231
-        Width = 384
+        Width = 396
         BorderSpacing.Left = 40
         Caption = 'Mark only the first QSO, first band QSO, first mode QSO'
         TabOrder = 12
@@ -839,7 +1037,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 426
-        Width = 458
+        Width = 465
         BorderSpacing.Left = 20
         Caption = 'In previous QSO list show also QSO with call/p, call/m, W6/call etc.'
         TabOrder = 13
@@ -863,7 +1061,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 472
-        Width = 419
+        Width = 427
         BorderSpacing.Left = 20
         Caption = 'Always overwrite info from previous QSO with callbook data'
         TabOrder = 15
@@ -875,7 +1073,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 518
-        Width = 239
+        Width = 245
         BorderSpacing.Left = 20
         Caption = 'Capitalise first letter in QTH field'
         TabOrder = 16
@@ -887,7 +1085,7 @@ object frmPreferences: TfrmPreferences
         Left = 40
         Height = 23
         Top = 495
-        Width = 405
+        Width = 403
         BorderSpacing.Left = 40
         Caption = 'Always overwrite only CQ, ITU zones, county and US state'
         TabOrder = 17
@@ -899,7 +1097,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 541
-        Width = 252
+        Width = 259
         BorderSpacing.Left = 20
         Caption = 'Fill Award field from previous QSO '
         TabOrder = 18
@@ -911,7 +1109,7 @@ object frmPreferences: TfrmPreferences
         Left = 20
         Height = 23
         Top = 564
-        Width = 168
+        Width = 171
         BorderSpacing.Left = 20
         Caption = 'Enable satellite mode'
         TabOrder = 19
@@ -921,10 +1119,10 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = Label82
         AnchorSideTop.Side = asrCenter
-        Left = 366
+        Left = 371
         Height = 23
         Top = 398
-        Width = 345
+        Width = 348
         BorderSpacing.Left = 5
         Caption = 'instead of recent, show QSOs B4 with logged call'
         TabOrder = 20
@@ -935,24 +1133,46 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrBottom
         Left = 20
         Height = 23
-        Top = 578
-        Width = 286
+        Top = 587
+        Width = 283
         BorderSpacing.Left = 20
         Caption = 'Upload SAT info to AMSAT status page'
         TabOrder = 21
       end
+      object lblUsrBtn: TLabel
+        AnchorSideLeft.Control = tabNewQSO
+        AnchorSideTop.Control = chkUpdateAMSATstatus
+        AnchorSideTop.Side = asrBottom
+        Left = 40
+        Height = 17
+        Top = 610
+        Width = 542
+        BorderSpacing.Left = 40
+        Caption = 'User defined web button. Macros: $CALL, $BAND, $FREQ, $MODE, $LOC, $MYLOC'
+      end
+      object edtUsrBtn: TEdit
+        AnchorSideLeft.Control = tabNewQSO
+        AnchorSideTop.Control = lblUsrBtn
+        AnchorSideTop.Side = asrBottom
+        Left = 20
+        Height = 34
+        Top = 627
+        Width = 548
+        BorderSpacing.Left = 20
+        TabOrder = 22
+      end
     end
     object tabVisibleColumns: TTabSheet
       Caption = 'Visible columns'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object chkDate: TCheckBox
         AnchorSideLeft.Control = tabVisibleColumns
         AnchorSideTop.Control = tabVisibleColumns
         Left = 18
         Height = 23
         Top = 6
-        Width = 57
+        Width = 58
         BorderSpacing.Left = 18
         BorderSpacing.Top = 6
         Caption = 'Date'
@@ -977,7 +1197,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 58
-        Width = 80
+        Width = 82
         BorderSpacing.Top = 3
         Caption = 'Time off'
         TabOrder = 2
@@ -1001,7 +1221,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 110
-        Width = 62
+        Width = 65
         BorderSpacing.Top = 3
         Caption = 'Mode'
         TabOrder = 4
@@ -1013,7 +1233,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 136
-        Width = 54
+        Width = 56
         BorderSpacing.Top = 3
         Caption = 'Freq'
         TabOrder = 5
@@ -1025,7 +1245,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 266
-        Width = 83
+        Width = 85
         BorderSpacing.Top = 3
         Caption = 'QSL sent'
         TabOrder = 6
@@ -1037,7 +1257,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 292
-        Width = 111
+        Width = 113
         BorderSpacing.Top = 3
         Caption = 'QSL received'
         TabOrder = 7
@@ -1073,7 +1293,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 214
-        Width = 65
+        Width = 66
         BorderSpacing.Top = 3
         Caption = 'Name'
         TabOrder = 10
@@ -1085,7 +1305,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 240
-        Width = 54
+        Width = 55
         BorderSpacing.Top = 3
         Caption = 'QTH'
         TabOrder = 11
@@ -1096,7 +1316,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 6
-        Width = 113
+        Width = 115
         BorderSpacing.Left = 145
         Caption = 'QSL manager'
         TabOrder = 12
@@ -1108,7 +1328,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 32
-        Width = 74
+        Width = 78
         BorderSpacing.Top = 3
         Caption = 'Locator'
         TabOrder = 13
@@ -1120,7 +1340,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 58
-        Width = 95
+        Width = 98
         BorderSpacing.Top = 3
         Caption = 'My locator'
         TabOrder = 14
@@ -1132,7 +1352,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 133
-        Width = 56
+        Width = 58
         BorderSpacing.Top = 3
         Caption = 'IOTA'
         TabOrder = 15
@@ -1144,7 +1364,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 159
-        Width = 66
+        Width = 69
         BorderSpacing.Top = 3
         Caption = 'Award'
         TabOrder = 16
@@ -1156,7 +1376,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 185
-        Width = 72
+        Width = 73
         BorderSpacing.Top = 3
         Caption = 'County'
         TabOrder = 17
@@ -1168,7 +1388,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 211
-        Width = 66
+        Width = 68
         BorderSpacing.Top = 3
         Caption = 'Power'
         TabOrder = 18
@@ -1180,7 +1400,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 237
-        Width = 62
+        Width = 63
         BorderSpacing.Top = 3
         Caption = 'DXCC'
         TabOrder = 19
@@ -1192,7 +1412,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 263
-        Width = 139
+        Width = 143
         BorderSpacing.Top = 3
         Caption = 'Comment to QSO'
         TabOrder = 20
@@ -1204,7 +1424,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 289
-        Width = 56
+        Width = 57
         BorderSpacing.Top = 3
         Caption = 'WAZ'
         TabOrder = 21
@@ -1228,7 +1448,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 341
-        Width = 60
+        Width = 62
         BorderSpacing.Top = 3
         Caption = 'State'
         TabOrder = 23
@@ -1239,7 +1459,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 6
-        Width = 159
+        Width = 164
         BorderSpacing.Left = 145
         Caption = 'LoTW QSL send date'
         TabOrder = 24
@@ -1251,7 +1471,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 32
-        Width = 184
+        Width = 189
         BorderSpacing.Top = 3
         Caption = 'LoTW QSL received date'
         TabOrder = 25
@@ -1263,7 +1483,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 58
-        Width = 123
+        Width = 127
         BorderSpacing.Top = 3
         Caption = 'LoTW QSL sent'
         TabOrder = 26
@@ -1275,7 +1495,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 84
-        Width = 151
+        Width = 155
         BorderSpacing.Top = 3
         Caption = 'LoTW QSL received'
         TabOrder = 27
@@ -1287,7 +1507,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 110
-        Width = 89
+        Width = 92
         BorderSpacing.Top = 3
         Caption = 'Continent'
         TabOrder = 28
@@ -1299,7 +1519,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 136
-        Width = 116
+        Width = 119
         BorderSpacing.Top = 3
         Caption = 'QSL sent date'
         TabOrder = 29
@@ -1311,7 +1531,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 162
-        Width = 144
+        Width = 147
         BorderSpacing.Top = 3
         Caption = 'QSL received date'
         TabOrder = 30
@@ -1323,7 +1543,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 188
-        Width = 91
+        Width = 93
         BorderSpacing.Top = 3
         Caption = 'eQSL sent'
         TabOrder = 31
@@ -1335,7 +1555,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 214
-        Width = 124
+        Width = 127
         BorderSpacing.Top = 3
         Caption = 'eQSL sent date'
         TabOrder = 32
@@ -1347,7 +1567,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 240
-        Width = 119
+        Width = 121
         BorderSpacing.Top = 3
         Caption = 'eQSL received'
         TabOrder = 33
@@ -1359,7 +1579,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 266
-        Width = 152
+        Width = 155
         BorderSpacing.Top = 3
         Caption = 'eQSL received date'
         TabOrder = 34
@@ -1371,7 +1591,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 292
-        Width = 195
+        Width = 200
         BorderSpacing.Top = 3
         Caption = 'Received QSL,LoTW,eQSL '
         TabOrder = 35
@@ -1383,10 +1603,9 @@ object frmPreferences: TfrmPreferences
         Left = 329
         Height = 17
         Top = 315
-        Width = 169
+        Width = 166
         BorderSpacing.Left = 21
         Caption = '(all values in one column)'
-        ParentColor = False
       end
       object chkCountry: TCheckBox
         AnchorSideLeft.Control = chkDate
@@ -1395,7 +1614,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 318
-        Width = 118
+        Width = 119
         BorderSpacing.Top = 3
         Caption = 'Country name'
         TabOrder = 36
@@ -1407,7 +1626,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 344
-        Width = 104
+        Width = 110
         BorderSpacing.Top = 3
         Caption = 'Propagation'
         TabOrder = 37
@@ -1419,7 +1638,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 367
-        Width = 121
+        Width = 122
         BorderSpacing.Top = 3
         Caption = 'Satellite name'
         TabOrder = 38
@@ -1431,7 +1650,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 393
-        Width = 113
+        Width = 115
         BorderSpacing.Top = 3
         Caption = 'RX frequency'
         TabOrder = 39
@@ -1443,7 +1662,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 344
-        Width = 117
+        Width = 119
         BorderSpacing.Top = 29
         Caption = 'Contest name'
         TabOrder = 40
@@ -1455,7 +1674,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 370
-        Width = 114
+        Width = 116
         BorderSpacing.Top = 3
         Caption = 'SerialNR sent'
         TabOrder = 41
@@ -1467,7 +1686,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 396
-        Width = 114
+        Width = 116
         BorderSpacing.Top = 3
         Caption = 'SerialNR rcvd'
         TabOrder = 42
@@ -1479,7 +1698,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 370
-        Width = 118
+        Width = 121
         BorderSpacing.Top = 3
         Caption = 'ContMSG sent'
         TabOrder = 43
@@ -1491,7 +1710,7 @@ object frmPreferences: TfrmPreferences
         Left = 308
         Height = 23
         Top = 396
-        Width = 118
+        Width = 121
         BorderSpacing.Top = 3
         Caption = 'ContMSG rcvd'
         TabOrder = 44
@@ -1509,10 +1728,13 @@ object frmPreferences: TfrmPreferences
         TabOrder = 45
       end
       object chkDarcDok: TCheckBox
+        AnchorSideTop.Control = chkSRX_str
+        AnchorSideTop.Side = asrBottom
         Left = 307
         Height = 23
-        Top = 421
-        Width = 88
+        Top = 424
+        Width = 97
+        BorderSpacing.Top = 5
         Caption = 'DARC DOK'
         TabOrder = 46
       end
@@ -1523,7 +1745,7 @@ object frmPreferences: TfrmPreferences
         Left = 163
         Height = 23
         Top = 81
-        Width = 83
+        Width = 89
         Caption = 'Operator'
         TabOrder = 47
       end
@@ -1531,12 +1753,12 @@ object frmPreferences: TfrmPreferences
     object tabBands: TTabSheet
       Caption = 'Bands'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object cb136kHz: TCheckBox
         Left = 14
         Height = 23
         Top = 19
-        Width = 79
+        Width = 78
         Caption = '136 kHz'
         TabOrder = 0
       end
@@ -1672,7 +1894,7 @@ object frmPreferences: TfrmPreferences
         Left = 310
         Height = 23
         Top = 67
-        Width = 73
+        Width = 72
         Caption = '10 GHz'
         TabOrder = 17
       end
@@ -1680,7 +1902,7 @@ object frmPreferences: TfrmPreferences
         Left = 310
         Height = 23
         Top = 99
-        Width = 73
+        Width = 72
         Caption = '24 GHz'
         TabOrder = 18
       end
@@ -1688,7 +1910,7 @@ object frmPreferences: TfrmPreferences
         Left = 310
         Height = 23
         Top = 131
-        Width = 73
+        Width = 72
         Caption = '47 GHz'
         TabOrder = 19
       end
@@ -1696,27 +1918,51 @@ object frmPreferences: TfrmPreferences
         Left = 310
         Height = 23
         Top = 163
-        Width = 73
+        Width = 72
         Caption = '76 GHz'
         TabOrder = 20
       end
+      object cb122GHz: TCheckBox
+        Left = 310
+        Height = 23
+        Top = 195
+        Width = 80
+        Caption = '122 GHz'
+        TabOrder = 21
+      end
+      object cb134GHz: TCheckBox
+        Left = 310
+        Height = 23
+        Top = 227
+        Width = 80
+        Caption = '134 GHz'
+        TabOrder = 22
+      end
+      object cb241GHz: TCheckBox
+        Left = 310
+        Height = 23
+        Top = 259
+        Width = 80
+        Caption = '241 GHz'
+        TabOrder = 23
+      end
       object btnFrequencies: TButton
         Left = 312
         Height = 25
-        Top = 206
+        Top = 362
         Width = 94
         BorderSpacing.InnerBorder = 4
         Caption = 'Frequencies'
         OnClick = btnFrequenciesClick
-        TabOrder = 21
+        TabOrder = 24
       end
       object cb4m: TCheckBox
         Left = 166
         Height = 23
         Top = 98
-        Width = 71
+        Width = 72
         Caption = '70MHz'
-        TabOrder = 22
+        TabOrder = 25
       end
       object cb60m: TCheckBox
         Left = 14
@@ -1724,7 +1970,7 @@ object frmPreferences: TfrmPreferences
         Top = 131
         Width = 67
         Caption = '5 MHz'
-        TabOrder = 23
+        TabOrder = 26
       end
       object cb125m: TCheckBox
         Left = 166
@@ -1732,7 +1978,7 @@ object frmPreferences: TfrmPreferences
         Top = 162
         Width = 83
         Caption = '220 MHz'
-        TabOrder = 24
+        TabOrder = 27
       end
       object cb30cm: TCheckBox
         Left = 166
@@ -1740,21 +1986,21 @@ object frmPreferences: TfrmPreferences
         Top = 227
         Width = 83
         Caption = '900 MHz'
-        TabOrder = 25
+        TabOrder = 28
       end
       object cb472kHz: TCheckBox
         Left = 166
         Height = 23
         Top = 19
-        Width = 79
+        Width = 78
         Caption = '472 kHz'
-        TabOrder = 26
+        TabOrder = 29
       end
     end
     object tabTRXcontrol: TTabSheet
       Caption = 'TRX control'
-      ClientHeight = 650
-      ClientWidth = 700
+      ClientHeight = 672
+      ClientWidth = 836
       object btnChangeDefaultFreq: TButton
         AnchorSideTop.Control = pgTRXControl
         AnchorSideTop.Side = asrBottom
@@ -1794,30 +2040,30 @@ object frmPreferences: TfrmPreferences
         BorderSpacing.Left = 6
         BorderSpacing.Top = 4
         Caption = ' rigctld '
-        ClientHeight = 70
+        ClientHeight = 86
         ClientWidth = 655
         TabOrder = 2
         object lblRigctdPath: TLabel
           AnchorSideLeft.Control = grbRigctldPath
           AnchorSideTop.Control = grbRigctldPath
           Left = 6
-          Height = 15
+          Height = 17
           Top = 6
-          Width = 139
+          Width = 145
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Path to rigctld binary:'
-          ParentColor = False
         end
         object edtRigCtldPath: TEdit
           AnchorSideLeft.Control = lblRigctdPath
           AnchorSideTop.Control = lblRigctdPath
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 33
-          Top = 27
+          Height = 34
+          Top = 29
           Width = 503
           BorderSpacing.Top = 6
+          OnChange = TRXParamsChange
           TabOrder = 0
         end
       end
@@ -1838,7 +2084,7 @@ object frmPreferences: TfrmPreferences
         TabOrder = 3
         object tabTRX1: TTabSheet
           Caption = 'Radio one'
-          ClientHeight = 435
+          ClientHeight = 462
           ClientWidth = 647
           object grbRadio1: TGroupBox
             AnchorSideLeft.Control = tabTRX1
@@ -1848,7 +2094,7 @@ object frmPreferences: TfrmPreferences
             AnchorSideBottom.Control = tabTRX1
             AnchorSideBottom.Side = asrBottom
             Left = 3
-            Height = 429
+            Height = 456
             Top = 3
             Width = 641
             Anchors = [akTop, akLeft, akRight, akBottom]
@@ -1857,7 +2103,7 @@ object frmPreferences: TfrmPreferences
             BorderSpacing.Right = 3
             BorderSpacing.Bottom = 3
             Caption = ' Radio one, desc.:'
-            ClientHeight = 411
+            ClientHeight = 438
             ClientWidth = 639
             TabOrder = 0
             object lblDeviceR1: TLabel
@@ -1865,57 +2111,54 @@ object frmPreferences: TfrmPreferences
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = lblModelR1
               Left = 226
-              Height = 15
-              Top = 36
-              Width = 157
+              Height = 17
+              Top = 37
+              Width = 159
               BorderSpacing.Left = 6
               Caption = 'Device (e.g. /dev/ttyS0):'
-              ParentColor = False
             end
             object lblModelR1: TLabel
               AnchorSideLeft.Control = grbRadio1
               AnchorSideTop.Control = edtRadio1Name
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 15
-              Top = 36
-              Width = 72
+              Height = 17
+              Top = 37
+              Width = 73
               BorderSpacing.Left = 6
               BorderSpacing.Top = 3
               Caption = 'RIG model:'
-              ParentColor = False
             end
             object lblPollR1: TLabel
               AnchorSideLeft.Control = edtR1Host
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = lblDeviceR1
-              Left = 430
-              Height = 15
-              Top = 36
-              Width = 58
+              Left = 432
+              Height = 17
+              Top = 37
+              Width = 61
               Caption = 'Poll rate:'
-              ParentColor = False
             end
             object edtR1Device: TEdit
               AnchorSideLeft.Control = lblDeviceR1
               AnchorSideTop.Control = lblDeviceR1
               AnchorSideTop.Side = asrBottom
               Left = 226
-              Height = 33
-              Top = 51
+              Height = 34
+              Top = 54
               Width = 173
-              OnChange = edtRadio1NameChange
+              OnChange = TRXParamsChange
               TabOrder = 0
             end
             object edtPoll1: TEdit
               AnchorSideLeft.Control = lblPollR1
               AnchorSideTop.Control = lblPollR1
               AnchorSideTop.Side = asrBottom
-              Left = 430
-              Height = 33
-              Top = 51
+              Left = 432
+              Height = 34
+              Top = 54
               Width = 80
-              OnChange = edtRadio1NameChange
+              OnChange = TRXParamsChange
               OnExit = edtPoll1Exit
               TabOrder = 1
             end
@@ -1925,11 +2168,11 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Control = lblExtra
               Left = 273
               Height = 23
-              Top = 87
-              Width = 185
+              Top = 91
+              Width = 186
               BorderSpacing.Left = 12
               Caption = 'Use CWR instead of CW '
-              OnChange = edtRadio2Change
+              OnChange = TRXParamsChange
               TabOrder = 2
             end
             object chkR1RunRigCtld: TCheckBox
@@ -1938,9 +2181,10 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Side = asrBottom
               Left = 273
               Height = 23
-              Top = 110
-              Width = 235
+              Top = 114
+              Width = 241
               Caption = 'Run rigctld when program starts'
+              OnChange = TRXParamsChange
               TabOrder = 3
             end
             object lblExtra: TLabel
@@ -1948,45 +2192,43 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Control = cmbModelRig1
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 15
-              Top = 87
-              Width = 209
+              Height = 17
+              Top = 91
+              Width = 212
               BorderSpacing.Top = 3
               Caption = 'Extra command line arguments:'
-              ParentColor = False
             end
             object edtR1RigCtldArgs: TEdit
               AnchorSideLeft.Control = lblModelR1
               AnchorSideTop.Control = lblExtra
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 33
-              Top = 102
+              Height = 34
+              Top = 108
               Width = 255
-              OnChange = edtR1RigCtldArgsChange
+              OnChange = TRXParamsChange
               TabOrder = 4
             end
             object lblPortR1: TLabel
               AnchorSideLeft.Control = edtPoll1
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = lblPollR1
-              Left = 522
-              Height = 15
-              Top = 36
-              Width = 84
+              Left = 524
+              Height = 17
+              Top = 37
+              Width = 89
               BorderSpacing.Left = 12
               Caption = 'Port number:'
-              ParentColor = False
             end
             object edtR1RigCtldPort: TEdit
               AnchorSideLeft.Control = lblPortR1
               AnchorSideTop.Control = lblPortR1
               AnchorSideTop.Side = asrBottom
-              Left = 522
-              Height = 33
-              Top = 51
+              Left = 524
+              Height = 34
+              Top = 54
               Width = 80
-              OnChange = edtR1RigCtldPortChange
+              OnChange = TRXParamsChange
               TabOrder = 5
             end
             object grbSerialR1: TGroupBox
@@ -1995,66 +2237,61 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Side = asrBottom
               Left = 6
               Height = 148
-              Top = 138
+              Top = 145
               Width = 511
               BorderSpacing.Top = 3
               Caption = 'Radio one serial parameters'
-              ClientHeight = 130
+              ClientHeight = 146
               ClientWidth = 509
               TabOrder = 6
               object lblSerialR1Spd: TLabel
                 AnchorSideLeft.Control = grbSerialR1
                 AnchorSideTop.Control = grbSerialR1
                 Left = 6
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 84
+                Width = 86
                 BorderSpacing.Left = 6
                 BorderSpacing.Top = 6
                 Caption = 'Serial speed:'
-                ParentColor = False
               end
               object lblserialR1DataBits: TLabel
                 AnchorSideLeft.Control = cmbDataBitsR1
                 AnchorSideTop.Control = lblSerialR1Spd
                 Left = 125
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 59
+                Width = 61
                 Caption = 'Data bits'
-                ParentColor = False
               end
               object lblSerialR1Stop: TLabel
                 AnchorSideLeft.Control = cmbStopBitsR1
                 AnchorSideTop.Control = lblSerialR1Spd
                 Left = 244
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 57
+                Width = 61
                 Caption = 'Stop bits'
-                ParentColor = False
               end
               object lblSerialR1Hand: TLabel
                 AnchorSideLeft.Control = lblSerialR1Spd
                 AnchorSideTop.Control = cmbSpeedR1
                 AnchorSideTop.Side = asrBottom
                 Left = 6
-                Height = 15
-                Top = 68
-                Width = 72
+                Height = 17
+                Top = 70
+                Width = 73
                 BorderSpacing.Top = 6
                 Caption = 'Handshake'
-                ParentColor = False
               end
               object lblSerialR1Parity: TLabel
                 AnchorSideLeft.Control = cmbParityR1
                 AnchorSideTop.Control = lblSerialR1Spd
                 Left = 356
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 38
+                Width = 40
                 Caption = 'Parity'
-                ParentColor = False
               end
               object cmbHanshakeR1: TComboBox
                 AnchorSideLeft.Control = lblSerialR1Spd
@@ -2062,7 +2299,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 Left = 6
                 Height = 29
-                Top = 89
+                Top = 93
                 Width = 107
                 BorderSpacing.Top = 6
                 ItemHeight = 0
@@ -2073,7 +2310,7 @@ object frmPreferences: TfrmPreferences
                   'XON/XOFF'
                   'HARDWARE'
                 )
-                OnChange = cmbHanshakeR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 0
                 Text = 'default'
@@ -2084,7 +2321,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbSpeedR1
                 Left = 356
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 109
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2097,7 +2334,7 @@ object frmPreferences: TfrmPreferences
                   'Mark'
                   'Space'
                 )
-                OnChange = cmbParityR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 1
                 Text = 'default'
@@ -2108,7 +2345,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbSpeedR1
                 Left = 125
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 107
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2121,7 +2358,7 @@ object frmPreferences: TfrmPreferences
                   '8'
                   '9'
                 )
-                OnChange = cmbDataBitsR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 2
                 Text = 'default'
@@ -2132,7 +2369,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbSpeedR1
                 Left = 244
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 100
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2144,7 +2381,7 @@ object frmPreferences: TfrmPreferences
                   '2'
                   '3'
                 )
-                OnChange = cmbStopBitsR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 3
                 Text = 'default'
@@ -2155,7 +2392,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 Left = 6
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 107
                 BorderSpacing.Top = 12
                 ItemHeight = 0
@@ -2172,7 +2409,7 @@ object frmPreferences: TfrmPreferences
                   '57600'
                   '115200'
                 )
-                OnChange = cmbSpeedR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 4
                 Text = 'default'
@@ -2183,7 +2420,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbHanshakeR1
                 Left = 125
                 Height = 29
-                Top = 89
+                Top = 93
                 Width = 107
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2194,7 +2431,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbDTRR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 5
                 Text = 'default'
@@ -2203,11 +2440,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = cmbDTRR1
                 AnchorSideTop.Control = lblSerialR1Hand
                 Left = 125
-                Height = 15
-                Top = 68
+                Height = 17
+                Top = 70
                 Width = 27
                 Caption = 'DTR'
-                ParentColor = False
               end
               object cmbRTSR1: TComboBox
                 AnchorSideLeft.Control = cmbDTRR1
@@ -2215,7 +2451,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbDTRR1
                 Left = 244
                 Height = 29
-                Top = 89
+                Top = 93
                 Width = 100
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2226,7 +2462,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbRTSR1Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 6
                 Text = 'default'
@@ -2235,11 +2471,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = cmbRTSR1
                 AnchorSideTop.Control = lblSerialR1Hand
                 Left = 244
-                Height = 15
-                Top = 68
+                Height = 17
+                Top = 70
                 Width = 25
                 Caption = 'RTS'
-                ParentColor = False
               end
             end
             object cmbModelRig1: TComboBox
@@ -2247,10 +2482,11 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Control = lblModelR1
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 33
-              Top = 51
+              Height = 34
+              Top = 54
               Width = 200
               ItemHeight = 0
+              OnChange = cmbModelRig1Change
               TabOrder = 7
             end
             object lblHost: TLabel
@@ -2258,33 +2494,33 @@ object frmPreferences: TfrmPreferences
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = edtRadio1Name
               Left = 260
-              Height = 15
+              Height = 17
               Top = 0
-              Width = 30
+              Width = 32
               BorderSpacing.Left = 40
               Caption = 'Host'
-              ParentColor = False
             end
             object edtRadio1Name: TEdit
               AnchorSideLeft.Control = grbRadio1
               AnchorSideTop.Control = grbRadio1
               Left = 126
-              Height = 33
+              Height = 34
               Top = 0
               Width = 94
               BorderSpacing.Left = 126
-              OnChange = edtRadio1NameChange
+              OnChange = TRXParamsChange
               TabOrder = 8
             end
             object edtR1Host: TEdit
               AnchorSideLeft.Control = lblHost
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = grbRadio1
-              Left = 302
-              Height = 33
+              Left = 304
+              Height = 34
               Top = 0
               Width = 128
               BorderSpacing.Left = 12
+              OnChange = TRXParamsChange
               TabOrder = 9
             end
             object grpUsrCmds: TGroupBox
@@ -2296,8 +2532,8 @@ object frmPreferences: TfrmPreferences
               AnchorSideBottom.Control = grbRadio1
               AnchorSideBottom.Side = asrBottom
               Left = 6
-              Height = 116
-              Top = 289
+              Height = 136
+              Top = 296
               Width = 627
               Anchors = [akTop, akLeft, akRight, akBottom]
               BorderSpacing.Left = 6
@@ -2305,7 +2541,7 @@ object frmPreferences: TfrmPreferences
               BorderSpacing.Right = 6
               BorderSpacing.Bottom = 6
               Caption = 'User defined TRX control buttons'
-              ClientHeight = 98
+              ClientHeight = 118
               ClientWidth = 625
               TabOrder = 10
               object lblUsr1R1: TLabel
@@ -2313,35 +2549,32 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = edtUsr1R1
                 AnchorSideTop.Side = asrCenter
                 Left = 3
-                Height = 15
+                Height = 17
                 Top = 9
-                Width = 30
+                Width = 31
                 BorderSpacing.Left = 3
                 BorderSpacing.Top = 6
                 Caption = 'Usr1'
-                ParentColor = False
               end
               object lblUsr2R1: TLabel
                 AnchorSideLeft.Control = lblUsr1R1
                 AnchorSideTop.Control = edtUsr2R1
                 AnchorSideTop.Side = asrCenter
                 Left = 3
-                Height = 15
-                Top = 42
-                Width = 30
+                Height = 17
+                Top = 43
+                Width = 31
                 Caption = 'Usr2'
-                ParentColor = False
               end
               object lblUsr3R1: TLabel
                 AnchorSideLeft.Control = lblUsr1R1
                 AnchorSideTop.Control = edtUsr3R1
                 AnchorSideTop.Side = asrCenter
                 Left = 3
-                Height = 15
-                Top = 75
-                Width = 30
+                Height = 17
+                Top = 77
+                Width = 31
                 Caption = 'Usr3'
-                ParentColor = False
               end
               object edtUsr1R1: TEdit
                 AnchorSideLeft.Control = edtUsr1R1Name
@@ -2349,10 +2582,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = grpUsrCmds
                 AnchorSideRight.Control = grpUsrCmds
                 AnchorSideRight.Side = asrBottom
-                Left = 102
-                Height = 33
+                Left = 103
+                Height = 34
                 Top = 0
-                Width = 511
+                Width = 510
                 Anchors = [akTop, akLeft, akRight]
                 BorderSpacing.Left = 6
                 BorderSpacing.Right = 12
@@ -2364,10 +2597,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 AnchorSideRight.Control = edtUsr1R1
                 AnchorSideRight.Side = asrBottom
-                Left = 102
-                Height = 33
-                Top = 33
-                Width = 511
+                Left = 103
+                Height = 34
+                Top = 34
+                Width = 510
                 Anchors = [akTop, akLeft, akRight]
                 TabOrder = 1
               end
@@ -2377,10 +2610,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 AnchorSideRight.Control = edtUsr2R1
                 AnchorSideRight.Side = asrBottom
-                Left = 102
-                Height = 33
-                Top = 66
-                Width = 511
+                Left = 103
+                Height = 34
+                Top = 68
+                Width = 510
                 Anchors = [akTop, akLeft, akRight]
                 TabOrder = 2
               end
@@ -2388,8 +2621,8 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = lblUsr1R1
                 AnchorSideLeft.Side = asrBottom
                 AnchorSideTop.Control = grpUsrCmds
-                Left = 39
-                Height = 33
+                Left = 40
+                Height = 34
                 Top = 0
                 Width = 57
                 BorderSpacing.Left = 6
@@ -2400,9 +2633,9 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = edtUsr1R1Name
                 AnchorSideTop.Control = edtUsr1R1Name
                 AnchorSideTop.Side = asrBottom
-                Left = 39
-                Height = 33
-                Top = 33
+                Left = 40
+                Height = 34
+                Top = 34
                 Width = 57
                 MaxLength = 4
                 TabOrder = 4
@@ -2411,19 +2644,33 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = edtUsr1R1Name
                 AnchorSideTop.Control = edtUsr2R1Name
                 AnchorSideTop.Side = asrBottom
-                Left = 39
-                Height = 33
-                Top = 66
+                Left = 40
+                Height = 34
+                Top = 68
                 Width = 57
                 MaxLength = 4
                 TabOrder = 5
               end
             end
+            object chkR1Vfo: TCheckBox
+              AnchorSideLeft.Control = edtR1RigCtldPort
+              AnchorSideTop.Control = chkR1SendCWR
+              AnchorSideTop.Side = asrCenter
+              Left = 524
+              Height = 23
+              Top = 91
+              Width = 105
+              Caption = 'Use \chkvfo'
+              Checked = True
+              OnChange = TRXParamsChange
+              State = cbChecked
+              TabOrder = 11
+            end
           end
         end
         object tabTRX2: TTabSheet
           Caption = 'Radio two'
-          ClientHeight = 435
+          ClientHeight = 462
           ClientWidth = 647
           object grbRadio2: TGroupBox
             AnchorSideLeft.Control = tabTRX2
@@ -2433,7 +2680,7 @@ object frmPreferences: TfrmPreferences
             AnchorSideBottom.Control = tabTRX2
             AnchorSideBottom.Side = asrBottom
             Left = 3
-            Height = 429
+            Height = 456
             Top = 3
             Width = 641
             Anchors = [akTop, akLeft, akRight, akBottom]
@@ -2442,7 +2689,7 @@ object frmPreferences: TfrmPreferences
             BorderSpacing.Right = 3
             BorderSpacing.Bottom = 3
             Caption = ' Radio two, desc.:'
-            ClientHeight = 411
+            ClientHeight = 438
             ClientWidth = 639
             TabOrder = 0
             object lblDevieR2: TLabel
@@ -2450,55 +2697,52 @@ object frmPreferences: TfrmPreferences
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = lblModelR2
               Left = 226
-              Height = 15
-              Top = 36
-              Width = 157
+              Height = 17
+              Top = 37
+              Width = 159
               BorderSpacing.Left = 6
               Caption = 'Device (e.g. /dev/ttyS0):'
-              ParentColor = False
             end
             object lblModelR2: TLabel
               AnchorSideLeft.Control = grbRadio2
               AnchorSideTop.Control = edtRadio2Name
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 15
-              Top = 36
-              Width = 72
+              Height = 17
+              Top = 37
+              Width = 73
               BorderSpacing.Left = 6
               BorderSpacing.Top = 3
               Caption = 'RIG model:'
-              ParentColor = False
             end
             object lblPollR2: TLabel
               AnchorSideLeft.Control = edtR2Host
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = lblModelR2
-              Left = 430
-              Height = 15
-              Top = 36
-              Width = 58
+              Left = 432
+              Height = 17
+              Top = 37
+              Width = 61
               Caption = 'Poll rate:'
-              ParentColor = False
             end
             object edtR2Device: TEdit
               AnchorSideLeft.Control = lblDevieR2
               AnchorSideTop.Control = cmbModelRig2
               Left = 226
-              Height = 33
-              Top = 51
+              Height = 34
+              Top = 54
               Width = 173
-              OnChange = edtRadio1NameChange
+              OnChange = TRXParamsChange
               TabOrder = 0
             end
             object edtPoll2: TEdit
               AnchorSideLeft.Control = lblPollR2
               AnchorSideTop.Control = edtR2Device
-              Left = 430
-              Height = 33
-              Top = 51
+              Left = 432
+              Height = 34
+              Top = 54
               Width = 80
-              OnChange = edtRadio1NameChange
+              OnChange = TRXParamsChange
               OnExit = edtPoll1Exit
               TabOrder = 1
             end
@@ -2508,11 +2752,11 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Control = lblExtra2
               Left = 273
               Height = 23
-              Top = 87
-              Width = 185
+              Top = 91
+              Width = 186
               BorderSpacing.Left = 12
               Caption = 'Use CWR instead of CW '
-              OnChange = edtRadio2Change
+              OnChange = TRXParamsChange
               TabOrder = 2
             end
             object chkR2RunRigCtld: TCheckBox
@@ -2521,9 +2765,10 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Side = asrBottom
               Left = 273
               Height = 23
-              Top = 110
-              Width = 235
+              Top = 114
+              Width = 241
               Caption = 'Run rigctld when program starts'
+              OnChange = TRXParamsChange
               TabOrder = 3
             end
             object lblExtra2: TLabel
@@ -2531,44 +2776,42 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Control = cmbModelRig2
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 15
-              Top = 87
-              Width = 209
+              Height = 17
+              Top = 91
+              Width = 212
               BorderSpacing.Top = 3
               Caption = 'Extra command line arguments:'
-              ParentColor = False
             end
             object edtR2RigCtldArgs: TEdit
               AnchorSideLeft.Control = lblModelR2
               AnchorSideTop.Control = lblExtra2
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 33
-              Top = 102
+              Height = 34
+              Top = 108
               Width = 255
-              OnChange = edtR2RigCtldArgsChange
+              OnChange = TRXParamsChange
               TabOrder = 4
             end
             object lblPortR2: TLabel
               AnchorSideLeft.Control = edtR2RigCtldPort
               AnchorSideTop.Control = lblModelR2
-              Left = 522
-              Height = 15
-              Top = 36
-              Width = 84
+              Left = 524
+              Height = 17
+              Top = 37
+              Width = 89
               Caption = 'Port number:'
-              ParentColor = False
             end
             object edtR2RigCtldPort: TEdit
               AnchorSideLeft.Control = edtPoll2
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = edtPoll2
-              Left = 522
-              Height = 33
-              Top = 51
+              Left = 524
+              Height = 34
+              Top = 54
               Width = 80
               BorderSpacing.Left = 12
-              OnChange = edtR2RigCtldPortChange
+              OnChange = TRXParamsChange
               TabOrder = 5
             end
             object grbSerialR2: TGroupBox
@@ -2577,66 +2820,61 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Side = asrBottom
               Left = 6
               Height = 148
-              Top = 138
+              Top = 145
               Width = 511
               BorderSpacing.Top = 3
               Caption = 'Radio two serial parameters'
-              ClientHeight = 130
+              ClientHeight = 146
               ClientWidth = 509
               TabOrder = 6
               object lblSerialR2Spd: TLabel
                 AnchorSideLeft.Control = grbSerialR2
                 AnchorSideTop.Control = grbSerialR2
                 Left = 6
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 84
+                Width = 86
                 BorderSpacing.Left = 6
                 BorderSpacing.Top = 6
                 Caption = 'Serial speed:'
-                ParentColor = False
               end
               object lblSerialR2DataBits: TLabel
                 AnchorSideLeft.Control = cmbDataBitsR2
                 AnchorSideTop.Control = lblSerialR2Spd
                 Left = 125
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 59
+                Width = 61
                 Caption = 'Data bits'
-                ParentColor = False
               end
               object lblSerialR2Stop: TLabel
                 AnchorSideLeft.Control = cmbStopBitsR2
                 AnchorSideTop.Control = lblSerialR2Spd
                 Left = 244
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 57
+                Width = 61
                 Caption = 'Stop bits'
-                ParentColor = False
               end
               object lblSerialR2Hand: TLabel
                 AnchorSideLeft.Control = cmbSpeedR2
                 AnchorSideTop.Control = cmbSpeedR2
                 AnchorSideTop.Side = asrBottom
                 Left = 6
-                Height = 15
-                Top = 68
-                Width = 72
+                Height = 17
+                Top = 70
+                Width = 73
                 BorderSpacing.Top = 6
                 Caption = 'Handshake'
-                ParentColor = False
               end
               object lblSerialR2Parity: TLabel
                 AnchorSideLeft.Control = cmbParityR2
                 AnchorSideTop.Control = lblSerialR2Spd
                 Left = 356
-                Height = 15
+                Height = 17
                 Top = 6
-                Width = 38
+                Width = 40
                 Caption = 'Parity'
-                ParentColor = False
               end
               object cmbHanshakeR2: TComboBox
                 AnchorSideLeft.Control = lblSerialR2Hand
@@ -2644,7 +2882,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 Left = 6
                 Height = 29
-                Top = 89
+                Top = 93
                 Width = 107
                 BorderSpacing.Top = 6
                 ItemHeight = 0
@@ -2655,7 +2893,7 @@ object frmPreferences: TfrmPreferences
                   'XON/XOFF'
                   'HARDWARE'
                 )
-                OnChange = cmbHanshakeR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 0
                 Text = 'default'
@@ -2666,7 +2904,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbStopBitsR2
                 Left = 356
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 109
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2679,7 +2917,7 @@ object frmPreferences: TfrmPreferences
                   'Mark'
                   'Space'
                 )
-                OnChange = cmbParityR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 1
                 Text = 'default'
@@ -2690,7 +2928,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbSpeedR2
                 Left = 125
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 107
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2703,7 +2941,7 @@ object frmPreferences: TfrmPreferences
                   '8'
                   '9'
                 )
-                OnChange = cmbDataBitsR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 2
                 Text = 'default'
@@ -2714,7 +2952,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbDataBitsR2
                 Left = 244
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 100
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2726,7 +2964,7 @@ object frmPreferences: TfrmPreferences
                   '2'
                   '3'
                 )
-                OnChange = cmbStopBitsR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 3
                 Text = 'default'
@@ -2737,7 +2975,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 Left = 6
                 Height = 29
-                Top = 33
+                Top = 35
                 Width = 107
                 BorderSpacing.Top = 12
                 ItemHeight = 0
@@ -2754,7 +2992,7 @@ object frmPreferences: TfrmPreferences
                   '57600'
                   '115200'
                 )
-                OnChange = cmbSpeedR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 4
                 Text = 'default'
@@ -2765,7 +3003,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbHanshakeR2
                 Left = 125
                 Height = 29
-                Top = 89
+                Top = 93
                 Width = 107
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2776,7 +3014,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbDTRR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 5
                 Text = 'default'
@@ -2785,11 +3023,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = cmbDTRR2
                 AnchorSideTop.Control = lblSerialR2Hand
                 Left = 125
-                Height = 15
-                Top = 68
+                Height = 17
+                Top = 70
                 Width = 27
                 Caption = 'DTR'
-                ParentColor = False
               end
               object cmbRTSR2: TComboBox
                 AnchorSideLeft.Control = cmbDTRR2
@@ -2797,7 +3034,7 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = cmbDTRR2
                 Left = 244
                 Height = 29
-                Top = 89
+                Top = 93
                 Width = 100
                 BorderSpacing.Left = 12
                 ItemHeight = 0
@@ -2808,7 +3045,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbRTSR2Change
+                OnChange = TRXParamsChange
                 Style = csDropDownList
                 TabOrder = 6
                 Text = 'default'
@@ -2817,11 +3054,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = cmbRTSR2
                 AnchorSideTop.Control = lblSerialR2Hand
                 Left = 244
-                Height = 15
-                Top = 68
+                Height = 17
+                Top = 70
                 Width = 25
                 Caption = 'RTS'
-                ParentColor = False
               end
             end
             object cmbModelRig2: TComboBox
@@ -2829,32 +3065,34 @@ object frmPreferences: TfrmPreferences
               AnchorSideTop.Control = lblModelR2
               AnchorSideTop.Side = asrBottom
               Left = 6
-              Height = 33
-              Top = 51
+              Height = 34
+              Top = 54
               Width = 200
               ItemHeight = 0
+              OnChange = cmbModelRig2Change
               TabOrder = 7
             end
             object edtRadio2Name: TEdit
               AnchorSideLeft.Control = grbRadio2
               AnchorSideTop.Control = grbRadio2
               Left = 126
-              Height = 33
+              Height = 34
               Top = 0
               Width = 94
               BorderSpacing.Left = 126
-              OnChange = edtRadio1NameChange
+              OnChange = TRXParamsChange
               TabOrder = 8
             end
             object edtR2Host: TEdit
               AnchorSideLeft.Control = lblHost2
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = edtRadio2Name
-              Left = 302
-              Height = 33
+              Left = 304
+              Height = 34
               Top = 0
               Width = 128
               BorderSpacing.Left = 12
+              OnChange = TRXParamsChange
               TabOrder = 9
             end
             object lblHost2: TLabel
@@ -2862,12 +3100,11 @@ object frmPreferences: TfrmPreferences
               AnchorSideLeft.Side = asrBottom
               AnchorSideTop.Control = edtR2Host
               Left = 260
-              Height = 15
+              Height = 17
               Top = 0
-              Width = 30
+              Width = 32
               BorderSpacing.Left = 40
               Caption = 'Host'
-              ParentColor = False
             end
             object grpUsrCmds1: TGroupBox
               AnchorSideLeft.Control = grbRadio2
@@ -2878,8 +3115,8 @@ object frmPreferences: TfrmPreferences
               AnchorSideBottom.Control = grbRadio2
               AnchorSideBottom.Side = asrBottom
               Left = 6
-              Height = 116
-              Top = 289
+              Height = 136
+              Top = 296
               Width = 627
               Anchors = [akTop, akLeft, akRight, akBottom]
               BorderSpacing.Left = 6
@@ -2887,7 +3124,7 @@ object frmPreferences: TfrmPreferences
               BorderSpacing.Right = 6
               BorderSpacing.Bottom = 6
               Caption = 'User defined TRX control buttons'
-              ClientHeight = 98
+              ClientHeight = 118
               ClientWidth = 625
               TabOrder = 10
               object lblUsr1R2: TLabel
@@ -2895,35 +3132,32 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = edtUsr1R2
                 AnchorSideTop.Side = asrCenter
                 Left = 3
-                Height = 15
+                Height = 17
                 Top = 9
-                Width = 30
+                Width = 31
                 BorderSpacing.Left = 3
                 BorderSpacing.Top = 6
                 Caption = 'Usr1'
-                ParentColor = False
               end
               object lblUsr2R2: TLabel
                 AnchorSideLeft.Control = lblUsr1R2
                 AnchorSideTop.Control = edtUsr2R2
                 AnchorSideTop.Side = asrCenter
                 Left = 3
-                Height = 15
-                Top = 42
-                Width = 30
+                Height = 17
+                Top = 43
+                Width = 31
                 Caption = 'Usr2'
-                ParentColor = False
               end
               object lblUsr3R2: TLabel
                 AnchorSideLeft.Control = lblUsr1R2
                 AnchorSideTop.Control = edtUsr3R2
                 AnchorSideTop.Side = asrCenter
                 Left = 3
-                Height = 15
-                Top = 75
-                Width = 30
+                Height = 17
+                Top = 77
+                Width = 31
                 Caption = 'Usr3'
-                ParentColor = False
               end
               object edtUsr1R2: TEdit
                 AnchorSideLeft.Control = edtUsr1R2Name
@@ -2931,10 +3165,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Control = grpUsrCmds1
                 AnchorSideRight.Control = grpUsrCmds1
                 AnchorSideRight.Side = asrBottom
-                Left = 102
-                Height = 33
+                Left = 103
+                Height = 34
                 Top = 0
-                Width = 511
+                Width = 510
                 Anchors = [akTop, akLeft, akRight]
                 BorderSpacing.Left = 6
                 BorderSpacing.Right = 12
@@ -2946,10 +3180,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 AnchorSideRight.Control = edtUsr1R2
                 AnchorSideRight.Side = asrBottom
-                Left = 102
-                Height = 33
-                Top = 33
-                Width = 511
+                Left = 103
+                Height = 34
+                Top = 34
+                Width = 510
                 Anchors = [akTop, akLeft, akRight]
                 TabOrder = 1
               end
@@ -2959,10 +3193,10 @@ object frmPreferences: TfrmPreferences
                 AnchorSideTop.Side = asrBottom
                 AnchorSideRight.Control = edtUsr2R2
                 AnchorSideRight.Side = asrBottom
-                Left = 102
-                Height = 33
-                Top = 66
-                Width = 511
+                Left = 103
+                Height = 34
+                Top = 68
+                Width = 510
                 Anchors = [akTop, akLeft, akRight]
                 TabOrder = 2
               end
@@ -2970,8 +3204,8 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = lblUsr1R2
                 AnchorSideLeft.Side = asrBottom
                 AnchorSideTop.Control = grpUsrCmds1
-                Left = 39
-                Height = 33
+                Left = 40
+                Height = 34
                 Top = 0
                 Width = 57
                 BorderSpacing.Left = 6
@@ -2982,9 +3216,9 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = edtUsr1R2Name
                 AnchorSideTop.Control = edtUsr1R2Name
                 AnchorSideTop.Side = asrBottom
-                Left = 39
-                Height = 33
-                Top = 33
+                Left = 40
+                Height = 34
+                Top = 34
                 Width = 57
                 MaxLength = 4
                 TabOrder = 4
@@ -2993,14 +3227,27 @@ object frmPreferences: TfrmPreferences
                 AnchorSideLeft.Control = edtUsr2R2Name
                 AnchorSideTop.Control = edtUsr2R2Name
                 AnchorSideTop.Side = asrBottom
-                Left = 39
-                Height = 33
-                Top = 66
+                Left = 40
+                Height = 34
+                Top = 68
                 Width = 57
                 MaxLength = 4
                 TabOrder = 5
               end
             end
+            object chkR2Vfo: TCheckBox
+              AnchorSideLeft.Control = edtR2RigCtldPort
+              AnchorSideTop.Control = chkR2SendCWR
+              Left = 524
+              Height = 23
+              Top = 91
+              Width = 105
+              Caption = 'Use \chkvfo'
+              Checked = True
+              OnChange = TRXParamsChange
+              State = cbChecked
+              TabOrder = 11
+            end
           end
         end
       end
@@ -3011,7 +3258,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 592
-        Width = 298
+        Width = 300
         Caption = 'Show communication with TRX in console'
         TabOrder = 4
       end
@@ -3020,11 +3267,10 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = btnSplit
         AnchorSideTop.Side = asrCenter
         Left = 18
-        Height = 15
-        Top = 621
-        Width = 397
+        Height = 17
+        Top = 620
+        Width = 400
         Caption = 'You have to run cqrlog in console to see the debug messages'
-        ParentColor = False
       end
       object chkModeRelatedOnly: TCheckBox
         AnchorSideLeft.Control = tabTRXcontrol
@@ -3033,7 +3279,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 567
-        Width = 322
+        Width = 327
         BorderSpacing.Left = 18
         Caption = 'Switch only between mode related memories'
         TabOrder = 5
@@ -3056,7 +3302,7 @@ object frmPreferences: TfrmPreferences
     object TabROTcontrol: TTabSheet
       Caption = 'ROT control'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox41: TGroupBox
         AnchorSideLeft.Control = TabROTcontrol
         AnchorSideTop.Control = TabROTcontrol
@@ -3067,8 +3313,8 @@ object frmPreferences: TfrmPreferences
         BorderSpacing.Left = 6
         BorderSpacing.Top = 6
         Caption = ' rotctld '
-        ClientHeight = 62
-        ClientWidth = 651
+        ClientHeight = 86
+        ClientWidth = 655
         TabOrder = 0
         object Label124: TLabel
           AnchorSideLeft.Control = GroupBox41
@@ -3076,11 +3322,10 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 6
-          Width = 139
+          Width = 148
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Path to rotctld binary:'
-          ParentColor = False
         end
         object edtRotCtldPath: TEdit
           AnchorSideLeft.Control = Label124
@@ -3090,6 +3335,7 @@ object frmPreferences: TfrmPreferences
           Height = 34
           Top = 23
           Width = 503
+          OnChange = TRXParamsChange
           TabOrder = 0
           Text = 'edtRotCtldPath'
         end
@@ -3115,7 +3361,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Side = asrBottom
           Caption = 'Rotor one'
           ClientHeight = 388
-          ClientWidth = 653
+          ClientWidth = 647
           object gbRot1: TGroupBox
             AnchorSideLeft.Control = tabRot1
             AnchorSideTop.Control = tabRot1
@@ -3126,8 +3372,8 @@ object frmPreferences: TfrmPreferences
             BorderSpacing.Left = 6
             BorderSpacing.Top = 12
             Caption = ' Rotor one, desc.:'
-            ClientHeight = 315
-            ClientWidth = 618
+            ClientHeight = 339
+            ClientWidth = 622
             TabOrder = 0
             object lblDevice1: TLabel
               AnchorSideLeft.Control = edtRot1Device
@@ -3135,9 +3381,8 @@ object frmPreferences: TfrmPreferences
               Left = 218
               Height = 17
               Top = 18
-              Width = 157
+              Width = 159
               Caption = 'Device (e.g. /dev/ttyS0):'
-              ParentColor = False
             end
             object lblRotId1: TLabel
               AnchorSideLeft.Control = gbRot1
@@ -3145,11 +3390,10 @@ object frmPreferences: TfrmPreferences
               Left = 6
               Height = 17
               Top = 18
-              Width = 94
+              Width = 95
               BorderSpacing.Left = 6
               BorderSpacing.Top = 18
               Caption = 'ROT ID model:'
-              ParentColor = False
             end
             object lblPoll1: TLabel
               AnchorSideLeft.Control = edtRot1Poll
@@ -3157,9 +3401,8 @@ object frmPreferences: TfrmPreferences
               Left = 438
               Height = 17
               Top = 18
-              Width = 58
+              Width = 61
               Caption = 'Poll rate:'
-              ParentColor = False
             end
             object edtRot1Device: TEdit
               AnchorSideLeft.Control = cmbModelRot1
@@ -3170,7 +3413,7 @@ object frmPreferences: TfrmPreferences
               Top = 35
               Width = 208
               BorderSpacing.Left = 12
-              OnChange = edtRadio1NameChange
+              OnChange = RotorParamsChange
               TabOrder = 0
             end
             object edtRot1Poll: TEdit
@@ -3182,7 +3425,7 @@ object frmPreferences: TfrmPreferences
               Top = 35
               Width = 80
               BorderSpacing.Left = 12
-              OnChange = edtRadio1NameChange
+              OnChange = RotorParamsChange
               OnExit = edtPoll1Exit
               TabOrder = 1
             end
@@ -3193,9 +3436,10 @@ object frmPreferences: TfrmPreferences
               Left = 285
               Height = 23
               Top = 81
-              Width = 235
+              Width = 244
               BorderSpacing.Left = 24
               Caption = 'Run rotctld when program starts'
+              OnChange = RotorParamsChange
               TabOrder = 2
             end
             object lblExtaArgs1: TLabel
@@ -3205,10 +3449,9 @@ object frmPreferences: TfrmPreferences
               Left = 6
               Height = 17
               Top = 81
-              Width = 209
+              Width = 212
               BorderSpacing.Top = 12
               Caption = 'Extra command line arguments:'
-              ParentColor = False
             end
             object edtRot1RotCtldArgs: TEdit
               AnchorSideLeft.Control = lblRotId1
@@ -3218,7 +3461,7 @@ object frmPreferences: TfrmPreferences
               Height = 34
               Top = 98
               Width = 255
-              OnChange = edtR1RigCtldArgsChange
+              OnChange = RotorParamsChange
               TabOrder = 3
               Text = 'edtRot1RotCtldArgs'
             end
@@ -3228,9 +3471,8 @@ object frmPreferences: TfrmPreferences
               Left = 530
               Height = 17
               Top = 18
-              Width = 84
+              Width = 89
               Caption = 'Port number:'
-              ParentColor = False
             end
             object edtRot1RotCtldPort: TEdit
               AnchorSideLeft.Control = edtRot1Poll
@@ -3241,7 +3483,7 @@ object frmPreferences: TfrmPreferences
               Top = 35
               Width = 80
               BorderSpacing.Left = 12
-              OnChange = edtR1RigCtldPortChange
+              OnChange = RotorParamsChange
               TabOrder = 4
             end
             object grbSerialRot1: TGroupBox
@@ -3252,15 +3494,15 @@ object frmPreferences: TfrmPreferences
               AnchorSideBottom.Side = asrBottom
               Left = 6
               Height = 161
-              Top = 156
+              Top = 172
               Width = 610
               Anchors = [akLeft, akRight, akBottom]
               BorderSpacing.Left = 6
               BorderSpacing.Right = 6
               BorderSpacing.Bottom = 6
               Caption = 'Rotor one serial parameters'
-              ClientHeight = 135
-              ClientWidth = 604
+              ClientHeight = 159
+              ClientWidth = 608
               TabOrder = 5
               object lblSpeed1: TLabel
                 AnchorSideLeft.Control = grbSerialRot1
@@ -3268,11 +3510,10 @@ object frmPreferences: TfrmPreferences
                 Left = 6
                 Height = 17
                 Top = 6
-                Width = 84
+                Width = 86
                 BorderSpacing.Left = 6
                 BorderSpacing.Top = 6
                 Caption = 'Serial speed:'
-                ParentColor = False
               end
               object lblDataBits1: TLabel
                 AnchorSideLeft.Control = cmbDataBitsRot1
@@ -3280,9 +3521,8 @@ object frmPreferences: TfrmPreferences
                 Left = 137
                 Height = 17
                 Top = 6
-                Width = 59
+                Width = 61
                 Caption = 'Data bits'
-                ParentColor = False
               end
               object lblStopBits1: TLabel
                 AnchorSideLeft.Control = cmbStopBitsRot1
@@ -3290,9 +3530,8 @@ object frmPreferences: TfrmPreferences
                 Left = 268
                 Height = 17
                 Top = 6
-                Width = 57
+                Width = 61
                 Caption = 'Stop bits'
-                ParentColor = False
               end
               object lblHandshake1: TLabel
                 AnchorSideLeft.Control = lblSpeed1
@@ -3304,7 +3543,6 @@ object frmPreferences: TfrmPreferences
                 Width = 73
                 BorderSpacing.Top = 24
                 Caption = 'Handshake'
-                ParentColor = False
               end
               object lblParity1: TLabel
                 AnchorSideLeft.Control = cmbParityRot1
@@ -3312,9 +3550,8 @@ object frmPreferences: TfrmPreferences
                 Left = 392
                 Height = 17
                 Top = 6
-                Width = 37
+                Width = 40
                 Caption = 'Parity'
-                ParentColor = False
               end
               object cmbHanshakeRot1: TComboBox
                 AnchorSideLeft.Control = lblSpeed1
@@ -3324,7 +3561,7 @@ object frmPreferences: TfrmPreferences
                 Height = 29
                 Top = 93
                 Width = 107
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3332,7 +3569,7 @@ object frmPreferences: TfrmPreferences
                   'XON/XOFF'
                   'HARDWARE'
                 )
-                OnChange = cmbHanshakeR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 0
                 Text = 'default'
@@ -3346,7 +3583,7 @@ object frmPreferences: TfrmPreferences
                 Top = 23
                 Width = 109
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3356,7 +3593,7 @@ object frmPreferences: TfrmPreferences
                   'Mark'
                   'Space'
                 )
-                OnChange = cmbParityR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 1
                 Text = 'default'
@@ -3370,7 +3607,7 @@ object frmPreferences: TfrmPreferences
                 Top = 23
                 Width = 107
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3380,7 +3617,7 @@ object frmPreferences: TfrmPreferences
                   '8'
                   '9'
                 )
-                OnChange = cmbDataBitsR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 2
                 Text = 'default'
@@ -3394,7 +3631,7 @@ object frmPreferences: TfrmPreferences
                 Top = 23
                 Width = 100
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3403,7 +3640,7 @@ object frmPreferences: TfrmPreferences
                   '2'
                   '3'
                 )
-                OnChange = cmbStopBitsR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 3
                 Text = 'default'
@@ -3416,7 +3653,7 @@ object frmPreferences: TfrmPreferences
                 Height = 29
                 Top = 23
                 Width = 107
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3430,7 +3667,7 @@ object frmPreferences: TfrmPreferences
                   '57600'
                   '115200'
                 )
-                OnChange = cmbSpeedR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 4
                 Text = 'default'
@@ -3444,7 +3681,7 @@ object frmPreferences: TfrmPreferences
                 Top = 93
                 Width = 107
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3452,7 +3689,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbDTRR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 5
                 Text = 'default'
@@ -3465,7 +3702,6 @@ object frmPreferences: TfrmPreferences
                 Top = 76
                 Width = 27
                 Caption = 'DTR'
-                ParentColor = False
               end
               object cmbRTSRot1: TComboBox
                 AnchorSideLeft.Control = cmbDTRRot1
@@ -3476,7 +3712,7 @@ object frmPreferences: TfrmPreferences
                 Top = 93
                 Width = 100
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3484,7 +3720,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbRTSR1Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 6
                 Text = 'default'
@@ -3495,9 +3731,8 @@ object frmPreferences: TfrmPreferences
                 Left = 268
                 Height = 17
                 Top = 76
-                Width = 24
+                Width = 25
                 Caption = 'RTS'
-                ParentColor = False
               end
             end
             object cmbModelRot1: TComboBox
@@ -3507,7 +3742,8 @@ object frmPreferences: TfrmPreferences
               Height = 34
               Top = 35
               Width = 200
-              ItemHeight = 17
+              ItemHeight = 0
+              OnChange = cmbModelRot1Change
               TabOrder = 6
               Text = 'cmbModelRot1'
             end
@@ -3518,8 +3754,9 @@ object frmPreferences: TfrmPreferences
               Left = 285
               Height = 23
               Top = 104
-              Width = 276
+              Width = 289
               Caption = 'Use rotctrld \dump:state info for limits'
+              OnChange = RotorParamsChange
               TabOrder = 7
             end
           end
@@ -3532,7 +3769,7 @@ object frmPreferences: TfrmPreferences
             Width = 94
             BorderSpacing.Left = 140
             BorderSpacing.Top = 12
-            OnChange = edtRadio1NameChange
+            OnChange = RotorParamsChange
             TabOrder = 1
           end
           object pnlHost1: TPanel
@@ -3557,6 +3794,7 @@ object frmPreferences: TfrmPreferences
             Height = 34
             Top = 12
             Width = 128
+            OnChange = RotorParamsChange
             TabOrder = 3
             Text = 'edtR1Host'
           end
@@ -3570,7 +3808,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Side = asrBottom
           Caption = 'Rotor two'
           ClientHeight = 388
-          ClientWidth = 653
+          ClientWidth = 647
           object gbRot2: TGroupBox
             AnchorSideLeft.Control = tabRot2
             AnchorSideTop.Control = tabRot2
@@ -3581,8 +3819,8 @@ object frmPreferences: TfrmPreferences
             BorderSpacing.Left = 6
             BorderSpacing.Top = 12
             Caption = ' Rotor two, desc.:'
-            ClientHeight = 315
-            ClientWidth = 618
+            ClientHeight = 339
+            ClientWidth = 622
             TabOrder = 0
             object lblDevice2: TLabel
               AnchorSideLeft.Control = edtRot2Device
@@ -3590,9 +3828,8 @@ object frmPreferences: TfrmPreferences
               Left = 218
               Height = 17
               Top = 18
-              Width = 157
+              Width = 159
               Caption = 'Device (e.g. /dev/ttyS0):'
-              ParentColor = False
             end
             object lblRotId2: TLabel
               AnchorSideLeft.Control = gbRot2
@@ -3600,11 +3837,10 @@ object frmPreferences: TfrmPreferences
               Left = 6
               Height = 17
               Top = 18
-              Width = 94
+              Width = 95
               BorderSpacing.Left = 6
               BorderSpacing.Top = 18
               Caption = 'ROT ID model:'
-              ParentColor = False
             end
             object lblPoll2: TLabel
               AnchorSideLeft.Control = edtRot2Poll
@@ -3612,9 +3848,8 @@ object frmPreferences: TfrmPreferences
               Left = 438
               Height = 17
               Top = 18
-              Width = 58
+              Width = 61
               Caption = 'Poll rate:'
-              ParentColor = False
             end
             object edtRot2Device: TEdit
               AnchorSideLeft.Control = cmbModelRot2
@@ -3625,7 +3860,7 @@ object frmPreferences: TfrmPreferences
               Top = 35
               Width = 208
               BorderSpacing.Left = 12
-              OnChange = edtRadio1NameChange
+              OnChange = RotorParamsChange
               TabOrder = 0
             end
             object edtRot2Poll: TEdit
@@ -3637,7 +3872,7 @@ object frmPreferences: TfrmPreferences
               Top = 35
               Width = 80
               BorderSpacing.Left = 12
-              OnChange = edtRadio1NameChange
+              OnChange = RotorParamsChange
               OnExit = edtPoll1Exit
               TabOrder = 1
             end
@@ -3648,9 +3883,10 @@ object frmPreferences: TfrmPreferences
               Left = 285
               Height = 23
               Top = 81
-              Width = 235
+              Width = 244
               BorderSpacing.Left = 24
               Caption = 'Run rotctld when program starts'
+              OnChange = RotorParamsChange
               TabOrder = 2
             end
             object lblExtaArgs2: TLabel
@@ -3660,10 +3896,9 @@ object frmPreferences: TfrmPreferences
               Left = 6
               Height = 17
               Top = 81
-              Width = 209
+              Width = 212
               BorderSpacing.Top = 12
               Caption = 'Extra command line arguments:'
-              ParentColor = False
             end
             object edtRot2RotCtldArgs: TEdit
               AnchorSideLeft.Control = lblRotId2
@@ -3673,7 +3908,7 @@ object frmPreferences: TfrmPreferences
               Height = 34
               Top = 98
               Width = 255
-              OnChange = edtR2RigCtldArgsChange
+              OnChange = RotorParamsChange
               TabOrder = 3
               Text = 'edtRot2RotCtldArgs'
             end
@@ -3683,9 +3918,8 @@ object frmPreferences: TfrmPreferences
               Left = 530
               Height = 17
               Top = 18
-              Width = 84
+              Width = 89
               Caption = 'Port number:'
-              ParentColor = False
             end
             object edtRot2RotCtldPort: TEdit
               AnchorSideLeft.Control = edtRot2Poll
@@ -3696,7 +3930,7 @@ object frmPreferences: TfrmPreferences
               Top = 35
               Width = 80
               BorderSpacing.Left = 12
-              OnChange = edtR2RigCtldPortChange
+              OnChange = RotorParamsChange
               TabOrder = 4
             end
             object grbSerialRot2: TGroupBox
@@ -3707,15 +3941,15 @@ object frmPreferences: TfrmPreferences
               AnchorSideBottom.Side = asrBottom
               Left = 6
               Height = 161
-              Top = 156
+              Top = 172
               Width = 610
               Anchors = [akLeft, akRight, akBottom]
               BorderSpacing.Left = 6
               BorderSpacing.Right = 6
               BorderSpacing.Bottom = 6
               Caption = 'Rotor two serial parameters'
-              ClientHeight = 135
-              ClientWidth = 604
+              ClientHeight = 159
+              ClientWidth = 608
               TabOrder = 5
               object lblSpeed2: TLabel
                 AnchorSideLeft.Control = grbSerialRot2
@@ -3723,11 +3957,10 @@ object frmPreferences: TfrmPreferences
                 Left = 6
                 Height = 17
                 Top = 6
-                Width = 84
+                Width = 86
                 BorderSpacing.Left = 6
                 BorderSpacing.Top = 6
                 Caption = 'Serial speed:'
-                ParentColor = False
               end
               object lblDataBits2: TLabel
                 AnchorSideLeft.Control = cmbDataBitsRot2
@@ -3735,9 +3968,8 @@ object frmPreferences: TfrmPreferences
                 Left = 137
                 Height = 17
                 Top = 6
-                Width = 59
+                Width = 61
                 Caption = 'Data bits'
-                ParentColor = False
               end
               object lblStopBits2: TLabel
                 AnchorSideLeft.Control = cmbStopBitsRot2
@@ -3745,9 +3977,8 @@ object frmPreferences: TfrmPreferences
                 Left = 268
                 Height = 17
                 Top = 6
-                Width = 57
+                Width = 61
                 Caption = 'Stop bits'
-                ParentColor = False
               end
               object lblHandshake2: TLabel
                 AnchorSideLeft.Control = lblSpeed2
@@ -3759,7 +3990,6 @@ object frmPreferences: TfrmPreferences
                 Width = 73
                 BorderSpacing.Top = 24
                 Caption = 'Handshake'
-                ParentColor = False
               end
               object lblParity2: TLabel
                 AnchorSideLeft.Control = cmbParityRot2
@@ -3767,9 +3997,8 @@ object frmPreferences: TfrmPreferences
                 Left = 392
                 Height = 17
                 Top = 6
-                Width = 37
+                Width = 40
                 Caption = 'Parity'
-                ParentColor = False
               end
               object cmbHanshakeRot2: TComboBox
                 AnchorSideLeft.Control = lblHandshake2
@@ -3779,7 +4008,7 @@ object frmPreferences: TfrmPreferences
                 Height = 29
                 Top = 93
                 Width = 107
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3787,7 +4016,7 @@ object frmPreferences: TfrmPreferences
                   'XON/XOFF'
                   'HARDWARE'
                 )
-                OnChange = cmbHanshakeR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 0
                 Text = 'default'
@@ -3801,7 +4030,7 @@ object frmPreferences: TfrmPreferences
                 Top = 23
                 Width = 109
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3811,7 +4040,7 @@ object frmPreferences: TfrmPreferences
                   'Mark'
                   'Space'
                 )
-                OnChange = cmbParityR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 1
                 Text = 'default'
@@ -3825,7 +4054,7 @@ object frmPreferences: TfrmPreferences
                 Top = 23
                 Width = 107
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3835,7 +4064,7 @@ object frmPreferences: TfrmPreferences
                   '8'
                   '9'
                 )
-                OnChange = cmbDataBitsR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 2
                 Text = 'default'
@@ -3849,7 +4078,7 @@ object frmPreferences: TfrmPreferences
                 Top = 23
                 Width = 100
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3858,7 +4087,7 @@ object frmPreferences: TfrmPreferences
                   '2'
                   '3'
                 )
-                OnChange = cmbStopBitsR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 3
                 Text = 'default'
@@ -3871,7 +4100,7 @@ object frmPreferences: TfrmPreferences
                 Height = 29
                 Top = 23
                 Width = 107
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3885,7 +4114,7 @@ object frmPreferences: TfrmPreferences
                   '57600'
                   '115200'
                 )
-                OnChange = cmbSpeedR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 4
                 Text = 'default'
@@ -3899,7 +4128,7 @@ object frmPreferences: TfrmPreferences
                 Top = 93
                 Width = 107
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3907,7 +4136,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbDTRR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 5
                 Text = 'default'
@@ -3920,7 +4149,6 @@ object frmPreferences: TfrmPreferences
                 Top = 76
                 Width = 27
                 Caption = 'DTR'
-                ParentColor = False
               end
               object cmbRTSRot2: TComboBox
                 AnchorSideLeft.Control = cmbDTRRot2
@@ -3931,7 +4159,7 @@ object frmPreferences: TfrmPreferences
                 Top = 93
                 Width = 100
                 BorderSpacing.Left = 24
-                ItemHeight = 17
+                ItemHeight = 0
                 ItemIndex = 0
                 Items.Strings = (
                   'default'
@@ -3939,7 +4167,7 @@ object frmPreferences: TfrmPreferences
                   'ON'
                   'OFF'
                 )
-                OnChange = cmbRTSR2Change
+                OnChange = RotorParamsChange
                 Style = csDropDownList
                 TabOrder = 6
                 Text = 'default'
@@ -3950,9 +4178,8 @@ object frmPreferences: TfrmPreferences
                 Left = 268
                 Height = 17
                 Top = 76
-                Width = 24
+                Width = 25
                 Caption = 'RTS'
-                ParentColor = False
               end
             end
             object cmbModelRot2: TComboBox
@@ -3963,7 +4190,8 @@ object frmPreferences: TfrmPreferences
               Height = 34
               Top = 35
               Width = 200
-              ItemHeight = 17
+              ItemHeight = 0
+              OnChange = cmbModelRot2Change
               TabOrder = 6
               Text = 'cmbModelRot2'
             end
@@ -3974,8 +4202,9 @@ object frmPreferences: TfrmPreferences
               Left = 285
               Height = 23
               Top = 104
-              Width = 276
+              Width = 289
               Caption = 'Use rotctrld \dump:state info for limits'
+              OnChange = RotorParamsChange
               TabOrder = 7
             end
           end
@@ -3988,7 +4217,7 @@ object frmPreferences: TfrmPreferences
             Width = 94
             BorderSpacing.Left = 140
             BorderSpacing.Top = 12
-            OnChange = edtRadio1NameChange
+            OnChange = RotorParamsChange
             TabOrder = 1
           end
           object pnl2Host: TPanel
@@ -4014,6 +4243,7 @@ object frmPreferences: TfrmPreferences
             Height = 34
             Top = 12
             Width = 128
+            OnChange = RotorParamsChange
             TabOrder = 3
             Text = 'edtRot2Host'
           end
@@ -4023,15 +4253,15 @@ object frmPreferences: TfrmPreferences
     object tabModes: TTabSheet
       Caption = 'Modes'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox35: TGroupBox
         Left = 14
         Height = 73
         Top = 267
         Width = 561
         Caption = ' User defined digital modes (use , as delimitter)'
-        ClientHeight = 47
-        ClientWidth = 555
+        ClientHeight = 55
+        ClientWidth = 559
         TabOrder = 0
         object edtDigiModes: TEdit
           Left = 7
@@ -4048,32 +4278,29 @@ object frmPreferences: TfrmPreferences
         Top = 11
         Width = 208
         Caption = ' Radio one '
-        ClientHeight = 198
-        ClientWidth = 202
+        ClientHeight = 222
+        ClientWidth = 206
         TabOrder = 1
         object Label28: TLabel
           Left = 13
           Height = 17
           Top = 18
-          Width = 36
+          Width = 39
           Caption = 'Mode'
-          ParentColor = False
         end
         object Label29: TLabel
           Left = 77
           Height = 17
           Top = 18
-          Width = 69
+          Width = 72
           Caption = 'Bandwidth'
-          ParentColor = False
         end
         object Label30: TLabel
           Left = 11
           Height = 17
           Top = 43
-          Width = 22
+          Width = 23
           Caption = 'CW'
-          ParentColor = False
         end
         object edtCW1: TSpinEdit
           Left = 77
@@ -4092,7 +4319,6 @@ object frmPreferences: TfrmPreferences
           Top = 43
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object Label36: TLabel
           Left = 169
@@ -4100,7 +4326,6 @@ object frmPreferences: TfrmPreferences
           Top = 75
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object edtSSB1: TSpinEdit
           Left = 77
@@ -4119,15 +4344,13 @@ object frmPreferences: TfrmPreferences
           Top = 75
           Width = 25
           Caption = 'SSB'
-          ParentColor = False
         end
         object Label32: TLabel
           Left = 11
           Height = 17
           Top = 106
-          Width = 32
+          Width = 36
           Caption = 'RTTY'
-          ParentColor = False
         end
         object edtRTTY1: TSpinEdit
           Left = 77
@@ -4146,7 +4369,6 @@ object frmPreferences: TfrmPreferences
           Top = 106
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object Label38: TLabel
           Left = 169
@@ -4154,7 +4376,6 @@ object frmPreferences: TfrmPreferences
           Top = 139
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object edtAM1: TSpinEdit
           Left = 77
@@ -4171,17 +4392,15 @@ object frmPreferences: TfrmPreferences
           Left = 11
           Height = 17
           Top = 139
-          Width = 21
+          Width = 23
           Caption = 'AM'
-          ParentColor = False
         end
         object Label34: TLabel
           Left = 11
           Height = 17
           Top = 170
-          Width = 20
+          Width = 21
           Caption = 'FM'
-          ParentColor = False
         end
         object edtFM1: TSpinEdit
           Left = 77
@@ -4200,7 +4419,6 @@ object frmPreferences: TfrmPreferences
           Top = 170
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
       end
       object GroupBox39: TGroupBox
@@ -4209,32 +4427,29 @@ object frmPreferences: TfrmPreferences
         Top = 11
         Width = 208
         Caption = ' Radio two '
-        ClientHeight = 198
-        ClientWidth = 202
+        ClientHeight = 222
+        ClientWidth = 206
         TabOrder = 2
         object Label110: TLabel
           Left = 13
           Height = 17
           Top = 18
-          Width = 36
+          Width = 39
           Caption = 'Mode'
-          ParentColor = False
         end
         object Label113: TLabel
           Left = 77
           Height = 17
           Top = 18
-          Width = 69
+          Width = 72
           Caption = 'Bandwidth'
-          ParentColor = False
         end
         object Label114: TLabel
           Left = 11
           Height = 17
           Top = 43
-          Width = 22
+          Width = 23
           Caption = 'CW'
-          ParentColor = False
         end
         object edtCW2: TSpinEdit
           Left = 77
@@ -4253,7 +4468,6 @@ object frmPreferences: TfrmPreferences
           Top = 43
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object Label116: TLabel
           Left = 169
@@ -4261,7 +4475,6 @@ object frmPreferences: TfrmPreferences
           Top = 75
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object edtSSB2: TSpinEdit
           Left = 77
@@ -4280,15 +4493,13 @@ object frmPreferences: TfrmPreferences
           Top = 75
           Width = 25
           Caption = 'SSB'
-          ParentColor = False
         end
         object Label118: TLabel
           Left = 11
           Height = 17
           Top = 106
-          Width = 32
+          Width = 36
           Caption = 'RTTY'
-          ParentColor = False
         end
         object edtRTTY2: TSpinEdit
           Left = 77
@@ -4307,7 +4518,6 @@ object frmPreferences: TfrmPreferences
           Top = 106
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object Label120: TLabel
           Left = 169
@@ -4315,7 +4525,6 @@ object frmPreferences: TfrmPreferences
           Top = 139
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
         object edtAM2: TSpinEdit
           Left = 77
@@ -4332,17 +4541,15 @@ object frmPreferences: TfrmPreferences
           Left = 11
           Height = 17
           Top = 139
-          Width = 21
+          Width = 23
           Caption = 'AM'
-          ParentColor = False
         end
         object Label122: TLabel
           Left = 11
           Height = 17
           Top = 170
-          Width = 20
+          Width = 21
           Caption = 'FM'
-          ParentColor = False
         end
         object edtFM2: TSpinEdit
           Left = 77
@@ -4361,19 +4568,18 @@ object frmPreferences: TfrmPreferences
           Top = 170
           Width = 17
           Caption = 'Hz'
-          ParentColor = False
         end
       end
     end
     object tabQTHProfiles: TTabSheet
       Caption = 'QTH Profiles'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object chkUseProfiles: TCheckBox
         Left = 9
         Height = 23
         Top = 12
-        Width = 135
+        Width = 138
         Caption = 'Use QTH Profiles'
         OnChange = chkUseProfilesChange
         TabOrder = 0
@@ -4384,8 +4590,8 @@ object frmPreferences: TfrmPreferences
         Top = 48
         Width = 622
         Caption = 'Profiles'
-        ClientHeight = 239
-        ClientWidth = 616
+        ClientHeight = 263
+        ClientWidth = 620
         TabOrder = 1
         object Bevel1: TBevel
           AnchorSideTop.Control = btnDefineProfile
@@ -4404,17 +4610,16 @@ object frmPreferences: TfrmPreferences
           Left = 14
           Height = 17
           Top = 122
-          Width = 243
+          Width = 250
           BorderSpacing.Top = 5
           Caption = 'Description of the profile will include:'
-          ParentColor = False
         end
         object cmbProfiles: TComboBox
           Left = 9
           Height = 33
           Top = 12
           Width = 539
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -4424,7 +4629,7 @@ object frmPreferences: TfrmPreferences
           Left = 9
           Height = 37
           Top = 55
-          Width = 156
+          Width = 165
           AutoSize = True
           BorderSpacing.Top = 10
           BorderSpacing.InnerBorder = 2
@@ -4438,7 +4643,7 @@ object frmPreferences: TfrmPreferences
           Left = 14
           Height = 23
           Top = 149
-          Width = 74
+          Width = 78
           BorderSpacing.Top = 10
           Caption = 'Locator'
           OnClick = chkProfileLocatorClick
@@ -4450,7 +4655,7 @@ object frmPreferences: TfrmPreferences
           Left = 14
           Height = 23
           Top = 182
-          Width = 54
+          Width = 55
           BorderSpacing.Top = 10
           Caption = 'QTH'
           OnClick = chkProfileQTHClick
@@ -4472,7 +4677,7 @@ object frmPreferences: TfrmPreferences
     end
     object tabExport: TTabSheet
       Caption = 'Export'
-      ClientHeight = 633
+      ClientHeight = 672
       ClientWidth = 836
       inline fraExportPref1: TfraExportPref
         Top = 8
@@ -4480,89 +4685,123 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = fraExportPref1
           AnchorSideTop.Control = fraExportPref1
         end
+        inherited edtWSatMode1: TEdit
+          Top = 365
+        end
+        inherited edtWSatMode: TEdit
+          Top = 365
+        end
       end
     end
     object tabDXCluster: TTabSheet
       Caption = 'DXCluster'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object gbDXCColor: TGroupBox
         AnchorSideLeft.Control = tabDXCluster
         AnchorSideTop.Control = tabDXCluster
         Left = 6
         Height = 105
         Top = 1
-        Width = 512
+        Width = 600
         BorderSpacing.Left = 6
         BorderSpacing.Top = 1
         Caption = 'Colors'
-        ClientHeight = 79
-        ClientWidth = 506
+        ClientHeight = 103
+        ClientWidth = 598
         TabOrder = 0
         object Label41: TLabel
+          AnchorSideLeft.Control = gbDXCColor
+          AnchorSideTop.Control = gbDXCColor
           Left = 3
           Height = 17
-          Top = 11
-          Width = 91
+          Top = 12
+          Width = 88
+          BorderSpacing.Left = 3
+          BorderSpacing.Top = 12
           Caption = 'New country:'
-          ParentColor = False
         end
         object Label42: TLabel
+          AnchorSideLeft.Control = Label41
+          AnchorSideTop.Control = Label41
+          AnchorSideTop.Side = asrBottom
           Left = 3
           Height = 17
-          Top = 51
-          Width = 115
+          Top = 53
+          Width = 112
+          BorderSpacing.Top = 24
           Caption = 'New band count.'
-          ParentColor = False
         end
         object Label43: TLabel
-          Left = 246
+          AnchorSideLeft.Control = cmbNewCountry
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = Label41
+          AnchorSideTop.Side = asrCenter
+          Left = 282
           Height = 17
-          Top = 11
-          Width = 120
+          Top = 12
+          Width = 117
+          BorderSpacing.Left = 43
           Caption = 'New mode count.'
-          ParentColor = False
         end
         object Label44: TLabel
-          Left = 246
+          AnchorSideLeft.Control = Label43
+          AnchorSideTop.Control = Label42
+          AnchorSideTop.Side = asrCenter
+          Left = 282
           Height = 17
-          Top = 51
-          Width = 86
+          Top = 53
+          Width = 84
           Caption = 'QSL needed:'
-          ParentColor = False
         end
         object cmbNewCountry: TColorBox
-          Left = 117
-          Height = 25
+          AnchorSideLeft.Control = Label41
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = Label41
+          AnchorSideTop.Side = asrCenter
+          Left = 121
+          Height = 29
           Top = 6
           Width = 118
           Selected = clRed
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
+          BorderSpacing.Left = 30
           ItemHeight = 28
           TabOrder = 0
         end
         object cmbNewBand: TColorBox
-          Left = 117
-          Height = 25
-          Top = 48
+          AnchorSideLeft.Control = cmbNewCountry
+          AnchorSideTop.Control = Label42
+          AnchorSideTop.Side = asrCenter
+          Left = 121
+          Height = 29
+          Top = 47
           Width = 118
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
           ItemHeight = 28
           TabOrder = 1
         end
         object cmbNewMode: TColorBox
-          Left = 385
-          Height = 25
+          AnchorSideLeft.Control = Label43
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = Label41
+          AnchorSideTop.Side = asrCenter
+          Left = 423
+          Height = 29
           Top = 6
           Width = 118
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
+          BorderSpacing.Left = 24
           ItemHeight = 28
           TabOrder = 2
         end
         object cmbQSLNeeded: TColorBox
-          Left = 385
-          Height = 25
-          Top = 48
+          AnchorSideLeft.Control = cmbNewMode
+          AnchorSideTop.Control = Label42
+          AnchorSideTop.Side = asrCenter
+          Left = 423
+          Height = 29
+          Top = 47
           Width = 118
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
           ItemHeight = 28
@@ -4576,262 +4815,371 @@ object frmPreferences: TfrmPreferences
         Left = 6
         Height = 256
         Top = 106
-        Width = 512
+        Width = 600
         BorderSpacing.Left = 6
         Caption = ' Show only spots'
-        ClientHeight = 230
-        ClientWidth = 506
+        ClientHeight = 254
+        ClientWidth = 598
         TabOrder = 1
         object Label45: TLabel
+          AnchorSideLeft.Control = gbDXCSpots
+          AnchorSideBottom.Control = edtDoNotShow
           Left = 6
           Height = 17
-          Top = 154
-          Width = 412
+          Top = 176
+          Width = 404
+          Anchors = [akLeft, akBottom]
+          BorderSpacing.Left = 6
+          BorderSpacing.Bottom = 3
           Caption = 'Do not show spots for following countries (use ; as delimiter)'
-          ParentColor = False
         end
         object chkShow2190M: TCheckBox
+          AnchorSideLeft.Control = gbDXCSpots
+          AnchorSideTop.Control = gbDXCSpots
           Left = 6
           Height = 23
-          Top = 7
-          Width = 76
+          Top = 6
+          Width = 75
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 6
           Caption = '137kHz'
           TabOrder = 0
         end
         object chkShow160M: TCheckBox
-          Left = 6
+          AnchorSideLeft.Control = chkShow9CM
+          AnchorSideTop.Control = chkShow630M
+          Left = 188
           Height = 23
-          Top = 31
-          Width = 80
+          Top = 6
+          Width = 79
           Caption = '1.8 MHz'
           TabOrder = 1
         end
         object chkShow80M: TCheckBox
-          Left = 6
+          AnchorSideLeft.Control = chkShow6CM
+          AnchorSideTop.Control = chkShow160M
+          Left = 279
           Height = 23
-          Top = 55
-          Width = 80
+          Top = 6
+          Width = 79
           Caption = '3.5 MHz'
           TabOrder = 2
         end
         object chkShow40M: TCheckBox
-          Left = 6
+          AnchorSideLeft.Control = chkShow33CM
+          AnchorSideTop.Control = chkShow60M
+          Left = 453
           Height = 23
-          Top = 103
-          Width = 68
+          Top = 6
+          Width = 67
           Caption = '7 MHz'
           TabOrder = 3
         end
         object chkShow30M: TCheckBox
-          Left = 110
+          AnchorSideLeft.Control = chkShow2190M
+          AnchorSideTop.Control = chkShow2190M
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 23
-          Top = 7
-          Width = 89
+          Top = 29
+          Width = 87
           Caption = '10.1 MHz'
           TabOrder = 4
         end
         object chkShow20M: TCheckBox
-          Left = 110
+          AnchorSideLeft.Control = chkShow13CM
+          AnchorSideTop.Control = chkShow160M
+          AnchorSideTop.Side = asrBottom
+          Left = 97
           Height = 23
-          Top = 31
-          Width = 77
+          Top = 29
+          Width = 75
           Caption = '14 MHz'
           TabOrder = 5
         end
         object chkShow17M: TCheckBox
-          Left = 110
+          AnchorSideLeft.Control = chkShow9CM
+          AnchorSideTop.Control = chkShow20M
+          Left = 188
           Height = 23
-          Top = 55
-          Width = 77
+          Top = 29
+          Width = 75
           Caption = '18 MHz'
           TabOrder = 6
         end
         object chkShow15M: TCheckBox
-          Left = 111
+          AnchorSideLeft.Control = chkShow6CM
+          AnchorSideTop.Control = chkShow20M
+          Left = 279
           Height = 23
-          Top = 79
-          Width = 77
+          Top = 29
+          Width = 75
           Caption = '21 MHz'
           TabOrder = 7
         end
         object chkShow12M: TCheckBox
-          Left = 110
+          AnchorSideLeft.Control = chkShow3CM
+          AnchorSideTop.Control = chkShow20M
+          Left = 370
           Height = 23
-          Top = 103
-          Width = 77
+          Top = 29
+          Width = 75
           Caption = '24 MHz'
           TabOrder = 8
         end
         object chkShow10M: TCheckBox
-          Left = 207
+          AnchorSideLeft.Control = chkShow33CM
+          AnchorSideTop.Control = chkShow20M
+          Left = 453
           Height = 23
-          Top = 7
-          Width = 77
+          Top = 29
+          Width = 75
           Caption = '28 MHz'
           TabOrder = 9
         end
         object chkShow2M: TCheckBox
-          Left = 207
+          AnchorSideLeft.Control = chkShow9CM
+          AnchorSideTop.Control = chkShow4M
+          Left = 188
           Height = 23
-          Top = 79
-          Width = 85
+          Top = 52
+          Width = 83
           Caption = '144 MHz'
           TabOrder = 10
         end
         object chkShow6M: TCheckBox
-          Left = 207
+          AnchorSideLeft.Control = chkShow30M
+          AnchorSideTop.Control = chkShow30M
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 23
-          Top = 31
-          Width = 77
+          Top = 52
+          Width = 75
           Caption = '50 MHz'
           TabOrder = 11
         end
         object chkShow70CM: TCheckBox
-          Left = 294
+          AnchorSideLeft.Control = chkShow3CM
+          AnchorSideTop.Control = chkShow125M
+          Left = 370
           Height = 23
-          Top = 7
-          Width = 85
+          Top = 52
+          Width = 83
           Caption = '430 MHz'
           TabOrder = 12
         end
         object chkShow23CM: TCheckBox
-          Left = 294
+          AnchorSideLeft.Control = chkShow2190M
+          AnchorSideTop.Control = chkShow6M
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 23
-          Top = 55
-          Width = 93
+          Top = 75
+          Width = 91
           Caption = '1260 MHz'
           TabOrder = 13
         end
         object chkShow13CM: TCheckBox
-          Left = 294
+          AnchorSideLeft.Control = chkShow23CM
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = chkShow23CM
+          Left = 97
           Height = 23
-          Top = 79
-          Width = 93
+          Top = 75
+          Width = 91
           Caption = '2300 MHz'
           TabOrder = 14
         end
         object chkShow9CM: TCheckBox
-          Left = 294
+          AnchorSideLeft.Control = chkShow13CM
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = chkShow13CM
+          Left = 188
           Height = 23
-          Top = 103
-          Width = 93
+          Top = 75
+          Width = 91
           Caption = '3400 MHz'
           TabOrder = 15
         end
         object chkShow6CM: TCheckBox
-          Left = 391
+          AnchorSideLeft.Control = chkShow9CM
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = chkShow9CM
+          Left = 279
           Height = 23
-          Top = 7
-          Width = 93
+          Top = 75
+          Width = 91
           Caption = '5650 MHz'
           TabOrder = 16
         end
         object chkShow3CM: TCheckBox
-          Left = 391
+          AnchorSideLeft.Control = chkShow6CM
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = chkShow6CM
+          Left = 370
           Height = 23
-          Top = 31
-          Width = 74
+          Top = 75
+          Width = 72
           Caption = '10 GHz'
           TabOrder = 17
         end
         object chkShow125CM: TCheckBox
-          Left = 391
+          AnchorSideLeft.Control = chkShow33CM
+          AnchorSideTop.Control = chkShow3CM
+          Left = 453
           Height = 23
-          Top = 55
-          Width = 74
+          Top = 75
+          Width = 72
           Caption = '24 GHz'
           TabOrder = 18
         end
         object chkShow6MM: TCheckBox
-          Left = 391
+          AnchorSideLeft.Control = chkShow23CM
+          AnchorSideTop.Control = chkShow125CM
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 23
-          Top = 79
-          Width = 70
-          Caption = '47GHz'
+          Top = 98
+          Width = 72
+          Caption = '47 GHz'
           TabOrder = 19
         end
         object chkShow4MM: TCheckBox
-          Left = 391
+          AnchorSideLeft.Control = chkShow13CM
+          AnchorSideTop.Control = chkShow6MM
+          Left = 97
           Height = 23
-          Top = 103
-          Width = 74
+          Top = 98
+          Width = 72
           Caption = '76 GHz'
           TabOrder = 20
         end
+        object chkShow25MM: TCheckBox
+          AnchorSideLeft.Control = chkShow9CM
+          AnchorSideTop.Control = chkShow4MM
+          Left = 188
+          Height = 23
+          Top = 98
+          Width = 80
+          Caption = '122 GHz'
+          TabOrder = 21
+        end
+        object chkShow2MM: TCheckBox
+          AnchorSideLeft.Control = chkShow6CM
+          AnchorSideTop.Control = chkShow25MM
+          Left = 279
+          Height = 23
+          Top = 98
+          Width = 80
+          Caption = '134 GHz'
+          TabOrder = 22
+        end
+        object chkShow1MM: TCheckBox
+          AnchorSideLeft.Control = chkShow3CM
+          AnchorSideTop.Control = chkShow2MM
+          Left = 370
+          Height = 23
+          Top = 98
+          Width = 80
+          Caption = '241 GHz'
+          TabOrder = 23
+        end
         object chkCW: TCheckBox
+          AnchorSideLeft.Control = chkShow6MM
+          AnchorSideTop.Control = chkShow6MM
+          AnchorSideTop.Side = asrBottom
           Left = 6
           Height = 23
-          Top = 126
+          Top = 121
           Width = 49
           Caption = 'CW'
-          TabOrder = 21
+          TabOrder = 24
         end
         object chkSSB: TCheckBox
-          Left = 110
+          AnchorSideLeft.Control = chkShow13CM
+          AnchorSideTop.Control = chkCW
+          Left = 97
           Height = 23
-          Top = 126
+          Top = 121
           Width = 51
           Caption = 'SSB'
-          TabOrder = 22
+          TabOrder = 25
         end
         object edtDoNotShow: TEdit
+          AnchorSideLeft.Control = gbDXCSpots
+          AnchorSideBottom.Control = chkShowDxcCountry
           Left = 6
-          Height = 25
-          Top = 178
+          Height = 34
+          Top = 196
           Width = 471
-          TabOrder = 23
+          Anchors = [akLeft, akBottom]
+          BorderSpacing.Left = 6
+          TabOrder = 26
         end
         object chkShow4M: TCheckBox
-          Left = 207
+          AnchorSideLeft.Control = chkShow13CM
+          AnchorSideTop.Control = chkShow6M
+          Left = 97
           Height = 23
-          Top = 55
-          Width = 73
+          Top = 52
+          Width = 72
           Caption = '70MHz'
-          TabOrder = 24
+          TabOrder = 27
         end
         object chkShow60M: TCheckBox
-          Left = 6
+          AnchorSideLeft.Control = chkShow3CM
+          AnchorSideTop.Control = chkShow80M
+          Left = 370
           Height = 23
-          Top = 79
-          Width = 68
+          Top = 6
+          Width = 67
           Caption = '5 MHz'
-          TabOrder = 25
+          TabOrder = 28
         end
         object chkShow125M: TCheckBox
-          Left = 207
+          AnchorSideLeft.Control = chkShow6CM
+          AnchorSideTop.Control = chkShow2M
+          Left = 279
           Height = 23
-          Top = 103
-          Width = 85
+          Top = 52
+          Width = 83
           Caption = '220 MHz'
-          TabOrder = 26
+          TabOrder = 29
         end
         object chkShow33CM: TCheckBox
-          Left = 294
+          AnchorSideLeft.Control = chkShow70CM
+          AnchorSideLeft.Side = asrBottom
+          AnchorSideTop.Control = chkShow70CM
+          Left = 453
           Height = 23
-          Top = 31
-          Width = 85
+          Top = 52
+          Width = 83
           Caption = '900 MHz'
-          TabOrder = 27
+          TabOrder = 30
         end
         object chkShow630M: TCheckBox
-          Left = 207
+          AnchorSideLeft.Control = chkShow13CM
+          AnchorSideTop.Control = chkShow2190M
+          Left = 97
           Height = 23
-          Top = 126
-          Width = 76
+          Top = 6
+          Width = 75
           Caption = '472kHz'
-          TabOrder = 28
+          TabOrder = 31
         end
         object chkShowDxcCountry: TCheckBox
+          AnchorSideLeft.Control = gbDXCSpots
           AnchorSideBottom.Control = gbDXCSpots
           AnchorSideBottom.Side = asrBottom
           Left = 6
           Height = 23
-          Top = 206
-          Width = 308
+          Top = 230
+          Width = 300
           Anchors = [akLeft, akBottom]
+          BorderSpacing.Left = 6
           BorderSpacing.Bottom = 1
           Caption = 'Show country name in the DX cluster spot'
-          TabOrder = 29
+          TabOrder = 32
         end
       end
       object gbDXCAlert: TGroupBox
@@ -4839,47 +5187,65 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = gbDXCSpots
         AnchorSideTop.Side = asrBottom
         Left = 6
-        Height = 152
+        Height = 144
         Top = 363
-        Width = 513
+        Width = 600
         BorderSpacing.Left = 6
         BorderSpacing.Top = 1
         Caption = ' Callsign alert '
-        ClientHeight = 126
-        ClientWidth = 507
+        ClientHeight = 142
+        ClientWidth = 598
         TabOrder = 2
         object btnAlertCallsigns: TButton
-          Left = 10
+          AnchorSideLeft.Control = gbDXCAlert
+          AnchorSideTop.Control = gbDXCAlert
+          Left = 6
           Height = 25
-          Top = 8
+          Top = 6
           Width = 202
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 6
           Caption = 'List of callsigns'
           OnClick = btnAlertCallsignsClick
           TabOrder = 0
         end
         object Label192: TLabel
-          Left = 10
+          AnchorSideLeft.Control = gbDXCAlert
+          AnchorSideTop.Control = btnAlertCallsigns
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 17
-          Top = 48
-          Width = 295
+          Top = 43
+          Width = 289
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 12
           Caption = 'Run this command when callsign is spotted:'
-          ParentColor = False
         end
         object edtAlertCmd: TEdit
-          Left = 10
-          Height = 25
-          Top = 72
+          AnchorSideLeft.Control = gbDXCAlert
+          AnchorSideTop.Control = Label192
+          AnchorSideTop.Side = asrBottom
+          Left = 6
+          Height = 34
+          Top = 63
           Width = 471
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 3
+          OnExit = edtAlertCmdExit
           TabOrder = 1
           Text = 'edtAlertCmd'
         end
         object Label198: TLabel
-          Left = 10
+          AnchorSideLeft.Control = gbDXCAlert
+          AnchorSideTop.Control = edtAlertCmd
+          AnchorSideTop.Side = asrBottom
+          Left = 6
           Height = 17
-          Top = 110
-          Width = 302
+          Top = 103
+          Width = 343
+          BorderSpacing.Left = 6
+          BorderSpacing.Top = 6
           Caption = 'Macros: $CALLSIGN, $BAND, $MODE, $FREQ, $MSG'
-          ParentColor = False
         end
       end
       object gbDXCConnect: TGroupBox
@@ -4887,14 +5253,14 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = gbDXCAlert
         AnchorSideTop.Side = asrBottom
         Left = 6
-        Height = 92
-        Top = 516
-        Width = 514
+        Height = 100
+        Top = 508
+        Width = 600
         BorderSpacing.Left = 6
         BorderSpacing.Top = 1
         Caption = 'Connect'
-        ClientHeight = 66
-        ClientWidth = 508
+        ClientHeight = 98
+        ClientWidth = 598
         TabOrder = 3
         object chkConToDXC: TCheckBox
           AnchorSideLeft.Control = gbDXCConnect
@@ -4903,8 +5269,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Side = asrBottom
           Left = 5
           Height = 23
-          Top = 43
-          Width = 325
+          Top = 75
+          Width = 322
           Anchors = [akLeft, akBottom]
           BorderSpacing.Left = 5
           Caption = 'Connect to DX cluster after program startup'
@@ -4914,8 +5280,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = gbDXCConnect
           AnchorSideBottom.Control = chkConToDXC
           Left = 6
-          Height = 25
-          Top = 17
+          Height = 34
+          Top = 40
           Width = 471
           Anchors = [akLeft, akBottom]
           BorderSpacing.Left = 6
@@ -4924,47 +5290,45 @@ object frmPreferences: TfrmPreferences
         end
         object Label51: TLabel
           AnchorSideLeft.Control = gbDXCConnect
+          AnchorSideTop.Control = gbDXCConnect
           AnchorSideBottom.Control = edtStartConCmd
           Left = 6
           Height = 17
-          Top = -4
-          Width = 495
+          Top = 19
+          Width = 518
           Anchors = [akLeft, akBottom]
           BorderSpacing.Left = 6
           BorderSpacing.Bottom = 4
-          Caption = 'Send these commands to telnet DXCluster when connected (comma separated)'
-          ParentColor = False
+          Caption = 'Send these commands to telnet DXCluster when connected (use ; as delimiter)'
         end
       end
     end
     object tabFont: TTabSheet
       Caption = 'Fonts'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox7: TGroupBox
         Left = 14
         Height = 352
         Top = 3
         Width = 496
         Caption = ' Font settings '
-        ClientHeight = 326
-        ClientWidth = 490
+        ClientHeight = 350
+        ClientWidth = 494
         TabOrder = 0
         object lblButtons: TLabel
           Left = 12
           Height = 17
           Top = 39
-          Width = 288
+          Width = 295
           Caption = 'Buttons, labels, radiobuttons, checkboxes ...'
-          ParentColor = False
         end
         object lblbFont: TLabel
           Left = 12
           Height = 17
           Top = 71
-          Width = 53
+          Width = 57
           Caption = 'lblbFont'
-          ParentColor = False
         end
         object Bevel2: TBevel
           Left = 12
@@ -4976,17 +5340,15 @@ object frmPreferences: TfrmPreferences
           Left = 12
           Height = 17
           Top = 119
-          Width = 228
+          Width = 231
           Caption = 'Edits, comboboxes, memoboxes ...'
-          ParentColor = False
         end
         object lbleFont: TLabel
           Left = 12
           Height = 17
           Top = 151
-          Width = 53
+          Width = 56
           Caption = 'lbleFont'
-          ParentColor = False
         end
         object Bevel3: TBevel
           Left = 12
@@ -4998,17 +5360,15 @@ object frmPreferences: TfrmPreferences
           Left = 12
           Height = 17
           Top = 199
-          Width = 60
+          Width = 63
           Caption = 'Statistics'
-          ParentColor = False
         end
         object lblgFont: TLabel
           Left = 12
           Height = 17
           Top = 231
-          Width = 53
+          Width = 56
           Caption = 'lblgFont'
-          ParentColor = False
         end
         object Bevel4: TBevel
           Left = 12
@@ -5020,17 +5380,15 @@ object frmPreferences: TfrmPreferences
           Left = 12
           Height = 17
           Top = 279
-          Width = 59
+          Width = 61
           Caption = 'QSO lists'
-          ParentColor = False
         end
         object lblqFont: TLabel
           Left = 12
           Height = 17
           Top = 311
-          Width = 53
+          Width = 57
           Caption = 'lblqFont'
-          ParentColor = False
         end
         object btnSelbFont: TButton
           Left = 382
@@ -5076,7 +5434,7 @@ object frmPreferences: TfrmPreferences
           Left = 12
           Height = 23
           Top = 7
-          Width = 157
+          Width = 160
           Caption = 'Use default settings'
           TabOrder = 4
         end
@@ -5087,15 +5445,15 @@ object frmPreferences: TfrmPreferences
         Top = 363
         Width = 497
         Caption = 'Gridlist settings'
-        ClientHeight = 62
-        ClientWidth = 491
+        ClientHeight = 70
+        ClientWidth = 495
         TabOrder = 1
         object chkgridgreenbar: TCheckBox
           Left = 12
           Height = 23
           Hint = 'Set every second line of grid lists to other color'
           Top = 7
-          Width = 137
+          Width = 141
           Caption = '''green bar'' paper'
           ParentShowHint = False
           ShowHint = True
@@ -5117,7 +5475,7 @@ object frmPreferences: TfrmPreferences
           Height = 23
           Hint = 'Set title line of gridlists to bold'
           Top = 7
-          Width = 113
+          Width = 115
           Caption = 'Bold title line'
           ParentShowHint = False
           ShowHint = True
@@ -5140,7 +5498,7 @@ object frmPreferences: TfrmPreferences
           Height = 23
           Hint = 'Set dots instead spaces in DXCC stat grid'
           Top = 7
-          Width = 180
+          Width = 184
           Caption = 'Set dots instead spaces'
           ParentShowHint = False
           ShowHint = True
@@ -5151,15 +5509,15 @@ object frmPreferences: TfrmPreferences
     object tabWazItu: TTabSheet
       Caption = 'WAZ, ITU zones'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox8: TGroupBox
         Left = 14
         Height = 230
         Top = 11
         Width = 233
         Caption = 'WAZ colors '
-        ClientHeight = 204
-        ClientWidth = 227
+        ClientHeight = 228
+        ClientWidth = 231
         TabOrder = 0
         object Label23: TLabel
           Left = 13
@@ -5167,27 +5525,24 @@ object frmPreferences: TfrmPreferences
           Top = 15
           Width = 106
           Caption = 'New WAZ zone: '
-          ParentColor = False
         end
         object Label52: TLabel
           Left = 13
           Height = 17
           Top = 78
-          Width = 142
+          Width = 143
           Caption = 'New band WAZ zone: '
-          ParentColor = False
         end
         object Label53: TLabel
           Left = 13
           Height = 17
           Top = 139
-          Width = 176
+          Width = 180
           Caption = 'QSL needed for WAZ zone: '
-          ParentColor = False
         end
         object clboxNewWaz: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 39
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5196,7 +5551,7 @@ object frmPreferences: TfrmPreferences
         end
         object clBoxBandWAZ: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 103
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5205,7 +5560,7 @@ object frmPreferences: TfrmPreferences
         end
         object clBoxQSLWAZ: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 164
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5219,16 +5574,15 @@ object frmPreferences: TfrmPreferences
         Top = 11
         Width = 233
         Caption = 'ITU colors '
-        ClientHeight = 204
-        ClientWidth = 227
+        ClientHeight = 228
+        ClientWidth = 231
         TabOrder = 1
         object Label54: TLabel
           Left = 13
           Height = 17
           Top = 15
-          Width = 98
+          Width = 97
           Caption = 'New ITU zone: '
-          ParentColor = False
         end
         object Label55: TLabel
           Left = 13
@@ -5236,19 +5590,17 @@ object frmPreferences: TfrmPreferences
           Top = 78
           Width = 134
           Caption = 'New band ITU zone: '
-          ParentColor = False
         end
         object Label56: TLabel
           Left = 13
           Height = 17
           Top = 139
-          Width = 168
+          Width = 171
           Caption = 'QSL needed for ITU zone: '
-          ParentColor = False
         end
         object clboxNewITU: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 39
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5257,7 +5609,7 @@ object frmPreferences: TfrmPreferences
         end
         object clBoxBandITU: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 103
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5266,7 +5618,7 @@ object frmPreferences: TfrmPreferences
         end
         object clBoxQSLITU: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 164
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5278,7 +5630,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 251
-        Width = 90
+        Width = 91
         Caption = 'Show info'
         TabOrder = 2
       end
@@ -5286,7 +5638,7 @@ object frmPreferences: TfrmPreferences
         Left = 262
         Height = 23
         Top = 251
-        Width = 90
+        Width = 91
         Caption = 'Show info'
         TabOrder = 3
       end
@@ -5294,35 +5646,33 @@ object frmPreferences: TfrmPreferences
     object tabIOTA: TTabSheet
       Caption = 'IOTA'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox10: TGroupBox
         Left = 22
         Height = 168
         Top = 19
         Width = 249
         Caption = 'IOTA colors'
-        ClientHeight = 142
-        ClientWidth = 243
+        ClientHeight = 166
+        ClientWidth = 247
         TabOrder = 0
         object Label57: TLabel
           Left = 13
           Height = 17
           Top = 13
-          Width = 67
+          Width = 69
           Caption = 'New IOTA:'
-          ParentColor = False
         end
         object Label58: TLabel
           Left = 13
           Height = 17
           Top = 80
-          Width = 141
+          Width = 146
           Caption = 'QSL needed for IOTA: '
-          ParentColor = False
         end
         object clboxNewIOTA: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 39
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5331,7 +5681,7 @@ object frmPreferences: TfrmPreferences
         end
         object clboxQSLIOTA: TColorBox
           Left = 13
-          Height = 33
+          Height = 29
           Top = 103
           Width = 127
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5343,7 +5693,7 @@ object frmPreferences: TfrmPreferences
         Left = 22
         Height = 23
         Top = 203
-        Width = 90
+        Width = 91
         Caption = 'Show info'
         TabOrder = 1
       end
@@ -5351,7 +5701,7 @@ object frmPreferences: TfrmPreferences
     object tabMemebership: TTabSheet
       Caption = 'Membership'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox11: TGroupBox
         AnchorSideLeft.Control = tabMemebership
         AnchorSideTop.Control = tabMemebership
@@ -5362,8 +5712,8 @@ object frmPreferences: TfrmPreferences
         BorderSpacing.Left = 18
         BorderSpacing.Top = 6
         Caption = 'First club'
-        ClientHeight = 74
-        ClientWidth = 578
+        ClientHeight = 98
+        ClientWidth = 582
         TabOrder = 0
         object cmbFirstClub: TComboBox
           AnchorSideLeft.Control = GroupBox11
@@ -5371,10 +5721,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 12
           Height = 33
-          Top = 25
+          Top = 33
           Width = 293
           BorderSpacing.Left = 12
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -5415,11 +5765,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 317
           Height = 17
-          Top = 33
+          Top = 41
           Width = 39
           BorderSpacing.Left = 12
           Caption = 'Since:'
-          ParentColor = False
         end
         object edtClub1Date: TEdit
           AnchorSideLeft.Control = Label103
@@ -5428,7 +5777,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 368
           Height = 34
-          Top = 24
+          Top = 32
           Width = 96
           BorderSpacing.Left = 12
           TabOrder = 3
@@ -5444,8 +5793,8 @@ object frmPreferences: TfrmPreferences
         Width = 584
         BorderSpacing.Top = 6
         Caption = 'Second club'
-        ClientHeight = 74
-        ClientWidth = 578
+        ClientHeight = 98
+        ClientWidth = 582
         TabOrder = 1
         object cmbSecondClub: TComboBox
           AnchorSideLeft.Control = GroupBox12
@@ -5453,10 +5802,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 12
           Height = 33
-          Top = 25
+          Top = 33
           Width = 293
           BorderSpacing.Left = 12
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -5497,11 +5846,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 317
           Height = 17
-          Top = 33
+          Top = 41
           Width = 39
           BorderSpacing.Left = 12
           Caption = 'Since:'
-          ParentColor = False
         end
         object edtClub2Date: TEdit
           AnchorSideLeft.Control = Label104
@@ -5510,7 +5858,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 368
           Height = 34
-          Top = 24
+          Top = 32
           Width = 96
           BorderSpacing.Left = 12
           TabOrder = 3
@@ -5526,8 +5874,8 @@ object frmPreferences: TfrmPreferences
         Width = 584
         BorderSpacing.Top = 6
         Caption = 'Third club'
-        ClientHeight = 74
-        ClientWidth = 578
+        ClientHeight = 98
+        ClientWidth = 582
         TabOrder = 2
         object cmbThirdClub: TComboBox
           AnchorSideLeft.Control = GroupBox13
@@ -5535,10 +5883,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 12
           Height = 33
-          Top = 25
+          Top = 33
           Width = 293
           BorderSpacing.Left = 12
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -5579,11 +5927,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 317
           Height = 17
-          Top = 33
+          Top = 41
           Width = 39
           BorderSpacing.Left = 12
           Caption = 'Since:'
-          ParentColor = False
         end
         object edtClub3Date: TEdit
           AnchorSideLeft.Control = Label105
@@ -5592,7 +5939,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 368
           Height = 34
-          Top = 24
+          Top = 32
           Width = 96
           BorderSpacing.Left = 12
           TabOrder = 3
@@ -5608,8 +5955,8 @@ object frmPreferences: TfrmPreferences
         Width = 584
         BorderSpacing.Top = 6
         Caption = 'Fourth club'
-        ClientHeight = 74
-        ClientWidth = 578
+        ClientHeight = 98
+        ClientWidth = 582
         TabOrder = 3
         object cmbFourthClub: TComboBox
           AnchorSideLeft.Control = GroupBox14
@@ -5617,10 +5964,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 12
           Height = 33
-          Top = 25
+          Top = 33
           Width = 293
           BorderSpacing.Left = 12
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -5661,11 +6008,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 317
           Height = 17
-          Top = 33
+          Top = 41
           Width = 39
           BorderSpacing.Left = 12
           Caption = 'Since:'
-          ParentColor = False
         end
         object edtClub4Date: TEdit
           AnchorSideLeft.Control = Label106
@@ -5674,7 +6020,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 368
           Height = 34
-          Top = 24
+          Top = 32
           Width = 96
           BorderSpacing.Left = 12
           TabOrder = 3
@@ -5690,8 +6036,8 @@ object frmPreferences: TfrmPreferences
         Width = 584
         BorderSpacing.Top = 6
         Caption = 'Fifth club'
-        ClientHeight = 74
-        ClientWidth = 578
+        ClientHeight = 98
+        ClientWidth = 582
         TabOrder = 4
         object cmbFifthClub: TComboBox
           AnchorSideLeft.Control = GroupBox15
@@ -5699,10 +6045,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 12
           Height = 33
-          Top = 25
+          Top = 33
           Width = 293
           BorderSpacing.Left = 12
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -5743,11 +6089,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 317
           Height = 17
-          Top = 33
+          Top = 41
           Width = 39
           BorderSpacing.Left = 12
           Caption = 'Since:'
-          ParentColor = False
         end
         object edtClub5Date: TEdit
           AnchorSideLeft.Control = Label107
@@ -5756,7 +6101,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 368
           Height = 34
-          Top = 24
+          Top = 32
           Width = 96
           BorderSpacing.Left = 12
           TabOrder = 3
@@ -5769,7 +6114,7 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 23
         Top = 556
-        Width = 391
+        Width = 402
         BorderSpacing.Top = 26
         Caption = 'Check for updated list of members when program starts'
         TabOrder = 5
@@ -5779,10 +6124,10 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrCenter
         AnchorSideRight.Control = GroupBox14
         AnchorSideRight.Side = asrBottom
-        Left = 508
+        Left = 506
         Height = 33
         Top = 551
-        Width = 94
+        Width = 96
         Anchors = [akTop, akRight]
         AutoSize = True
         Caption = 'Update now'
@@ -5793,15 +6138,15 @@ object frmPreferences: TfrmPreferences
     object tabBandMap: TTabSheet
       Caption = 'Bandmap'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox16: TGroupBox
         Left = 13
         Height = 61
         Top = 3
         Width = 572
         Caption = ' Font '
-        ClientHeight = 35
-        ClientWidth = 566
+        ClientHeight = 43
+        ClientWidth = 570
         TabOrder = 0
         object lblBandMapFont: TLabel
           Left = 16
@@ -5809,7 +6154,6 @@ object frmPreferences: TfrmPreferences
           Top = 6
           Width = 383
           AutoSize = False
-          ParentColor = False
         end
         object btnSelectBandFont: TButton
           Left = 464
@@ -5827,20 +6171,19 @@ object frmPreferences: TfrmPreferences
         Top = 74
         Width = 572
         Caption = ' Color '
-        ClientHeight = 36
-        ClientWidth = 566
+        ClientHeight = 60
+        ClientWidth = 570
         TabOrder = 1
         object Label61: TLabel
           Left = 6
           Height = 17
           Top = 11
-          Width = 326
+          Width = 333
           Caption = 'Select color of entry added from new qso window '
-          ParentColor = False
         end
         object cmbQSOBandColor: TColorBox
           Left = 460
-          Height = 33
+          Height = 29
           Top = 0
           Width = 100
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5871,7 +6214,7 @@ object frmPreferences: TfrmPreferences
         Left = 238
         Height = 23
         Top = 330
-        Width = 173
+        Width = 172
         Caption = 'Show only active band'
         TabOrder = 4
       end
@@ -5879,7 +6222,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 354
-        Width = 178
+        Width = 177
         Caption = 'Show only active mode'
         TabOrder = 5
       end
@@ -5897,32 +6240,29 @@ object frmPreferences: TfrmPreferences
         Top = 146
         Width = 572
         Caption = ' Band Map Entries Aging (in minutes) '
-        ClientHeight = 42
-        ClientWidth = 566
+        ClientHeight = 66
+        ClientWidth = 570
         TabOrder = 7
         object Label62: TLabel
           Left = 11
           Height = 17
           Top = 14
-          Width = 92
+          Width = 95
           Caption = 'The first after '
-          ParentColor = False
         end
         object Label63: TLabel
           Left = 163
           Height = 17
           Top = 14
-          Width = 110
+          Width = 113
           Caption = 'the second after '
-          ParentColor = False
         end
         object Label64: TLabel
           Left = 350
           Height = 17
           Top = 14
-          Width = 103
+          Width = 108
           Caption = 'disappear after '
-          ParentColor = False
         end
         object edtFirst: TEdit
           Left = 104
@@ -5955,16 +6295,15 @@ object frmPreferences: TfrmPreferences
         Top = 230
         Width = 369
         Caption = 'Band map entries (from dxcluster)'
-        ClientHeight = 66
-        ClientWidth = 363
+        ClientHeight = 90
+        ClientWidth = 367
         TabOrder = 8
         object Label65: TLabel
           Left = 6
           Height = 17
           Top = 41
-          Width = 38
+          Width = 41
           Caption = 'Color:'
-          ParentColor = False
         end
         object Button1: TButton
           Left = 239
@@ -5986,7 +6325,7 @@ object frmPreferences: TfrmPreferences
         end
         object cmbFrmDXCColor: TColorBox
           Left = 67
-          Height = 33
+          Height = 29
           Top = 35
           Width = 113
           Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
@@ -5997,7 +6336,7 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 23
           Top = 6
-          Width = 228
+          Width = 230
           Caption = 'Use the same color as the spot'
           OnChange = chkUseDXCColorsChange
           TabOrder = 3
@@ -6007,7 +6346,7 @@ object frmPreferences: TfrmPreferences
         Left = 238
         Height = 23
         Top = 354
-        Width = 285
+        Width = 295
         Caption = 'Delete station from bandmap after QSO'
         TabOrder = 9
       end
@@ -6015,7 +6354,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 381
-        Width = 296
+        Width = 304
         Caption = 'Add station to bandmap after saving QSO'
         TabOrder = 10
       end
@@ -6023,7 +6362,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 408
-        Width = 625
+        Width = 632
         Caption = 'Ignore DX spots with freq equals to the start of the band (21.000, 14.000 etc., usually notes)'
         TabOrder = 11
       end
@@ -6031,7 +6370,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 435
-        Width = 545
+        Width = 553
         Caption = 'When TRX control is not active, use frequency and mode from NewQSO window'
         TabOrder = 12
       end
@@ -6039,7 +6378,7 @@ object frmPreferences: TfrmPreferences
         Left = 16
         Height = 23
         Top = 464
-        Width = 411
+        Width = 406
         Caption = 'Use ''+'' key to add spots to band map (CTRL+A is a deault)'
         TabOrder = 13
       end
@@ -6049,15 +6388,15 @@ object frmPreferences: TfrmPreferences
         Top = 232
         Width = 201
         Caption = 'Column widths'
-        ClientHeight = 63
-        ClientWidth = 195
+        ClientHeight = 87
+        ClientWidth = 199
         TabOrder = 14
         object seFreqWidth: TSpinEdit
           AnchorSideLeft.Control = lbFreqW
           AnchorSideLeft.Side = asrCenter
           AnchorSideTop.Control = lbFreqW
           AnchorSideTop.Side = asrBottom
-          Left = 12
+          Left = 14
           Height = 34
           Top = 29
           Width = 55
@@ -6073,7 +6412,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = lbCallW
           AnchorSideTop.Side = asrBottom
           AnchorSideRight.Side = asrBottom
-          Left = 126
+          Left = 133
           Height = 34
           Top = 29
           Width = 55
@@ -6089,42 +6428,40 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 6
-          Width = 66
+          Width = 71
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'FreqWidth'
-          ParentColor = False
         end
         object lbCallW: TLabel
           AnchorSideLeft.Control = lbFreqW
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = lbFreqW
-          Left = 122
+          Left = 127
           Height = 17
           Top = 6
-          Width = 63
+          Width = 66
           BorderSpacing.Left = 50
           Caption = 'CallWidth'
-          ParentColor = False
         end
       end
     end
     object tabXplanet: TTabSheet
       Caption = 'xplanet support'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object GroupBox21: TGroupBox
         Left = 14
         Height = 89
         Top = 11
         Width = 521
         Caption = ' Path for the xplanet  '
-        ClientHeight = 63
-        ClientWidth = 515
+        ClientHeight = 71
+        ClientWidth = 519
         TabOrder = 10
         object edtXplanetPath: TEdit
           Left = 6
-          Height = 25
+          Height = 34
           Top = 15
           Width = 432
           TabOrder = 0
@@ -6137,16 +6474,15 @@ object frmPreferences: TfrmPreferences
         Top = 107
         Width = 113
         Caption = ' Window size '
-        ClientHeight = 86
-        ClientWidth = 107
+        ClientHeight = 110
+        ClientWidth = 111
         TabOrder = 1
         object Label66: TLabel
           Left = 8
           Height = 17
           Top = 3
-          Width = 50
+          Width = 48
           Caption = 'Height:'
-          ParentColor = False
         end
         object Label67: TLabel
           Left = 6
@@ -6154,18 +6490,17 @@ object frmPreferences: TfrmPreferences
           Top = 43
           Width = 45
           Caption = 'Width:'
-          ParentColor = False
         end
         object edtXHeight: TEdit
           Left = 64
-          Height = 25
+          Height = 34
           Top = 3
           Width = 41
           TabOrder = 0
         end
         object edtXWidth: TEdit
           Left = 64
-          Height = 25
+          Height = 34
           Top = 43
           Width = 41
           TabOrder = 1
@@ -6177,8 +6512,8 @@ object frmPreferences: TfrmPreferences
         Top = 107
         Width = 129
         Caption = ' Window position '
-        ClientHeight = 86
-        ClientWidth = 123
+        ClientHeight = 110
+        ClientWidth = 127
         TabOrder = 2
         object Label68: TLabel
           Left = 8
@@ -6186,26 +6521,24 @@ object frmPreferences: TfrmPreferences
           Top = 3
           Width = 29
           Caption = 'Top:'
-          ParentColor = False
         end
         object Label69: TLabel
           Left = 8
           Height = 17
           Top = 43
-          Width = 32
+          Width = 31
           Caption = 'Left:'
-          ParentColor = False
         end
         object edtXTop: TEdit
           Left = 64
-          Height = 25
+          Height = 34
           Top = 3
           Width = 52
           TabOrder = 0
         end
         object edtXLeft: TEdit
           Left = 64
-          Height = 25
+          Height = 34
           Top = 43
           Width = 52
           TabOrder = 1
@@ -6224,7 +6557,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 352
-        Width = 270
+        Width = 266
         Caption = 'Show xplanet after program startup'
         TabOrder = 3
       end
@@ -6232,7 +6565,7 @@ object frmPreferences: TfrmPreferences
         Left = 320
         Height = 23
         Top = 352
-        Width = 217
+        Width = 211
         Caption = 'Close xplanet with CQRLOG '
         TabOrder = 4
       end
@@ -6242,16 +6575,15 @@ object frmPreferences: TfrmPreferences
         Top = 107
         Width = 298
         Caption = ' Refresh '
-        ClientHeight = 86
-        ClientWidth = 292
+        ClientHeight = 110
+        ClientWidth = 296
         TabOrder = 5
         object Label70: TLabel
           Left = 8
           Height = 17
           Top = 3
-          Width = 150
+          Width = 144
           Caption = 'Refresh xplanet every'
-          ParentColor = False
         end
         object Label71: TLabel
           Left = 240
@@ -6259,15 +6591,13 @@ object frmPreferences: TfrmPreferences
           Top = 3
           Width = 26
           Caption = 'sec.'
-          ParentColor = False
         end
         object Label72: TLabel
           Left = 6
           Height = 17
           Top = 43
-          Width = 65
+          Width = 63
           Caption = 'Show last'
-          ParentColor = False
         end
         object Label73: TLabel
           Left = 136
@@ -6275,18 +6605,17 @@ object frmPreferences: TfrmPreferences
           Top = 43
           Width = 38
           Caption = 'spots'
-          ParentColor = False
         end
         object edtXRefresh: TEdit
           Left = 168
-          Height = 25
+          Height = 34
           Top = 3
           Width = 49
           TabOrder = 0
         end
         object edtXLastSpots: TEdit
           Left = 83
-          Height = 25
+          Height = 34
           Top = 43
           Width = 42
           TabOrder = 1
@@ -6307,8 +6636,8 @@ object frmPreferences: TfrmPreferences
         ChildSizing.ShrinkVertical = crsScaleChilds
         ChildSizing.Layout = cclLeftToRightThenTopToBottom
         ChildSizing.ControlsPerLine = 1
-        ClientHeight = 86
-        ClientWidth = 251
+        ClientHeight = 94
+        ClientWidth = 255
         Items.Strings = (
           '3D'
           'azimuthal'
@@ -6332,8 +6661,8 @@ object frmPreferences: TfrmPreferences
         ChildSizing.ShrinkVertical = crsScaleChilds
         ChildSizing.Layout = cclLeftToRightThenTopToBottom
         ChildSizing.ControlsPerLine = 1
-        ClientHeight = 86
-        ClientWidth = 250
+        ClientHeight = 94
+        ClientWidth = 254
         Items.Strings = (
           'dxcluster'
           'bandmap'
@@ -6343,7 +6672,7 @@ object frmPreferences: TfrmPreferences
       end
       object cmbXplanetColor: TColorBox
         Left = 240
-        Height = 25
+        Height = 29
         Top = 381
         Width = 100
         Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames, cbCustomColors]
@@ -6354,7 +6683,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 386
-        Width = 205
+        Width = 202
         Caption = 'Use this xplanet font color'
         TabOrder = 9
       end
@@ -6364,12 +6693,12 @@ object frmPreferences: TfrmPreferences
         Top = 424
         Width = 521
         Caption = ' Center locator for xplanet (if different from default)'
-        ClientHeight = 46
-        ClientWidth = 515
+        ClientHeight = 54
+        ClientWidth = 519
         TabOrder = 0
         object edtXplanetLoc: TEdit
           Left = 6
-          Height = 25
+          Height = 34
           Top = 15
           Width = 96
           OnChange = edtXplanetLocChange
@@ -6380,7 +6709,7 @@ object frmPreferences: TfrmPreferences
         Left = 14
         Height = 23
         Top = 504
-        Width = 254
+        Width = 247
         Caption = 'Show own position within xplanet'
         TabOrder = 11
       end
@@ -6388,38 +6717,36 @@ object frmPreferences: TfrmPreferences
     object tabZipCode: TTabSheet
       Caption = 'Zip code tracking'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object GroupBox25: TGroupBox
         Left = 6
         Height = 104
         Top = 11
         Width = 545
         Caption = ' First '
-        ClientHeight = 78
-        ClientWidth = 539
+        ClientHeight = 102
+        ClientWidth = 543
         TabOrder = 0
         object Label74: TLabel
           Left = 14
           Height = 17
           Top = 50
-          Width = 97
+          Width = 96
           Caption = 'Save county to'
-          ParentColor = False
         end
         object Label75: TLabel
           Left = 254
           Height = 17
           Top = 50
-          Width = 28
+          Width = 30
           Caption = 'field'
-          ParentColor = False
         end
         object cmbFirstZip: TComboBox
           Left = 14
           Height = 33
           Top = 7
           Width = 224
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -6447,8 +6774,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 46
-          ClientWidth = 178
+          ClientHeight = 54
+          ClientWidth = 182
           Items.Strings = (
             'before town address'
             'after town address'
@@ -6460,7 +6787,7 @@ object frmPreferences: TfrmPreferences
           Height = 29
           Top = 46
           Width = 120
-          ItemHeight = 17
+          ItemHeight = 0
           ItemIndex = 0
           Items.Strings = (
             'county'
@@ -6479,31 +6806,29 @@ object frmPreferences: TfrmPreferences
         Top = 123
         Width = 545
         Caption = ' Second '
-        ClientHeight = 78
-        ClientWidth = 539
+        ClientHeight = 102
+        ClientWidth = 543
         TabOrder = 1
         object Label76: TLabel
           Left = 14
           Height = 17
           Top = 50
-          Width = 97
+          Width = 96
           Caption = 'Save county to'
-          ParentColor = False
         end
         object Label77: TLabel
           Left = 254
           Height = 17
           Top = 50
-          Width = 28
+          Width = 30
           Caption = 'field'
-          ParentColor = False
         end
         object cmbSecondZip: TComboBox
           Left = 14
           Height = 33
           Top = 7
           Width = 224
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -6531,8 +6856,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 49
-          ClientWidth = 178
+          ClientHeight = 57
+          ClientWidth = 182
           Items.Strings = (
             'before town address'
             'after town address'
@@ -6544,7 +6869,7 @@ object frmPreferences: TfrmPreferences
           Height = 29
           Top = 46
           Width = 120
-          ItemHeight = 17
+          ItemHeight = 0
           ItemIndex = 0
           Items.Strings = (
             'county'
@@ -6563,31 +6888,29 @@ object frmPreferences: TfrmPreferences
         Top = 235
         Width = 545
         Caption = ' Third '
-        ClientHeight = 78
-        ClientWidth = 539
+        ClientHeight = 102
+        ClientWidth = 543
         TabOrder = 2
         object Label78: TLabel
           Left = 14
           Height = 17
           Top = 50
-          Width = 97
+          Width = 96
           Caption = 'Save county to'
-          ParentColor = False
         end
         object Label79: TLabel
           Left = 254
           Height = 17
           Top = 50
-          Width = 28
+          Width = 30
           Caption = 'field'
-          ParentColor = False
         end
         object cmbThirdZip: TComboBox
           Left = 14
           Height = 33
           Top = 7
           Width = 224
-          ItemHeight = 25
+          ItemHeight = 0
           Style = csDropDownList
           TabOrder = 0
         end
@@ -6615,8 +6938,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 46
-          ClientWidth = 178
+          ClientHeight = 54
+          ClientWidth = 182
           Items.Strings = (
             'before town address'
             'after town address'
@@ -6628,7 +6951,7 @@ object frmPreferences: TfrmPreferences
           Height = 29
           Top = 44
           Width = 120
-          ItemHeight = 17
+          ItemHeight = 0
           ItemIndex = 0
           Items.Strings = (
             'county'
@@ -6645,18 +6968,17 @@ object frmPreferences: TfrmPreferences
     object tabLoTW: TTabSheet
       Caption = 'LoTW/eQSL support'
       ClientHeight = 672
-      ClientWidth = 687
+      ClientWidth = 836
       object lblLoTWBkg: TLabel
         AnchorSideLeft.Control = cmbLoTWBckColor
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = cmbLoTWBckColor
-        Left = 271
+        Left = 270
         Height = 34
-        Top = 429
-        Width = 327
+        Top = 431
+        Width = 330
         BorderSpacing.Left = 6
         Caption = 'color as a background in DX cluster and band map'#10'for stations using LoTW'
-        ParentColor = False
       end
       object chkIncLoTWDXCC: TCheckBox
         AnchorSideLeft.Control = gbeQSL
@@ -6665,7 +6987,7 @@ object frmPreferences: TfrmPreferences
         Left = 12
         Height = 23
         Top = 347
-        Width = 423
+        Width = 433
         BorderSpacing.Top = 6
         Caption = 'Include LoTW and eQSL confirmed countries in DXCC statistic'
         TabOrder = 0
@@ -6677,7 +6999,7 @@ object frmPreferences: TfrmPreferences
         Left = 12
         Height = 23
         Top = 376
-        Width = 593
+        Width = 608
         BorderSpacing.Top = 6
         Caption = 'Use LoTW and eQSL confirmed countries for New country or New band country etc. info'
         TabOrder = 1
@@ -6692,8 +7014,8 @@ object frmPreferences: TfrmPreferences
         BorderSpacing.Left = 12
         BorderSpacing.Top = 3
         Caption = ' Data for access to ARRL LoTW website '
-        ClientHeight = 46
-        ClientWidth = 510
+        ClientHeight = 70
+        ClientWidth = 514
         TabOrder = 2
         object lblLoUsr: TLabel
           AnchorSideLeft.Control = gbLoTW
@@ -6705,19 +7027,17 @@ object frmPreferences: TfrmPreferences
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'User name:'
-          ParentColor = False
         end
         object lblLoTWpass: TLabel
           AnchorSideTop.Control = lblLoUsr
           AnchorSideRight.Control = edtLoTWPass
-          Left = 320
+          Left = 316
           Height = 17
           Top = 6
-          Width = 69
+          Width = 73
           Anchors = [akTop, akRight]
           BorderSpacing.Right = 6
           Caption = 'Password: '
-          ParentColor = False
         end
         object edtLoTWName: TEdit
           AnchorSideLeft.Control = lblLoUsr
@@ -6752,7 +7072,7 @@ object frmPreferences: TfrmPreferences
         Left = 12
         Height = 23
         Top = 405
-        Width = 398
+        Width = 405
         BorderSpacing.Top = 6
         Caption = 'Show info in New QSO window if station uses LoTW/eQSL'
         TabOrder = 3
@@ -6764,7 +7084,7 @@ object frmPreferences: TfrmPreferences
         Left = 12
         Height = 23
         Top = 434
-        Width = 83
+        Width = 82
         BorderSpacing.Top = 6
         Caption = 'Use this '
         TabOrder = 4
@@ -6774,9 +7094,9 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = chkShowBckLoTW
         AnchorSideTop.Side = asrCenter
-        Left = 101
-        Height = 33
-        Top = 429
+        Left = 100
+        Height = 29
+        Top = 431
         Width = 164
         DefaultColorColor = clMoneyGreen
         NoneColorColor = clMoneyGreen
@@ -6796,8 +7116,8 @@ object frmPreferences: TfrmPreferences
         Width = 516
         BorderSpacing.Top = 6
         Caption = ' Data for access to eQSL website '
-        ClientHeight = 234
-        ClientWidth = 510
+        ClientHeight = 258
+        ClientWidth = 514
         TabOrder = 6
         object lbleQSLUsr: TLabel
           AnchorSideLeft.Control = gbeQSL
@@ -6809,19 +7129,17 @@ object frmPreferences: TfrmPreferences
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'User name:'
-          ParentColor = False
         end
         object lbleQSLPass: TLabel
           AnchorSideTop.Control = lbleQSLUsr
           AnchorSideRight.Control = edteQSLPass
-          Left = 323
+          Left = 319
           Height = 17
           Top = 6
-          Width = 69
+          Width = 73
           Anchors = [akTop, akRight]
           BorderSpacing.Right = 6
           Caption = 'Password: '
-          ParentColor = False
         end
         object edteQSLName: TEdit
           AnchorSideLeft.Control = lbleQSLUsr
@@ -6855,10 +7173,9 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 46
-          Width = 456
+          Width = 468
           BorderSpacing.Top = 6
           Caption = 'eQSL download start address prefix. Your user data is added  as suffix.'
-          ParentColor = False
         end
         object edteQSLStartAddr: TEdit
           AnchorSideLeft.Control = lbleQSLUsr
@@ -6882,10 +7199,9 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 109
-          Width = 432
+          Width = 440
           BorderSpacing.Top = 6
           Caption = 'eQSL download file address prefix. Adi filename is added as suffix.'
-          ParentColor = False
         end
         object edteQSLDnlAddr: TEdit
           AnchorSideLeft.Control = lbleQSLUsr
@@ -6909,10 +7225,9 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 172
-          Width = 390
+          Width = 396
           BorderSpacing.Top = 6
           Caption = 'eQSL view address prefix. Your user data is added  as suffix.'
-          ParentColor = False
         end
         object edteQSLViewAddr: TEdit
           AnchorSideLeft.Control = lbleQSLUsr
@@ -6937,7 +7252,7 @@ object frmPreferences: TfrmPreferences
         Left = 12
         Height = 23
         Top = 469
-        Width = 83
+        Width = 82
         BorderSpacing.Top = 12
         Caption = 'Use this '
         TabOrder = 7
@@ -6947,9 +7262,9 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = chkShowBckEQSL
         AnchorSideTop.Side = asrCenter
-        Left = 101
-        Height = 33
-        Top = 464
+        Left = 100
+        Height = 29
+        Top = 466
         Width = 164
         DefaultColorColor = clSkyBlue
         NoneColorColor = clMoneyGreen
@@ -6963,13 +7278,12 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Control = cmbeQSLBckColor
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = cmbeQSLBckColor
-        Left = 271
+        Left = 270
         Height = 34
-        Top = 464
-        Width = 327
+        Top = 466
+        Width = 330
         BorderSpacing.Left = 6
         Caption = 'color as a background in DX cluster and band map'#10'for stations using eQSL'
-        ParentColor = False
       end
       object chkExpCommet: TCheckBox
         AnchorSideLeft.Control = chkShowBckEQSL
@@ -6978,7 +7292,7 @@ object frmPreferences: TfrmPreferences
         Left = 12
         Height = 23
         Top = 504
-        Width = 315
+        Width = 323
         BorderSpacing.Top = 12
         Caption = 'Upload to eQSL also data in COMMENT field '
         TabOrder = 9
@@ -6986,31 +7300,30 @@ object frmPreferences: TfrmPreferences
     end
     object tabCWInterface: TTabSheet
       Caption = 'CW interface'
-      ClientHeight = 668
-      ClientWidth = 692
+      ClientHeight = 672
+      ClientWidth = 836
       object lbIfaceType: TLabel
         AnchorSideLeft.Control = tabCWInterface
         AnchorSideTop.Control = tabCWInterface
         Left = 18
         Height = 17
         Top = 6
-        Width = 126
+        Width = 124
         BorderSpacing.Left = 18
         BorderSpacing.Top = 6
         Caption = 'CW interface type:'
-        ParentColor = False
       end
       object cmbIfaceType1: TComboBox
         AnchorSideLeft.Control = lblRadio1
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = lblRadio1
         AnchorSideTop.Side = asrCenter
-        Left = 92
-        Height = 25
-        Top = 37
+        Left = 91
+        Height = 34
+        Top = 32
         Width = 170
         BorderSpacing.Left = 6
-        ItemHeight = 17
+        ItemHeight = 0
         ItemIndex = 0
         Items.Strings = (
           'None'
@@ -7029,12 +7342,12 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrBottom
         Left = 18
         Height = 141
-        Top = 103
+        Top = 107
         Width = 497
         BorderSpacing.Top = 12
         Caption = ' WinKeyer USB '
-        ClientHeight = 115
-        ClientWidth = 491
+        ClientHeight = 139
+        ClientWidth = 495
         TabOrder = 1
         object lblWinPort: TLabel
           AnchorSideLeft.Control = gbWinkeyer
@@ -7042,47 +7355,43 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 6
-          Width = 125
+          Width = 123
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Radio1 keyer Port:'
-          ParentColor = False
         end
         object lblWinSpeed: TLabel
           AnchorSideLeft.Control = lblWinPort
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = lblWinPort
-          Left = 176
+          Left = 174
           Height = 17
           Top = 6
-          Width = 123
+          Width = 120
           BorderSpacing.Left = 45
           Caption = 'Default CW speed'
-          ParentColor = False
         end
         object lblWinWPM: TLabel
           AnchorSideLeft.Control = edtWinSpeed
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtWinSpeed
           AnchorSideTop.Side = asrCenter
-          Left = 232
+          Left = 230
           Height = 17
-          Top = 28
-          Width = 37
+          Top = 32
+          Width = 36
           BorderSpacing.Left = 6
           Caption = 'WPM'
-          ParentColor = False
         end
         object lblWinMinSpeed: TLabel
           AnchorSideLeft.Control = lblWinSpeed
           AnchorSideTop.Control = edtWinMinSpeed
           AnchorSideTop.Side = asrCenter
-          Left = 176
+          Left = 174
           Height = 17
-          Top = 75
-          Width = 74
+          Top = 89
+          Width = 73
           Caption = 'Min speed:'
-          ParentColor = False
           Visible = False
         end
         object lblWinMaxSpeed: TLabel
@@ -7090,13 +7399,12 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtWinMaxSpeed
           AnchorSideTop.Side = asrCenter
-          Left = 317
+          Left = 314
           Height = 17
-          Top = 75
-          Width = 77
+          Top = 89
+          Width = 76
           BorderSpacing.Left = 12
           Caption = 'Max speed:'
-          ParentColor = False
           Visible = False
         end
         object edtWinPort1: TEdit
@@ -7104,7 +7412,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = lblWinPort
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 25
+          Height = 34
           Top = 23
           Width = 147
           OnChange = edtWinPort1Change
@@ -7115,8 +7423,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = lblWinSpeed
           AnchorSideTop.Control = lblWinSpeed
           AnchorSideTop.Side = asrBottom
-          Left = 176
-          Height = 26
+          Left = 174
+          Height = 34
           Top = 23
           Width = 50
           MaxValue = 99
@@ -7130,10 +7438,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = lblWinWPM
           AnchorSideTop.Side = asrCenter
           AnchorSideRight.Side = asrBottom
-          Left = 317
+          Left = 314
           Height = 23
-          Top = 25
-          Width = 149
+          Top = 29
+          Width = 148
           BorderSpacing.Right = 6
           Caption = 'Use pot CW speed'
           OnChange = chkPotSpeedChange
@@ -7146,9 +7454,9 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = edtWinPort2
           AnchorSideTop.Side = asrCenter
           AnchorSideRight.Side = asrBottom
-          Left = 255
-          Height = 26
-          Top = 70
+          Left = 252
+          Height = 34
+          Top = 80
           Width = 50
           BorderSpacing.Left = 5
           BorderSpacing.Top = 3
@@ -7163,9 +7471,9 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = lblWinMaxSpeed
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtWinMinSpeed
-          Left = 400
-          Height = 26
-          Top = 70
+          Left = 396
+          Height = 34
+          Top = 80
           Width = 50
           BorderSpacing.Left = 6
           MaxValue = 99
@@ -7181,20 +7489,19 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           Left = 6
           Height = 17
-          Top = 54
-          Width = 125
+          Top = 63
+          Width = 123
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Radio2 keyer Port:'
-          ParentColor = False
         end
         object edtWinPort2: TEdit
           AnchorSideLeft.Control = lblWinPort
           AnchorSideTop.Control = lblWinPort2
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 25
-          Top = 71
+          Height = 34
+          Top = 80
           Width = 147
           OnChange = edtWinPort1Change
           TabOrder = 5
@@ -7207,12 +7514,12 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrBottom
         Left = 18
         Height = 138
-        Top = 250
+        Top = 254
         Width = 497
         BorderSpacing.Top = 6
         Caption = ' cwdaemon '
-        ClientHeight = 112
-        ClientWidth = 491
+        ClientHeight = 136
+        ClientWidth = 495
         TabOrder = 2
         object lblCWAddr: TLabel
           AnchorSideLeft.Control = gbCwkeyer
@@ -7220,11 +7527,10 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 6
-          Width = 59
+          Width = 60
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Address:'
-          ParentColor = False
         end
         object lblCWPort1: TLabel
           AnchorSideLeft.Control = lblCWAddr
@@ -7232,42 +7538,39 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           Left = 6
           Height = 17
-          Top = 48
-          Width = 125
+          Top = 57
+          Width = 123
           Caption = 'Radio1 keyer Port:'
-          ParentColor = False
         end
         object lblCWDefSpeed: TLabel
           AnchorSideLeft.Control = lblCWPort1
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = lblCWAddr
-          Left = 252
+          Left = 250
           Height = 17
           Top = 6
-          Width = 123
+          Width = 120
           BorderSpacing.Left = 121
           Caption = 'Default CW speed'
-          ParentColor = False
         end
         object lblCWWPM: TLabel
           AnchorSideLeft.Control = edtCWSpeed
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtCWSpeed
           AnchorSideTop.Side = asrCenter
-          Left = 308
+          Left = 306
           Height = 17
-          Top = 28
-          Width = 37
+          Top = 32
+          Width = 36
           BorderSpacing.Left = 6
           Caption = 'WPM'
-          ParentColor = False
         end
         object edtCWAddress: TEdit
           AnchorSideLeft.Control = lblCWAddr
           AnchorSideTop.Control = lblCWAddr
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 25
+          Height = 34
           Top = 23
           Width = 139
           TabOrder = 0
@@ -7278,8 +7581,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = lblCWPort1
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 25
-          Top = 65
+          Height = 34
+          Top = 74
           Width = 80
           TabOrder = 1
           Text = 'edtCWPort1'
@@ -7288,8 +7591,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = lblCWDefSpeed
           AnchorSideTop.Control = lblCWDefSpeed
           AnchorSideTop.Side = asrBottom
-          Left = 252
-          Height = 26
+          Left = 250
+          Height = 34
           Top = 23
           Width = 50
           MaxValue = 99
@@ -7300,20 +7603,19 @@ object frmPreferences: TfrmPreferences
         object lblCWPort2: TLabel
           AnchorSideLeft.Control = lblCWDefSpeed
           AnchorSideTop.Control = lblCWPort1
-          Left = 252
+          Left = 250
           Height = 17
-          Top = 48
-          Width = 125
+          Top = 57
+          Width = 123
           Caption = 'Radio2 keyer Port:'
-          ParentColor = False
         end
         object edtCWPort2: TEdit
           AnchorSideLeft.Control = lblCWPort2
           AnchorSideTop.Control = lblCWPort2
           AnchorSideTop.Side = asrBottom
-          Left = 252
-          Height = 25
-          Top = 65
+          Left = 250
+          Height = 34
+          Top = 74
           Width = 80
           TabOrder = 3
           Text = 'edtCWPort2'
@@ -7326,7 +7628,7 @@ object frmPreferences: TfrmPreferences
         AnchorSideRight.Side = asrBottom
         Left = 345
         Height = 25
-        Top = 643
+        Top = 647
         Width = 170
         Anchors = [akTop, akRight]
         BorderSpacing.Top = 6
@@ -7340,12 +7642,12 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrBottom
         Left = 18
         Height = 144
-        Top = 394
+        Top = 398
         Width = 497
         BorderSpacing.Top = 6
         Caption = 'K3NG Key'
-        ClientHeight = 118
-        ClientWidth = 491
+        ClientHeight = 142
+        ClientWidth = 495
         TabOrder = 4
         object lblK3NGPort: TLabel
           AnchorSideLeft.Control = gbK3NGkey
@@ -7353,41 +7655,38 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 6
-          Width = 129
+          Width = 126
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Radio 1 keyer Port:'
-          ParentColor = False
         end
         object lblK3NGSpeed: TLabel
           AnchorSideLeft.Control = lblK3NGPort
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = lblK3NGPort
-          Left = 181
+          Left = 178
           Height = 17
           Top = 6
-          Width = 123
+          Width = 120
           BorderSpacing.Left = 46
           Caption = 'Default CW speed'
-          ParentColor = False
         end
         object lblK3NGWPM: TLabel
           AnchorSideLeft.Control = edtK3NGSpeed
           AnchorSideLeft.Side = asrBottom
-          Left = 237
+          Left = 234
           Height = 17
           Top = 31
-          Width = 37
+          Width = 36
           BorderSpacing.Left = 6
           Caption = 'WPM'
-          ParentColor = False
         end
         object edtK3NGPort1: TEdit
           AnchorSideLeft.Control = lblK3NGPort
           AnchorSideTop.Control = lblK3NGPort
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 25
+          Height = 34
           Top = 23
           Width = 147
           OnChange = edtWinPort1Change
@@ -7398,8 +7697,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = lblK3NGSpeed
           AnchorSideTop.Control = lblK3NGSpeed
           AnchorSideTop.Side = asrBottom
-          Left = 181
-          Height = 26
+          Left = 178
+          Height = 34
           Top = 23
           Width = 50
           MaxValue = 99
@@ -7412,9 +7711,9 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = lblK3NGSerSpeed
           AnchorSideTop.Control = lblK3NGSerSpeed
           AnchorSideTop.Side = asrBottom
-          Left = 181
-          Height = 25
-          Top = 71
+          Left = 178
+          Height = 34
+          Top = 80
           Width = 118
           OnChange = edtK3NGSerSpeedChange
           TabOrder = 2
@@ -7424,13 +7723,12 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Control = lblK3NGSpeed
           AnchorSideTop.Control = edtK3NGPort1
           AnchorSideTop.Side = asrBottom
-          Left = 181
+          Left = 178
           Height = 17
-          Top = 54
+          Top = 63
           Width = 119
           BorderSpacing.Top = 6
           Caption = 'Serial port speed:'
-          ParentColor = False
         end
         object lblK3NGPort2: TLabel
           AnchorSideLeft.Control = gbK3NGkey
@@ -7438,20 +7736,19 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           Left = 6
           Height = 17
-          Top = 54
-          Width = 129
+          Top = 63
+          Width = 126
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Radio 2 keyer Port:'
-          ParentColor = False
         end
         object edtK3NGPort2: TEdit
           AnchorSideLeft.Control = lblK3NGPort
           AnchorSideTop.Control = lblK3NGPort2
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 25
-          Top = 71
+          Height = 34
+          Top = 80
           Width = 147
           OnChange = edtWinPort1Change
           TabOrder = 3
@@ -7464,12 +7761,12 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrBottom
         Left = 18
         Height = 93
-        Top = 544
+        Top = 548
         Width = 497
         BorderSpacing.Top = 6
         Caption = 'HamLib'
-        ClientHeight = 67
-        ClientWidth = 491
+        ClientHeight = 91
+        ClientWidth = 495
         TabOrder = 5
         object lblHamLibSpeed: TLabel
           AnchorSideLeft.Control = gbHamlib
@@ -7477,18 +7774,17 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 6
-          Width = 123
+          Width = 120
           BorderSpacing.Left = 6
           BorderSpacing.Top = 6
           Caption = 'Default CW speed'
-          ParentColor = False
         end
         object edtHamLibSpeed: TSpinEdit
           AnchorSideLeft.Control = lblHamLibSpeed
           AnchorSideTop.Control = lblHamLibSpeed
           AnchorSideTop.Side = asrBottom
           Left = 6
-          Height = 26
+          Height = 34
           Top = 23
           Width = 50
           MaxValue = 99
@@ -7504,34 +7800,31 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrCenter
           Left = 62
           Height = 17
-          Top = 28
-          Width = 37
+          Top = 32
+          Width = 36
           BorderSpacing.Left = 6
           Caption = 'WPM'
-          ParentColor = False
         end
         object lblHamlib: TLabel
           AnchorSideLeft.Control = lblHamLibWPM
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtHamLibSpeed
-          Left = 180
+          Left = 179
           Height = 17
           Top = 23
-          Width = 184
+          Width = 180
           BorderSpacing.Left = 81
           Caption = 'Hamlib keyer uses selected'
-          ParentColor = False
         end
         object lblHamlib1: TLabel
           AnchorSideLeft.Control = lblHamlib
           AnchorSideTop.Control = lblHamlib
           AnchorSideTop.Side = asrBottom
-          Left = 180
+          Left = 179
           Height = 17
           Top = 40
-          Width = 163
+          Width = 164
           Caption = 'radio''s address and port'
-          ParentColor = False
         end
       end
       object cmbIfaceType2: TComboBox
@@ -7541,12 +7834,12 @@ object frmPreferences: TfrmPreferences
         AnchorSideRight.Control = gbWinkeyer
         AnchorSideRight.Side = asrBottom
         Left = 345
-        Height = 25
-        Top = 37
+        Height = 34
+        Top = 32
         Width = 170
         Anchors = [akTop, akRight]
         BorderSpacing.Left = 6
-        ItemHeight = 17
+        ItemHeight = 0
         ItemIndex = 0
         Items.Strings = (
           'None'
@@ -7567,23 +7860,21 @@ object frmPreferences: TfrmPreferences
         Left = 18
         Height = 17
         Top = 41
-        Width = 68
+        Width = 67
         BorderSpacing.Top = 18
         Caption = 'Radio one'
-        ParentColor = False
       end
       object lblRadio2: TLabel
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = lblRadio1
         AnchorSideRight.Control = cmbIfaceType2
-        Left = 270
+        Left = 271
         Height = 17
         Top = 41
-        Width = 69
+        Width = 68
         Anchors = [akTop, akRight]
         BorderSpacing.Right = 6
         Caption = 'Radio two'
-        ParentColor = False
       end
       object cbNoKeyerReset: TCheckBox
         AnchorSideLeft.Control = lblRadio1
@@ -7591,8 +7882,8 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Side = asrBottom
         Left = 18
         Height = 23
-        Top = 68
-        Width = 549
+        Top = 72
+        Width = 537
         BorderSpacing.Top = 6
         Caption = 'Do not reset keyer when switch radios (Same keyer for both, and not HamLib)'
         OnChange = cbNoKeyerResetChange
@@ -7601,8 +7892,8 @@ object frmPreferences: TfrmPreferences
     end
     object tabFldigi1: TTabSheet
       Caption = 'fldigi/wsjt interface'
-      ClientHeight = 633
-      ClientWidth = 730
+      ClientHeight = 672
+      ClientWidth = 836
       object GroupBox31: TGroupBox
         AnchorSideLeft.Control = tabFldigi1
         AnchorSideTop.Control = tabFldigi1
@@ -7613,8 +7904,8 @@ object frmPreferences: TfrmPreferences
         BorderSpacing.Left = 6
         BorderSpacing.Top = 6
         Caption = ' Reading data from fldigi'
-        ClientHeight = 302
-        ClientWidth = 718
+        ClientHeight = 326
+        ClientWidth = 722
         TabOrder = 0
         object Label91: TLabel
           AnchorSideLeft.Control = GroupBox31
@@ -7623,33 +7914,31 @@ object frmPreferences: TfrmPreferences
           Left = 10
           Height = 17
           Top = 270
-          Width = 227
+          Width = 222
           BorderSpacing.Left = 10
           BorderSpacing.Top = 26
           Caption = 'Try to load QSO from fldigi every '
-          ParentColor = False
         end
         object Label92: TLabel
           AnchorSideLeft.Control = edtLoadFromFldigi
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtLoadFromFldigi
           AnchorSideTop.Side = asrCenter
-          Left = 307
+          Left = 302
           Height = 17
           Top = 270
           Width = 55
           BorderSpacing.Left = 10
           Caption = 'seconds'
-          ParentColor = False
         end
         object edtLoadFromFldigi: TSpinEdit
           AnchorSideLeft.Control = Label91
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = Label91
           AnchorSideTop.Side = asrCenter
-          Left = 247
-          Height = 26
-          Top = 265
+          Left = 242
+          Height = 34
+          Top = 261
           Width = 50
           BorderSpacing.Left = 10
           MinValue = 1
@@ -7675,8 +7964,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 88
-          ClientWidth = 203
+          ClientHeight = 96
+          ClientWidth = 207
           ItemIndex = 0
           Items.Strings = (
             'CQRLOG'
@@ -7691,8 +7980,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Control = rgFreqFrom
           AnchorSideBottom.Side = asrBottom
           Left = 134
-          Height = 25
-          Top = 213
+          Height = 34
+          Top = 204
           Width = 81
           Anchors = [akRight, akBottom]
           BorderSpacing.Right = 6
@@ -7720,8 +8009,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 88
-          ClientWidth = 218
+          ClientHeight = 96
+          ClientWidth = 222
           Items.Strings = (
             'CQRLOG'
             'fldigi'
@@ -7742,7 +8031,7 @@ object frmPreferences: TfrmPreferences
           AutoSize = False
           BorderSpacing.Right = 6
           BorderSpacing.Bottom = 6
-          ItemHeight = 17
+          ItemHeight = 0
           TabOrder = 4
         end
         object rgRSTFrom: TRadioGroup
@@ -7766,8 +8055,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 88
-          ClientWidth = 179
+          ClientHeight = 96
+          ClientWidth = 183
           Items.Strings = (
             'fldigi'
             'default'
@@ -7780,8 +8069,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Control = rgRSTFrom
           AnchorSideBottom.Side = asrBottom
           Left = 579
-          Height = 25
-          Top = 213
+          Height = 34
+          Top = 204
           Width = 81
           Anchors = [akRight, akBottom]
           BorderSpacing.Right = 6
@@ -7797,28 +8086,27 @@ object frmPreferences: TfrmPreferences
           Width = 543
           BorderSpacing.Left = 12
           BorderSpacing.Top = 6
-          ClientHeight = 86
-          ClientWidth = 537
+          ClientHeight = 110
+          ClientWidth = 541
           TabOrder = 7
           object Label95: TLabel
             AnchorSideLeft.Control = edtFldigiPath
             AnchorSideBottom.Control = edtFldigiPath
             Left = 20
             Height = 17
-            Top = 34
-            Width = 92
+            Top = 49
+            Width = 91
             Anchors = [akLeft, akBottom]
             BorderSpacing.Bottom = 5
             Caption = 'Path to fldigi:'
-            ParentColor = False
           end
           object chkRunFldigi: TCheckBox
             AnchorSideLeft.Control = edtFldigiPath
             AnchorSideBottom.Control = Label95
             Left = 20
             Height = 23
-            Top = 1
-            Width = 307
+            Top = 16
+            Width = 301
             Anchors = [akLeft, akBottom]
             BorderSpacing.Bottom = 10
             Caption = 'Run fldigi after entering to Remote mode'
@@ -7829,8 +8117,8 @@ object frmPreferences: TfrmPreferences
             AnchorSideBottom.Control = GroupBox34
             AnchorSideBottom.Side = asrBottom
             Left = 20
-            Height = 25
-            Top = 56
+            Height = 34
+            Top = 71
             Width = 416
             Anchors = [akLeft, akBottom]
             BorderSpacing.Left = 20
@@ -7844,7 +8132,7 @@ object frmPreferences: TfrmPreferences
             AnchorSideTop.Side = asrCenter
             Left = 438
             Height = 25
-            Top = 56
+            Top = 76
             Width = 75
             BorderSpacing.Left = 2
             Caption = 'Browse'
@@ -7858,7 +8146,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = GroupBox34
           AnchorSideRight.Side = asrBottom
           Left = 581
-          Height = 25
+          Height = 34
           Top = 28
           Width = 80
           BorderSpacing.Left = 26
@@ -7871,8 +8159,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           AnchorSideRight.Side = asrBottom
           Left = 581
-          Height = 25
-          Top = 74
+          Height = 34
+          Top = 83
           Width = 80
           BorderSpacing.Top = 2
           TabOrder = 9
@@ -7882,13 +8170,12 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Side = asrCenter
           AnchorSideTop.Control = edtFldigiPort
           AnchorSideTop.Side = asrBottom
-          Left = 592
+          Left = 591
           Height = 17
-          Top = 55
-          Width = 59
+          Top = 64
+          Width = 60
           BorderSpacing.Top = 2
           Caption = 'Address:'
-          ParentColor = False
         end
         object Label49: TLabel
           AnchorSideLeft.Control = edtFldigiPort
@@ -7897,22 +8184,21 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Side = asrBottom
           Left = 604
           Height = 17
-          Top = 1
+          Top = 10
           Width = 34
           Anchors = [akLeft, akBottom]
           BorderSpacing.Bottom = 35
           Caption = 'Port:'
-          ParentColor = False
         end
         object chkFldXmlRpc: TCheckBox
           AnchorSideLeft.Control = edtDropSyncErr
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = edtDropSyncErr
           AnchorSideTop.Side = asrCenter
-          Left = 614
+          Left = 605
           Height = 23
           Top = 267
-          Width = 106
+          Width = 105
           BorderSpacing.Left = 10
           Caption = 'Use XmlRpc'
           TabOrder = 10
@@ -7922,9 +8208,9 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = Label50
           AnchorSideTop.Side = asrCenter
-          Left = 554
-          Height = 26
-          Top = 265
+          Left = 545
+          Height = 34
+          Top = 261
           Width = 50
           BorderSpacing.Left = 10
           MaxValue = 20
@@ -7936,13 +8222,12 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Side = asrBottom
           AnchorSideTop.Control = Label92
           AnchorSideTop.Side = asrCenter
-          Left = 402
+          Left = 397
           Height = 17
           Top = 270
-          Width = 142
+          Width = 138
           BorderSpacing.Left = 40
           Caption = 'Drop after  SyncErr >'
-          ParentColor = False
         end
       end
       object GroupBox51: TGroupBox
@@ -7955,8 +8240,8 @@ object frmPreferences: TfrmPreferences
         Width = 724
         BorderSpacing.Top = 6
         Caption = 'Reading data from wsjtx'
-        ClientHeight = 238
-        ClientWidth = 718
+        ClientHeight = 262
+        ClientWidth = 722
         TabOrder = 1
         object GroupBox52: TGroupBox
           AnchorSideLeft.Control = GroupBox51
@@ -7967,28 +8252,27 @@ object frmPreferences: TfrmPreferences
           Width = 480
           BorderSpacing.Left = 12
           BorderSpacing.Top = 6
-          ClientHeight = 81
-          ClientWidth = 474
+          ClientHeight = 105
+          ClientWidth = 478
           TabOrder = 0
           object Label202: TLabel
             AnchorSideLeft.Control = edtWsjtPath
             AnchorSideBottom.Control = edtWsjtPath
             Left = 25
             Height = 17
-            Top = 29
-            Width = 93
+            Top = 44
+            Width = 91
             Anchors = [akLeft, akBottom]
             BorderSpacing.Bottom = 5
             Caption = 'Path to wsjtx:'
-            ParentColor = False
           end
           object chkRunWsjt: TCheckBox
             AnchorSideLeft.Control = edtWsjtPath
             AnchorSideBottom.Control = Label202
             Left = 25
             Height = 23
-            Top = -4
-            Width = 375
+            Top = 11
+            Width = 366
             Anchors = [akLeft, akBottom]
             BorderSpacing.Bottom = 10
             Caption = 'Run wsjtx after entering to Remote mode for wsjt-x'
@@ -7999,8 +8283,8 @@ object frmPreferences: TfrmPreferences
             AnchorSideBottom.Control = GroupBox52
             AnchorSideBottom.Side = asrBottom
             Left = 25
-            Height = 25
-            Top = 51
+            Height = 34
+            Top = 66
             Width = 426
             Anchors = [akLeft, akBottom]
             BorderSpacing.Left = 20
@@ -8014,7 +8298,7 @@ object frmPreferences: TfrmPreferences
             AnchorSideBottom.Control = edtWsjtPath
             Left = 376
             Height = 25
-            Top = 21
+            Top = 36
             Width = 75
             Anchors = [akRight, akBottom]
             Caption = 'Browse'
@@ -8033,7 +8317,6 @@ object frmPreferences: TfrmPreferences
           Width = 67
           BorderSpacing.Bottom = 35
           Caption = 'Wsjt port:'
-          ParentColor = False
         end
         object edtWsjtPort: TEdit
           AnchorSideLeft.Control = edtADIFPort
@@ -8041,7 +8324,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = edtADIFPort
           AnchorSideRight.Side = asrBottom
           Left = 596
-          Height = 25
+          Height = 34
           Top = 24
           Width = 80
           BorderSpacing.Left = 16
@@ -8068,8 +8351,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 88
-          ClientWidth = 266
+          ClientHeight = 96
+          ClientWidth = 270
           Items.Strings = (
             'CQRLOG'
             'wsjtx'
@@ -8097,8 +8380,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 88
-          ClientWidth = 194
+          ClientHeight = 96
+          ClientWidth = 198
           ItemIndex = 0
           Items.Strings = (
             'CQRLOG'
@@ -8113,8 +8396,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideBottom.Control = rgWsjtFreqFrom
           AnchorSideBottom.Side = asrBottom
           Left = 126
-          Height = 25
-          Top = 209
+          Height = 34
+          Top = 200
           Width = 81
           Anchors = [akRight, akBottom]
           BorderSpacing.Right = 5
@@ -8134,7 +8417,7 @@ object frmPreferences: TfrmPreferences
           AutoSize = False
           BorderSpacing.Right = 5
           BorderSpacing.Bottom = 5
-          ItemHeight = 17
+          ItemHeight = 0
           TabOrder = 5
         end
         object edtWsjtIp: TEdit
@@ -8143,8 +8426,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideRight.Control = edtWsjtPort
           AnchorSideRight.Side = asrBottom
           Left = 595
-          Height = 25
-          Top = 70
+          Height = 34
+          Top = 79
           Width = 81
           Anchors = [akTop, akRight]
           BorderSpacing.Top = 2
@@ -8157,11 +8440,10 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           Left = 601
           Height = 17
-          Top = 51
+          Top = 60
           Width = 69
           BorderSpacing.Top = 2
           Caption = 'Wsjt addr:'
-          ParentColor = False
         end
         object cgLimit: TCheckGroup
           AnchorSideLeft.Control = rgWsjtModeFrom
@@ -8184,8 +8466,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 88
-          ClientWidth = 194
+          ClientHeight = 96
+          ClientWidth = 198
           Items.Strings = (
             'Call'
             'Loc'
@@ -8198,11 +8480,11 @@ object frmPreferences: TfrmPreferences
             AnchorSideTop.Control = cgLimit
             AnchorSideRight.Control = cgLimit
             AnchorSideRight.Side = asrBottom
-            Left = 60
+            Left = 64
             Height = 34
             Top = 6
             Width = 128
-            CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames, dsStartMonday]
+            CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames]
             DateOrder = doYMd
             ButtonWidth = 23
             Anchors = [akTop, akRight]
@@ -8217,11 +8499,11 @@ object frmPreferences: TfrmPreferences
             AnchorSideTop.Side = asrBottom
             AnchorSideRight.Control = cgLimit
             AnchorSideRight.Side = asrBottom
-            Left = 60
+            Left = 64
             Height = 34
             Top = 50
             Width = 128
-            CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames, dsStartMonday]
+            CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames]
             DateOrder = doYMd
             ButtonWidth = 23
             Anchors = [akTop, akRight]
@@ -8239,7 +8521,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = GroupBox52
           AnchorSideRight.Side = asrBottom
           Left = 500
-          Height = 25
+          Height = 34
           Top = 24
           Width = 80
           BorderSpacing.Left = 8
@@ -8254,11 +8536,10 @@ object frmPreferences: TfrmPreferences
           Left = 504
           Height = 17
           Top = 6
-          Width = 83
+          Width = 69
           BorderSpacing.Left = 12
           BorderSpacing.Bottom = 35
           Caption = 'ADIF port:'
-          ParentColor = False
         end
         object edtADIFIp: TEdit
           AnchorSideLeft.Control = edtADIFPort
@@ -8266,8 +8547,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           AnchorSideRight.Side = asrBottom
           Left = 500
-          Height = 25
-          Top = 70
+          Height = 34
+          Top = 79
           Width = 81
           BorderSpacing.Top = 2
           TabOrder = 9
@@ -8277,27 +8558,26 @@ object frmPreferences: TfrmPreferences
           AnchorSideLeft.Side = asrCenter
           AnchorSideTop.Control = edtADIFPort
           AnchorSideTop.Side = asrBottom
-          Left = 498
+          Left = 505
           Height = 17
-          Top = 51
-          Width = 84
+          Top = 60
+          Width = 71
           BorderSpacing.Top = 2
           Caption = 'ADIF addr:'
-          ParentColor = False
         end
       end
     end
     object tabAutoBackup: TTabSheet
       Caption = 'Exit & Auto backup'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object GroupBox32: TGroupBox
         Left = 8
         Height = 370
         Top = 8
         Width = 608
-        ClientHeight = 344
-        ClientWidth = 602
+        ClientHeight = 368
+        ClientWidth = 606
         TabOrder = 0
         object Label93: TLabel
           AnchorSideLeft.Control = chkEnableBackup
@@ -8306,10 +8586,9 @@ object frmPreferences: TfrmPreferences
           Left = 16
           Height = 17
           Top = 94
-          Width = 106
+          Width = 104
           BorderSpacing.Top = 12
           Caption = 'Save backup to:'
-          ParentColor = False
         end
         object chkEnableBackup: TCheckBox
           AnchorSideLeft.Control = GroupBox32
@@ -8317,7 +8596,7 @@ object frmPreferences: TfrmPreferences
           Left = 16
           Height = 23
           Top = 7
-          Width = 290
+          Width = 288
           BorderSpacing.Left = 16
           BorderSpacing.Top = 7
           Caption = 'Enable autobackup after program ends'
@@ -8328,7 +8607,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = Label93
           AnchorSideTop.Side = asrBottom
           Left = 16
-          Height = 25
+          Height = 34
           Top = 117
           Width = 496
           BorderSpacing.Top = 6
@@ -8353,8 +8632,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           Left = 16
           Height = 23
-          Top = 279
-          Width = 220
+          Top = 297
+          Width = 219
           BorderSpacing.Top = 18
           Caption = 'Compress backup with tar.gz'
           TabOrder = 3
@@ -8365,7 +8644,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Side = asrBottom
           Left = 16
           Height = 88
-          Top = 173
+          Top = 191
           Width = 496
           AutoFill = True
           BorderSpacing.Top = 6
@@ -8378,8 +8657,8 @@ object frmPreferences: TfrmPreferences
           ChildSizing.ShrinkVertical = crsScaleChilds
           ChildSizing.Layout = cclLeftToRightThenTopToBottom
           ChildSizing.ControlsPerLine = 1
-          ClientHeight = 62
-          ClientWidth = 490
+          ClientHeight = 70
+          ClientWidth = 494
           Items.Strings = (
             'callsign, date and time (yourcall__yyyy-mm-dd__hh-mm-ss.adi)'
             'callsign only (yourcall__backup.adi)'
@@ -8394,7 +8673,7 @@ object frmPreferences: TfrmPreferences
           Left = 50
           Height = 23
           Top = 30
-          Width = 223
+          Width = 221
           Caption = 'Ask before creating a backup'
           TabOrder = 5
         end
@@ -8403,8 +8682,8 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = edtBackupPath
           AnchorSideTop.Side = asrBottom
           Left = 16
-          Height = 25
-          Top = 142
+          Height = 34
+          Top = 151
           Width = 496
           TabOrder = 6
         end
@@ -8414,7 +8693,7 @@ object frmPreferences: TfrmPreferences
           AnchorSideTop.Control = edtBackupPath1
           Left = 518
           Height = 25
-          Top = 142
+          Top = 151
           Width = 75
           BorderSpacing.Left = 6
           Caption = 'Browse'
@@ -8428,108 +8707,113 @@ object frmPreferences: TfrmPreferences
           Left = 16
           Height = 17
           Top = 65
-          Width = 568
+          Width = 557
           BorderSpacing.Top = 12
           Caption = 'Check "Enable autobackup" and "Ask before" to prevent accidental closing of cqrlog'
-          ParentColor = False
         end
       end
     end
     object tabExtViewers: TTabSheet
       Caption = 'External viewers'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object Label99: TLabel
         Left = 23
         Height = 17
         Top = 30
-        Width = 107
+        Width = 103
         Caption = 'Text files(*.txt):'
-        ParentColor = False
       end
       object Label100: TLabel
         Left = 23
         Height = 17
         Top = 86
-        Width = 112
+        Width = 110
         Caption = 'PDF files (*.pdf):'
-        ParentColor = False
       end
       object Label101: TLabel
         Left = 23
         Height = 17
         Top = 142
-        Width = 165
+        Width = 162
         Caption = 'Images (*.jpg;*.png*.gif)'
-        ParentColor = False
       end
       object Label102: TLabel
         Left = 21
         Height = 17
         Top = 240
-        Width = 166
+        Width = 163
         Caption = 'HTML files(*.html;*.htm)'
-        ParentColor = False
       end
       object edtTxtFiles: TEdit
         Left = 47
-        Height = 25
+        Height = 34
         Top = 49
         Width = 321
+        OnExit = edtTxtFilesExit
         TabOrder = 0
-        Text = 'gedit'
       end
       object edtPdfFiles: TEdit
         Left = 47
-        Height = 25
+        Height = 34
         Top = 105
         Width = 320
+        OnExit = edtPdfFilesExit
         TabOrder = 1
-        Text = 'evince'
       end
       object edtImgFiles: TEdit
         Left = 47
-        Height = 25
+        Height = 34
         Top = 166
         Width = 320
+        OnExit = edtImgFilesExit
         TabOrder = 2
-        Text = 'eog'
       end
       object edtHtmlFiles: TEdit
         Left = 45
-        Height = 25
+        Height = 34
         Top = 264
         Width = 320
         OnClick = edtHtmlFilesClick
+        OnExit = edtHtmlFilesExit
         TabOrder = 3
       end
       object chkIntQSLViewer: TCheckBox
         Left = 47
         Height = 23
         Top = 200
-        Width = 317
+        Width = 310
         Caption = 'Open QSL card images with internal viewer'
         TabOrder = 4
       end
+      object Label17: TLabel
+        Left = 23
+        Height = 1
+        Top = 8
+        Width = 1
+        Font.Color = clRed
+        Font.Style = [fsBold]
+        ParentFont = False
+      end
     end
     object tabCallbook: TTabSheet
       Caption = 'Callbook support'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object GroupBox38: TGroupBox
         Left = 13
         Height = 160
         Top = 8
         Width = 585
         Caption = ' Callbook search '
-        ClientHeight = 134
-        ClientWidth = 579
+        ClientHeight = 158
+        ClientWidth = 583
         TabOrder = 0
         object rbHamQTH: TRadioButton
           Left = 6
           Height = 23
           Top = 7
-          Width = 123
+          Width = 122
           Caption = 'HamQTH.com '
           Checked = True
           TabOrder = 0
@@ -8545,7 +8829,7 @@ object frmPreferences: TfrmPreferences
         end
         object edtCbUser: TEdit
           Left = 96
-          Height = 25
+          Height = 34
           Top = 63
           Width = 134
           TabOrder = 2
@@ -8554,21 +8838,19 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 17
           Top = 71
-          Width = 77
+          Width = 75
           Caption = 'User name:'
-          ParentColor = False
         end
         object Label112: TLabel
           Left = 6
           Height = 17
           Top = 103
-          Width = 69
+          Width = 70
           Caption = 'Password:'
-          ParentColor = False
         end
         object edtCbPass: TEdit
           Left = 96
-          Height = 25
+          Height = 34
           Top = 97
           Width = 134
           EchoMode = emPassword
@@ -8579,16 +8861,16 @@ object frmPreferences: TfrmPreferences
     end
     object tabRBN: TTabSheet
       Caption = 'RBN support'
-      ClientHeight = 650
-      ClientWidth = 700
+      ClientHeight = 672
+      ClientWidth = 836
       object chkRBNAutoConn: TCheckBox
         AnchorSideLeft.Control = lblRbnWindowOpen
         AnchorSideTop.Control = cmbCl10db
         AnchorSideTop.Side = asrCenter
-        Left = 404
+        Left = 405
         Height = 23
-        Top = 212
-        Width = 198
+        Top = 219
+        Width = 201
         Caption = 'Autoconnect RBN Grayline'
         TabOrder = 0
       end
@@ -8596,9 +8878,9 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Control = edtRBNServer
         AnchorSideTop.Control = edtRBNServer
         AnchorSideTop.Side = asrBottom
-        Left = 94
-        Height = 33
-        Top = 90
+        Left = 95
+        Height = 34
+        Top = 95
         Width = 101
         CharCase = ecUppercase
         TabOrder = 1
@@ -8608,30 +8890,28 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = edtRBNLogin
         AnchorSideTop.Side = asrCenter
         Left = 24
-        Height = 15
-        Top = 99
-        Width = 39
+        Height = 17
+        Top = 104
+        Width = 40
         Caption = 'Login:'
-        ParentColor = False
       end
       object lblRbnWatchFor: TLabel
         AnchorSideLeft.Control = lblRbnHeader
         AnchorSideTop.Control = edtWatchFor
         AnchorSideTop.Side = asrCenter
         Left = 24
-        Height = 15
-        Top = 132
-        Width = 67
+        Height = 17
+        Top = 138
+        Width = 70
         Caption = 'Watch for:'
-        ParentColor = False
       end
       object edtWatchFor: TEdit
         AnchorSideLeft.Control = edtRBNLogin
         AnchorSideTop.Control = edtRBNLogin
         AnchorSideTop.Side = asrBottom
-        Left = 94
-        Height = 33
-        Top = 123
+        Left = 95
+        Height = 34
+        Top = 129
         Width = 101
         CharCase = ecUppercase
         TabOrder = 2
@@ -8641,79 +8921,73 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = edtRBNLogin
         AnchorSideTop.Side = asrCenter
-        Left = 201
-        Height = 15
-        Top = 99
-        Width = 175
+        Left = 202
+        Height = 17
+        Top = 104
+        Width = 172
         BorderSpacing.Left = 6
         Caption = '(usually your own callsign)'
-        ParentColor = False
       end
       object lblRbnWatchForHint: TLabel
         AnchorSideLeft.Control = edtWatchFor
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = edtWatchFor
         AnchorSideTop.Side = asrCenter
-        Left = 201
-        Height = 15
-        Top = 132
-        Width = 367
+        Left = 202
+        Height = 17
+        Top = 138
+        Width = 365
         BorderSpacing.Left = 6
         Caption = '(callsign you are watching for, also can be your callsign)'
-        ParentColor = False
       end
       object lblRbnHeader: TLabel
         AnchorSideLeft.Control = tabRBN
         AnchorSideTop.Control = tabRBN
         Left = 24
-        Height = 30
+        Height = 34
         Top = 12
-        Width = 567
+        Width = 644
         BorderSpacing.Left = 24
         BorderSpacing.Top = 12
         Caption = 'CQRLOG can receive spots from RBN and show receivers as dots on Gray line map. It''s very useful '#10'especially when you are calling CQ and want to see where your signal can be received.'
-        ParentColor = False
       end
       object lblRbnSignal: TLabel
         AnchorSideLeft.Control = lblRbnHeader
         AnchorSideTop.Control = edtWatchFor
         AnchorSideTop.Side = asrBottom
         Left = 24
-        Height = 15
-        Top = 180
-        Width = 92
+        Height = 17
+        Top = 187
+        Width = 93
         BorderSpacing.Top = 24
         Caption = 'Signal strench'
-        ParentColor = False
       end
       object lblRbnColor: TLabel
         AnchorSideLeft.Control = lblRbnWatchForHint
         AnchorSideTop.Control = lblRbnSignal
-        Left = 201
-        Height = 15
-        Top = 180
-        Width = 34
+        Left = 202
+        Height = 17
+        Top = 187
+        Width = 37
         Caption = 'Color'
-        ParentColor = False
       end
       object lblRbnDb1: TLabel
         AnchorSideLeft.Control = lblRbnHeader
         AnchorSideTop.Control = cmbCl10db
         AnchorSideTop.Side = asrCenter
         Left = 24
-        Height = 15
-        Top = 216
+        Height = 17
+        Top = 222
         Width = 60
         Caption = '0 ... 10db'
-        ParentColor = False
       end
       object cmbCl10db: TColorBox
         AnchorSideLeft.Control = lblRbnColor
         AnchorSideTop.Control = lblRbnColor
         AnchorSideTop.Side = asrBottom
-        Left = 201
-        Height = 32
-        Top = 207
+        Left = 202
+        Height = 29
+        Top = 216
         Width = 137
         DefaultColorColor = clWhite
         Selected = clWhite
@@ -8728,19 +9002,18 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = cmbCl20db
         AnchorSideTop.Side = asrCenter
         Left = 24
-        Height = 15
-        Top = 248
+        Height = 17
+        Top = 251
         Width = 68
         Caption = '11 ... 20db'
-        ParentColor = False
       end
       object cmbCl20db: TColorBox
         AnchorSideLeft.Control = cmbCl10db
         AnchorSideTop.Control = cmbCl10db
         AnchorSideTop.Side = asrBottom
-        Left = 201
-        Height = 32
-        Top = 239
+        Left = 202
+        Height = 29
+        Top = 245
         Width = 137
         DefaultColorColor = clWhite
         Selected = clPurple
@@ -8754,19 +9027,18 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = cmbCl30db
         AnchorSideTop.Side = asrCenter
         Left = 24
-        Height = 15
+        Height = 17
         Top = 280
         Width = 68
         Caption = '21 ... 30db'
-        ParentColor = False
       end
       object cmbCl30db: TColorBox
         AnchorSideLeft.Control = cmbCl20db
         AnchorSideTop.Control = cmbCl20db
         AnchorSideTop.Side = asrBottom
-        Left = 201
-        Height = 32
-        Top = 271
+        Left = 202
+        Height = 29
+        Top = 274
         Width = 137
         DefaultColorColor = clWhite
         Selected = clMaroon
@@ -8780,18 +9052,17 @@ object frmPreferences: TfrmPreferences
         AnchorSideTop.Control = cmbClOver30db
         AnchorSideTop.Side = asrCenter
         Left = 24
-        Height = 15
-        Top = 312
+        Height = 17
+        Top = 309
         Width = 66
         Caption = 'over 30dB'
-        ParentColor = False
       end
       object cmbClOver30db: TColorBox
         AnchorSideLeft.Control = cmbCl30db
         AnchorSideTop.Control = cmbCl30db
         AnchorSideTop.Side = asrBottom
-        Left = 201
-        Height = 32
+        Left = 202
+        Height = 29
         Top = 303
         Width = 137
         DefaultColorColor = clWhite
@@ -8805,9 +9076,9 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Control = lblRbnWindowOpen
         AnchorSideTop.Control = cmbClOver30db
         AnchorSideTop.Side = asrCenter
-        Left = 404
-        Height = 33
-        Top = 303
+        Left = 405
+        Height = 34
+        Top = 300
         Width = 40
         TabOrder = 7
         Text = '60'
@@ -8817,34 +9088,32 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = cmbClOver30db
         AnchorSideTop.Side = asrCenter
-        Left = 445
-        Height = 15
-        Top = 312
-        Width = 186
+        Left = 446
+        Height = 17
+        Top = 309
+        Width = 190
         BorderSpacing.Left = 1
         Caption = 'seconds view time for dot(s)'
-        ParentColor = False
       end
       object lnlRbnServer: TLabel
         AnchorSideLeft.Control = lblRbnHeader
         AnchorSideTop.Control = lblRbnHeader
         AnchorSideTop.Side = asrBottom
         Left = 24
-        Height = 15
-        Top = 66
-        Width = 46
+        Height = 17
+        Top = 70
+        Width = 47
         BorderSpacing.Top = 24
         Caption = 'Server:'
-        ParentColor = False
       end
       object edtRBNServer: TEdit
         AnchorSideLeft.Control = lnlRbnServer
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = lnlRbnServer
         AnchorSideTop.Side = asrCenter
-        Left = 94
-        Height = 33
-        Top = 57
+        Left = 95
+        Height = 34
+        Top = 61
         Width = 304
         BorderSpacing.Left = 24
         TabOrder = 8
@@ -8855,42 +9124,40 @@ object frmPreferences: TfrmPreferences
         AnchorSideLeft.Side = asrBottom
         AnchorSideTop.Control = lnlRbnServer
         AnchorSideTop.Side = asrCenter
-        Left = 404
-        Height = 15
-        Top = 66
-        Width = 71
+        Left = 405
+        Height = 17
+        Top = 70
+        Width = 76
         BorderSpacing.Left = 6
         Caption = 'server:port'
-        ParentColor = False
       end
       object lblRbnWindowOpen: TLabel
         AnchorSideLeft.Control = lblRbnAdrFormat
         AnchorSideTop.Control = lblRbnSignal
-        Left = 404
-        Height = 15
-        Top = 180
-        Width = 132
+        Left = 405
+        Height = 17
+        Top = 187
+        Width = 138
         Caption = 'After window opens:'
-        ParentColor = False
       end
       object chkRBNMAutoConn: TCheckBox
         AnchorSideLeft.Control = lblRbnWindowOpen
         AnchorSideTop.Control = cmbCl20db
         AnchorSideTop.Side = asrCenter
-        Left = 404
+        Left = 405
         Height = 23
-        Top = 244
-        Width = 193
+        Top = 248
+        Width = 202
         Caption = 'Autoconnect RBN Monitor'
         TabOrder = 9
       end
       object chkRBNLink: TCheckBox
         AnchorSideLeft.Control = lblRbnWindowOpen
         AnchorSideTop.Control = cmbCl30db
-        Left = 404
+        Left = 405
         Height = 23
-        Top = 271
-        Width = 216
+        Top = 274
+        Width = 219
         Caption = 'Link Grayline to RBN monitor'
         OnChange = chkRBNLinkChange
         TabOrder = 10
@@ -8898,22 +9165,22 @@ object frmPreferences: TfrmPreferences
     end
     object tabOnlineLog: TTabSheet
       Caption = 'Online log upload'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object GroupBox44: TGroupBox
         Left = 13
         Height = 179
         Top = 7
         Width = 569
         Caption = ' HamQTH '
-        ClientHeight = 153
-        ClientWidth = 563
+        ClientHeight = 177
+        ClientWidth = 567
         TabOrder = 0
         object chkHaUpEnabled: TCheckBox
           Left = 7
           Height = 23
           Top = 4
-          Width = 205
+          Width = 202
           Caption = 'Enable upload to HamQTH'
           OnChange = chkHaUpEnabledChange
           TabOrder = 0
@@ -8922,13 +9189,12 @@ object frmPreferences: TfrmPreferences
           Left = 9
           Height = 17
           Top = 36
-          Width = 77
+          Width = 75
           Caption = 'User name:'
-          ParentColor = False
         end
         object edtHaUserName: TEdit
           Left = 9
-          Height = 25
+          Height = 34
           Top = 52
           Width = 102
           TabOrder = 1
@@ -8938,13 +9204,12 @@ object frmPreferences: TfrmPreferences
           Left = 199
           Height = 17
           Top = 36
-          Width = 69
+          Width = 70
           Caption = 'Password:'
-          ParentColor = False
         end
         object edtHaPasswd: TEdit
           Left = 199
-          Height = 25
+          Height = 34
           Top = 52
           Width = 104
           EchoMode = emPassword
@@ -8956,7 +9221,7 @@ object frmPreferences: TfrmPreferences
           Left = 7
           Height = 23
           Top = 92
-          Width = 422
+          Width = 417
           Caption = 'Upload QSO data immediately after save, update or delete'
           TabOrder = 3
         end
@@ -8964,21 +9229,19 @@ object frmPreferences: TfrmPreferences
           Left = 9
           Height = 17
           Top = 132
-          Width = 54
+          Width = 53
           Caption = 'Use this'
-          ParentColor = False
         end
         object Label185: TLabel
           Left = 238
           Height = 17
           Top = 132
-          Width = 344
+          Width = 338
           Caption = 'color to show information in status upload window'
-          ParentColor = False
         end
         object cmbHaColor: TColorBox
           Left = 62
-          Height = 25
+          Height = 29
           Top = 124
           Width = 164
           DefaultColorColor = clBlue
@@ -8995,14 +9258,14 @@ object frmPreferences: TfrmPreferences
         Top = 194
         Width = 569
         Caption = ' ClubLog '
-        ClientHeight = 142
-        ClientWidth = 563
+        ClientHeight = 166
+        ClientWidth = 567
         TabOrder = 1
         object chkClUpEnabled: TCheckBox
           Left = 7
           Height = 23
           Top = 4
-          Width = 200
+          Width = 196
           Caption = 'Enable upload to ClubLog'
           OnChange = chkClUpEnabledChange
           TabOrder = 0
@@ -9011,13 +9274,12 @@ object frmPreferences: TfrmPreferences
           Left = 9
           Height = 17
           Top = 36
-          Width = 57
+          Width = 56
           Caption = 'Callsign:'
-          ParentColor = False
         end
         object edtClUserName: TEdit
           Left = 9
-          Height = 25
+          Height = 34
           Top = 57
           Width = 102
           TabOrder = 1
@@ -9027,13 +9289,12 @@ object frmPreferences: TfrmPreferences
           Left = 198
           Height = 17
           Top = 36
-          Width = 69
+          Width = 70
           Caption = 'Password:'
-          ParentColor = False
         end
         object edtClPasswd: TEdit
           Left = 198
-          Height = 25
+          Height = 34
           Top = 57
           Width = 104
           EchoMode = emPassword
@@ -9045,7 +9306,7 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 23
           Top = 89
-          Width = 422
+          Width = 417
           Caption = 'Upload QSO data immediately after save, update or delete'
           TabOrder = 4
         end
@@ -9055,11 +9316,10 @@ object frmPreferences: TfrmPreferences
           Top = 36
           Width = 41
           Caption = 'Email:'
-          ParentColor = False
         end
         object edtClEmail: TEdit
           Left = 358
-          Height = 25
+          Height = 34
           Top = 57
           Width = 184
           TabOrder = 3
@@ -9069,21 +9329,19 @@ object frmPreferences: TfrmPreferences
           Left = 10
           Height = 17
           Top = 121
-          Width = 54
+          Width = 53
           Caption = 'Use this'
-          ParentColor = False
         end
         object Label187: TLabel
           Left = 238
           Height = 17
           Top = 121
-          Width = 344
+          Width = 338
           Caption = 'color to show information in status upload window'
-          ParentColor = False
         end
         object cmbClColor: TColorBox
           Left = 65
-          Height = 25
+          Height = 29
           Top = 113
           Width = 164
           DefaultColorColor = clRed
@@ -9100,14 +9358,14 @@ object frmPreferences: TfrmPreferences
         Top = 370
         Width = 569
         Caption = ' HRDLog.net '
-        ClientHeight = 142
-        ClientWidth = 563
+        ClientHeight = 166
+        ClientWidth = 567
         TabOrder = 2
         object chkHrUpEnabled: TCheckBox
           Left = 7
           Height = 23
           Top = 4
-          Width = 226
+          Width = 221
           Caption = 'Enable upload to HRDLog.net'
           OnChange = chkHrUpEnabledChange
           TabOrder = 0
@@ -9116,13 +9374,12 @@ object frmPreferences: TfrmPreferences
           Left = 9
           Height = 17
           Top = 36
-          Width = 57
+          Width = 56
           Caption = 'Callsign:'
-          ParentColor = False
         end
         object edtHrUserName: TEdit
           Left = 9
-          Height = 25
+          Height = 34
           Top = 57
           Width = 102
           TabOrder = 1
@@ -9132,7 +9389,7 @@ object frmPreferences: TfrmPreferences
           Left = 6
           Height = 23
           Top = 89
-          Width = 422
+          Width = 417
           Caption = 'Upload QSO data immediately after save, update or delete'
           TabOrder = 3
         end
@@ -9142,11 +9399,10 @@ object frmPreferences: TfrmPreferences
           Top = 36
           Width = 39
           Caption = 'Code:'
-          ParentColor = False
         end
         object edtHrCode: TEdit
           Left = 200
-          Height = 25
+          Height = 34
           Top = 57
           Width = 184
           TabOrder = 2
@@ -9156,13 +9412,12 @@ object frmPreferences: TfrmPreferences
           Left = 9
           Height = 17
           Top = 125
-          Width = 54
+          Width = 53
           Caption = 'Use this'
-          ParentColor = False
         end
         object cmbHrColor: TColorBox
           Left = 64
-          Height = 25
+          Height = 29
           Top = 117
           Width = 164
           DefaultColorColor = clPurple
@@ -9176,16 +9431,15 @@ object frmPreferences: TfrmPreferences
           Left = 237
           Height = 17
           Top = 125
-          Width = 344
+          Width = 338
           Caption = 'color to show information in status upload window'
-          ParentColor = False
         end
       end
       object chkCloseAfterUpload: TCheckBox
         Left = 12
         Height = 23
         Top = 544
-        Width = 459
+        Width = 451
         Caption = 'Close the "Status of log upload" window after successful upload'
         TabOrder = 3
       end
@@ -9193,20 +9447,20 @@ object frmPreferences: TfrmPreferences
         Left = 13
         Height = 23
         Top = 576
-        Width = 422
+        Width = 413
         Caption = 'Ignore changes caused by LoTW/eQSL upload or download'
         TabOrder = 4
       end
     end
     object tabCondx: TTabSheet
       Caption = 'Propagation'
-      ClientHeight = 647
-      ClientWidth = 706
+      ClientHeight = 672
+      ClientWidth = 836
       object rbCondxAsImage: TRadioButton
         Left = 25
         Height = 23
         Top = 16
-        Width = 213
+        Width = 210
         Caption = 'Show propagation as image'
         Checked = True
         TabOrder = 0
@@ -9214,7 +9468,7 @@ object frmPreferences: TfrmPreferences
       end
       object edtCondxImageUrl: TEdit
         Left = 72
-        Height = 25
+        Height = 34
         Top = 72
         Width = 528
         TabOrder = 1
@@ -9224,15 +9478,14 @@ object frmPreferences: TfrmPreferences
         Left = 74
         Height = 17
         Top = 48
-        Width = 140
+        Width = 138
         Caption = 'Downoad data from:'
-        ParentColor = False
       end
       object rbCondxAsText: TRadioButton
         Left = 25
         Height = 23
         Top = 152
-        Width = 196
+        Width = 193
         Caption = 'Show as text information'
         TabOrder = 2
       end
@@ -9240,7 +9493,7 @@ object frmPreferences: TfrmPreferences
         Left = 56
         Height = 23
         Top = 185
-        Width = 198
+        Width = 194
         Caption = 'Show A, K, SSN, FOF2 etc.'
         TabOrder = 3
       end
@@ -9248,7 +9501,7 @@ object frmPreferences: TfrmPreferences
         Left = 56
         Height = 23
         Top = 217
-        Width = 299
+        Width = 295
         Caption = 'Show calculated prediction for HF bands'
         TabOrder = 4
       end
@@ -9256,7 +9509,7 @@ object frmPreferences: TfrmPreferences
         Left = 56
         Height = 23
         Top = 249
-        Width = 308
+        Width = 305
         Caption = 'Show calculated prediction for VHF bands'
         TabOrder = 5
       end
@@ -9266,21 +9519,19 @@ object frmPreferences: TfrmPreferences
         Top = 104
         Width = 413
         Caption = 'Look at http://www.hamqsl.com/solar.html for more variants'
-        ParentColor = False
       end
     end
   end
   object Panel1: TPanel
     AnchorSideBottom.Side = asrBottom
-    Left = 870
-    Height = 681
+    Left = 1006
+    Height = 703
     Top = 0
     Width = 88
     Align = alRight
-    ClientHeight = 681
+    ClientHeight = 703
     ClientWidth = 88
     TabOrder = 1
-    OnClick = Panel1Click
     object btnOK: TButton
       AnchorSideLeft.Control = Panel1
       AnchorSideLeft.Side = asrCenter
@@ -9343,7 +9594,7 @@ object frmPreferences: TfrmPreferences
   end
   object lbPreferences: TListBox
     Left = 0
-    Height = 681
+    Height = 703
     Top = 0
     Width = 160
     Align = alLeft
@@ -9376,7 +9627,7 @@ object frmPreferences: TfrmPreferences
       'Online log upload'
       'Propagation'
     )
-    ItemHeight = 17
+    ItemHeight = 23
     OnClick = lbPreferencesClick
     ScrollWidth = 158
     TabOrder = 2
@@ -9384,12 +9635,12 @@ object frmPreferences: TfrmPreferences
   object dlgFont: TFontDialog
     MinFontSize = 0
     MaxFontSize = 0
-    left = 1040
-    top = 280
+    Left = 1040
+    Top = 280
   end
   object dlgOpen: TOpenDialog
-    left = 1040
-    top = 216
+    Left = 1040
+    Top = 216
   end
   object dlgColor: TColorDialog
     Color = clBlack
@@ -9415,11 +9666,11 @@ object frmPreferences: TfrmPreferences
       'ColorS=F0FBFF'
       'ColorT=A4A0A0'
     )
-    left = 1040
-    top = 344
+    Left = 1040
+    Top = 344
   end
   object odFindBrowser: TOpenDialog
-    left = 904
-    top = 224
+    Left = 904
+    Top = 224
   end
 end
diff --git a/src/fPreferences.pas b/src/fPreferences.pas
index cb17f24..c8b9632 100644
--- a/src/fPreferences.pas
+++ b/src/fPreferences.pas
@@ -95,6 +95,12 @@ type
     cb6m1: TCheckBox;
     cb70cm1: TCheckBox;
     cb76GHz1: TCheckBox;
+    cb122GHz: TCheckBox;
+    cb122GHz1: TCheckBox;
+    cb134GHz: TCheckBox;
+    cb134GHz1: TCheckBox;
+    cb241GHz: TCheckBox;
+    cb241GHz1: TCheckBox;
     cb80m: TCheckBox;
     cb40m: TCheckBox;
     cb30m: TCheckBox;
@@ -122,6 +128,8 @@ type
     cb30cm: TCheckBox;
     cgLimit: TCheckGroup;
     cbNoKeyerReset: TCheckBox;
+    chkR2Vfo: TCheckBox;
+    chkR1Vfo: TCheckBox;
     chkOperator: TCheckBox;
     chkDarcDok: TCheckBox;
     chkNewDOKTables: TCheckBox;
@@ -383,6 +391,9 @@ type
     chkProfileRig1: TCheckBox;
     chkShow17M: TCheckBox;
     chkShow6MM: TCheckBox;
+    chkShow25MM: TCheckBox;
+    chkShow2MM: TCheckBox;
+    chkShow1MM: TCheckBox;
     chkShowGrayline1: TCheckBox;
     chkShowTRXwindow1: TCheckBox;
     chkSSB1: TCheckBox;
@@ -502,6 +513,9 @@ type
     DateEditCall: TDateEdit;
     DateEditLoc: TDateEdit;
     dlgColor : TColorDialog;
+    edtGCStep: TEdit;
+    edtGCPolarDivisor: TEdit;
+    edtUsrBtn: TEdit;
     edtUsr1R1Name: TEdit;
     edtR2Host: TEdit;
     edtRadio2Name: TEdit;
@@ -667,7 +681,7 @@ type
     GroupBox17: TGroupBox;
     GroupBox18: TGroupBox;
     GroupBox19: TGroupBox;
-    GroupBox2: TGroupBox;
+    gbInternet: TGroupBox;
     GroupBox20: TGroupBox;
     GroupBox21: TGroupBox;
     GroupBox22: TGroupBox;
@@ -684,7 +698,7 @@ type
     grpUsrCmds: TGroupBox;
     GroupBox31: TGroupBox;
     GroupBox32: TGroupBox;
-    GroupBox33: TGroupBox;
+    gbOffsets: TGroupBox;
     GroupBox34: TGroupBox;
     GroupBox35: TGroupBox;
     gbeQSL: TGroupBox;
@@ -720,6 +734,13 @@ type
     Label1: TLabel;
     Label10: TLabel;
     Label108: TLabel;
+    lblGLOffset: TLabel;
+    lblGCStep: TLabel;
+    lblGCDivisor: TLabel;
+    lblGCHint: TLabel;
+    LblTimes: TLabel;
+    Label17: TLabel;
+    lblUsrBtn: TLabel;
     lblHost2: TLabel;
     lblUsr1R1: TLabel;
     lblUsr1R2: TLabel;
@@ -763,7 +784,7 @@ type
     Label117: TLabel;
     Label118: TLabel;
     Label119: TLabel;
-    Label12: TLabel;
+    lblintProxy: TLabel;
     Label120: TLabel;
     Label121: TLabel;
     Label122: TLabel;
@@ -775,7 +796,7 @@ type
     lbleQSLBkg: TLabel;
     lblRadio2: TLabel;
     lblRotId1: TLabel;
-    Label13: TLabel;
+    lblIntPort: TLabel;
     lblSerialR1Spd: TLabel;
     lblserialR1DataBits: TLabel;
     lblSerialR1Stop: TLabel;
@@ -786,7 +807,7 @@ type
     lblSerialR2Spd: TLabel;
     lblSerialR2DataBits: TLabel;
     lblSerialR2Stop: TLabel;
-    Label14: TLabel;
+    lblIntUser: TLabel;
     lblSerialR2Hand: TLabel;
     lblSerialR2Parity: TLabel;
     lblSerialR2Dtr: TLabel;
@@ -797,7 +818,7 @@ type
     lblSpeed1: TLabel;
     lblDataBits1: TLabel;
     lblStopBits1: TLabel;
-    Label15: TLabel;
+    lblUtc: TLabel;
     lblHandshake1: TLabel;
     lblParity1: TLabel;
     lblDTR1: TLabel;
@@ -848,7 +869,7 @@ type
     lblK3NGSpeed: TLabel;
     lblK3NGWPM: TLabel;
     lblK3NGSerSpeed: TLabel;
-    Label197: TLabel;
+    lblGraylineHint: TLabel;
     Label198: TLabel;
     lblHamLibSpeed: TLabel;
     lblHamLibWPM: TLabel;
@@ -862,14 +883,14 @@ type
     lblDebug : TLabel;
     Label207: TLabel;
     lblwsjtaddr: TLabel;
-    Label46 : TLabel;
-    Label47 : TLabel;
+    lblDiffColor : TLabel;
+    lblQsoColorDate : TLabel;
     Label48: TLabel;
     Label49: TLabel;
     Label50: TLabel;
     Label51: TLabel;
     lbl: TLabel;
-    Label19: TLabel;
+    lblIntPasswd: TLabel;
     Label2: TLabel;
     lblExtra: TLabel;
     lblModelR1: TLabel;
@@ -895,13 +916,13 @@ type
     Label54: TLabel;
     Label55: TLabel;
     Label56: TLabel;
-    Label59: TLabel;
+    lblGrayline: TLabel;
     Label61: TLabel;
     Label63: TLabel;
     Label91: TLabel;
     Label92: TLabel;
     Label93: TLabel;
-    Label94: TLabel;
+    lblSunRiseSet: TLabel;
     Label95: TLabel;
     lblPollR2: TLabel;
     lbl1: TLabel;
@@ -938,7 +959,7 @@ type
     Label57: TLabel;
     Label58: TLabel;
     Label6: TLabel;
-    Label60: TLabel;
+    lblWebBrowser: TLabel;
     lblBandMapFont: TLabel;
     Label62: TLabel;
     Label64: TLabel;
@@ -1071,32 +1092,26 @@ type
     procedure btnFirstLoadClick(Sender: TObject);
     procedure btnSecondLoadClick(Sender: TObject);
     procedure btnThirdLoadClick(Sender: TObject);
-    procedure cmbDataBitsR1Change(Sender : TObject);
-    procedure cmbDataBitsR2Change(Sender : TObject);
-    procedure cmbDTRR1Change(Sender : TObject);
-    procedure cmbDTRR2Change(Sender : TObject);
-    procedure cmbHanshakeR1Change(Sender : TObject);
-    procedure cmbHanshakeR2Change(Sender : TObject);
     procedure cmbIfaceType1Change(Sender: TObject);
     procedure cmbIfaceType2Change(Sender: TObject);
-    procedure cmbParityR1Change(Sender : TObject);
-    procedure cmbParityR2Change(Sender : TObject);
-    procedure cmbRTSR1Change(Sender : TObject);
-    procedure cmbRTSR2Change(Sender : TObject);
-    procedure cmbSpeedR1Change(Sender : TObject);
-    procedure cmbSpeedR2Change(Sender : TObject);
-    procedure cmbStopBitsR1Change(Sender : TObject);
-    procedure cmbStopBitsR2Change(Sender : TObject);
+    procedure cmbModelRig1Change(Sender: TObject);
+    procedure cmbModelRig2Change(Sender: TObject);
+    procedure cmbModelRot1Change(Sender: TObject);
+    procedure cmbModelRot2Change(Sender: TObject);
+    procedure edtAlertCmdExit(Sender: TObject);
+    procedure edtGCPolarDivisorExit(Sender: TObject);
+    procedure edtGCStepExit(Sender: TObject);
     procedure edtHtmlFilesClick(Sender: TObject);
+    procedure edtHtmlFilesExit(Sender: TObject);
+    procedure edtImgFilesExit(Sender: TObject);
     procedure edtK3NGSerSpeedChange(Sender: TObject);
     procedure edtLocChange(Sender: TObject);
-    procedure edtR1RigCtldArgsChange(Sender: TObject);
-    procedure edtR1RigCtldPortChange(Sender : TObject);
-    procedure edtR2RigCtldArgsChange(Sender : TObject);
-    procedure edtR2RigCtldPortChange(Sender : TObject);
-    procedure edtRadio1NameChange(Sender: TObject);
-    procedure edtRadio2Change(Sender: TObject);
+    procedure edtLocExit(Sender: TObject);
+    procedure edtPdfFilesExit(Sender: TObject);
     procedure edtRecetQSOsKeyPress(Sender: TObject; var Key: char);
+    procedure RotorParamsChange(Sender: TObject);
+    procedure TRXParamsChange(Sender: TObject);
+    procedure edtTxtFilesExit(Sender: TObject);
     procedure edtWebBrowserClick(Sender: TObject);
     procedure edtWebBrowserExit(Sender: TObject);
     procedure edtWinMaxSpeedChange(Sender: TObject);
@@ -1131,7 +1146,6 @@ type
     procedure FormShow(Sender: TObject);
     procedure edtPoll2Exit(Sender: TObject);
     procedure edtPoll1Exit(Sender: TObject);
-    procedure Panel1Click(Sender: TObject);
     procedure pgPreferencesChange(Sender: TObject);
     procedure pnlQSOColorClick(Sender : TObject);
   private
@@ -1140,6 +1154,7 @@ type
     procedure SaveClubSection;
     procedure LoadMebershipCombo;
     procedure LoadMembersFromCombo(ClubComboText, ClubNumber : String);
+    function SeekExecFile(MyFile,MyExeFor:String): String;
   public
     { public declarations }
     ActPageIdx : integer;
@@ -1153,6 +1168,7 @@ var
   fqSize: integer;
   fbandSize: integer;
   TRXChanged: boolean;
+  RotChanged: boolean;
   ReloadFreq: Boolean = False;
   ReloadModes: Boolean = False;
   WinKeyerChanged : Boolean;
@@ -1162,7 +1178,7 @@ implementation
 
 { TfrmPreferences }
 uses dUtils, dData, fMain, fFreq, fQTHProfiles, fSerialPort, fClubSettings, fLoadClub,
-  fGrayline, fNewQSO, fBandMap, fBandMapWatch, fDefaultFreq, fKeyTexts, fTRXControl,
+  fGrayline, fNewQSO, fBandMap, fBandMapWatch, fDefaultFreq, fKeyTexts, fTRXControl,fRotControl,
   fSplitSettings, uMyIni, fNewQSODefValues, fDXCluster, fCallAlert, fConfigStorage, fPropagation,
   fRadioMemories, dMembership, dLogUpload;
 
@@ -1188,6 +1204,7 @@ begin
   cqrini.WriteString('NewQSO', 'Mode', cmbMode.Text);
   cqrini.WriteString('NewQSO', 'QSL_S', cmbQSL_S.Text);
   cqrini.WriteString('NewQSO', 'RemQSO', edtComments.Text);
+  cqrini.WriteString('NewQSO', 'UsrBtn', edtUsrBtn.Text);
   cqrini.WriteBool('NewQSO', 'UseSpaceBar', chkUseSpaceBar.Checked);
   cqrini.WriteBool('NewQSO', 'RefreshAfterSave', chkRefreshAfterSave.Checked);
   cqrini.WriteBool('NewQSO', 'SkipModeFreq', chkSkipModeFreq.Checked);
@@ -1217,6 +1234,8 @@ begin
   cqrini.WriteInteger('Program', 'Options', pgPreferences.ActivePageIndex);
   cqrini.WriteBool('Program', 'BandStatMHz', rgStatistics.ItemIndex = 0);
   cqrini.WriteFloat('Program', 'GraylineOffset', StrToCurr(edtGrayLineOffset.Text));
+  cqrini.WriteFloat('Program', 'GraylineGCstep',StrToCurr(edtGCStep.Caption));
+  cqrini.WriteInteger('Program', 'GraylineGCPolarDivisor',StrToInt(edtGCPolarDivisor.Caption));
 
   if  edtWebBrowser.Text = '' then  edtWebBrowser.Text:= dmUtils.MyDefaultBrowser; //may not be empty string
   cqrini.WriteString('Program', 'WebBrowser', edtWebBrowser.Text);
@@ -1309,6 +1328,9 @@ begin
   cqrini.WriteBool('Bands', '1cm', cb1cm.Checked);
   cqrini.WriteBool('Bands', '47GHz', cb47GHz.Checked);
   cqrini.WriteBool('Bands', '76GHz', cb76GHz.Checked);
+  cqrini.WriteBool('Bands', '122GHz', cb122GHz.Checked);
+  cqrini.WriteBool('Bands', '134GHz', cb134GHz.Checked);
+  cqrini.WriteBool('Bands', '241GHz', cb241GHz.Checked);
 
   cqrini.WriteString('TRX', 'RigCtldPath', edtRigCtldPath.Text);
   cqrini.WriteBool('TRX','Debug',chkTrxControlDebug.Checked);
@@ -1319,6 +1341,7 @@ begin
   cqrini.WriteString('TRX1', 'poll', edtPoll1.Text);
   cqrini.WriteString('TRX1', 'Desc', edtRadio1Name.Text);
   cqrini.WriteBool('TRX1', 'CWR', chkR1SendCWR.Checked);
+  cqrini.WriteBool('TRX1', 'ChkVfo',chkR1Vfo.Checked);
   cqrini.WriteString('TRX1', 'RigCtldPort', edtR1RigCtldPort.Text);
   cqrini.WriteString('TRX1', 'ExtraRigCtldArgs', edtR1RigCtldArgs.Text);
   cqrini.WriteBool('TRX1', 'RunRigCtld', chkR1RunRigCtld.Checked);
@@ -1342,6 +1365,7 @@ begin
   cqrini.WriteString('TRX2', 'poll', edtPoll2.Text);
   cqrini.WriteString('TRX2', 'Desc', edtRadio2Name.Text);
   cqrini.WriteBool('TRX2', 'CWR', chkR2SendCWR.Checked);
+  cqrini.WriteBool('TRX2', 'ChkVfo',chkR2Vfo.Checked);
   cqrini.WriteString('TRX2', 'RigCtldPort', edtR2RigCtldPort.Text);
   cqrini.WriteString('TRX2', 'ExtraRigCtldArgs', edtR2RigCtldArgs.Text);
   cqrini.WriteBool('TRX2', 'RunRigCtld', chkR2RunRigCtld.Checked);
@@ -1446,6 +1470,9 @@ begin
   cqrini.WriteBool('DXCluster', 'Show125CM', chkShow125CM.Checked);
   cqrini.WriteBool('DXCluster', 'Show6MM', chkShow6MM.Checked);
   cqrini.WriteBool('DXCluster', 'Show4MM', chkShow4MM.Checked);
+  cqrini.WriteBool('DXCluster', 'Show25MM', chkShow25MM.Checked);
+  cqrini.WriteBool('DXCluster', 'Show2MM', chkShow2MM.Checked);
+  cqrini.WriteBool('DXCluster', 'Show1MM', chkShow1MM.Checked);
   cqrini.WriteBool('DXCluster', 'CW', chkCW.Checked);
   cqrini.WriteBool('DXCluster', 'SSB', chkSSB.Checked);
   cqrini.WriteString('DXCluster', 'NotShow', edtDoNotShow.Text);
@@ -1692,6 +1719,8 @@ begin
   cqrini.SaveToDisk;
   if TRXChanged then
     frmTRXControl.InicializeRig;
+  if RotChanged then
+    frmRotControl.InicializeRot;
 
   frmTRXControl.LoadUsrButtonCaptions;
   frmTRXControl.LoadButtonCaptions;
@@ -1745,7 +1774,10 @@ begin
   frmTRXControl.SetDebugMode(chkTrxControlDebug.Checked or (dmData.DebugLevel>0));
 
   if ((frmNewQSO.sbNewQSO.Panels[0].Text = '') or (frmNewQSO.sbNewQSO.Panels[0].Text = cMyLoc)) then
+   Begin
     frmNewQSO.sbNewQSO.Panels[0].Text := cMyLoc + edtLoc.Text;
+    frmNewQSO.CurrentMyLoc:=edtLoc.Text;
+   end;
 
   cqrini.SaveToDisk;
   dmData.SaveConfigFile;
@@ -1763,6 +1795,7 @@ begin
   dmUtils.InsertQSL_S(cmbQSL_S);
   dmUtils.InsertFreq(cmbFreq);
   ActPageIdx := 0; //tabProgram
+  Label17.Caption:='';
 end;
 
 
@@ -1780,8 +1813,7 @@ end;
 
 procedure TfrmPreferences.FormCloseQuery(Sender: TObject; var CanClose: boolean);
 begin
-  cqrini.WriteInteger('Pref', 'Top', Top);
-  cqrini.WriteInteger('Pref', 'Left', Left);
+  dmUtils.SaveWindowPos(self);
   cqrini.WriteInteger('Pref', 'ActPageIdx', pgPreferences.ActivePageIndex);
 end;
 
@@ -2454,38 +2486,6 @@ begin
     end;
 end;
 
-procedure TfrmPreferences.cmbDataBitsR1Change(Sender : TObject);
-begin
-  TRXChanged := True
-end;
-
-procedure TfrmPreferences.cmbDataBitsR2Change(Sender : TObject);
-begin
-  TRXChanged := True
-end;
-
-procedure TfrmPreferences.cmbDTRR1Change(Sender : TObject);
-begin
-  TRXChanged := True
-end;
-
-procedure TfrmPreferences.cmbDTRR2Change(Sender : TObject);
-begin
-  TRXChanged := True
-end;
-
-
-
-procedure TfrmPreferences.cmbHanshakeR1Change(Sender : TObject);
-begin
-  TRXChanged := True
-end;
-
-procedure TfrmPreferences.cmbHanshakeR2Change(Sender : TObject);
-begin
-  TRXChanged := True
-end;
-
 procedure TfrmPreferences.cmbIfaceType1Change(Sender: TObject);
 begin
   WinKeyerChanged := True;
@@ -2505,44 +2505,91 @@ begin
      then cbNoKeyerReset.Checked := false; //restart is always needed  when radio changes
 end;
 
-procedure TfrmPreferences.cmbParityR1Change(Sender : TObject);
+procedure TfrmPreferences.cmbModelRig1Change(Sender: TObject);
 begin
-  TRXChanged := True
-end;
+   chkR1RunRigCtld.Enabled:=True;
 
-procedure TfrmPreferences.cmbParityR2Change(Sender : TObject);
-begin
-  TRXChanged := True
+  if cmbModelRig1.ItemIndex=0 then  //With Hamlib Dummy force rigctld to start
+    Begin
+     chkR1RunRigCtld.Checked:=True;
+     chkR1RunRigCtld.Enabled:=False;
+    end;
+  if cmbModelRig1.ItemIndex=1 then  //With Hamlib Net rigctld do not start rigctld (no sense)
+    Begin
+     chkR1RunRigCtld.Checked:=False;
+     chkR1RunRigCtld.Enabled:=False;
+    end;
+   TRXParamsChange(nil);
 end;
 
-procedure TfrmPreferences.cmbRTSR1Change(Sender : TObject);
+procedure TfrmPreferences.cmbModelRig2Change(Sender: TObject);
 begin
-  TRXChanged := True
+    chkR2RunRigCtld.Enabled:=True;
+
+  if cmbModelRig2.ItemIndex=0 then  //With Hamlib Dummy force rigctld to start
+      Begin
+       chkR2RunRigCtld.Checked:=True;
+       chkR2RunRigCtld.Enabled:=False;
+      end;
+   if cmbModelRig2.ItemIndex=1 then  //With Hamlib Net rigctld do not start rigctld (no sense)
+    Begin
+     chkR2RunRigCtld.Checked:=False;
+     chkR2RunRigCtld.Enabled:=False;
+    end;
+   TRXParamsChange(nil);
 end;
 
-procedure TfrmPreferences.cmbRTSR2Change(Sender : TObject);
+procedure TfrmPreferences.cmbModelRot1Change(Sender: TObject);
 begin
-  TRXChanged := True
+    if cmbModelRot1.ItemIndex=1 then
+    Begin
+     chkRot1RunRotCtld.Checked:=False;
+     chkRot1RunRotCtld.Enabled:=False;
+    end
+   else
+      chkRot1RunRotCtld.Enabled:=True;
+   RotorParamsChange(nil);
 end;
 
-procedure TfrmPreferences.cmbSpeedR1Change(Sender : TObject);
+procedure TfrmPreferences.cmbModelRot2Change(Sender: TObject);
 begin
-  TRXChanged := True
+    if cmbModelRot2.ItemIndex=1 then
+    Begin
+     chkRot2RunRotCtld.Checked:=False;
+     chkRot2RunRotCtld.Enabled:=False;
+    end
+   else
+      chkRot2RunRotCtld.Enabled:=True;
+   RotorParamsChange(nil);
 end;
-
-procedure TfrmPreferences.cmbSpeedR2Change(Sender : TObject);
+procedure TfrmPreferences.edtAlertCmdExit(Sender: TObject);
 begin
-  TRXChanged := True
+   edtAlertCmd.Text:=StringReplace(edtAlertCmd.Text,'~/',dmData.UsrHomeDir,[rfReplaceAll]);
+   // ~ in command causes DXCluster spot flow stop (!?)
 end;
 
-procedure TfrmPreferences.cmbStopBitsR1Change(Sender : TObject);
+procedure TfrmPreferences.edtGCPolarDivisorExit(Sender: TObject);
+var v:integer;
 begin
-  TRXChanged := True
+   if TryStrToInt(edtGCPolarDivisor.Caption,v) then
+    begin
+      if ((v<=0) or (v>40)) then
+             edtGCPolarDivisor.Caption:='10' //replace with default
+    end
+    else
+       edtGCPolarDivisor.Caption:='10' //replace with default
 end;
 
-procedure TfrmPreferences.cmbStopBitsR2Change(Sender : TObject);
+procedure TfrmPreferences.edtGCStepExit(Sender: TObject);
+var v:extended;
 begin
-  TRXChanged := True
+  if TryStrToFloat(edtGCStep.Caption,v) then
+    Begin
+      if ((v<=0) or (v>40)) then
+        edtGCStep.Caption:='1.5'; //error use default value;
+    end
+   else
+    edtGCStep.Caption:='1.5'; //on convert error use default value;
 end;
 
 procedure TfrmPreferences.edtHtmlFilesClick(Sender: TObject);
@@ -2551,45 +2598,69 @@ begin
         edtHtmlFiles.Text := odFindBrowser.Filename;
 end;
 
-procedure TfrmPreferences.edtK3NGSerSpeedChange(Sender: TObject);
+procedure TfrmPreferences.edtHtmlFilesExit(Sender: TObject);
 begin
-  WinKeyerChanged := True
+   if ExtractFilePath(edtHtmlFiles.Text)='' then
+   Begin
+     edtHtmlFiles.Text:='';
+     Label17.Caption:='NOTE: You have to give full path for program file names!'
+   end else
+     Label17.Caption:='';
 end;
 
-procedure TfrmPreferences.edtLocChange(Sender: TObject);
+procedure TfrmPreferences.edtImgFilesExit(Sender: TObject);
 begin
-  edtLoc.Text := dmUtils.StdFormatLocator(edtLoc.Text);
-  edtLoc.SelStart := Length(edtLoc.Text);
+   if ExtractFilePath(edtImgFiles.Text)='' then
+        edtImgFiles.Text:=SeekExecFile(edtImgFiles.Text,'Find image viewer');
 end;
 
-procedure TfrmPreferences.edtR1RigCtldArgsChange(Sender: TObject);
+procedure TfrmPreferences.edtPdfFilesExit(Sender: TObject);
 begin
-  TRXChanged := True
+   if ExtractFilePath(edtPdfFiles.Text)='' then
+        edtPdfFiles.Text:=SeekExecFile(edtPdfFiles.Text,'Find PDF viewer');
 end;
 
-procedure TfrmPreferences.edtR1RigCtldPortChange(Sender : TObject);
+procedure TfrmPreferences.edtTxtFilesExit(Sender: TObject);
 begin
-  TRXChanged := True
+  if ExtractFilePath(edtTxtFiles.Text)='' then
+        edtTxtFiles.Text:=SeekExecFile(edtTxtFiles.Text,'Find text editor');
 end;
-
-procedure TfrmPreferences.edtR2RigCtldArgsChange(Sender : TObject);
-begin
-  TRXChanged := True
+function TfrmPreferences.SeekExecFile(MyFile,MyExeFor:string): String;
+Begin
+     Result :='';
+     Label17.Caption:='NOTE: You have to give full path for program file names!';
+     odFindBrowser.InitialDir:='/usr/bin';
+     odFindBrowser.FileName:=MyFile;
+     odFindBrowser.Title:=MyExeFor;
+     if odFindBrowser.Execute then
+        Result := odFindBrowser.Filename;
 end;
 
-procedure TfrmPreferences.edtR2RigCtldPortChange(Sender : TObject);
+procedure TfrmPreferences.edtK3NGSerSpeedChange(Sender: TObject);
 begin
-  TRXChanged := True
+  WinKeyerChanged := True
 end;
 
-procedure TfrmPreferences.edtRadio1NameChange(Sender: TObject);
+procedure TfrmPreferences.edtLocChange(Sender: TObject);
 begin
-  TRXChanged := True
+  edtLoc.Text := dmUtils.StdFormatLocator(edtLoc.Text);
+  edtLoc.SelStart := Length(edtLoc.Text);
 end;
 
-procedure TfrmPreferences.edtRadio2Change(Sender: TObject);
+procedure TfrmPreferences.edtLocExit(Sender: TObject);
 begin
-  TRXChanged := True
+  edtLoc.Text:=trim(edtLoc.Text);
+  if dmUtils.IsLocOK(edtLoc.Text) then   //update
+   begin
+    frmNewQSO.CurrentMyLoc :=edtLoc.Text;//current my_loc
+    frmNewQSO.sbNewQSO.Panels[0].Text := fNewQSO.cMyLoc + frmNewQSO.CurrentMyLoc; //and  NewQSO panel
+    frmNewQSO.ClearGrayLineMapLine; //my_loc on map
+   end
+  else
+   begin
+    edtLoc.Text:='';
+    edtLoc.SetFocus;
+   end;
 end;
 
 procedure TfrmPreferences.edtRecetQSOsKeyPress(Sender: TObject; var Key: char);
@@ -2598,8 +2669,18 @@ begin
     key := #0;
 end;
 
+procedure TfrmPreferences.TRXParamsChange(Sender: TObject);
+begin
+  TRXChanged := True
+end;
+procedure TfrmPreferences.RotorParamsChange(Sender: TObject);
+begin
+  RotChanged := True;
+end;
+
 procedure TfrmPreferences.edtWebBrowserClick(Sender: TObject);
 Begin
+  odFindBrowser.InitialDir:='/usr/bin';
   if odFindBrowser.Execute then
         edtWebBrowser.Text := odFindBrowser.Filename;
 end;
@@ -2659,6 +2740,8 @@ var
   i: integer;
 begin
   dmUtils.LoadFontSettings(self);
+  dmUtils.LoadWindowPos(self);
+
   dmUtils.InsertModes(cmbDefaultMode);
   dmUtils.InsertModes(cmbMode);
   dmUtils.InsertModes(cmbWsjtDefaultMode);
@@ -2694,8 +2777,9 @@ begin
   cmbMode.Text := cqrini.ReadString('NewQSO', 'Mode', 'CW');
   cmbQSL_S.Text := cqrini.ReadString('NewQSO', 'QSL_S', '');
   edtComments.Text := cqrini.ReadString('NewQSO', 'RemQSO', '');
+  edtUsrBtn.Text := cqrini.ReadString('NewQSO', 'UsrBtn', 'https://www.qrzcq.com/call/$CALL');
   chkUseSpaceBar.Checked := cqrini.ReadBool('NewQSO', 'UseSpaceBar', False);
-  chkRefreshAfterSave.Checked := cqrini.ReadBool('NewQSO', 'RefreshAfterSave', False);
+  chkRefreshAfterSave.Checked := cqrini.ReadBool('NewQSO', 'RefreshAfterSave', True);
   chkSkipModeFreq.Checked := cqrini.ReadBool('NewQSO', 'SkipModeFreq', True);
   chkAutoSearch.Checked := cqrini.ReadBool('NewQSO', 'AutoSearch', False);
   chkShowRecentQSOs.Checked := cqrini.ReadBool('NewQSO', 'ShowRecentQSOs', False);
@@ -2721,8 +2805,9 @@ begin
   edtPasswd.Text := cqrini.ReadString('Program', 'Passwd', '');
   edtOffset.Text := CurrToStr(cqrini.ReadFloat('Program', 'offset', 0));
   pgPreferences.ActivePageIndex := cqrini.ReadInteger('Program', 'Options', 0);
-  edtGrayLineOffset.Text :=
-    CurrToStr(cqrini.ReadFloat('Program', 'GraylineOffset', 0));
+  edtGrayLineOffset.Text := CurrToStr(cqrini.ReadFloat('Program', 'GraylineOffset', 0));
+  edtGCStep.Caption :=  CurrToStr(cqrini.ReadFloat('Program', 'GraylineGCstep',15E-001));
+  edtGCPolarDivisor.Caption := IntToStr(cqrini.ReadInteger('Program', 'GraylineGCPolarDivisor',10));
   edtWebBrowser.Text := cqrini.ReadString('Program', 'WebBrowser', dmUtils.MyDefaultBrowser);
   chkNewDXCCTables.Checked := cqrini.ReadBool('Program', 'CheckDXCCTabs', True);
   chkShowDeleted.Checked := cqrini.ReadBool('Program', 'ShowDeleted', False);
@@ -2817,6 +2902,9 @@ begin
   cb1cm.Checked := cqrini.ReadBool('Bands', '1cm', False);
   cb47GHz.Checked := cqrini.ReadBool('Bands', '47GHz', False);
   cb76GHz.Checked := cqrini.ReadBool('Bands', '76GHz', False);
+  cb122GHz.Checked := cqrini.ReadBool('Bands', '122GHz', False);
+  cb134GHz.Checked := cqrini.ReadBool('Bands', '134GHz', False);
+  cb241GHz.Checked := cqrini.ReadBool('Bands', '241GHz', False);
 
   edtRigCtldPath.Text := cqrini.ReadString('TRX', 'RigCtldPath', '/usr/bin/rigctld');
   chkTrxControlDebug.Checked := cqrini.ReadBool('TRX','Debug',False);
@@ -2848,6 +2936,7 @@ begin
   edtPoll1.Text := cqrini.ReadString('TRX1', 'poll', '500');
   edtRadio1Name.Text := cqrini.ReadString('TRX1', 'Desc', 'Radio 1');
   chkR1SendCWR.Checked := cqrini.ReadBool('TRX1', 'CWR', False);
+  chkR1Vfo.Checked:=   cqrini.ReadBool('TRX1', 'ChkVfo', True);
   edtR1RigCtldPort.Text := cqrini.ReadString('TRX1', 'RigCtldPort', '4532');
   edtR1RigCtldArgs.Text := cqrini.ReadString('TRX1', 'ExtraRigCtldArgs', '');
   chkR1RunRigCtld.Checked := cqrini.ReadBool('TRX1', 'RunRigCtld', False);
@@ -2870,6 +2959,7 @@ begin
   edtPoll2.Text := cqrini.ReadString('TRX2', 'poll', '500');
   edtRadio2Name.Text := cqrini.ReadString('TRX2', 'Desc', 'Radio 2');
   chkR2SendCWR.Checked := cqrini.ReadBool('TRX2', 'CWR', False);
+  chkR2Vfo.Checked:=   cqrini.ReadBool('TRX2', 'ChkVfo', True);
   edtR2RigCtldPort.Text := cqrini.ReadString('TRX2', 'RigCtldPort', '4532');
   edtR2RigCtldArgs.Text := cqrini.ReadString('TRX2', 'ExtraRigCtldArgs', '');
   chkR2RunRigCtld.Checked := cqrini.ReadBool('TRX2', 'RunRigCtld', False);
@@ -2932,8 +3022,15 @@ begin
   edtAM2.Value := cqrini.ReadInteger('Band2', 'AM', 3000);
   edtFM2.Value := cqrini.ReadInteger('Band2', 'FM', 2500);
 
+  cmbModelRig1Change(nil);
+  cmbModelRig2Change(nil);
+  cmbModelRot1Change(nil);
+  cmbModelRot2Change(nil);
+
   edtDigiModes.Text := cqrini.ReadString('Modes', 'Digi', '');
 
+
+
   chkUseProfiles.Checked := cqrini.ReadBool('Profiles', 'Use', False);
   cmbProfiles.Text :=
     dmData.GetProfileText(cqrini.ReadInteger('Profiles', 'Selected', 0));
@@ -2968,6 +3065,9 @@ begin
   chkShow125CM.Checked := cqrini.ReadBool('DXCluster', 'Show125CM', True);
   chkShow6MM.Checked := cqrini.ReadBool('DXCluster', 'Show6MM', True);
   chkShow4MM.Checked := cqrini.ReadBool('DXCluster', 'Show4MM', True);
+  chkShow25MM.Checked := cqrini.ReadBool('DXCluster', 'Show25MM', True);
+  chkShow2MM.Checked := cqrini.ReadBool('DXCluster', 'Show2MM', True);
+  chkShow1MM.Checked := cqrini.ReadBool('DXCluster', 'Show1MM', True);
   chkCW.Checked := cqrini.ReadBool('DXCluster', 'CW', True);
   chkSSB.Checked := cqrini.ReadBool('DXCluster', 'SSB', True);
   edtDoNotShow.Text := cqrini.ReadString('DXCluster', 'NotShow', '');
@@ -3139,9 +3239,9 @@ begin
   rgBackupType.ItemIndex := cqrini.ReadInteger('Backup', 'BackupType', 0);
   chkAskBackup.Checked := cqrini.ReadBool('Backup','AskFirst',False);
 
-  edtTxtFiles.Text := cqrini.ReadString('ExtView', 'txt', 'gedit');
-  edtPdfFiles.Text := cqrini.ReadString('ExtView', 'pdf', 'evince');
-  edtImgFiles.Text := cqrini.ReadString('ExtView', 'img', 'eog');
+  edtTxtFiles.Text := cqrini.ReadString('ExtView', 'txt', '');
+  edtPdfFiles.Text := cqrini.ReadString('ExtView', 'pdf', '');
+  edtImgFiles.Text := cqrini.ReadString('ExtView', 'img', '');
   edtHtmlFiles.Text := cqrini.ReadString('ExtView', 'html', dmUtils.MyDefaultBrowser);
   chkIntQSLViewer.Checked := cqrini.ReadBool('ExtView', 'QSL', True);
 
@@ -3212,6 +3312,7 @@ begin
 
   chkSysUTCClick(nil);
   TRXChanged      := False;
+  RotChanged      := False;
   WinKeyerChanged := False;
 
   pgPreferences.ActivePageIndex := ActPageIdx;    //set wanted tab for showing when open. ActTab is public variable.
@@ -3234,11 +3335,6 @@ begin
     edtPoll1.Text := '500';
 end;
 
-procedure TfrmPreferences.Panel1Click(Sender: TObject);
-begin
-
-end;
-
 procedure TfrmPreferences.pgPreferencesChange(Sender: TObject);
 begin
   lbPreferences.Selected[pgPreferences.ActivePageIndex] := True;
diff --git a/src/fPropagation.pas b/src/fPropagation.pas
index 977ae51..623889e 100644
--- a/src/fPropagation.pas
+++ b/src/fPropagation.pas
@@ -189,54 +189,54 @@ begin
     Child := Doc.DocumentElement.FirstChild;
 
     data := Child.FindNode('updated');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.LastUpdate := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('solarflux');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.sfi := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('aindex');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.a := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('kindex');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.k := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('sunspots');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.ssn := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('aurora');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
     begin
       if Assigned(data.FirstChild) then
         frmPropagation.aur := String(data.FirstChild.NodeValue)
     end;
 
     data := Child.FindNode('latdegree');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.lat := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('magneticfield');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.mag := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('geomagfield');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.geo := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('signalnoise');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.sigs := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('fof2');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
       frmPropagation.fof2 := String(data.FirstChild.NodeValue);
 
     data := Child.FindNode('calculatedconditions');
-    if Assigned(data) then
+    if Assigned(data) and (data.ChildNodes.Count>0) then
     begin
       for j:=0 to data.ChildNodes.Count-1 do
       begin                                              //80-40m                                       daynight                                                         poor
diff --git a/src/fRbnMonitor.pas b/src/fRbnMonitor.pas
index 26992df..213c569 100644
--- a/src/fRbnMonitor.pas
+++ b/src/fRbnMonitor.pas
@@ -281,18 +281,16 @@ begin
     2 : dxinfo := 'B';
     3 : dxinfo := 'M';
     else
-      dxinfo := ''
+     Begin
+      dxinfo := '';
+      if fil_NewDXCOnly then
+                        Begin
+                          if dmData.DebugLevel>=2 then Writeln('RBNMonitor: ','Not new one, band or mode - ',dxstn);
+                          exit;
+                        end;
+     end;
   end; //case
 
-  if fil_NewDXCOnly then
-  begin
-    if (index>0) and (index<4) then
-    begin
-      if dmData.DebugLevel>=2 then Writeln('RBNMonitor: ','Not new one, band or mode - ',dxstn);
-      exit
-    end
-  end;
-
   Result := True
 end;
 
diff --git a/src/fRotControl.lfm b/src/fRotControl.lfm
index fb41729..0301ba3 100644
--- a/src/fRotControl.lfm
+++ b/src/fRotControl.lfm
@@ -1,55 +1,55 @@
 object frmRotControl: TfrmRotControl
-  Left = 99
-  Height = 211
-  Top = 46
-  Width = 192
+  Left = 282
+  Height = 250
+  Top = 155
+  Width = 184
   Anchors = []
   BorderIcons = [biSystemMenu]
   Caption = 'Rotor control'
-  ClientHeight = 186
-  ClientWidth = 192
+  ClientHeight = 225
+  ClientWidth = 184
   KeyPreview = True
   Menu = MainMenu1
   OnClose = FormClose
   OnDestroy = FormDestroy
   OnKeyUp = FormKeyUp
   OnShow = FormShow
-  LCLVersion = '2.0.4.0'
+  LCLVersion = '2.0.12.0'
   object gbAzimuth: TGroupBox
     AnchorSideLeft.Control = Owner
     AnchorSideTop.Control = Owner
     AnchorSideRight.Control = Owner
     AnchorSideRight.Side = asrBottom
     Left = 6
-    Height = 50
+    Height = 75
     Top = 1
-    Width = 180
+    Width = 172
     Anchors = [akTop, akLeft, akRight]
+    AutoSize = True
     BorderSpacing.Left = 6
     BorderSpacing.Top = 1
     BorderSpacing.Right = 6
     Caption = 'Azimuth'
-    ClientHeight = 32
-    ClientWidth = 178
+    ClientHeight = 57
+    ClientWidth = 170
     TabOrder = 0
+    OnClick = gbAzimuthClick
     object lblAzimuth: TLabel
       AnchorSideLeft.Control = gbAzimuth
       AnchorSideTop.Control = pnlMinMax
       AnchorSideTop.Side = asrBottom
       AnchorSideRight.Control = gbAzimuth
       AnchorSideRight.Side = asrBottom
-      AnchorSideBottom.Control = gbAzimuth
       AnchorSideBottom.Side = asrBottom
-      Left = 1
-      Height = 10
-      Top = 21
-      Width = 176
+      Left = 2
+      Height = 34
+      Top = 23
+      Width = 166
       Alignment = taRightJustify
-      Anchors = [akTop, akLeft, akRight, akBottom]
-      AutoSize = False
-      BorderSpacing.Left = 1
-      BorderSpacing.Right = 1
-      BorderSpacing.Bottom = 1
+      Anchors = [akTop, akLeft, akRight]
+      BorderSpacing.Left = 2
+      BorderSpacing.Top = 2
+      BorderSpacing.Right = 2
       Caption = '0.0'
       Font.Color = clBlue
       Font.Height = 30
@@ -57,6 +57,7 @@ object frmRotControl: TfrmRotControl
       Layout = tlCenter
       ParentColor = False
       ParentFont = False
+      OnClick = lblAzimuthClick
     end
     object pnlMinMax: TPanel
       AnchorSideLeft.Control = gbAzimuth
@@ -66,37 +67,37 @@ object frmRotControl: TfrmRotControl
       Left = 1
       Height = 20
       Top = 1
-      Width = 176
+      Width = 168
       Anchors = [akTop, akLeft, akRight]
+      AutoSize = True
       BorderSpacing.Left = 1
       BorderSpacing.Top = 1
       BorderSpacing.Right = 1
       ClientHeight = 20
-      ClientWidth = 176
+      ClientWidth = 168
       TabOrder = 0
       Visible = False
       object pbAz: TProgressBar
         AnchorSideLeft.Control = pnlMinMax
+        AnchorSideTop.Control = lblAzmin
         AnchorSideTop.Side = asrBottom
         AnchorSideRight.Control = pnlMinMax
         AnchorSideRight.Side = asrBottom
-        AnchorSideBottom.Control = pnlMinMax
         AnchorSideBottom.Side = asrBottom
         Left = 4
-        Height = 6
-        Top = 12
-        Width = 168
-        Anchors = [akLeft, akRight, akBottom]
+        Height = 10
+        Top = 9
+        Width = 160
+        Anchors = [akTop, akLeft, akRight]
         BorderSpacing.Left = 3
         BorderSpacing.Right = 3
-        BorderSpacing.Bottom = 1
         TabOrder = 0
       end
       object lblAzmin: TLabel
         AnchorSideLeft.Control = pnlMinMax
         AnchorSideTop.Control = pnlMinMax
         Left = 4
-        Height = 10
+        Height = 8
         Top = 1
         Width = 3
         BorderSpacing.Left = 3
@@ -109,8 +110,8 @@ object frmRotControl: TfrmRotControl
         AnchorSideTop.Control = pnlMinMax
         AnchorSideRight.Control = pnlMinMax
         AnchorSideRight.Side = asrBottom
-        Left = 169
-        Height = 10
+        Left = 161
+        Height = 8
         Top = 1
         Width = 3
         Alignment = taRightJustify
@@ -122,24 +123,47 @@ object frmRotControl: TfrmRotControl
         ParentFont = False
       end
     end
+    object edtAzimuth: TEdit
+      AnchorSideLeft.Control = lblAzimuth
+      AnchorSideTop.Control = lblAzimuth
+      AnchorSideRight.Control = lblAzimuth
+      AnchorSideRight.Side = asrBottom
+      AnchorSideBottom.Control = lblAzimuth
+      AnchorSideBottom.Side = asrBottom
+      Left = 2
+      Height = 36
+      Hint = '0-360(enter)'
+      Top = 25
+      Width = 166
+      Anchors = [akTop, akLeft, akRight, akBottom]
+      AutoSize = False
+      AutoSelect = False
+      Color = clYellow
+      OnKeyPress = edtAzimuthKeyPress
+      OnKeyUp = edtAzimuthKeyUp
+      OnMouseLeave = edtAzimuthMouseLeave
+      OnMouseUp = edtAzimuthMouseUp
+      OnMouseWheel = edtAzimuthMouseWheel
+      TabOrder = 1
+      Visible = False
+    end
   end
   object pnlBtns: TPanel
     AnchorSideLeft.Control = gbAzimuth
-    AnchorSideTop.Control = gbAzimuth
     AnchorSideTop.Side = asrBottom
     AnchorSideRight.Control = gbAzimuth
     AnchorSideRight.Side = asrBottom
     AnchorSideBottom.Control = Owner
     AnchorSideBottom.Side = asrBottom
     Left = 6
-    Height = 123
-    Top = 57
-    Width = 180
-    Anchors = [akTop, akLeft, akRight, akBottom]
-    BorderSpacing.Top = 6
+    Height = 112
+    Top = 107
+    Width = 172
+    Anchors = [akLeft, akRight, akBottom]
+    AutoSize = True
     BorderSpacing.Bottom = 6
-    ClientHeight = 123
-    ClientWidth = 180
+    ClientHeight = 112
+    ClientWidth = 172
     TabOrder = 1
     object rbRotor1: TRadioButton
       AnchorSideLeft.Control = pnlBtns
@@ -147,7 +171,7 @@ object frmRotControl: TfrmRotControl
       AnchorSideBottom.Side = asrBottom
       Left = 7
       Height = 23
-      Top = 93
+      Top = 82
       Width = 69
       Anchors = [akLeft, akBottom]
       BorderSpacing.Left = 6
@@ -164,9 +188,9 @@ object frmRotControl: TfrmRotControl
       AnchorSideRight.Side = asrBottom
       AnchorSideBottom.Control = pnlBtns
       AnchorSideBottom.Side = asrBottom
-      Left = 104
+      Left = 96
       Height = 23
-      Top = 93
+      Top = 82
       Width = 69
       Anchors = [akRight, akBottom]
       BorderSpacing.Top = 12
@@ -178,27 +202,27 @@ object frmRotControl: TfrmRotControl
     end
     object btnShortP: TButton
       AnchorSideLeft.Control = pnlBtns
-      AnchorSideTop.Control = pnlBtns
+      AnchorSideBottom.Control = btnLeft
       Left = 7
       Height = 25
-      Top = 7
+      Top = 1
       Width = 75
+      Anchors = [akLeft, akBottom]
       BorderSpacing.Left = 6
-      BorderSpacing.Top = 6
+      BorderSpacing.Bottom = 2
       Caption = 'Short Path'
       OnClick = btnShortPClick
       TabOrder = 2
     end
     object btnLongP: TButton
-      AnchorSideTop.Control = pnlBtns
+      AnchorSideTop.Control = btnShortP
       AnchorSideRight.Control = pnlBtns
       AnchorSideRight.Side = asrBottom
-      Left = 98
+      Left = 90
       Height = 25
-      Top = 7
+      Top = 1
       Width = 75
       Anchors = [akTop, akRight]
-      BorderSpacing.Top = 6
       BorderSpacing.Right = 6
       Caption = 'LongPath'
       OnClick = btnLongPClick
@@ -207,29 +231,28 @@ object frmRotControl: TfrmRotControl
     object btnStop: TButton
       AnchorSideLeft.Control = pnlBtns
       AnchorSideLeft.Side = asrCenter
-      AnchorSideTop.Control = btnLeft
       AnchorSideTop.Side = asrBottom
-      Left = 15
+      AnchorSideBottom.Control = rbRotor1
+      Left = 11
       Height = 25
-      Top = 59
+      Top = 55
       Width = 150
-      BorderSpacing.Top = 1
+      Anchors = [akLeft, akBottom]
+      BorderSpacing.Bottom = 2
       Caption = 'Stop'
       OnClick = btnStopClick
       TabOrder = 4
       Visible = False
     end
     object btnRight: TButton
-      AnchorSideTop.Control = btnLongP
-      AnchorSideTop.Side = asrBottom
+      AnchorSideTop.Control = btnLeft
       AnchorSideRight.Control = pnlBtns
       AnchorSideRight.Side = asrBottom
-      Left = 98
+      Left = 90
       Height = 25
-      Top = 33
+      Top = 28
       Width = 75
       Anchors = [akTop, akRight]
-      BorderSpacing.Top = 1
       BorderSpacing.Right = 6
       Caption = 'Turn Right'
       OnClick = btnRightClick
@@ -238,14 +261,15 @@ object frmRotControl: TfrmRotControl
     end
     object btnLeft: TButton
       AnchorSideLeft.Control = pnlBtns
-      AnchorSideTop.Control = btnShortP
       AnchorSideTop.Side = asrBottom
+      AnchorSideBottom.Control = btnStop
       Left = 7
       Height = 25
-      Top = 33
+      Top = 28
       Width = 75
+      Anchors = [akLeft, akBottom]
       BorderSpacing.Left = 6
-      BorderSpacing.Top = 1
+      BorderSpacing.Bottom = 2
       Caption = 'Turn Left'
       OnClick = btnLeftClick
       TabOrder = 6
@@ -256,12 +280,12 @@ object frmRotControl: TfrmRotControl
     Enabled = False
     Interval = 500
     OnTimer = tmrRotorTimer
-    left = 96
-    top = 120
+    Left = 96
+    Top = 120
   end
   object MainMenu1: TMainMenu
-    left = 56
-    top = 120
+    Left = 56
+    Top = 120
     object MenuItem1: TMenuItem
       Caption = 'Preferences'
       object mnuMinMax: TMenuItem
@@ -286,7 +310,7 @@ object frmRotControl: TfrmRotControl
     Enabled = False
     Interval = 15000
     OnTimer = tmrStopRotTimer
-    left = 128
-    top = 120
+    Left = 128
+    Top = 120
   end
 end
diff --git a/src/fRotControl.pas b/src/fRotControl.pas
index 4413a1c..b12f252 100644
--- a/src/fRotControl.pas
+++ b/src/fRotControl.pas
@@ -6,7 +6,8 @@ interface
 
 uses
   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
-  StdCtrls, ExtCtrls, uMyIni, uRotControl, fNewQSO, LCLType, ComCtrls, Menus;
+  StdCtrls, ExtCtrls, uMyIni, uRotControl, fNewQSO, LCLType, ComCtrls, Menus,
+  EditBtn, Types;
 
 type
 
@@ -18,6 +19,7 @@ type
     btnRight: TButton;
     btnShortP: TButton;
     btnStop: TButton;
+    edtAzimuth: TEdit;
     gbAzimuth: TGroupBox;
     lblAzimuth: TLabel;
     lblAzmax: TLabel;
@@ -40,10 +42,19 @@ type
     procedure btnShortPClick(Sender: TObject);
     procedure btnLongPClick(Sender: TObject);
     procedure btnStopClick(Sender: TObject);
+    procedure edtAzimuthKeyPress(Sender: TObject; var Key: char);
+    procedure edtAzimuthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState );
+    procedure edtAzimuthMouseLeave(Sender: TObject);
+    procedure edtAzimuthMouseUp(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; X, Y: Integer);
+    procedure edtAzimuthMouseWheel(Sender: TObject; Shift: TShiftState;
+      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormDestroy(Sender: TObject);
     procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     procedure FormShow(Sender: TObject);
+    procedure gbAzimuthClick(Sender: TObject);
+    procedure lblAzimuthClick(Sender: TObject);
     procedure mnuDirbtnsClick(Sender: TObject);
     procedure mnuMinMaxClick(Sender: TObject);
     procedure mnuPreferencesClick(Sender: TObject);
@@ -55,6 +66,7 @@ type
   private
     { private declarations }
     rotor : TRotControl;
+    MouseWheelUsed : Boolean;
   public
     { public declarations }
     procedure SynROT;
@@ -87,12 +99,28 @@ begin
   if pnlMinMax.Visible then gbAzimuth.Height:=70;
 end;
 
+procedure TfrmRotControl.gbAzimuthClick(Sender: TObject);
+begin
+  edtAzimuth.Text:=lblAzimuth.Caption;
+  edtAzimuth.Font:=lblAzimuth.Font;
+  edtAzimuth.Color:=clYellow;
+  edtAzimuth.Visible:=true;
+  edtAzimuth.SetFocus;
+  edtAzimuth.SelStart := Length(edtAzimuth.Text);
+end;
+
+procedure TfrmRotControl.lblAzimuthClick(Sender: TObject);
+begin
+   gbAzimuthClick(Sender);
+end;
+
+
 procedure TfrmRotControl.mnuDirbtnsClick(Sender: TObject);
 begin
    mnuDirbtns.Checked:= not mnuDirbtns.Checked;
    btnLeft.Visible:=mnuDirbtns.Checked;
    btnRight.Visible:=mnuDirbtns.Checked;
-   cqrini.WriteBool('ROT','DirBtns',mnuDirbtns.Visible);
+   cqrini.WriteBool('ROT','DirBtns',mnuDirbtns.Checked);
 end;
 
 procedure TfrmRotControl.mnuMinMaxClick(Sender: TObject);
@@ -229,6 +257,75 @@ begin
   btnStop.Repaint;
 end;
 
+
+procedure TfrmRotControl.edtAzimuthKeyPress(Sender: TObject; var Key: char);
+var
+   a : integer;
+begin
+  if (Key<>#127)      //delete and numbers ok
+    and ((Key >'9')
+       or (( Key>=#20) and (Key<'0'))) then
+                                        Key:=#0;
+
+   if TryStrToInt(edtAzimuth.Text,a) then
+     Begin
+       if a > 360 then a:=360;
+       if a < 0 then a:=0;
+       edtAzimuth.Text:=IntToStr(a);
+     end;
+end;
+
+procedure TfrmRotControl.edtAzimuthKeyUp(Sender: TObject; var Key: Word;
+  Shift: TShiftState);
+begin
+   if Key = VK_Return then
+   Begin
+    MouseWheelUsed:=false;
+    if edtAzimuth.Text<>'' then
+      rotor.SetAzimuth(edtAzimuth.Text);
+    edtAzimuth.Visible:=False;
+   end;
+end;
+
+procedure TfrmRotControl.edtAzimuthMouseLeave(Sender: TObject);
+begin
+  if MouseWheelUsed then
+                    edtAzimuthMouseUp(nil,mbMiddle,[ssCtrl],0,0);
+end;
+
+procedure TfrmRotControl.edtAzimuthMouseUp(Sender: TObject;
+  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+var
+   Key : word = VK_Return;
+begin
+    edtAzimuthKeyUp(nil,Key,Shift);
+end;
+
+procedure TfrmRotControl.edtAzimuthMouseWheel(Sender: TObject;
+  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
+  var Handled: Boolean);
+var
+      m,s : integer;
+begin
+    MouseWheelUsed:=true;
+    m:=1;   //base 10Hz step
+    if Shift = [ssShift]           then
+                                       m:=10;
+    if Shift = [ssCtrl]            then
+                                       m:=100;
+    if  WheelDelta<0 then
+                                       m:=m*-1;
+    if pos('.',edtAzimuth.Text)>0 then
+                   edtAzimuth.Text:=copy(edtAzimuth.Text,1, pos('.',edtAzimuth.Text)-1);
+    if TryStrToInt(edtAzimuth.Text,s) then
+    Begin
+     s:=s+m;
+     if s > 360 then s:=0;
+     if s < 0 then s:=360;
+     edtAzimuth.Text:=IntToStr(s);
+    end;
+end;
+
 procedure TfrmRotControl.tmrStopRotTimer(Sender: TObject);
 begin
   btnStopClick(nil);
diff --git a/src/fSOTAExport.pas b/src/fSOTAExport.pas
index 4f5b361..d12ee4d 100644
--- a/src/fSOTAExport.pas
+++ b/src/fSOTAExport.pas
@@ -199,7 +199,10 @@ begin
               dmUtils.DateInSOTAFormat(dmData.Q.FieldByName('qsodate').AsDateTime)+',',
               StringReplace(dmData.Q.FieldByName('time_on').AsString,':','',[rfReplaceAll, rfIgnoreCase])+',',
               FormatFloat('0.00;;',dmData.Q.FieldByName('freq').AsFloat),'MHz,',
+              //2022-05-05 OH1KH It seems that SOTA mode can be CqrMode (mainly CW,SSB,FM,AM)(I.E. no mode+submode pairs needed)
+              //otherwise use dmUtils.ModeFromCqr to get mode and submode at this point
               dmData.Q.FieldByName('mode').AsString,',',
+
               dmData.Q.FieldByName('callsign').AsString,',',  //his callsign
               HisSota+',', //his summit
               note  //comments
diff --git a/src/fSearch.pas b/src/fSearch.pas
index a583a40..a7314ac 100644
--- a/src/fSearch.pas
+++ b/src/fSearch.pas
@@ -107,8 +107,6 @@ begin
               ShowMessage(edtText.Text + ' not found')
           end
           else begin
-            dmData.Q.Close;
-            if dmData.trQ.Active then dmData.trQ.Rollback;
             sql := sql + ' where qsodate = '+ QuotedStr(edtText.Text);
             if chkSortByDate.Checked then
               sql := sql + ' order by qsodate'
@@ -126,8 +124,6 @@ begin
               ShowMessage(edtText.Text + ' not found')
           end
           else begin
-            dmData.Q.Close;
-            if dmData.trQ.Active then dmData.trQ.Rollback;
             if chkInclude.Checked then
               sql := sql + ' where (callsign like ''%' + edtText.Text + '%'')'
             else
@@ -148,8 +144,6 @@ begin
               ShowMessage(edtText.Text + ' not found')
           end
           else begin
-            dmData.Q.Close;
-            if dmData.trQ.Active then dmData.trQ.Rollback;
             if chkInclude.Checked then
               sql := sql + ' where (name like ''%' + edtText.Text + '%'')'
             else
@@ -170,8 +164,6 @@ begin
               ShowMessage(edtText.Text + ' not found')
           end
           else begin
-            dmData.Q.Close;
-            if dmData.trQ.Active then dmData.trQ.Rollback;
             if chkInclude.Checked then
               sql := sql + ' where (qth like ''%' + edtText.Text + '%'')'
             else
@@ -181,6 +173,9 @@ begin
           end
         end
   end; //case
+
+  dmData.Q.Close;
+  if dmData.trQ.Active then dmData.trQ.Rollback;
   dmData.Q.SQL.Text := sql + ' LIMIT 1';
   dmData.trQ.StartTransaction;
   dmData.Q.Open;
diff --git a/src/fSplash.pas b/src/fSplash.pas
index abbcd9d..377444b 100644
--- a/src/fSplash.pas
+++ b/src/fSplash.pas
@@ -55,7 +55,7 @@ end;
 
 procedure TfrmSplash.Image1Paint(Sender: TObject);
 const
-  VersionPos: TPoint = (X:320; Y:243);
+  VersionPos: TPoint = (X:270; Y:245);
   VersionStyle: TTextStyle =
    (
      Alignment  : taCenter;
diff --git a/src/fTRXControl.lfm b/src/fTRXControl.lfm
index 74b4c49..0639918 100644
--- a/src/fTRXControl.lfm
+++ b/src/fTRXControl.lfm
@@ -1,7 +1,7 @@
 object frmTRXControl: TfrmTRXControl
   Left = 732
   Height = 326
-  Top = 19
+  Top = 27
   Width = 275
   Anchors = []
   Caption = 'TRX control'
@@ -147,13 +147,12 @@ object frmTRXControl: TfrmTRXControl
   KeyPreview = True
   Menu = mnuMem
   OnClose = FormClose
-  OnCloseQuery = FormCloseQuery
   OnCreate = FormCreate
   OnDestroy = FormDestroy
   OnKeyDown = FormKeyDown
   OnKeyUp = FormKeyUp
   OnShow = FormShow
-  LCLVersion = '2.0.8.0'
+  LCLVersion = '2.2.0.4'
   object gbMode: TGroupBox
     AnchorSideLeft.Control = gbVfo
     AnchorSideTop.Control = gbVfo
@@ -307,6 +306,7 @@ object frmTRXControl: TfrmTRXControl
       ClientHeight = 46
       ClientWidth = 190
       TabOrder = 0
+      OnClick = gbFreqClick
       object lblFreq: TLabel
         AnchorSideLeft.Control = gbFreq
         AnchorSideLeft.Side = asrCenter
@@ -332,8 +332,32 @@ object frmTRXControl: TfrmTRXControl
         Font.Height = 30
         Font.Style = [fsBold]
         Layout = tlCenter
-        ParentColor = False
         ParentFont = False
+        OnClick = lblFreqClick
+      end
+      object edtFreqInput: TEdit
+        AnchorSideLeft.Control = lblFreq
+        AnchorSideTop.Control = lblFreq
+        AnchorSideRight.Control = lblFreq
+        AnchorSideRight.Side = asrBottom
+        AnchorSideBottom.Control = lblFreq
+        AnchorSideBottom.Side = asrBottom
+        Left = 4
+        Height = 39
+        Top = 4
+        Width = 183
+        Anchors = [akTop, akLeft, akRight, akBottom]
+        AutoSize = False
+        AutoSelect = False
+        Color = clYellow
+        OnKeyPress = edtFreqInputKeyPress
+        OnKeyUp = edtFreqInputKeyUp
+        OnMouseLeave = edtFreqInputMouseLeave
+        OnMouseUp = edtFreqInputMouseUp
+        OnMouseWheel = edtFreqInputMouseWheel
+        TabOrder = 0
+        TextHint = 'Mhz(Enter)'
+        Visible = False
       end
     end
     object gbBand: TGroupBox
@@ -679,7 +703,7 @@ object frmTRXControl: TfrmTRXControl
         Left = 7
         Height = 23
         Top = 1
-        Width = 57
+        Width = 56
         BorderSpacing.Left = 7
         BorderSpacing.Top = 1
         Caption = 'RIG: '
@@ -693,10 +717,10 @@ object frmTRXControl: TfrmTRXControl
         AnchorSideTop.Control = pnlRig
         AnchorSideRight.Control = pnlRig
         AnchorSideRight.Side = asrBottom
-        Left = 130
+        Left = 131
         Height = 23
         Top = 1
-        Width = 57
+        Width = 56
         Anchors = [akTop, akRight]
         BidiMode = bdRightToLeft
         BorderSpacing.Top = 1
@@ -791,12 +815,12 @@ object frmTRXControl: TfrmTRXControl
     Enabled = False
     Interval = 500
     OnTimer = tmrRadioTimer
-    left = 96
-    top = 112
+    Left = 96
+    Top = 112
   end
   object mnuMem: TMainMenu
-    left = 40
-    top = 112
+    Left = 40
+    Top = 112
     object mnuPref: TMenuItem
       Caption = 'Preferences'
       object mnuOpenMem: TMenuItem
@@ -830,8 +854,8 @@ object frmTRXControl: TfrmTRXControl
     end
   end
   object acMem: TActionList
-    left = 64
-    top = 112
+    Left = 64
+    Top = 112
     object acAddModMem: TAction
       Caption = 'Add/Modify memory'
       OnExecute = acAddModMemExecute
diff --git a/src/fTRXControl.pas b/src/fTRXControl.pas
index 9567082..0549616 100644
--- a/src/fTRXControl.pas
+++ b/src/fTRXControl.pas
@@ -18,348 +18,213 @@ interface
 
 uses
   Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
-  ExtCtrls, inifiles, process, lcltype, buttons, Menus, ActnList, dynlibs,
-  uRigControl;
-
-
+  ExtCtrls, inifiles, process, lcltype, Buttons, Menus, ActnList, dynlibs,
+  uRigControl, Types;
 
 type
 
   { TfrmTRXControl }
 
   TfrmTRXControl = class(TForm)
-    acMem: TActionList;
-    acAddModMem: TAction;
-    btn10m: TButton;
-    btn12m: TButton;
-    btn15m: TButton;
-    btn160m: TButton;
-    btn17m: TButton;
-    btn20m: TButton;
-    btn2m: TButton;
-    btn30m: TButton;
-    btn40m: TButton;
-    btn6m: TButton;
-    btn70cm: TButton;
-    btn80m: TButton;
-    btnCW: TButton;
-    btnMemDwn: TButton;
-    btnMemWri: TButton;
-    btnMemUp: TButton;
-    btnSSB: TButton;
-    btnRTTY: TButton;
-    btnAM: TButton;
-    btnFM: TButton;
-    btnVFOA: TButton;
-    btnVFOB: TButton;
-    btPoff: TButton;
-    btnUsr2: TButton;
-    btPon: TButton;
-    btnUsr1: TButton;
-    btPstby: TButton;
-    btnUsr3: TButton;
-    edtMemNr: TEdit;
-    gbBand: TGroupBox;
-    gbFreq: TGroupBox;
-    gbMode: TGroupBox;
-    gbInfo: TGroupBox;
-    gbVfo: TGroupBox;
-    GroupBox4: TGroupBox;
-    lblFreq: TLabel;
-    mnuShowUsr: TMenuItem;
-    mnuShowInfo: TMenuItem;
-    mnuShowVfo: TMenuItem;
-    mnuOpenMem: TMenuItem;
-    mnuPref: TMenuItem;
-    mnuAddMod: TMenuItem;
-    mnuShowPwr: TMenuItem;
-    mnuProgPref: TMenuItem;
-    mnuMem: TMainMenu;
-    pnlUsr: TPanel;
-    pnlRig: TPanel;
-    pnlMain: TPanel;
-    pnlPower: TPanel;
-    rbRadio1: TRadioButton;
-    rbRadio2: TRadioButton;
+    acMem : TActionList;
+    acAddModMem : TAction;
+    btn10m : TButton;
+    btn12m : TButton;
+    btn15m : TButton;
+    btn160m : TButton;
+    btn17m : TButton;
+    btn20m : TButton;
+    btn2m : TButton;
+    btn30m : TButton;
+    btn40m : TButton;
+    btn6m : TButton;
+    btn70cm : TButton;
+    btn80m : TButton;
+    btnCW : TButton;
+    btnMemDwn : TButton;
+    btnMemWri : TButton;
+    btnMemUp : TButton;
+    btnSSB : TButton;
+    btnRTTY : TButton;
+    btnAM : TButton;
+    btnFM : TButton;
+    btnVFOA : TButton;
+    btnVFOB : TButton;
+    btPoff : TButton;
+    btnUsr2 : TButton;
+    btPon : TButton;
+    btnUsr1 : TButton;
+    btPstby : TButton;
+    btnUsr3 : TButton;
+    edtFreqInput : TEdit;
+    edtMemNr : TEdit;
+    gbBand : TGroupBox;
+    gbFreq : TGroupBox;
+    gbMode : TGroupBox;
+    gbInfo : TGroupBox;
+    gbVfo : TGroupBox;
+    GroupBox4 : TGroupBox;
+    lblFreq : TLabel;
+    mnuShowUsr : TMenuItem;
+    mnuShowInfo : TMenuItem;
+    mnuShowVfo : TMenuItem;
+    mnuOpenMem : TMenuItem;
+    mnuPref : TMenuItem;
+    mnuAddMod : TMenuItem;
+    mnuShowPwr : TMenuItem;
+    mnuProgPref : TMenuItem;
+    mnuMem : TMainMenu;
+    pnlUsr : TPanel;
+    pnlRig : TPanel;
+    pnlMain : TPanel;
+    pnlPower : TPanel;
+    rbRadio1 : TRadioButton;
+    rbRadio2 : TRadioButton;
     tmrRadio : TTimer;
-    procedure acAddModMemExecute(Sender: TObject);
-    procedure btnMemWriClick(Sender: TObject);
-    procedure btnMemDwnClick(Sender: TObject);
-    procedure btnMemUpClick(Sender: TObject);
-    procedure btnVFOAClick(Sender: TObject);
-    procedure btnVFOBClick(Sender: TObject);
-    procedure btPoffClick(Sender: TObject);
-    procedure btPonClick(Sender: TObject);
-    procedure btPstbyClick(Sender: TObject);
-    procedure btnUsr1Click(Sender: TObject);
-    procedure btnUsr2Click(Sender: TObject);
-    procedure btnUsr3Click(Sender: TObject);
-    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
-    procedure FormCloseQuery(Sender : TObject; var CanClose : boolean);
-    procedure FormCreate(Sender: TObject);
-    procedure FormDestroy(Sender: TObject);
-    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
-    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
-    procedure FormShow(Sender: TObject);
-    procedure btn10mClick(Sender: TObject);
-    procedure btn12mClick(Sender: TObject);
-    procedure btn15mClick(Sender: TObject);
-    procedure btn160mClick(Sender: TObject);
-    procedure btn17mClick(Sender: TObject);
-    procedure btn20mClick(Sender: TObject);
-    procedure btn2mClick(Sender: TObject);
-    procedure btn30mClick(Sender: TObject);
-    procedure btn40mClick(Sender: TObject);
-    procedure btn6mClick(Sender: TObject);
-    procedure btn70cmClick(Sender: TObject);
-    procedure btn80mClick(Sender: TObject);
-    procedure btnAMClick(Sender: TObject);
-    procedure btnCWClick(Sender: TObject);
-    procedure btnFMClick(Sender: TObject);
-    procedure btnRTTYClick(Sender: TObject);
-    procedure btnSSBClick(Sender: TObject);
-    procedure mnuShowInfoClick(Sender: TObject);
-    procedure mnuShowPwrClick(Sender: TObject);
-    procedure mnuProgPrefClick(Sender: TObject);
-    procedure mnuShowUsrClick(Sender: TObject);
-    procedure mnuShowVfoClick(Sender: TObject);
-    procedure rbRadio1Click(Sender: TObject);
-    procedure rbRadio2Click(Sender: TObject);
+    procedure acAddModMemExecute(Sender : TObject);
+    procedure btnMemWriClick(Sender : TObject);
+    procedure btnMemDwnClick(Sender : TObject);
+    procedure btnMemUpClick(Sender : TObject);
+    procedure btnVFOAClick(Sender : TObject);
+    procedure btnVFOBClick(Sender : TObject);
+    procedure btPoffClick(Sender : TObject);
+    procedure btPonClick(Sender : TObject);
+    procedure btPstbyClick(Sender : TObject);
+    procedure btnUsr1Click(Sender : TObject);
+    procedure btnUsr2Click(Sender : TObject);
+    procedure btnUsr3Click(Sender : TObject);
+    procedure edtFreqInputKeyPress(Sender : TObject; var Key : Char);
+    procedure edtFreqInputKeyUp(Sender : TObject; var Key : Word; Shift : TShiftState);
+    procedure edtFreqInputMouseLeave(Sender : TObject);
+    procedure edtFreqInputMouseUp(Sender : TObject; Button : TMouseButton;
+      Shift : TShiftState; X, Y : Integer);
+    procedure edtFreqInputMouseWheel(Sender : TObject; Shift : TShiftState;
+      WheelDelta : Integer; MousePos : TPoint; var Handled : Boolean);
+    procedure FormClose(Sender : TObject; var CloseAction : TCloseAction);
+    procedure FormCreate(Sender : TObject);
+    procedure FormDestroy(Sender : TObject);
+    procedure FormKeyDown(Sender : TObject; var Key : Word; Shift : TShiftState);
+    procedure FormKeyUp(Sender : TObject; var Key : Word; Shift : TShiftState);
+    procedure FormShow(Sender : TObject);
+    procedure btn10mClick(Sender : TObject);
+    procedure btn12mClick(Sender : TObject);
+    procedure btn15mClick(Sender : TObject);
+    procedure btn160mClick(Sender : TObject);
+    procedure btn17mClick(Sender : TObject);
+    procedure btn20mClick(Sender : TObject);
+    procedure btn2mClick(Sender : TObject);
+    procedure btn30mClick(Sender : TObject);
+    procedure btn40mClick(Sender : TObject);
+    procedure btn6mClick(Sender : TObject);
+    procedure btn70cmClick(Sender : TObject);
+    procedure btn80mClick(Sender : TObject);
+    procedure btnAMClick(Sender : TObject);
+    procedure btnCWClick(Sender : TObject);
+    procedure btnFMClick(Sender : TObject);
+    procedure btnRTTYClick(Sender : TObject);
+    procedure btnSSBClick(Sender : TObject);
+    procedure gbFreqClick(Sender : TObject);
+    procedure lblFreqClick(Sender : TObject);
+    procedure mnuShowInfoClick(Sender : TObject);
+    procedure mnuShowPwrClick(Sender : TObject);
+    procedure mnuProgPrefClick(Sender : TObject);
+    procedure mnuShowUsrClick(Sender : TObject);
+    procedure mnuShowVfoClick(Sender : TObject);
+    procedure rbRadio1Click(Sender : TObject);
+    procedure rbRadio2Click(Sender : TObject);
     procedure tmrRadioTimer(Sender : TObject);
   private
+    MouseWheelUsed : Boolean;
     radio : TRigControl;
     old_mode : String;
 
     btn160MBand : String;
-    btn80MBand  : String;
-    btn40MBand  : String;
-    btn30MBand  : String;
-    btn20MBand  : String;
-    btn17MBand  : String;
-    btn15MBand  : String;
-    btn12MBand  : String;
-    btn10MBand  : String;
-    btn6MBand   : String;
-    btn2MBand   : String;
+    btn80MBand : String;
+    btn40MBand : String;
+    btn30MBand : String;
+    btn20MBand : String;
+    btn17MBand : String;
+    btn15MBand : String;
+    btn12MBand : String;
+    btn10MBand : String;
+    btn6MBand : String;
+    btn2MBand : String;
     btn70CMBand : String;
 
-    function  GetActualMode : String;
-    function  GetModeNumber(mode : String) : Cardinal;
-    procedure SetMode(mode : String;bandwidth :Integer);
+    function GetActualMode : String;
+    function GetModeNumber(mode : String) : Cardinal;
+    procedure SetMode(mode : String; bandwidth : Integer);
     procedure ClearButtonsColor;
     procedure UpdateModeButtons(mode : String);
-    procedure UserButton(r,b:Char);
+    procedure UserButton(r, b : Char);
   public
-    {
-    rfreq : Double;
-    rmode : String;
-
-    set_freq  : Double;
-    set_mode  : String;
-    set_width : Integer;
-    ReloadCfg : Boolean;
-    RigCrit   : TRTLCriticalSection;
-    RigRel    : TRTLCriticalSection;
-    }
-    AutoMode  : Boolean;
-    //Running   : Boolean;
-    infosetstage : integer;
-    infosetfreq  : String;
+    AutoMode : Boolean;
+    infosetstage : Integer;
+    infosetfreq : String;
     procedure SynTRX;
 
-    function  GetFreqFromModeBand(band : Integer;smode : String) : String;
-    function  GetModeFreqNewQSO(var mode,freq : String) : Boolean;
-    function  GetBandWidth(mode : String) : Integer;
-    function  GetModeBand(var mode,band : String) : Boolean;
-    function  InicializeRig : Boolean;
-    function  GetFreqHz  : Double;
-    function  GetFreqkHz : Double;
-    function  GetFreqMHz : Double;
-    function  GetDislayFreq : String;
-    function  GetRawMode : String;
-
-    procedure SetModeFreq(mode,freq : String);
+    function GetFreqFromModeBand(band : Integer; smode : String) : String;
+    function GetModeFreqNewQSO(var mode, freq : String) : Boolean;
+    function GetBandWidth(mode : String) : Integer;
+    function GetModeBand(var mode, band : String) : Boolean;
+    function InicializeRig : Boolean;
+    function GetFreqHz : Double;
+    function GetFreqkHz : Double;
+    function GetFreqMHz : Double;
+    function GetDislayFreq : String;
+    function GetRawMode : String;
+
+    procedure SetModeFreq(mode, freq : String);
     procedure SetFreqModeBandWidth(freq : Double; mode : String; BandWidth : Integer);
     procedure SavePosition;
     procedure CloseRigs;
     procedure Split(up : Integer);
     procedure DisableSplit;
     procedure ClearRIT;
+    procedure DisableRitXit;
     procedure LoadUsrButtonCaptions;
     procedure LoadButtonCaptions;
     procedure SetDebugMode(DebugMode : Boolean);
     procedure LoadBandButtons;
     function ListModeClose : Boolean;
-    procedure HLTune(start:boolean);
-  end;
-
-{
-property RigCtldPath : String  read fRigCtldPath write fRigCtldPath;
-//path to rigctld binary
-property RigCtldArgs : String  read fRigCtldArgs write fRigCtldArgs;
-//rigctld command line arguments
-property RunRigCtld  : Boolean read fRunRigCtld  write fRunRigCtld;
-//run rigctld command before connection
-property RigId       : Word    read fRigId       write fRigId;
-//hamlib rig id
-property RigDevice   : String  read fRigDevice   write fRigDevice;
-//port where is rig connected
-property RigCtldPort : Word    read fRigCtldPort write fRigCtldPort;
-// port where rigctld is listening to connecions, default 4532
-property RigCtldHost : String  read fRigCtldHost write fRigCtldHost;
-//host where is rigctld running
-property Connected   : Boolean read RigConnected;
-//connect rigctld
-property RigPoll     : Word    read fRigPoll     write fRigPoll;
-//poll rate in milliseconds
-}
-
- type
-    TRigThread = class(TThread)
-    protected
-      procedure Execute; override;
-    public
-      Rig_RigCtldPath : String;
-      Rig_RigCtldArgs : String;
-      Rig_RunRigCtld  : Boolean;
-      Rig_RigId       : Word;
-      Rig_RigDevice   : String;
-      Rig_RigCtldPort : Word;
-      Rig_RigCtldHost : String;
-      Rig_RigPoll     : Word;
-      Rig_RigSendCWR  : Boolean;
-
-      {
-      Rig_Model       : Integer;
-      Rig_Port        : String;
-      Rig_SerialSpeed : String;
-      Rig_DataBits    : String;
-      Rig_Stopbits    : String;
-      Rig_Handshake   : String;
-      Rig_Parity      : String;
-      Rig_DTRState    : String;
-      Rig_RTSState    : String;
-      Rig_Poll        : Integer;
-      }
+    procedure HLTune(start : Boolean);
   end;
 
 var
-  frmTRXControl: TfrmTRXControl;
-  thRig : TRigThread;
+  frmTRXControl : TfrmTRXControl;
   ModeWas : String;  //store mode while tuning with AM
-  BwWas : integer;
-  Tuning  : Boolean = false;
-  MemRelated : boolean;
+  BwWas : Integer;
+  Tuning : Boolean = False;
+  MemRelated : Boolean;
 
 implementation
+
 {$R *.lfm}
 
 { TfrmTRXControl }
 uses dUtils, dData, fNewQSO, fBandMap, uMyIni, fGrayline, fRadioMemories;
 
-procedure TfrmTRXControl.HLTune(start:boolean);
-Begin
+procedure TfrmTRXControl.HLTune(start : Boolean);
+begin
   if Assigned(radio) then
-   Begin
-    if start then
-     Begin
-      if not Tuning then
-        begin
-          ModeWas := GetActualMode;
-          BwWas := GetBandWidth(ModeWas);
-          SetMode('AM',0);
-          radio.PttOn;
-          Tuning :=true;
-        end;
-     end
-    else
-     begin
-          radio.PttOff;
-          if Tuning then SetMode(ModeWas, BwWas);
-          Tuning :=false;
-     end;
-   end;
-end;
-
-
-procedure TRigThread.Execute;
-
-var
-  mRig : TRigControl;
-
-  procedure ReadSettings;
   begin
-    mRig.RigCtldPath := Rig_RigCtldPath;
-    mRig.RigCtldArgs := Rig_RigCtldArgs;
-    mRig.RunRigCtld  := Rig_RunRigCtld;
-    mRig.RigId       := Rig_RigId;
-    mRig.RigDevice   := Rig_RigDevice;
-    mRig.RigCtldPort := Rig_RigCtldPort;
-    mRig.RigCtldHost := Rig_RigCtldHost;
-    mRig.RigPoll     := Rig_RigPoll;
-    mRig.RigSendCWR  := Rig_RigSendCWR;
-
-  end;
-
-
-begin
-  {
-  mRig := TRigControl.Create;
-  try
-    mRig.DebugMode := True;
-    Writeln('huh');
-    frmTRXControl.Running := True;
-    ReadSettings;
-    if not mRig.Connected then
-    begin
-      EnterCriticalsection(frmTRXControl.RigCrit);
-      try
-        frmTRXControl.rfreq := 0;
-      finally
-        LeaveCriticalsection(frmTRXControl.RigCrit)
-      end;
-      Synchronize(@frmTRXControl.SynTRX);
-      exit
-    end;
-    while not Terminated do
+    if start then
     begin
-      Writeln('huuuuuh');
-      EnterCriticalsection(frmTRXControl.RigCrit);
-      try
-        if frmTRXControl.set_mode <> '' then
-        begin
-          mode.mode := frmTRXControl.set_mode;
-          mode.pass := frmTRXControl.set_width;
-          mRig.SetModePass(mode);
-          frmTRXControl.set_mode := ''
-        end;
-        if frmTRXControl.set_freq <> 0 then
-        begin
-          mRig.SetFreqKHz(frmTRXControl.set_freq);
-          frmTRXControl.set_freq := 0
-        end
-      finally
-        LeaveCriticalsection(frmTRXControl.RigCrit)
-      end;
-      //if dmData.DebugLevel>=1 then Writeln('Freq2:',mRig.Rig_Frequency, ' Model:',mRig.Rig_Model);
-      if Rig_ClearRit then
-        mRig.ClearRit;
-      EnterCriticalsection(frmTRXControl.RigCrit);
-      try
-        frmTRXControl.rfreq := mRig.GetFreqKHz;
-        frmTRXControl.rmode := mRig.GetModeOnly
-      finally
-        LeaveCriticalsection(frmTRXControl.RigCrit)
+      if not Tuning then
+      begin
+        ModeWas := GetActualMode;
+        BwWas := GetBandWidth(ModeWas);
+        SetMode('AM', 0);
+        radio.PttOn;
+        Tuning := True;
       end;
-      Synchronize(@frmTRXControl.SynTRX);
-      Sleep(Rig_RigPoll)
     end
-  finally
-    FreeAndNil(mRig);
-    if dmData.DebugLevel>=1 then Writeln('TRX control thread terminated');
-    frmTRXControl.Running := False
-  end
-  }
+    else begin
+      radio.PttOff;
+      if Tuning then SetMode(ModeWas, BwWas);
+      Tuning := False;
+    end;
+  end;
 end;
 
 procedure TfrmTRXControl.SynTRX;
@@ -367,23 +232,23 @@ var
   b : String = '';
   f : Double;
   m : String;
-  oldG : integer;
-  mG   : integer;
-  txlo : double = 0.0;
-  rxlo : double = 0.0;
+  oldG : Integer;
+  mG : Integer;
+  txlo : Double = 0.0;
+  rxlo : Double = 0.0;
 begin
   if Assigned(radio) then
   begin
     f := radio.GetFreqMHz;
     m := radio.GetModeOnly;
-    if cqrini.ReadBool('NewQSO','UseTXLO',False) then
+    if cqrini.ReadBool('NewQSO', 'UseTXLO', False) then
     begin
-      if not TryStrToFloat(cqrini.ReadString('NewQSO','TXLO',''),txlo) then
+      if not TryStrToFloat(cqrini.ReadString('NewQSO', 'TXLO', ''), txlo) then
         txlo := 0;
     end;
-    if cqrini.ReadBool('NewQSO','UseRXLO',False) then
+    if cqrini.ReadBool('NewQSO', 'UseRXLO', False) then
     begin
-      if not TryStrToFloat(cqrini.ReadString('NewQSO','RXLO',''),rxlo) then
+      if not TryStrToFloat(cqrini.ReadString('NewQSO', 'RXLO', ''), rxlo) then
         rxlo := 0;
       if (f + rxlo <> 0) then
         if not frmNewQSO.cbOffline.Checked then
@@ -392,111 +257,115 @@ begin
   end
   else
     f := 0;
+
   f := f + txlo;
-  lblFreq.Caption := FormatFloat(empty_freq+';;',f);
+  lblFreq.Caption := FormatFloat(empty_freq, f);
+
   UpdateModeButtons(m);
   ClearButtonsColor;
   // this waits5 rig polls before lock freq set by memory. After that if freq chanfǵes (by vfo knob) clean info text
   // stupid but works quite well
-  case infosetstage  of
-      4: begin
-           infosetfreq:= lblFreq.Caption;
-           inc(infosetstage);
-         end;
-      5: begin
-           if  (infosetfreq <> lblFreq.Caption) then
-               begin
-                 edtMemNr.Text:='';
-                 infosetstage:=0;
-               end;
-         end;
-      else
-        if  ((infosetstage > 0)  and (infosetstage < 4)) then inc(infosetstage);
+  case infosetstage of
+    4: begin
+      infosetfreq := lblFreq.Caption;
+      Inc(infosetstage);
+    end;
+    5: begin
+      if (infosetfreq <> lblFreq.Caption) then
+      begin
+        edtMemNr.Text := '';
+        infosetstage := 0;
+      end;
+    end;
+    else
+      if ((infosetstage > 0) and (infosetstage < 4)) then Inc(infosetstage);
   end;
   if (f = 0) then
   begin
-    if cqrini.ReadBool('BandMap','UseNewQSOFreqMode',False) then
+    if cqrini.ReadBool('BandMap', 'UseNewQSOFreqMode', False) then
     begin
-      if TryStrToFloat(frmNewQSO.cmbFreq.Text,f) then
+      if TryStrToFloat(frmNewQSO.cmbFreq.Text, f) then
       begin
         b := dmUtils.GetBandFromFreq(frmNewQSO.cmbFreq.Text);
         m := frmNewQSO.cmbMode.Text;
         frmGrayline.band := b;
         frmBandMap.CurrentBand := b;
-        frmBandMap.CurrentFreq := f*1000;
-        frmBandMap.CurrentMode := m
-      end
+        frmBandMap.CurrentFreq := f * 1000;
+        frmBandMap.CurrentMode := m;
+      end;
     end
     else begin
       frmGrayline.band := '';
       frmBandMap.CurrentBand := '';
       frmBandMap.CurrentFreq := 0;
-      frmBandMap.CurrentMode := ''
+      frmBandMap.CurrentMode := '';
     end;
-    exit
+    exit;
   end;
 
   m := radio.GetRawMode;
 
-  if MemRelated <> cqrini.ReadBool('TRX','MemModeRelated',False) then  //user changed settings
-     begin
-      MemRelated := cqrini.ReadBool('TRX','MemModeRelated',False);
-      dmData.OpenFreqMemories(m);
-     end
-    else
+  //user changed settings
+  if MemRelated <> cqrini.ReadBool('TRX', 'MemModeRelated', False) then
+  begin
+    MemRelated := cqrini.ReadBool('TRX', 'MemModeRelated', False);
+    dmData.OpenFreqMemories(m);
+  end
+  else begin
+    if MemRelated then   //use related settings;
+    begin
+      //Group1 'LSB','USB','FM','AM'
+      //Group2 'RTTY','PKTLSB','PKTUSB','PKTFM','DATA'
+      case old_mode of
+        'LSB', 'USB', 'FM', 'AM': oldG := 1;
+        'RTTY', 'PKTLSB', 'PKTUSB', 'PKTFM', 'DATA': oldG := 2;
+        else
+          oldG := 0; //CW  or unlisted
+      end;
+      case m of
+        'LSB', 'USB', 'FM', 'AM': mG := 1;
+        'RTTY', 'PKTLSB', 'PKTUSB', 'PKTFM', 'DATA': mG := 2;
+        else
+          mG := 0; //CW  or unlisted
+      end;
+      if (oldG <> mG) then
       begin
-        if MemRelated then   //use related settings;
-        begin
-           //Group1 'LSB','USB','FM','AM'
-           //Group2 'RTTY','PKTLSB','PKTUSB','PKTFM','DATA'
-           case old_mode of
-                'LSB','USB','FM','AM'                      : oldG:=1;
-                'RTTY','PKTLSB','PKTUSB','PKTFM','DATA'    : oldG:=2;
-              else oldG:=0; //CW  or unlisted
-           end;
-           case m of
-                'LSB','USB','FM','AM'                      : mG:=1;
-                'RTTY','PKTLSB','PKTUSB','PKTFM','DATA'    : mG:=2;
-              else mG:=0; //CW  or unlisted
-           end;
-         if (oldG<>mG)then
-          begin
-            old_mode := m;
-            dmData.OpenFreqMemories(old_mode)
-          end
-        end;
-     end;
-
-  if (b='') then
+        old_mode := m;
+        dmData.OpenFreqMemories(old_mode);
+      end;
+    end;
+  end;
+
+  if (b = '') then
     b := dmUtils.GetBandFromFreq(lblFreq.Caption);
   if b = btn160MBand then
     btn160m.Font.Color := clRed
   else if b = btn80MBand then
-    btn80m.Font.Color  := clRed
+    btn80m.Font.Color := clRed
   else if b = btn40MBand then
-    btn40m.Font.Color  := clRed
+    btn40m.Font.Color := clRed
   else if b = btn30MBand then
-    btn30m.Font.Color  := clRed
+    btn30m.Font.Color := clRed
   else if b = btn20MBand then
-    btn20m.Font.Color  := clRed
+    btn20m.Font.Color := clRed
   else if b = btn17MBand then
-    btn17m.Font.Color  := clRed
+    btn17m.Font.Color := clRed
   else if b = btn15MBand then
-    btn15m.Font.Color  := clRed
+    btn15m.Font.Color := clRed
   else if b = btn12MBand then
-    btn12m.Font.Color  := clRed
+    btn12m.Font.Color := clRed
   else if b = btn10MBand then
-    btn10m.Font.Color  := clRed
+    btn10m.Font.Color := clRed
   else if b = btn6MBand then
-    btn6m.Font.Color   := clRed
+    btn6m.Font.Color := clRed
   else if b = btn2MBand then
-    btn2m.Font.Color   := clRed
+    btn2m.Font.Color := clRed
   else if b = btn70CMBand then
     btn70cm.Font.Color := clRed;
   frmGrayline.band := b;
   frmBandMap.CurrentBand := b;
-  frmBandMap.CurrentFreq := f*1000;
-  frmBandMap.CurrentMode := m
+  frmBandMap.CurrentFreq := f * 1000;
+  frmBandMap.CurrentMode := m;
 end;
 
 function TfrmTRXControl.GetModeNumber(mode : String) : Cardinal;
@@ -515,7 +384,7 @@ begin
   if mode = 'FM' then
     Result := 4;
   if mode = 'WFM' then
-    Result := 4
+    Result := 4;
 end;
 
 function TfrmTRXControl.GetBandWidth(mode : String) : Integer;
@@ -527,516 +396,621 @@ begin
   else
     section := 'Band2';
   Result := 500;
-  if (mode = 'LSB') or (mode='USB') then
+  if (mode = 'LSB') or (mode = 'USB') then
     mode := 'SSB';
   if mode = 'CW' then
-    Result := (cqrini.ReadInteger(section,'CW',500));
+    Result := (cqrini.ReadInteger(section, 'CW', 500));
   if mode = 'SSB' then
-    Result := (cqrini.ReadInteger(section,'SSB',1800));
+    Result := (cqrini.ReadInteger(section, 'SSB', 1800));
   if mode = 'RTTY' then
-    Result := (cqrini.ReadInteger(section,'RTTY',500));
+    Result := (cqrini.ReadInteger(section, 'RTTY', 500));
   if mode = 'AM' then
-    Result := (cqrini.ReadInteger(section,'AM',3000));
+    Result := (cqrini.ReadInteger(section, 'AM', 3000));
   if mode = 'FM' then
-    Result := (cqrini.ReadInteger(section,'FM',2500))
+    Result := (cqrini.ReadInteger(section, 'FM', 2500));
 end;
 
-procedure TfrmTRXControl.FormShow(Sender: TObject);
+procedure TfrmTRXControl.FormShow(Sender : TObject);
 begin
   LoadUsrButtonCaptions;
   LoadButtonCaptions;
   LoadBandButtons;
   dmUtils.LoadWindowPos(frmTRXControl);
-  rbRadio1.Caption := cqrini.ReadString('TRX1','Desc','Radio 1');
-  rbRadio2.Caption := cqrini.ReadString('TRX2','Desc','Radio 2');
+  rbRadio1.Caption := cqrini.ReadString('TRX1', 'Desc', 'Radio 1');
+  rbRadio2.Caption := cqrini.ReadString('TRX2', 'Desc', 'Radio 2');
   old_mode := '';
-  MemRelated := cqrini.ReadBool('TRX','MemModeRelated',False);
-  gbInfo.Visible := cqrini.ReadBool('TRX','MemShowInfo',gbInfo.Visible) ;
+  MemRelated := cqrini.ReadBool('TRX', 'MemModeRelated', False);
+  gbInfo.Visible := cqrini.ReadBool('TRX', 'MemShowInfo', gbInfo.Visible);
   mnuShowInfo.Checked := gbInfo.Visible;
-  gbVfo.Visible := cqrini.ReadBool('TRX','ShowVfo',gbVfo.Visible);
-  pnlUsr.Visible := cqrini.ReadBool('TRX','ShowUsr',pnlUsr.Visible);
-  mnuShowVfo.Checked :=  gbVfo.Visible;
-  mnuShowUsr.Checked :=  pnlUsr.Visible;
+  gbVfo.Visible := cqrini.ReadBool('TRX', 'ShowVfo', gbVfo.Visible);
+  pnlUsr.Visible := cqrini.ReadBool('TRX', 'ShowUsr', pnlUsr.Visible);
+  mnuShowVfo.Checked := gbVfo.Visible;
+  mnuShowUsr.Checked := pnlUsr.Visible;
+  MouseWheelUsed := False;
 end;
 
-procedure TfrmTRXControl.btn10mClick(Sender: TObject);
+procedure TfrmTRXControl.btn10mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(8,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(8, mode);
+  SetModeFreq(mode, freq);
   btn10m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn12mClick(Sender: TObject);
+procedure TfrmTRXControl.btn12mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(7,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(7, mode);
+  SetModeFreq(mode, freq);
   btn12m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn15mClick(Sender: TObject);
+procedure TfrmTRXControl.btn15mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(6,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(6, mode);
+  SetModeFreq(mode, freq);
   btn15m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn160mClick(Sender: TObject);
+procedure TfrmTRXControl.btn160mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(0,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(0, mode);
+  SetModeFreq(mode, freq);
   btn160m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn17mClick(Sender: TObject);
+procedure TfrmTRXControl.btn17mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(5,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(5, mode);
+  SetModeFreq(mode, freq);
   btn17m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn20mClick(Sender: TObject);
+procedure TfrmTRXControl.btn20mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(4,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(4, mode);
+  SetModeFreq(mode, freq);
   btn20m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn2mClick(Sender: TObject);
+procedure TfrmTRXControl.btn2mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(10,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(10, mode);
+  SetModeFreq(mode, freq);
   btn2m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn30mClick(Sender: TObject);
+procedure TfrmTRXControl.btn30mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(3,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(3, mode);
+  SetModeFreq(mode, freq);
   btn30m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn40mClick(Sender: TObject);
+procedure TfrmTRXControl.btn40mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(2,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(2, mode);
+  SetModeFreq(mode, freq);
   btn40m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn6mClick(Sender: TObject);
+procedure TfrmTRXControl.btn6mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(9,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(9, mode);
+  SetModeFreq(mode, freq);
   btn6m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn70cmClick(Sender: TObject);
+procedure TfrmTRXControl.btn70cmClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(11,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(11, mode);
+  SetModeFreq(mode, freq);
   btn70cm.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btn80mClick(Sender: TObject);
+procedure TfrmTRXControl.btn80mClick(Sender : TObject);
 var
   freq : String = '';
   mode : String = '';
 begin
-  ClearButtonsColor; 
-  mode := GetActualMode; 
-  freq := GetFreqFromModeBand(1,mode);
-  SetModeFreq(mode,freq);
+  ClearButtonsColor;
+  mode := GetActualMode;
+  freq := GetFreqFromModeBand(1, mode);
+  SetModeFreq(mode, freq);
   btn80m.Font.Color := clRed;
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
 end;
 
-procedure TfrmTRXControl.btnVFOAClick(Sender: TObject);
+procedure TfrmTRXControl.btnVFOAClick(Sender : TObject);
 begin
   if Assigned(radio) then radio.SetCurrVfo(VFOA);
 end;
-procedure TfrmTRXControl.btnVFOBClick(Sender: TObject);
+
+procedure TfrmTRXControl.btnVFOBClick(Sender : TObject);
 begin
   if Assigned(radio) then radio.SetCurrVfo(VFOB);
 end;
-procedure TfrmTRXControl.btnCWClick(Sender: TObject);
+
+procedure TfrmTRXControl.btnCWClick(Sender : TObject);
 begin
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
-  SetMode('CW',GetBandWidth('CW'))
+  SetMode('CW', GetBandWidth('CW'));
 end;
-procedure TfrmTRXControl.btnSSBClick(Sender: TObject);
+
+procedure TfrmTRXControl.btnSSBClick(Sender : TObject);
 var
   tmp : Currency;
 begin
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
-  if not TryStrToCurr(lblFreq.Caption,tmp) then
-    SetMode('LSB',GetBandWidth('SSB'))
+  if not TryStrToCurr(lblFreq.Caption, tmp) then
+    SetMode('LSB', GetBandWidth('SSB'))
   else begin
     if (tmp > 5) and (tmp < 6) then
-      SetMode('USB',GetBandWidth('SSB'))
+      SetMode('USB', GetBandWidth('SSB'))
     else begin
       if tmp > 10 then
-        SetMode('USB',GetBandWidth('SSB'))
+        SetMode('USB', GetBandWidth('SSB'))
       else
-        SetMode('LSB',GetBandWidth('SSB'))
-    end
-  end
+        SetMode('LSB', GetBandWidth('SSB'));
+    end;
+  end;
+end;
+
+procedure TfrmTRXControl.gbFreqClick(Sender : TObject);
+begin
+  edtFreqInput.Text := lblFreq.Caption;
+  edtFreqInput.Font := lblFreq.Font;
+  edtFreqInput.Color := clYellow;
+  edtFreqInput.Visible := True;
+  edtFreqInput.SetFocus;
+  edtFreqInput.SelStart := Length(edtFreqInput.Text);
+end;
+
+procedure TfrmTRXControl.lblFreqClick(Sender : TObject);
+begin
+  gbFreqClick(Sender);
 end;
 
-procedure TfrmTRXControl.mnuShowInfoClick(Sender: TObject);
+procedure TfrmTRXControl.mnuShowInfoClick(Sender : TObject);
 begin
   gbInfo.Visible := not gbInfo.Visible;
   mnuShowInfo.Checked := gbInfo.Visible;
-  cqrini.WriteBool('TRX','MemShowInfo',gbInfo.Visible)
+  cqrini.WriteBool('TRX', 'MemShowInfo', gbInfo.Visible);
 end;
 
-procedure TfrmTRXControl.btnRTTYClick(Sender: TObject);
+procedure TfrmTRXControl.btnRTTYClick(Sender : TObject);
 begin
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
-  SetMode('RTTY',GetBandWidth('RTTY'))
+  SetMode('RTTY', GetBandWidth('RTTY'));
 end;
-procedure TfrmTRXControl.btnAMClick(Sender: TObject);
+
+procedure TfrmTRXControl.btnAMClick(Sender : TObject);
 begin
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
-  SetMode('AM',GetBandWidth('AM'))
+  SetMode('AM', GetBandWidth('AM'));
 end;
-procedure TfrmTRXControl.btnFMClick(Sender: TObject);
+
+procedure TfrmTRXControl.btnFMClick(Sender : TObject);
 begin
   frmTRXControl.edtMemNr.Text := ''; //clear memo nr display if any text from last M push
-  SetMode('FM',GetBandWidth('FM'))
+  SetMode('FM', GetBandWidth('FM'));
 end;
 
-procedure TfrmTRXControl.mnuShowPwrClick(Sender: TObject);
+procedure TfrmTRXControl.mnuShowPwrClick(Sender : TObject);
 begin
-      if pnlPower.Visible then
-        Begin
-         pnlPower.Visible:= false;
-         mnuShowPwr.Checked:= false;
-        end
-       else
-        Begin
-         pnlPower.Visible:= true;
-         btPonClick(nil); //setting buttons visible sends PwrOn to sync button colors
-         mnuShowPwr.Checked:= true;
-        end;
-      cqrini.WriteBool('TRX','PowerButtons',pnlPower.Visible);
+  if pnlPower.Visible then
+  begin
+    pnlPower.Visible := False;
+    mnuShowPwr.Checked := False;
+  end
+  else begin
+    pnlPower.Visible := True;
+    btPonClick(nil); //setting buttons visible sends PwrOn to sync button colors
+    mnuShowPwr.Checked := True;
+  end;
+  cqrini.WriteBool('TRX', 'PowerButtons', pnlPower.Visible);
 end;
 
-procedure TfrmTRXControl.mnuProgPrefClick(Sender: TObject);
+procedure TfrmTRXControl.mnuProgPrefClick(Sender : TObject);
 begin
-  cqrini.WriteInteger('Pref', 'ActPageIdx', 5);  //set TRXControl tab active. Number may change if preferences page change
-  frmNewQSO.acPreferences.Execute
+  cqrini.WriteInteger('Pref', 'ActPageIdx', 5);
+  //set TRXControl tab active. Number may change if preferences page change
+  frmNewQSO.acPreferences.Execute;
 end;
 
-procedure TfrmTRXControl.mnuShowUsrClick(Sender: TObject);
+procedure TfrmTRXControl.mnuShowUsrClick(Sender : TObject);
 begin
-  pnlUsr.Visible:= not pnlUsr.Visible;
-  mnuShowUsr.Checked:= pnlUsr.Visible;
-  cqrini.WriteBool('TRX','ShowUsr',pnlUsr.Visible)
+  pnlUsr.Visible := not pnlUsr.Visible;
+  mnuShowUsr.Checked := pnlUsr.Visible;
+  cqrini.WriteBool('TRX', 'ShowUsr', pnlUsr.Visible);
 end;
 
-procedure TfrmTRXControl.mnuShowVfoClick(Sender: TObject);
+procedure TfrmTRXControl.mnuShowVfoClick(Sender : TObject);
 begin
   gbVfo.Visible := not gbVfo.Visible;
-  mnuShowVfo.Checked :=  gbVfo.Visible;
-  cqrini.WriteBool('TRX','ShowVfo',gbVfo.Visible)
+  mnuShowVfo.Checked := gbVfo.Visible;
+  cqrini.WriteBool('TRX', 'ShowVfo', gbVfo.Visible);
 end;
 
-procedure TfrmTRXControl.rbRadio1Click(Sender: TObject);
+procedure TfrmTRXControl.rbRadio1Click(Sender : TObject);
 begin
   LoadUsrButtonCaptions;
-  InicializeRig
+  InicializeRig;
 end;
 
-procedure TfrmTRXControl.rbRadio2Click(Sender: TObject);
+procedure TfrmTRXControl.rbRadio2Click(Sender : TObject);
 begin
   LoadUsrButtonCaptions;
-  InicializeRig
+  InicializeRig;
 end;
 
 procedure TfrmTRXControl.tmrRadioTimer(Sender : TObject);
 begin
-  SynTRX
+  SynTRX;
 end;
 
-procedure TfrmTRXControl.FormClose(Sender: TObject;
-  var CloseAction: TCloseAction);
+procedure TfrmTRXControl.FormClose(Sender : TObject; var CloseAction : TCloseAction);
 begin
-  if Assigned(thRig) then
-    thRig.Terminate;
   dmUtils.SaveWindowPos(frmTRXControl);
 end;
-function TfrmTRXControl.ListModeClose : boolean;
 
-Begin
-   Result :=false;
-      if (frmRadioMemories <> nil) then
-       if  (frmRadioMemories.ShowMode) then   //is open in show list mode
-        begin
-          FreeAndNil(frmRadioMemories);
-          Result :=true;
-        end;
+function TfrmTRXControl.ListModeClose : Boolean;
+
+begin
+  Result := False;
+  if (frmRadioMemories <> nil) then
+    if (frmRadioMemories.ShowMode) then   //is open in show list mode
+    begin
+      FreeAndNil(frmRadioMemories);
+      Result := True;
+    end;
 end;
 
-procedure TfrmTRXControl.acAddModMemExecute(Sender: TObject);
+procedure TfrmTRXControl.acAddModMemExecute(Sender : TObject);
 
 begin
-    ListModeClose;
-    frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
-     if Sender = mnuOpenMem  then    //show only
-      Begin
-         frmRadioMemories.Show;
-         frmRadioMemories.Panel1.Visible:=false;
-         frmRadioMemories.ShowMode := True;
-         try
-          dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
-         except
-          on E: Exception do
-          ShowMessage( 'Could not load memories: '+ E.ClassName + #13#10 + E.Message );
-         end;
+  ListModeClose;
+  frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
+  if Sender = mnuOpenMem then    //show only
+  begin
+    frmRadioMemories.Show;
+    frmRadioMemories.Panel1.Visible := False;
+    frmRadioMemories.ShowMode := True;
+    try
+      dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
+    except
+      on E : Exception do
+        ShowMessage('Could not load memories: ' + E.ClassName + #13#10 + E.Message);
+    end;
+  end
+  else begin
+    try
+      dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
+      frmRadioMemories.ShowModal;
+      if frmRadioMemories.ModalResult = mrOk then
+      begin
+        dmData.StoreFreqMemories(frmRadioMemories.sgrdMem);
       end
-    else
-     begin
-      try
-         dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
-         frmRadioMemories.ShowModal;
-         if frmRadioMemories.ModalResult = mrOK then
-          begin
-            dmData.StoreFreqMemories(frmRadioMemories.sgrdMem)
-          end
-      finally
-        FreeAndNil(frmRadioMemories);
-      end;
-     end;
+    finally
+      FreeAndNil(frmRadioMemories);
+    end;
+  end;
 
 end;
 
-procedure TfrmTRXControl.btnMemWriClick(Sender: TObject);
-  var
-  bandwidth : word = 0;
-  mode      : String ='';
-  freq      : String ='';
-  Dfreq     : Double ;
+procedure TfrmTRXControl.btnMemWriClick(Sender : TObject);
+var
+  bandwidth : Word = 0;
+  mode : String = '';
+  freq : String = '';
+  Dfreq : Double;
 
 begin
   Dfreq := 0;
   Dfreq := radio.GetFreqkHz;
   if Dfreq > 0 then
   begin
-      ListModeClose;
-      frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
-      try
-        dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
-        bandwidth:= radio.GetPassOnly;
-        mode     := radio.GetRawMode;
-        freq     := FloatToStrF(Dfreq,ffGeneral,15,0);
-        if (mode<>'') then
-         begin
-          frmRadioMemories.sgrdMem.RowCount := frmRadioMemories.sgrdMem.RowCount + 1;
-          frmRadioMemories.sgrdMem.Cells[0,frmRadioMemories.sgrdMem.RowCount-1] := freq;
-          frmRadioMemories.sgrdMem.Cells[1,frmRadioMemories.sgrdMem.RowCount-1] := mode;
-          frmRadioMemories.sgrdMem.Cells[2,frmRadioMemories.sgrdMem.RowCount-1] := IntToStr(bandwidth);
-          dmData.StoreFreqMemories(frmRadioMemories.sgrdMem);
-          edtMemNr.Font.Color:= clRed;
-          edtMemNr.Text:='MW ok';
-          infosetstage:=1;
-         end
-      finally
-        FreeAndNil(frmRadioMemories);
-      end;
+    ListModeClose;
+    frmRadioMemories := TfrmRadioMemories.Create(frmTRXControl);
+    try
+      dmData.LoadFreqMemories(frmRadioMemories.sgrdMem);
+      bandwidth := radio.GetPassOnly;
+      mode := radio.GetRawMode;
+      freq := FloatToStrF(Dfreq, ffGeneral, 15, 0);
+      if (mode <> '') then
+      begin
+        frmRadioMemories.sgrdMem.RowCount := frmRadioMemories.sgrdMem.RowCount + 1;
+        frmRadioMemories.sgrdMem.Cells[0, frmRadioMemories.sgrdMem.RowCount - 1] := freq;
+        frmRadioMemories.sgrdMem.Cells[1, frmRadioMemories.sgrdMem.RowCount - 1] := mode;
+        frmRadioMemories.sgrdMem.Cells[2, frmRadioMemories.sgrdMem.RowCount - 1] :=
+          IntToStr(bandwidth);
+        dmData.StoreFreqMemories(frmRadioMemories.sgrdMem);
+        edtMemNr.Font.Color := clRed;
+        edtMemNr.Text := 'MW ok';
+        infosetstage := 1;
+      end
+    finally
+      FreeAndNil(frmRadioMemories);
+    end;
   end;
 end;
 
-procedure TfrmTRXControl.btnMemDwnClick(Sender: TObject);
+procedure TfrmTRXControl.btnMemDwnClick(Sender : TObject);
 var
-  freq      : Double;
-  mode      : String;
+  freq : Double;
+  mode : String;
   bandwidth : Integer;
-  info      : String;
+  info : String;
 begin
-  dmData.GetNextFreqFromMem(freq,mode,bandwidth,info);
-  if dmData.DebugLevel>=1 then writeln('--------------FMWI',freq,' ',mode,' ',bandwidth,' ',info);
+  dmData.GetNextFreqFromMem(freq, mode, bandwidth, info);
+  if dmData.DebugLevel >= 1 then
+    writeln('--------------FMWI', freq, ' ', mode, ' ', bandwidth, ' ', info);
   if freq > 0 then
-    SetFreqModeBandWidth(freq,mode,bandwidth)
+    SetFreqModeBandWidth(freq, mode, bandwidth);
 end;
 
-procedure TfrmTRXControl.btnMemUpClick(Sender: TObject);
+procedure TfrmTRXControl.btnMemUpClick(Sender : TObject);
 var
-  freq      : Double;
-  mode      : String;
+  freq : Double;
+  mode : String;
   bandwidth : Integer;
-  info      : String;
+  info : String;
 begin
-  dmData.GetPreviousFreqFromMem(freq,mode,bandwidth,info);
+  dmData.GetPreviousFreqFromMem(freq, mode, bandwidth, info);
   if freq > 0 then
-    SetFreqModeBandWidth(freq,mode,bandwidth)
+    SetFreqModeBandWidth(freq, mode, bandwidth);
 end;
 
-procedure TfrmTRXControl.btPoffClick(Sender: TObject);
+procedure TfrmTRXControl.btPoffClick(Sender : TObject);
 begin
-    if Assigned(radio) then
-        begin
-         radio.PwrOff;
-         btPon.Font.Color:= clDefault;
-         btPstby.Font.Color:= clDefault;
-         btPoff.Font.Color:= clRed;
-        end;
+  if Assigned(radio) then
+  begin
+    radio.PwrOff;
+    btPon.Font.Color := clDefault;
+    btPstby.Font.Color := clDefault;
+    btPoff.Font.Color := clRed;
+  end;
 end;
 
-procedure TfrmTRXControl.btPonClick(Sender: TObject);
+procedure TfrmTRXControl.btPonClick(Sender : TObject);
 begin
-   if Assigned(radio) then
-        begin
-         radio.PwrOn;
-         btPon.Font.Color:= clRed;
-         btPstby.Font.Color:= clDefault;
-         btPoff.Font.Color:= clDefault;
-        end;
+  if Assigned(radio) then
+  begin
+    radio.PwrOn;
+    btPon.Font.Color := clRed;
+    btPstby.Font.Color := clDefault;
+    btPoff.Font.Color := clDefault;
+  end;
 end;
 
-procedure TfrmTRXControl.btPstbyClick(Sender: TObject);
+procedure TfrmTRXControl.btPstbyClick(Sender : TObject);
 begin
-     if Assigned(radio) then
-        begin
-         radio.PwrStBy;
-         btPon.Font.Color:= clDefault;
-         btPstby.Font.Color:= clRed;
-         btPoff.Font.Color:= clDefault;
-        end;
+  if Assigned(radio) then
+  begin
+    radio.PwrStBy;
+    btPon.Font.Color := clDefault;
+    btPstby.Font.Color := clRed;
+    btPoff.Font.Color := clDefault;
+  end;
 end;
-procedure TfrmTRXControl.UserButton(r,b:Char);
-var c: string;
-Begin
-  c:= trim(cqrini.ReadString('TRX'+r, 'usr'+b, ''));
-  if pos('RUN',uppercase(c))=1 then
-     Begin
-       c:= trim(copy(c,4,length(c)));
-       dmutils.RunOnBackgroud(c);
-     end
-   else
-     radio.UsrCmd(c);
+
+procedure TfrmTRXControl.UserButton(r, b : Char);
+var
+  c : String;
+begin
+  c := trim(cqrini.ReadString('TRX' + r, 'usr' + b, ''));
+  if pos('RUN', uppercase(c)) = 1 then
+  begin
+    c := trim(copy(c, 4, length(c)));
+    dmutils.RunOnBackground(c);
+  end
+  else
+    radio.UsrCmd(c);
 end;
 
-procedure TfrmTRXControl.btnUsr1Click(Sender: TObject);
-var r:char;
+procedure TfrmTRXControl.btnUsr1Click(Sender : TObject);
+var
+  r : Char;
 begin
-      if Assigned(radio) then
-        begin
-         if rbRadio1.Checked then  r:='1' else r:='2';
-         UserButton(r,'1')
-        end;
+  if Assigned(radio) then
+  begin
+    if rbRadio1.Checked then  r := '1'
+    else
+      r := '2';
+    UserButton(r, '1');
+  end;
 end;
 
-procedure TfrmTRXControl.btnUsr2Click(Sender: TObject);
-var       r:char;
+procedure TfrmTRXControl.btnUsr2Click(Sender : TObject);
+var
+  r : Char;
 begin
-     if Assigned(radio) then
-        begin
-         if rbRadio1.Checked then  r:='1' else r:='2';
-         UserButton(r,'2')
-        end;
+  if Assigned(radio) then
+  begin
+    if rbRadio1.Checked then  r := '1'
+    else
+      r := '2';
+    UserButton(r, '2');
+  end;
 end;
 
-procedure TfrmTRXControl.btnUsr3Click(Sender: TObject);
-var       r:char;
+procedure TfrmTRXControl.btnUsr3Click(Sender : TObject);
+var
+  r : Char;
 begin
-      if Assigned(radio) then
-        begin
-         if rbRadio1.Checked then  r:='1' else r:='2';
-         UserButton(r,'3')
-        end;
+  if Assigned(radio) then
+  begin
+    if rbRadio1.Checked then  r := '1'
+    else
+      r := '2';
+    UserButton(r, '3');
+  end;
 end;
 
-procedure TfrmTRXControl.FormCloseQuery(Sender : TObject; var CanClose : boolean
-  );
+
+procedure TfrmTRXControl.edtFreqInputKeyPress(Sender : TObject; var Key : Char);
 begin
-  //closing this causes rig control fade if only TRXControl window is closed while program still running
-    // if Assigned(radio) then  FreeAndNil(radio)
+  if key = '.' then
+  begin
+    if pos('.', edtFreqInput.Text) > 0 then         //only one dot
+      Key := #0;
+  end
+  else
+  if (Key <> #127)      //delete and numbers ok
+    and ((Key > '9') or ((Key >= #20) and (Key < '0'))) then
+    Key := #0;
 end;
 
-procedure TfrmTRXControl.FormCreate(Sender: TObject);
+
+procedure TfrmTRXControl.edtFreqInputKeyUp(Sender : TObject; var Key : Word;
+  Shift : TShiftState);
+var
+  freq : String = '';
+  mode : String = '';
+  s : String;
+  f : Currency;
+begin
+  if Key = VK_Return then
+  begin
+    MouseWheelUsed := False;
+    s := edtFreqInput.Text;
+    mode := GetActualMode;
+    try
+      f := StrToFloat(s);
+      f := f * 1000;
+      freq := FloatToStr(f);
+      SetModeFreq(mode, freq);
+    except
+      On E : Exception do
+        edtFreqInput.Text := s;
+    end;
+    edtFreqInput.Visible := False;
+  end;
+end;
+
+procedure TfrmTRXControl.edtFreqInputMouseLeave(Sender : TObject);
+begin
+  if MouseWheelUsed then
+    edtFreqInputMouseUp(nil, mbMiddle, [ssCtrl], 0, 0);
+end;
+
+procedure TfrmTRXControl.edtFreqInputMouseUp(Sender : TObject;
+  Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
+var
+  Key : Word = VK_Return;
+begin
+  edtFreqInputKeyUp(nil, Key, Shift);
+end;
+
+procedure TfrmTRXControl.edtFreqInputMouseWheel(Sender : TObject;
+  Shift : TShiftState; WheelDelta : Integer; MousePos : TPoint; var Handled : Boolean);
+var
+  s : String;
+  f : Currency;
+  m : Currency;
+begin
+  MouseWheelUsed := True;
+  m := 0.0001;   //base 10Hz step
+  if Shift = [ssShift] then
+    m := 0.001;
+  if Shift = [ssCtrl] then
+    m := 0.01;
+  if Shift = [ssShift] + [ssCtrl] then
+    m := 1;
+  if WheelDelta < 0 then
+    m := m * -1;
+
+  s := edtFreqInput.Text;
+  try
+    f := StrToFloat(s);
+    f := f + m;
+    if f < 0 then f := 0;
+    edtFreqInput.Text := FormatFloat(empty_freq + ';;', f);
+    if Assigned(radio) then
+      radio.SetFreqKHz(f * 1000);
+  except
+    On E : Exception do
+      edtFreqInput.Text := s;
+  end;
+end;
+
+procedure TfrmTRXControl.FormCreate(Sender : TObject);
 begin
-  //Running := False;
-  //InitCriticalSection(RigCrit);
-  //InitCriticalSection(RigRel);
   Radio := nil;
-  thRig := nil;
-  AutoMode := True
+  AutoMode := True;
 end;
 
-procedure TfrmTRXControl.FormDestroy(Sender: TObject);
+procedure TfrmTRXControl.FormDestroy(Sender : TObject);
 begin
-  if dmData.DebugLevel>=1 then Writeln('Closing TRXControl window');
-  //DoneCriticalsection(RigCrit);
-  //DoneCriticalsection(RigRel)
+  if dmData.DebugLevel >= 1 then Writeln('Closing TRXControl window');
 end;
 
-procedure TfrmTRXControl.FormKeyDown(Sender: TObject; var Key: Word;
-  Shift: TShiftState);
+procedure TfrmTRXControl.FormKeyDown(Sender : TObject; var Key : Word;
+  Shift : TShiftState);
 begin
   if (Shift = [ssAlt]) and (key = VK_F) then
   begin
@@ -1049,22 +1023,22 @@ begin
     DisableSplit;
 end;
 
-procedure TfrmTRXControl.FormKeyUp(Sender: TObject; var Key: Word;
-  Shift: TShiftState);
+procedure TfrmTRXControl.FormKeyUp(Sender : TObject; var Key : Word;
+  Shift : TShiftState);
 begin
-  if (key= VK_ESCAPE) then
+  if (key = VK_ESCAPE) then
   begin
     frmNewQSO.ReturnToNewQSO;
-    key := 0
-  end
+    key := 0;
+  end;
 end;
 
 function TfrmTRXControl.InicializeRig : Boolean;
 var
-  n      : String = '';
-  id     : Integer = 0;
-  port   : Integer;
-  poll   : Integer;
+  n : String = '';
+  id : Integer = 0;
+  port : Integer;
+  poll : Integer;
   KeyerType : Integer;
 begin
   tmrRadio.Enabled := False;
@@ -1075,14 +1049,16 @@ begin
   Sleep(500);
   Application.ProcessMessages;
 
-  if rbRadio1.Checked then   n := '1'   else   n := '2';
+  if rbRadio1.Checked then  n := '1'
+  else
+    n := '2';
 
   radio := TRigControl.Create;
 
-  if (dmData.DebugLevel>0) or cqrini.ReadBool('TRX','Debug',False) then
+  if (dmData.DebugLevel > 0) or cqrini.ReadBool('TRX', 'Debug', False) then
     radio.DebugMode := True;
 
-  if not TryStrToInt(cqrini.ReadString('TRX'+n,'model',''),id) then
+  if not TryStrToInt(cqrini.ReadString('TRX' + n, 'model', ''), id) then
     radio.RigId := 1
   else
     radio.RigId := id;
@@ -1090,59 +1066,60 @@ begin
   //broken configuration caused crash because RigCtldPort was empty
   //probably late to change it to Integer, I have no idea if the current
   //setting would be converted automatically or user has to do it again :(
-  if not TryStrToInt(cqrini.ReadString('TRX'+n,'RigCtldPort','4532'),port) then
+  if not TryStrToInt(cqrini.ReadString('TRX' + n, 'RigCtldPort', '4532'), port) then
     port := 4532;
 
-  if not TryStrToInt(cqrini.ReadString('TRX'+n,'poll','500'),poll) then
+  if not TryStrToInt(cqrini.ReadString('TRX' + n, 'poll', '500'), poll) then
     poll := 500;
 
-  radio.RigCtldPath := cqrini.ReadString('TRX','RigCtldPath','/usr/bin/rigctld');
+  radio.RigCtldPath := cqrini.ReadString('TRX', 'RigCtldPath', '/usr/bin/rigctld');
   radio.RigCtldArgs := dmUtils.GetRadioRigCtldCommandLine(StrToInt(n));
-  radio.RunRigCtld  := cqrini.ReadBool('TRX'+n,'RunRigCtld',False);
-  radio.RigDevice   := cqrini.ReadString('TRX'+n,'device','');
+  radio.RunRigCtld := cqrini.ReadBool('TRX' + n, 'RunRigCtld', False);
+  radio.RigDevice := cqrini.ReadString('TRX' + n, 'device', '');
   radio.RigCtldPort := port;
-  radio.RigCtldHost := cqrini.ReadString('TRX'+n,'host','localhost');
-  radio.RigPoll     := poll;
-  radio.RigSendCWR  := cqrini.ReadBool('TRX'+n,'CWR',False);
-
+  radio.RigCtldHost := cqrini.ReadString('TRX' + n, 'host', 'localhost');
+  radio.RigPoll := poll;
+  radio.RigSendCWR := cqrini.ReadBool('TRX' + n, 'CWR', False);
+  radio.RigChkVfo := cqrini.ReadBool('TRX' + n, 'ChkVfo', True);
   tmrRadio.Interval := radio.RigPoll;
-  tmrRadio.Enabled  := True;
+  tmrRadio.Enabled := True;
   Result := True;
 
-  pnlPower.Visible  := cqrini.ReadBool('TRX','PowerButtons',False);
+  pnlPower.Visible := cqrini.ReadBool('TRX', 'PowerButtons', False);
   mnuShowPwr.Checked := pnlPower.Visible;
   if pnlPower.Visible then btPonClick(nil);
-                            // all rigs do not support rigctld power switching
-                            //so we just put pwr button ON and send rigctld PWR ON cmd
-                            //if rig does not support it that makes no harm.
-                            //if supports we do know pwr state from now on.
+  // all rigs do not support rigctld power switching
+  //so we just put pwr button ON and send rigctld PWR ON cmd
+  //if rig does not support it that makes no harm.
+  //if supports we do know pwr state from now on.
 
   if not radio.Connected then
   begin
-    FreeAndNil(radio)
+    FreeAndNil(radio);
   end
   else  //radio changed, restart CW interface
   begin
-      //we check this again although preferences prevent false setting
-      if (    cqrini.ReadBool('CW', 'NoReset', false) //is set: user does not want reset
-        and  (cqrini.ReadInteger('CW','Type1',0) = cqrini.ReadInteger('CW','Type2',0)) //both keyers are same
-        and  (cqrini.ReadInteger('CW','Type1',0)<>4)  //type is not HamLib
-          ) then //no restart keyer it is same device for both radios.
-         Begin
-           if ((dmData.DebugLevel>=1 ) or ((abs(dmData.DebugLevel) and 8) = 8 )) then
-              Writeln('User ask: No reset and keyer not Hamlib: No restart by TRControl radio'+n+' change');
-         end
-      else
-         Begin
-           frmNewQSO.InitializeCW;
-           if ((dmData.DebugLevel>=1 ) or ((abs(dmData.DebugLevel) and 8) = 8 )) then
-              Writeln('CW keyer reloaded by TRControl radio'+n+' change');
-         end;
+    //we check this again although preferences prevent false setting
+    if (cqrini.ReadBool('CW', 'NoReset', False) //is set: user does not want reset
+      and (cqrini.ReadInteger('CW', 'Type1', 0) =
+      cqrini.ReadInteger('CW', 'Type2', 0)) //both keyers are same
+      and (cqrini.ReadInteger('CW', 'Type1', 0) <> 4)  //type is not HamLib
+      ) then //no restart keyer it is same device for both radios.
+    begin
+      if ((dmData.DebugLevel >= 1) or ((abs(dmData.DebugLevel) and 8) = 8)) then
+        Writeln('User ask: No reset and keyer not Hamlib: No restart by TRControl radio'
+          + n + ' change');
+    end
+    else begin
+      frmNewQSO.InitializeCW;
+      if ((dmData.DebugLevel >= 1) or ((abs(dmData.DebugLevel) and 8) = 8)) then
+        Writeln('CW keyer reloaded by TRControl radio' + n + ' change');
+    end;
 
-   end;
+  end;
 end;
 
-procedure TfrmTRXControl.SetMode(mode : String;bandwidth :Integer);
+procedure TfrmTRXControl.SetMode(mode : String; bandwidth : Integer);
 var
   rmode : TRigMode;
 begin
@@ -1150,25 +1127,14 @@ begin
   begin
     rmode.mode := mode;
     rmode.pass := bandwidth;
-    radio.SetModePass(rmode)
+    radio.SetModePass(rmode);
   end;
-  {
-  if not Running then
-    exit;
-  EnterCriticalsection(RigCrit);
-  try
-    set_width := bandwidth;
-    set_mode  := mode
-  finally
-    LeaveCriticalsection(RigCrit)
-  end
-  }
 end;
 
 function TfrmTRXControl.GetFreqFromModeBand(band : Integer; smode : String) : String;
 var
   freq : Currency = 0;
-  mode   : Integer = 0;
+  mode : Integer = 0;
 begin
   if smode = 'CW' then
     mode := 0
@@ -1182,143 +1148,144 @@ begin
     mode := 4;
 
   case band of
-    0 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','160cw',1830);
-            1 : freq := cqrini.ReadFloat('DefFreq','160ssb',1830);
-            2 : freq := cqrini.ReadFloat('DefFreq','160rtty',1845);
-            3 : freq := cqrini.ReadFloat('DefFreq','160am',1845);
-            4 : freq := cqrini.ReadFloat('DefFreq','160fm',1845);
-          end //case
-        end;
-
-    1 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','80cw',3525);
-            1 : freq := cqrini.ReadFloat('DefFreq','80ssb',3750);
-            2 : freq := cqrini.ReadFloat('DefFreq','80rtty',3590);
-            3 : freq := cqrini.ReadFloat('DefFreq','80am',3750);
-            4 : freq := cqrini.ReadFloat('DefFreq','80fm',3750);
-          end //case
-        end;
-
-    2 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','40cw',7015);
-            1 : freq := cqrini.ReadFloat('DefFreq','40ssb',7080);
-            2 : freq := cqrini.ReadFloat('DefFreq','40rtty',7040);
-            3 : freq := cqrini.ReadFloat('DefFreq','40am',7080);
-            4 : freq := cqrini.ReadFloat('DefFreq','40fm',7080);
-          end //case
-        end;
-
-    3 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','30cw',10110);
-            1 : freq := cqrini.ReadFloat('DefFreq','30ssb',10130);
-            2 : freq := cqrini.ReadFloat('DefFreq','30rtty',10130);
-            3 : freq := cqrini.ReadFloat('DefFreq','30am',10130);
-            4 : freq := cqrini.ReadFloat('DefFreq','30fm',10130);
-          end //case
-        end;
-
-    4 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','20cw',14025);
-            1 : freq := cqrini.ReadFloat('DefFreq','20ssb',14195);
-            2 : freq := cqrini.ReadFloat('DefFreq','20rtty',14090);
-            3 : freq := cqrini.ReadFloat('DefFreq','20am',14195);
-            4 : freq := cqrini.ReadFloat('DefFreq','20fm',14195);
-          end //case
-        end;
-
-    5 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','17cw',18080);
-            1 : freq := cqrini.ReadFloat('DefFreq','17ssb',18140);
-            2 : freq := cqrini.ReadFloat('DefFreq','17rtty',18110);
-            3 : freq := cqrini.ReadFloat('DefFreq','17am',18140);
-            4 : freq := cqrini.ReadFloat('DefFreq','17fm',18140);
-          end //case
-        end;
-
-    6 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','15cw',21025);
-            1 : freq := cqrini.ReadFloat('DefFreq','15ssb',21255);
-            2 : freq := cqrini.ReadFloat('DefFreq','15rtty',21090);
-            3 : freq := cqrini.ReadFloat('DefFreq','15am',21255);
-            4 : freq := cqrini.ReadFloat('DefFreq','15fm',21255);
-          end //case
-        end;
-
-    7 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','12cw',24895);
-            1 : freq := cqrini.ReadFloat('DefFreq','12ssb',24925);
-            2 : freq := cqrini.ReadFloat('DefFreq','12rtty',24910);
-            3 : freq := cqrini.ReadFloat('DefFreq','12am',24925);
-            4 : freq := cqrini.ReadFloat('DefFreq','12fm',24925);
-          end //case
-        end;
-
-    8 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','10cw',28025);
-            1 : freq := cqrini.ReadFloat('DefFreq','10ssb',28550);
-            2 : freq := cqrini.ReadFloat('DefFreq','10rtty',28090);
-            3 : freq := cqrini.ReadFloat('DefFreq','10am',28550);
-            4 : freq := cqrini.ReadFloat('DefFreq','10fm',28550);
-          end //case
-        end;
-
-    9 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','6cw',50090);
-            1 : freq := cqrini.ReadFloat('DefFreq','6ssb',51300);
-            2 : freq := cqrini.ReadFloat('DefFreq','6rtty',51300);
-            3 : freq := cqrini.ReadFloat('DefFreq','6am',51300);
-            4 : freq := cqrini.ReadFloat('DefFreq','6fm',51300);
-          end //case
-        end;
-
-   10 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','2cw',144050);
-            1 : freq := cqrini.ReadFloat('DefFreq','2ssb',144300);
-            2 : freq := cqrini.ReadFloat('DefFreq','2rtty',144300);
-            3 : freq := cqrini.ReadFloat('DefFreq','2am',144300);
-            4 : freq := cqrini.ReadFloat('DefFreq','2fm',145300);
-          end //case
-        end;
-
-   11 : begin
-          case mode of
-            0 : freq := cqrini.ReadFloat('DefFreq','70cw',3525);
-            1 : freq := cqrini.ReadFloat('DefFreq','70ssb',3750);
-            2 : freq := cqrini.ReadFloat('DefFreq','70rtty',3590);
-            3 : freq := cqrini.ReadFloat('DefFreq','70am',3750);
-            4 : freq := cqrini.ReadFloat('DefFreq','70fm',3750);
-          end //case
-        end;
+    0: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '160cw', 1830);
+        1: freq := cqrini.ReadFloat('DefFreq', '160ssb', 1830);
+        2: freq := cqrini.ReadFloat('DefFreq', '160rtty', 1845);
+        3: freq := cqrini.ReadFloat('DefFreq', '160am', 1845);
+        4: freq := cqrini.ReadFloat('DefFreq', '160fm', 1845);
+      end; //case
+    end;
+
+    1: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '80cw', 3525);
+        1: freq := cqrini.ReadFloat('DefFreq', '80ssb', 3750);
+        2: freq := cqrini.ReadFloat('DefFreq', '80rtty', 3590);
+        3: freq := cqrini.ReadFloat('DefFreq', '80am', 3750);
+        4: freq := cqrini.ReadFloat('DefFreq', '80fm', 3750);
+      end; //case
+    end;
+
+    2: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '40cw', 7015);
+        1: freq := cqrini.ReadFloat('DefFreq', '40ssb', 7080);
+        2: freq := cqrini.ReadFloat('DefFreq', '40rtty', 7040);
+        3: freq := cqrini.ReadFloat('DefFreq', '40am', 7080);
+        4: freq := cqrini.ReadFloat('DefFreq', '40fm', 7080);
+      end; //case
+    end;
+
+    3: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '30cw', 10110);
+        1: freq := cqrini.ReadFloat('DefFreq', '30ssb', 10130);
+        2: freq := cqrini.ReadFloat('DefFreq', '30rtty', 10130);
+        3: freq := cqrini.ReadFloat('DefFreq', '30am', 10130);
+        4: freq := cqrini.ReadFloat('DefFreq', '30fm', 10130);
+      end; //case
+    end;
+
+    4: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '20cw', 14025);
+        1: freq := cqrini.ReadFloat('DefFreq', '20ssb', 14195);
+        2: freq := cqrini.ReadFloat('DefFreq', '20rtty', 14090);
+        3: freq := cqrini.ReadFloat('DefFreq', '20am', 14195);
+        4: freq := cqrini.ReadFloat('DefFreq', '20fm', 14195);
+      end; //case
+    end;
+
+    5: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '17cw', 18080);
+        1: freq := cqrini.ReadFloat('DefFreq', '17ssb', 18140);
+        2: freq := cqrini.ReadFloat('DefFreq', '17rtty', 18110);
+        3: freq := cqrini.ReadFloat('DefFreq', '17am', 18140);
+        4: freq := cqrini.ReadFloat('DefFreq', '17fm', 18140);
+      end; //case
+    end;
+
+    6: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '15cw', 21025);
+        1: freq := cqrini.ReadFloat('DefFreq', '15ssb', 21255);
+        2: freq := cqrini.ReadFloat('DefFreq', '15rtty', 21090);
+        3: freq := cqrini.ReadFloat('DefFreq', '15am', 21255);
+        4: freq := cqrini.ReadFloat('DefFreq', '15fm', 21255);
+      end; //case
+    end;
+
+    7: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '12cw', 24895);
+        1: freq := cqrini.ReadFloat('DefFreq', '12ssb', 24925);
+        2: freq := cqrini.ReadFloat('DefFreq', '12rtty', 24910);
+        3: freq := cqrini.ReadFloat('DefFreq', '12am', 24925);
+        4: freq := cqrini.ReadFloat('DefFreq', '12fm', 24925);
+      end; //case
+    end;
+
+    8: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '10cw', 28025);
+        1: freq := cqrini.ReadFloat('DefFreq', '10ssb', 28550);
+        2: freq := cqrini.ReadFloat('DefFreq', '10rtty', 28090);
+        3: freq := cqrini.ReadFloat('DefFreq', '10am', 28550);
+        4: freq := cqrini.ReadFloat('DefFreq', '10fm', 28550);
+      end; //case
+    end;
+
+    9: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '6cw', 50090);
+        1: freq := cqrini.ReadFloat('DefFreq', '6ssb', 51300);
+        2: freq := cqrini.ReadFloat('DefFreq', '6rtty', 51300);
+        3: freq := cqrini.ReadFloat('DefFreq', '6am', 51300);
+        4: freq := cqrini.ReadFloat('DefFreq', '6fm', 51300);
+      end; //case
+    end;
+
+    10: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '2cw', 144050);
+        1: freq := cqrini.ReadFloat('DefFreq', '2ssb', 144300);
+        2: freq := cqrini.ReadFloat('DefFreq', '2rtty', 144300);
+        3: freq := cqrini.ReadFloat('DefFreq', '2am', 144300);
+        4: freq := cqrini.ReadFloat('DefFreq', '2fm', 145300);
+      end; //case
+    end;
+
+    11: begin
+      case mode of
+        0: freq := cqrini.ReadFloat('DefFreq', '70cw', 3525);
+        1: freq := cqrini.ReadFloat('DefFreq', '70ssb', 3750);
+        2: freq := cqrini.ReadFloat('DefFreq', '70rtty', 3590);
+        3: freq := cqrini.ReadFloat('DefFreq', '70am', 3750);
+        4: freq := cqrini.ReadFloat('DefFreq', '70fm', 3750);
+      end; //case
+    end;
 
   end; //case
-  if dmData.DebugLevel >=3 then
+  if dmData.DebugLevel >= 3 then
     Writeln(freq);
   Result := FloatToStr(freq);
-  if dmData.DebugLevel >=3 then
-    Writeln(Result)
+  if dmData.DebugLevel >= 3 then
+    Writeln(Result);
 end;
 
 function TfrmTRXControl.GetActualMode : String;
 begin
   if Assigned(radio) then
   begin
-    Result := radio.GetModeOnly
-  end
+    Result := radio.GetModeOnly;
+  end;
 end;
 
-procedure TfrmTRXControl.SetFreqModeBandWidth(freq : Double; mode : String; BandWidth : Integer);
+procedure TfrmTRXControl.SetFreqModeBandWidth(freq : Double; mode : String;
+  BandWidth : Integer);
 var
   rmode : TRigMode;
   RXOffset : Currency;
@@ -1332,13 +1299,13 @@ begin
       if freq > 10000 then
         mode := 'USB'
       else
-        mode := 'LSB'
-    end
+        mode := 'LSB';
+    end;
   end;
 
   if Assigned(radio) then
   begin
-    dmData.GetRXTXOffset(freq/1000,RXOffset,TXOffset);
+    dmData.GetRXTXOffset(freq / 1000, RXOffset, TXOffset);
     radio.RXOffset := RXOffset;
     radio.TXOffset := TXOffset;
 
@@ -1347,15 +1314,15 @@ begin
     begin
       rmode.mode := mode;
       rmode.pass := BandWidth;
-      radio.SetModePass(rmode)
-    end
-  end
+      radio.SetModePass(rmode);
+    end;
+  end;
 end;
 
-procedure TfrmTRXControl.SetModeFreq(mode,freq : String); //freq in kHz
+procedure TfrmTRXControl.SetModeFreq(mode, freq : String); //freq in kHz
 var
   bandwidth : Integer = 0;
-  f         : double = 0;
+  f : Double = 0;
 begin
   if (lblFreq.Caption = empty_freq) then
     exit;
@@ -1369,47 +1336,48 @@ begin
       if f > 10000 then
         mode := 'USB'
       else
-        mode := 'LSB'
-    end
+        mode := 'LSB';
+    end;
   end;
 
-  SetFreqModeBandWidth(f,mode,bandwidth)
+  SetFreqModeBandWidth(f, mode, bandwidth);
 end;
-function TfrmTRXControl.GetModeFreqNewQSO(var mode,freq : String) : Boolean;
+
+function TfrmTRXControl.GetModeFreqNewQSO(var mode, freq : String) : Boolean;
 begin
   Result := False;
-  if not Assigned(radio) then exit; //without this sets old freq as mode (!) if switched from radio to non existing radio
+  if not Assigned(radio) then exit;
+  //without this sets old freq as mode (!) if switched from radio to non existing radio
   if not ((lblFreq.Caption = empty_freq) or (lblFreq.Caption = '')) then
     Result := True
   else
     exit;
   freq := lblFreq.Caption;
-  mode := GetActualMode
+  mode := GetActualMode;
 end;
 
 procedure TfrmTRXControl.SavePosition;
 begin
-  dmUtils.SaveWindowPos(frmTRXControl)
+  dmUtils.SaveWindowPos(frmTRXControl);
 end;
 
 procedure TfrmTRXControl.ClearButtonsColor;
-begin 
-  btn160m.Font.Color  := COLOR_WINDOWTEXT;
-  btn80m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn40m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn30m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn20m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn17m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn15m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn12m.Font.Color   := COLOR_WINDOWTEXT;  
-  btn10m.Font.Color   := COLOR_WINDOWTEXT; 
-  btn6m.Font.Color    := COLOR_WINDOWTEXT; 
-  btn2m.Font.Color    := COLOR_WINDOWTEXT; 
-  btn70cm.Font.Color  := COLOR_WINDOWTEXT;
-
-end;
-
-function TfrmTRXControl.GetModeBand(var mode,band : String) : Boolean;
+begin
+  btn160m.Font.Color := COLOR_WINDOWTEXT;
+  btn80m.Font.Color := COLOR_WINDOWTEXT;
+  btn40m.Font.Color := COLOR_WINDOWTEXT;
+  btn30m.Font.Color := COLOR_WINDOWTEXT;
+  btn20m.Font.Color := COLOR_WINDOWTEXT;
+  btn17m.Font.Color := COLOR_WINDOWTEXT;
+  btn15m.Font.Color := COLOR_WINDOWTEXT;
+  btn12m.Font.Color := COLOR_WINDOWTEXT;
+  btn10m.Font.Color := COLOR_WINDOWTEXT;
+  btn6m.Font.Color := COLOR_WINDOWTEXT;
+  btn2m.Font.Color := COLOR_WINDOWTEXT;
+  btn70cm.Font.Color := COLOR_WINDOWTEXT;
+end;
+
+function TfrmTRXControl.GetModeBand(var mode, band : String) : Boolean;
 var
   freq : String;
 begin
@@ -1421,7 +1389,7 @@ begin
   if (freq = empty_freq) or (freq = '') then
     Result := False
   else
-    band := dmUtils.GetBandFromFreq(freq)
+    band := dmUtils.GetBandFromFreq(freq);
 end;
 
 procedure TfrmTRXControl.CloseRigs;
@@ -1430,38 +1398,55 @@ begin
     WriteLn('Closing rigs... ');
 
   if Assigned(radio) then
-    FreeAndNil(radio)
+    FreeAndNil(radio);
 end;
 
 procedure TfrmTRXControl.UpdateModeButtons(mode : String);
 begin
-  btnCW.Font.Color    := COLOR_WINDOWTEXT;
-  btnSSB.Font.Color   := COLOR_WINDOWTEXT;
-  btnRTTY.Font.Color  := COLOR_WINDOWTEXT;
-  btnAM.Font.Color    := COLOR_WINDOWTEXT;
-  btnFM.Font.Color    := COLOR_WINDOWTEXT;
+  btnCW.Font.Color := COLOR_WINDOWTEXT;
+  btnSSB.Font.Color := COLOR_WINDOWTEXT;
+  btnRTTY.Font.Color := COLOR_WINDOWTEXT;
+  btnAM.Font.Color := COLOR_WINDOWTEXT;
+  btnFM.Font.Color := COLOR_WINDOWTEXT;
   if mode = 'CW' then
     btnCW.Font.Color := clRed
   else
-    if mode = 'SSB' then
-      btnSSB.Font.Color := clRed
-     else
-       if mode = 'RTTY' then
-         btnRTTY.Font.Color := clRed
-       else
-         if mode = 'AM' then
-           btnAM.Font.Color := clRed
-         else
-           if mode = 'FM' then
-             btnFM.Font.Color := clRed;
+  if mode = 'SSB' then
+    btnSSB.Font.Color := clRed
+  else
+  if mode = 'RTTY' then
+    btnRTTY.Font.Color := clRed
+  else
+  if mode = 'AM' then
+    btnAM.Font.Color := clRed
+  else
+  if mode = 'FM' then
+    btnFM.Font.Color := clRed;
 
+  if Assigned(radio) then
+  begin
+    case radio.GetCurrVFO of
+      VFOA: begin
+        btnVFOA.Font.Color := clRed;
+        btnVFOB.Font.Color := clDefault;
+      end;
+      VFOB: begin
+        btnVFOB.Font.Color := clRed;
+        btnVFOA.Font.Color := clDefault;
+      end;
+      else begin
+        btnVFOB.Font.Color := clDefault;
+        btnVFOA.Font.Color := clDefault;
+      end;
+    end;
+  end;
 end;
 
 procedure TfrmTRXControl.Split(Up : Integer);
 
 begin
   //we do split with XIT, no need to play with 2 VFOs
- if Assigned(radio) then
+  if Assigned(radio) then
   begin
     radio.SetSplit(up);
   end;
@@ -1469,15 +1454,15 @@ end;
 
 procedure TfrmTRXControl.DisableSplit;
 begin
- if Assigned(radio) then  radio.DisableSplit;
+  if Assigned(radio) then  radio.DisableSplit;
 end;
 
-function TfrmTRXControl.GetFreqHz  : Double;
+function TfrmTRXControl.GetFreqHz : Double;
 begin
   if Assigned(radio) then
     Result := radio.GetFreqHz
   else
-    Result := 0
+    Result := 0;
 end;
 
 function TfrmTRXControl.GetFreqkHz : Double;
@@ -1485,7 +1470,7 @@ begin
   if Assigned(radio) then
     Result := radio.GetFreqKHz
   else
-    Result := 0
+    Result := 0;
 end;
 
 function TfrmTRXControl.GetFreqMHz : Double;
@@ -1493,54 +1478,67 @@ begin
   if Assigned(radio) then
     Result := radio.GetFreqMHz
   else
-    Result := 0
+    Result := 0;
 end;
 
 function TfrmTRXControl.GetDislayFreq : String;
 begin
   if Assigned(radio) then
-    Result := FormatFloat(empty_freq+';;',radio.GetFreqMHz)
+    Result := FormatFloat(empty_freq + ';;', radio.GetFreqMHz)
   else
-    Result := FormatFloat(empty_freq+';;',0)
+    Result := FormatFloat(empty_freq + ';;', 0);
 end;
 
 procedure TfrmTRXControl.ClearRIT;
 begin
   if (lblFreq.Caption = empty_freq) then
     exit;
-  radio.ClearRit
+  radio.ClearRit;
+  radio.ClearXit;   //this clears Xit too
+end;
+
+procedure TfrmTRXControl.DisableRitXit;
+begin
+  if not Assigned(radio) then
+    exit;
+  radio.DisableRit;
+  radio.DisableSplit;   //this disabeles Xit
 end;
+
 procedure TfrmTRXControl.LoadUsrButtonCaptions;
-var       r:char;
-Begin
-  if rbRadio1.Checked then r:='1' else r:='2';
-  btnUsr1.Caption:=cqrini.ReadString('TRX'+r, 'usr1name', 'Usr1');
-  btnUsr2.Caption:=cqrini.ReadString('TRX'+r, 'usr2name', 'Usr2');
-  btnUsr3.Caption:=cqrini.ReadString('TRX'+r, 'usr3name', 'Usr3');
+var
+  r : Char;
+begin
+  if rbRadio1.Checked then r := '1'
+  else
+    r := '2';
+  btnUsr1.Caption := cqrini.ReadString('TRX' + r, 'usr1name', 'Usr1');
+  btnUsr2.Caption := cqrini.ReadString('TRX' + r, 'usr2name', 'Usr2');
+  btnUsr3.Caption := cqrini.ReadString('TRX' + r, 'usr3name', 'Usr3');
 end;
 
 procedure TfrmTRXControl.LoadButtonCaptions;
 begin
-  btn160m.Caption := cqrini.ReadString('DefFreq','160btn','160m');
-  btn80m.Caption  := cqrini.ReadString('DefFreq','80btn','80m');
-  btn40m.Caption  := cqrini.ReadString('DefFreq','40btn','40m');
-  btn30m.Caption  := cqrini.ReadString('DefFreq','30btn','30m');
-  btn20m.Caption  := cqrini.ReadString('DefFreq','20btn','20m');
-  btn17m.Caption  := cqrini.ReadString('DefFreq','17btn','17m');
-  btn15m.Caption  := cqrini.ReadString('DefFreq','15btn','15m');
-  btn12m.Caption  := cqrini.ReadString('DefFreq','12btn','12m');
-  btn10m.Caption  := cqrini.ReadString('DefFreq','10btn','10m');
-  btn6m.Caption   := cqrini.ReadString('DefFreq','6btn','6m');
-  btn2m.Caption   := cqrini.ReadString('DefFreq','2btn','2m');
-  btn70cm.Caption := cqrini.ReadString('DefFreq','70btn','70cm')
+  btn160m.Caption := cqrini.ReadString('DefFreq', '160btn', '160m');
+  btn80m.Caption := cqrini.ReadString('DefFreq', '80btn', '80m');
+  btn40m.Caption := cqrini.ReadString('DefFreq', '40btn', '40m');
+  btn30m.Caption := cqrini.ReadString('DefFreq', '30btn', '30m');
+  btn20m.Caption := cqrini.ReadString('DefFreq', '20btn', '20m');
+  btn17m.Caption := cqrini.ReadString('DefFreq', '17btn', '17m');
+  btn15m.Caption := cqrini.ReadString('DefFreq', '15btn', '15m');
+  btn12m.Caption := cqrini.ReadString('DefFreq', '12btn', '12m');
+  btn10m.Caption := cqrini.ReadString('DefFreq', '10btn', '10m');
+  btn6m.Caption := cqrini.ReadString('DefFreq', '6btn', '6m');
+  btn2m.Caption := cqrini.ReadString('DefFreq', '2btn', '2m');
+  btn70cm.Caption := cqrini.ReadString('DefFreq', '70btn', '70cm');
 end;
 
 procedure TfrmTRXControl.SetDebugMode(DebugMode : Boolean);
 begin
   if Assigned(radio) then
   begin
-    radio.DebugMode := DebugMode
-  end
+    radio.DebugMode := DebugMode;
+  end;
 end;
 
 function TfrmTRXControl.GetRawMode : String;
@@ -1548,24 +1546,35 @@ begin
   if Assigned(radio) then
     Result := radio.GetRawMode
   else
-    Result := ''
+    Result := '';
 end;
 
 procedure TfrmTRXControl.LoadBandButtons;
 begin
-  btn160MBand := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','160cw',1830)/1000));
-  btn80MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','80cw',3525)/1000));
-  btn40MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','40cw',7015)/1000));
-  btn30MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','30cw',10110)/1000));
-  btn20MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','20cw',14025)/1000));
-  btn17MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','17cw',18080)/1000));
-  btn15MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','15cw',21025)/1000));
-  btn12MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','12cw',24895)/1000));
-  btn10MBand  := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','10cw',28025)/1000));
-  btn6MBand   := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','6cw',50090)/1000));
-  btn2MBand   := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','2cw',144050)/1000));
-  btn70CMBand := dmUtils.GetBandFromFreq(FloatToStr(cqrini.ReadFloat('DefFreq','70cw',430000)/1000))
+  btn160MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '160cw', 1830) / 1000));
+  btn80MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '80cw', 3525) / 1000));
+  btn40MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '40cw', 7015) / 1000));
+  btn30MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '30cw', 10110) / 1000));
+  btn20MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '20cw', 14025) / 1000));
+  btn17MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '17cw', 18080) / 1000));
+  btn15MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '15cw', 21025) / 1000));
+  btn12MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '12cw', 24895) / 1000));
+  btn10MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '10cw', 28025) / 1000));
+  btn6MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '6cw', 50090) / 1000));
+  btn2MBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '2cw', 144050) / 1000));
+  btn70CMBand := dmUtils.GetBandFromFreq(
+    FloatToStr(cqrini.ReadFloat('DefFreq', '70cw', 430000) / 1000));
 end;
 
 end.
-
diff --git a/src/fWorkedGrids.pas b/src/fWorkedGrids.pas
index ba4a9ef..616c2e1 100644
--- a/src/fWorkedGrids.pas
+++ b/src/fWorkedGrids.pas
@@ -98,7 +98,7 @@ var
 implementation
 
 {$R *.lfm}
-uses fNewQSO, fTRXControl, dData, dUtils, uMyIni;
+uses fNewQSO, fTRXControl, dData, dUtils, uMyIni,fContest;
 
 { TfrmWorkedGrids }
  //441H      753W
@@ -252,10 +252,17 @@ var
 
 begin
   if LocalDbg then Writeln('Start WkdCall');
-  if cqrini.ReadBool('wsjt','wb4CCall', False) then
-            daylimit := ' and qsodate >= '+#39+cqrini.ReadString('wsjt', 'wb4Calldate','1900-01-01')+#39 //default date check all qsos
-     else
+  //in case we were called from contest form open
+  if ((frmContest.Showing) and ((frmContest.rbDupeCheck.Checked) or (frmContest.rbNoMode4Dupe.Checked)))
+      then
+            daylimit := ' and qsodate >= '+#39+cqrini.ReadString('frmContest', 'DupeFrom', '1900-01-01')+#39 //default date check all qsos
+   else
+     Begin
+        if cqrini.ReadBool('wsjt','wb4CCall', False) then
+            daylimit := ' and qsodate >= '+#39+cqrini.ReadString('wsjt', 'wb4Calldate','1900-01-01')+#39
+          else
             daylimit :='';
+     end;
 
   WkdCall := 0;
   dmData.W.Close;
diff --git a/src/fXfldigi.lfm b/src/fXfldigi.lfm
index 1d6a48e..a23f1aa 100644
--- a/src/fXfldigi.lfm
+++ b/src/fXfldigi.lfm
@@ -1,53 +1,65 @@
 object frmxfldigi: Tfrmxfldigi
-  Left = 57
-  Height = 193
-  Top = 39
-  Width = 347
-  Caption = 'fldigi xmlrpc'
-  ClientHeight = 193
-  ClientWidth = 347
+  Left = 78
+  Height = 241
+  Top = 69
+  Width = 414
+  Caption = 'fldigi xmlrpc monitor'
+  ClientHeight = 241
+  ClientWidth = 414
   OnClose = FormClose
   OnCreate = FormCreate
   OnHide = FormHide
   OnShow = FormShow
-  LCLVersion = '2.0.8.0'
-  object lbCall: TLabel
-    Left = 8
+  LCLVersion = '2.0.12.0'
+  object edtCall: TLabel
+    AnchorSideLeft.Control = lblCall
+    AnchorSideTop.Control = lblCall
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 15
-    Top = 32
-    Width = 72
+    Top = 78
+    Width = 80
     AutoSize = False
     Caption = '-call'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbFreq: TLabel
-    Left = 88
+  object edtFreq: TLabel
+    AnchorSideLeft.Control = lblFreq
+    AnchorSideTop.Control = lblFreq
+    AnchorSideTop.Side = asrBottom
+    Left = 98
     Height = 15
-    Top = 32
-    Width = 67
+    Top = 78
+    Width = 70
     AutoSize = False
     Caption = '-Freq'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbMode: TLabel
-    Left = 160
+  object edtMode: TLabel
+    AnchorSideLeft.Control = lblMode
+    AnchorSideTop.Control = lblMode
+    AnchorSideTop.Side = asrBottom
+    Left = 180
     Height = 15
-    Top = 32
-    Width = 51
+    Top = 78
+    Width = 100
     AutoSize = False
     Caption = '-Mode'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbRstS: TLabel
-    Left = 224
+  object edtRstS: TLabel
+    AnchorSideLeft.Control = lblRstS
+    AnchorSideTop.Control = lblRstS
+    AnchorSideTop.Side = asrBottom
+    Left = 292
     Height = 15
-    Top = 32
+    Top = 78
     Width = 43
     AutoSize = False
     Caption = '-rstS'
@@ -55,43 +67,57 @@ object frmxfldigi: Tfrmxfldigi
     ParentColor = False
     Transparent = False
   end
-  object lbRstR: TLabel
-    Left = 296
+  object edtRstR: TLabel
+    AnchorSideTop.Control = lblRstR
+    AnchorSideTop.Side = asrBottom
+    AnchorSideRight.Control = edtState
+    AnchorSideRight.Side = asrBottom
+    Left = 360
     Height = 15
-    Top = 32
+    Top = 78
     Width = 43
+    Anchors = [akTop, akRight]
     AutoSize = False
     Caption = '-rstR'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbName: TLabel
-    Left = 8
+  object edtName: TLabel
+    AnchorSideLeft.Control = lblName
+    AnchorSideTop.Control = lblName
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 15
-    Top = 74
-    Width = 72
+    Top = 116
+    Width = 80
     AutoSize = False
     Caption = '-name'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbQth: TLabel
-    Left = 88
+  object edtQth: TLabel
+    AnchorSideLeft.Control = lblQth
+    AnchorSideTop.Control = lblQth
+    AnchorSideTop.Side = asrBottom
+    Left = 98
     Height = 15
-    Top = 74
-    Width = 123
+    Top = 116
+    Width = 150
     AutoSize = False
     Caption = '-qth'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbGrid: TLabel
-    Left = 224
+  object edtGrid: TLabel
+    AnchorSideLeft.Control = lblGrid
+    AnchorSideTop.Control = lblGrid
+    AnchorSideTop.Side = asrBottom
+    Left = 292
     Height = 15
-    Top = 74
+    Top = 116
     Width = 64
     AutoSize = False
     Caption = '-grid'
@@ -99,32 +125,41 @@ object frmxfldigi: Tfrmxfldigi
     ParentColor = False
     Transparent = False
   end
-  object lbStat: TLabel
-    Left = 296
+  object edtState: TLabel
+    AnchorSideLeft.Control = lblState
+    AnchorSideTop.Control = lblState
+    AnchorSideTop.Side = asrBottom
+    Left = 368
     Height = 15
-    Top = 74
-    Width = 27
+    Top = 116
+    Width = 35
     AutoSize = False
     Caption = '-st'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbComm: TLabel
-    Left = 8
+  object edtComment: TLabel
+    AnchorSideLeft.Control = lblComment
+    AnchorSideTop.Control = lblComment
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 15
-    Top = 128
-    Width = 232
+    Top = 154
+    Width = 270
     AutoSize = False
     Caption = '-comment QSO'
     Color = clDefault
     ParentColor = False
     Transparent = False
   end
-  object lbCoun: TLabel
-    Left = 256
+  object edtCounty: TLabel
+    AnchorSideLeft.Control = lblCounty
+    AnchorSideTop.Control = lblCounty
+    AnchorSideTop.Side = asrBottom
+    Left = 292
     Height = 15
-    Top = 128
+    Top = 154
     Width = 75
     AutoSize = False
     Caption = '-county'
@@ -132,10 +167,13 @@ object frmxfldigi: Tfrmxfldigi
     ParentColor = False
     Transparent = False
   end
-  object lbTrx: TLabel
-    Left = 307
+  object edtRig: TLabel
+    AnchorSideLeft.Control = lblRig
+    AnchorSideTop.Control = lblRig
+    AnchorSideTop.Side = asrBottom
+    Left = 292
     Height = 15
-    Top = 160
+    Top = 190
     Width = 32
     AutoSize = False
     Caption = '-RX'
@@ -147,18 +185,23 @@ object frmxfldigi: Tfrmxfldigi
     AnchorSideLeft.Control = Owner
     AnchorSideLeft.Side = asrCenter
     AnchorSideTop.Control = Owner
-    Left = 68
+    Left = 101
     Height = 17
-    Top = 0
-    Width = 211
+    Top = 3
+    Width = 212
+    BorderSpacing.Top = 3
     Caption = 'Data received from fldigi xmlrpc'
     ParentColor = False
   end
   object btSaveQSO: TButton
-    Left = 8
+    AnchorSideLeft.Control = edtComment
+    AnchorSideTop.Control = edtComment
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 25
-    Top = 152
+    Top = 187
     Width = 232
+    BorderSpacing.Top = 18
     Caption = 'Save this QSO'
     Font.Color = clRed
     Font.Style = [fsBold]
@@ -167,125 +210,244 @@ object frmxfldigi: Tfrmxfldigi
     TabOrder = 0
     Visible = False
   end
-  object Label1: TLabel
-    Left = 8
+  object lblComment: TLabel
+    AnchorSideLeft.Control = lblCall
+    AnchorSideTop.Control = edtName
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 17
-    Top = 104
+    Top = 137
     Width = 96
+    BorderSpacing.Top = 6
     Caption = 'Comment QSO'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label2: TLabel
-    Left = 256
+  object lblCounty: TLabel
+    AnchorSideLeft.Control = edtGrid
+    AnchorSideTop.Control = lblComment
+    Left = 292
     Height = 17
-    Top = 104
+    Top = 137
     Width = 46
     Caption = 'County'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label3: TLabel
-    Left = 256
+  object lblRig: TLabel
+    AnchorSideLeft.Control = edtCounty
+    AnchorSideTop.Control = edtCounty
+    AnchorSideTop.Side = asrBottom
+    Left = 292
     Height = 15
-    Top = 160
+    Top = 175
     Width = 32
     AutoSize = False
+    BorderSpacing.Top = 6
     Caption = 'Rig'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label4: TLabel
-    Left = 8
+  object lblName: TLabel
+    AnchorSideLeft.Control = lblCall
+    AnchorSideTop.Control = edtCall
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 17
-    Top = 56
+    Top = 99
     Width = 39
+    BorderSpacing.Top = 6
     Caption = 'Name'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label5: TLabel
-    Left = 88
+  object lblQth: TLabel
+    AnchorSideLeft.Control = edtFreq
+    AnchorSideTop.Control = lblName
+    Left = 98
     Height = 17
-    Top = 56
+    Top = 99
     Width = 28
     Caption = 'QTH'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label6: TLabel
-    Left = 224
+  object lblGrid: TLabel
+    AnchorSideLeft.Control = edtRstS
+    AnchorSideTop.Control = lblName
+    Left = 292
     Height = 17
-    Top = 56
+    Top = 99
     Width = 27
     Caption = 'Grid'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label7: TLabel
-    Left = 296
+  object lblState: TLabel
+    AnchorSideLeft.Control = edtGrid
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = lblName
+    Left = 368
     Height = 17
-    Top = 56
+    Top = 99
     Width = 34
+    BorderSpacing.Left = 12
     Caption = 'State'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label8: TLabel
-    Left = 8
+  object lblCall: TLabel
+    AnchorSideLeft.Control = lblDate
+    AnchorSideTop.Control = edtDate
+    AnchorSideTop.Side = asrBottom
+    Left = 6
     Height = 17
-    Top = 16
+    Top = 61
     Width = 25
+    BorderSpacing.Top = 3
     Caption = 'Call'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label9: TLabel
-    Left = 88
+  object lblFreq: TLabel
+    AnchorSideLeft.Control = edtCall
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = lblCall
+    Left = 98
     Height = 17
-    Top = 16
+    Top = 61
     Width = 28
+    BorderSpacing.Left = 12
     Caption = 'Freq'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label10: TLabel
-    Left = 160
+  object lblMode: TLabel
+    AnchorSideLeft.Control = edtFreq
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = lblCall
+    Left = 180
     Height = 17
-    Top = 16
+    Top = 61
     Width = 36
+    BorderSpacing.Left = 12
     Caption = 'Mode'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label11: TLabel
-    Left = 224
+  object lblRstS: TLabel
+    AnchorSideLeft.Control = edtMode
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = lblCall
+    Left = 292
     Height = 17
-    Top = 16
+    Top = 61
     Width = 30
+    BorderSpacing.Left = 12
     Caption = 'RSTs'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
-  object Label12: TLabel
-    Left = 296
+  object lblRstR: TLabel
+    AnchorSideLeft.Control = edtRstR
+    AnchorSideTop.Control = lblCall
+    Left = 360
     Height = 17
-    Top = 16
-    Width = 28
+    Top = 61
+    Width = 29
     Caption = 'RSTr'
     Font.Color = clBlue
     ParentColor = False
     ParentFont = False
   end
+  object lblDate: TLabel
+    AnchorSideLeft.Control = Owner
+    AnchorSideTop.Control = lbHeader
+    AnchorSideTop.Side = asrBottom
+    Left = 6
+    Height = 17
+    Top = 26
+    Width = 31
+    BorderSpacing.Left = 6
+    BorderSpacing.Top = 6
+    Caption = 'Date'
+    ParentColor = False
+  end
+  object lblTimeOn: TLabel
+    AnchorSideLeft.Control = edtDate
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = lblDate
+    Left = 98
+    Height = 17
+    Top = 26
+    Width = 50
+    BorderSpacing.Left = 12
+    Caption = 'TimeOn'
+    ParentColor = False
+  end
+  object lblTimeOff: TLabel
+    AnchorSideLeft.Control = edtTimeOn
+    AnchorSideLeft.Side = asrBottom
+    AnchorSideTop.Control = lblDate
+    Left = 180
+    Height = 17
+    Top = 26
+    Width = 52
+    BorderSpacing.Left = 12
+    Caption = 'TimeOff'
+    ParentColor = False
+  end
+  object edtDate: TLabel
+    AnchorSideLeft.Control = lblDate
+    AnchorSideTop.Control = lblDate
+    AnchorSideTop.Side = asrBottom
+    Left = 6
+    Height = 15
+    Top = 43
+    Width = 80
+    AutoSize = False
+    Caption = '-date'
+    Color = clDefault
+    ParentColor = False
+    Transparent = False
+  end
+  object edtTimeOn: TLabel
+    AnchorSideLeft.Control = lblTimeOn
+    AnchorSideTop.Control = lblTimeOn
+    AnchorSideTop.Side = asrBottom
+    Left = 98
+    Height = 15
+    Top = 43
+    Width = 70
+    AutoSize = False
+    Caption = '-timeon'
+    Color = clDefault
+    ParentColor = False
+    Transparent = False
+  end
+  object edtTimeOff: TLabel
+    AnchorSideLeft.Control = lblTimeOff
+    AnchorSideTop.Control = lblTimeOff
+    AnchorSideTop.Side = asrBottom
+    Left = 180
+    Height = 15
+    Top = 43
+    Width = 70
+    AutoSize = False
+    Caption = '-timeoff'
+    Color = clDefault
+    ParentColor = False
+    Transparent = False
+  end
 end
diff --git a/src/fXfldigi.pas b/src/fXfldigi.pas
index 2b49b40..e9fe653 100644
--- a/src/fXfldigi.pas
+++ b/src/fXfldigi.pas
@@ -17,31 +17,37 @@ type
 
   Tfrmxfldigi = class(TForm)
     btSaveQSO: TButton;
-    Label1: TLabel;
-    Label10: TLabel;
-    Label11: TLabel;
-    Label12: TLabel;
-    Label2: TLabel;
-    Label3: TLabel;
-    Label4: TLabel;
-    Label5: TLabel;
-    Label6: TLabel;
-    Label7: TLabel;
-    Label8: TLabel;
-    Label9: TLabel;
+    edtDate: TLabel;
+    edtTimeOn: TLabel;
+    edtTimeOff: TLabel;
+    lblTimeOff: TLabel;
+    lblTimeOn: TLabel;
+    lblDate: TLabel;
+    lblComment: TLabel;
+    lblMode: TLabel;
+    lblRstS: TLabel;
+    lblRstR: TLabel;
+    lblCounty: TLabel;
+    lblRig: TLabel;
+    lblName: TLabel;
+    lblQth: TLabel;
+    lblGrid: TLabel;
+    lblState: TLabel;
+    lblCall: TLabel;
+    lblFreq: TLabel;
     lbHeader: TLabel;
-    lbTrx: TLabel;
-    lbComm: TLabel;
-    lbCoun: TLabel;
-    lbQth: TLabel;
-    lbGrid: TLabel;
-    lbStat: TLabel;
-    lbName: TLabel;
-    lbCall: TLabel;
-    lbFreq: TLabel;
-    lbMode: TLabel;
-    lbRstS: TLabel;
-    lbRstR: TLabel;
+    edtRig: TLabel;
+    edtComment: TLabel;
+    edtCounty: TLabel;
+    edtQth: TLabel;
+    edtGrid: TLabel;
+    edtState: TLabel;
+    edtName: TLabel;
+    edtCall: TLabel;
+    edtFreq: TLabel;
+    edtMode: TLabel;
+    edtRstS: TLabel;
+    edtRstR: TLabel;
     procedure btSaveQSOClick(Sender: TObject);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormCreate(Sender: TObject);
@@ -63,6 +69,7 @@ type
 type
     fLogEntry = record
      frequency  ,
+     startdate       ,
      time_on    ,
      time_off   ,
      call       ,
@@ -73,6 +80,7 @@ type
      county     ,
      qth        ,
      mode       ,
+     submode    ,
      notes      ,
      locator    ,
      trx_state  : String;
@@ -87,9 +95,6 @@ var
 implementation
 { Tfrmxfldigi }
 
-//should this be thread? There should not be network problems this kind of case
-
-
 uses  fTRXControl, dData, dUtils, uMyIni, fNewQSO, dDXCluster;
 
 
@@ -97,18 +102,25 @@ procedure Tfrmxfldigi.SetMyFields(d:integer);
 Begin
    with fLog[d] do
     Begin
-     lbFreq.Caption := frequency;
-     lbMode.Caption := mode;
-     lbCall.Caption := call;
-     lbName.Caption := name;
-     lbRstR.Caption := rst_in;
-     lbRstS.Caption := rst_out;
-     lbStat.Caption := state;
-     lbCoun.Caption := county;
-     lbQth.Caption  := qth;
-     lbComm.Caption := notes;
-     lbGrid.Caption := locator;
-     lbTrx.Caption  := trx_state;
+     edtDate.Caption    := copy(startdate,1,4)+'-'+copy(startdate,5,2)+'-'+copy(startdate,7,2);
+     if time_on<>'' then
+         edtTimeOn.Caption  := time_on[1]+time_on[2]+':'+time_on[3]+time_on[4]
+        else  edtTimeOn.Caption  := time_on;
+     if time_off<>'' then
+         edtTimeOff.Caption := time_off[1]+time_off[2]+':'+time_off[3]+time_off[4]
+        else edtTimeOff.Caption := time_off;
+     edtCall.Caption    := call;
+     edtFreq.Caption    := frequency;
+     edtMode.Caption    := mode;
+     edtRstR.Caption    := rst_in;
+     edtRstS.Caption    := rst_out;
+     edtName.Caption    := name;
+     edtQth.Caption     := qth;
+     edtGrid.Caption    := locator;
+     edtState.Caption   := state;
+     edtComment.Caption := notes;
+     edtCounty.Caption  := county;
+     edtRig.Caption     := trx_state;
     end;
 end;
 procedure Tfrmxfldigi.SetCqrFields(d:integer);
@@ -116,19 +128,20 @@ procedure Tfrmxfldigi.SetCqrFields(d:integer);
 Begin
  with fLog[d] do
    Begin
-     if (frequency <> '' ) then frmNewQSO.cmbFreq.text := frequency;
-     if (mode <>'') then frmNewQSO.cmbMode.Text := mode;
-     if (time_on <>'') then frmNewQSO.edtStartTime.Text := time_on[1]+time_on[2]+':'+time_on[3]+time_on[4];
-     if (time_off <>'') then frmNewQSO.edtEndTime.Text   := time_off[1]+time_off[2]+':'+time_off[3]+time_off[4];
-     frmNewQSO.edtCall.Text      := call;
-     if (name <>'') then frmNewQSO.edtName.Text      := name;
-     if (rst_in <>'') then frmNewQSO.edtMyRST.Text     := rst_in;
-     if (rst_out <>'') then frmNewQSO.edtHisRST.Text    := rst_out;
-     if (state <>'') then frmNewQSO.edtState.Text     := state;
-     if (county <>'') then frmNewQSO.edtCounty.Text    := county;
-     if (qth <>'') then frmNewQSO.edtQTH.Text       := qth;
-     if (notes <>'') then frmNewQSO.edtRemQSO.Text    := notes;
-     if (locator <>'') then frmNewQSO.edtGrid.Text      := locator;
+     if (startdate<>'')    then frmNewQSO.edtdate.Text      := copy(startdate,1,4)+'-'+copy(startdate,5,2)+'-'+copy(startdate,7,2);
+     if (time_on <>'')     then frmNewQSO.edtStartTime.Text := time_on[1]+time_on[2]+':'+time_on[3]+time_on[4];
+     if (time_off <>'')    then frmNewQSO.edtEndTime.Text   := time_off[1]+time_off[2]+':'+time_off[3]+time_off[4];
+     if (call <>'')        then frmNewQSO.edtCall.Text      := call;
+     if (frequency <> '')  then frmNewQSO.cmbFreq.text      := frequency;
+     if (mode <>'')        then frmNewQSO.cmbMode.Text      := mode;
+     if (rst_in <>'')      then frmNewQSO.edtMyRST.Text     := rst_in;
+     if (rst_out <>'')     then frmNewQSO.edtHisRST.Text    := rst_out;
+     if (name <>'')        then frmNewQSO.edtName.Text      := name;
+     if (qth <>'')         then frmNewQSO.edtQTH.Text       := qth;
+     if (locator <>'')     then frmNewQSO.edtGrid.Text      := locator;
+     if (state <>'')       then frmNewQSO.edtState.Text     := state;
+     if (county <>'')      then frmNewQSO.edtCounty.Text    := county;
+     if (notes <>'')       then frmNewQSO.edtRemQSO.Text    := notes;
    end;
 end;
 
@@ -224,6 +237,7 @@ var
    Drop   :integer;
    tmp    :extended;
 
+
 begin
   frmNewQSO.tmrFldigi.Enabled := false;
   SockOK := true;
@@ -265,14 +279,22 @@ begin
                     mode := opmode
                 end;
             1 : begin
-                  if SockOK then SockOK := PollFldigi('modem.get_name',mode);
+                  mode:='';submode:='';
+                  if SockOK then SockOK := PollFldigi('modem.get_mode',mode);
+                  if SockOK then SockOK := PollFldigi('modem.get_submode',submode);
+                  if mode='' then  //old version of fldigi get_mode not supported, make different query
+                     Begin
+                      if SockOK then SockOK := PollFldigi('modem.get_name',mode);
+                     end
+                    else
+                      mode:=dmUtils.ModeToCqr(mode,submode,dmData.DebugLevel>=1 );
                 end;
             2 : begin
                   mode := cqrini.ReadString('fldigi','defmode','RTTY');
                 end;
            end;
      if dmData.DebugLevel>=1 then Writeln('Mode :', mode);
-
+     if SockOK then SockOK := PollFldigi('log.get_date_on',startdate);
      if SockOK then SockOK := PollFldigi('log.get_time_on',time_on);
      if SockOK then SockOK := PollFldigi('log.get_time_off',time_off);
      if SockOK then SockOK := PollFldigi('log.get_call',call);
@@ -365,6 +387,7 @@ begin
      trx_state :='RX';
    end;
   fLog[old] := fLog[new];
+  SetMyFields(new);
 end;
 
 procedure Tfrmxfldigi.FormHide(Sender: TObject);
@@ -397,30 +420,181 @@ initialization
   {$I fXfldigi.lrs}
 
 end.
-{
-fldigi xmlrpc log (get)commands:
-log.get_frequency	s:n	Returns the Frequency field contents
-log.get_time_on	        s:n	Returns the Time-On field contents
-log.get_time_off	s:n	Returns the Time-Off field contents
-log.get_call	        s:n	Returns the Call field contents
-log.get_name	        s:n	Returns the Name field contents
-log.get_rst_in	        s:n	Returns the RST(r) field contents
-log.get_rst_out	        s:n	Returns the RST(s) field contents
-log.get_serial_number	s:n	Returns the serial number field contents
-log.get_serial_number_sent
-                        s:n	Returns the serial number (sent) field contents
-log.get_exchange	s:n	Returns the contest exchange field contents
-log.set_exchange	n:s	Sets the contest exchange field contents
-log.get_state	        s:n	Returns the State field contents
-log.get_province	s:n	Returns the Province field contents
-log.get_country	        s:n	Returns the Country field contents
-log.get_qth	        s:n	Returns the QTH field contents
-log.get_band	        s:n	Returns the current band name
-log.get_notes	        s:n	Returns the Notes field contents
-log.get_locator	        s:n	Returns the Locator field contents
-log.get_az	        s:n	Returns the AZ field contents
-
-modem.get_name	        s:n	Returns the name of the current modem
-main.get_trx_state      s:n     Returns T/R state
-log.clear	        n:n	Clears the contents of the log fields
+{ at  2022-03-31 test version of fldigi:
+[saku@hamtpad ~]$ fldigi --xmlrpc-list
+fldigi.list                     A:n     Returns the list of methods.
+fldigi.name                     s:n     Returns the program name.
+fldigi.version_struct           S:n     Returns the program version as a struct.
+fldigi.version                  s:n     Returns the program version as a string.
+fldigi.name_version             s:n     Returns the program name and version.
+fldigi.config_dir               s:n     Returns the name of the configuration directory.
+fldigi.terminate                n:i     Terminates fldigi. ``i'' is bitmask specifying data to save: 0=options; 1=log; 2=macros.
+modem.get_mode                  s:n     Returns the ADIF mode for the current modem.
+modem.get_submode               s:n     Returns the ADIF submode for the current modem.
+modem.get_name                  s:n     Returns the name of the current modem.
+modem.get_names                 A:n     Returns all modem names.
+modem.get_id                    i:n     Returns the ID of the current modem.
+modem.get_max_id                i:n     Returns the maximum modem ID number.
+modem.set_by_name               s:s     Sets the current modem. Returns old name.
+modem.set_by_id                 i:i     Sets the current modem. Returns old ID.
+modem.set_carrier               i:i     Sets modem carrier. Returns old carrier.
+modem.inc_carrier               i:i     Increments the modem carrier frequency. Returns the new carrier.
+modem.get_carrier               i:n     Returns the modem carrier frequency.
+modem.get_afc_search_range      i:n     Returns the modem AFC search range.
+modem.set_afc_search_range      i:i     Sets the modem AFC search range. Returns the old value.
+modem.inc_afc_search_range      i:i     Increments the modem AFC search range. Returns the new value.
+modem.get_bandwidth             i:n     Returns the modem bandwidth.
+modem.set_bandwidth             i:i     Sets the modem bandwidth. Returns the old value.
+modem.inc_bandwidth             i:i     Increments the modem bandwidth. Returns the new value.
+modem.get_quality               d:n     Returns the modem signal quality in the range [0:100].
+modem.search_up                 n:n     Searches upward in frequency.
+modem.search_down               n:n     Searches downward in frequency.
+modem.olivia.set_bandwidth      n:i     Sets the Olivia bandwidth.
+modem.olivia.get_bandwidth      i:n     Returns the Olivia bandwidth.
+modem.olivia.set_tones          n:i     Sets the Olivia tones.
+modem.olivia.get_tones          i:n     Returns the Olivia tones.
+main.get_status1                s:n     Returns the contents of the first status field (typically s/n).
+main.get_status2                s:n     Returns the contents of the second status field.
+main.get_sideband               s:n     [DEPRECATED; use main.get_wf_sideband and/or rig.get_mode]
+main.set_sideband               n:s     [DEPRECATED; use main.set_wf_sideband and/or rig.set_mode]
+main.get_wf_sideband            s:n     Returns the current waterfall sideband.
+main.set_wf_sideband            n:s     Sets the waterfall sideband to USB or LSB.
+main.get_frequency              d:n     [DEPRECATED; use rig.get_frequency
+main.set_frequency              d:d     Sets the RF carrier frequency. Returns the old value.
+main.inc_frequency              d:d     Increments the RF carrier frequency. Returns the new value.
+main.get_afc                    b:n     Returns the AFC state.
+main.set_afc                    b:b     Sets the AFC state. Returns the old state.
+main.toggle_afc                 b:n     Toggles the AFC state. Returns the new state.
+main.get_squelch                b:n     Returns the squelch state.
+main.set_squelch                b:b     Sets the squelch state. Returns the old state.
+main.toggle_squelch             b:n     Toggles the squelch state. Returns the new state.
+main.get_squelch_level          d:n     Returns the squelch level.
+main.set_squelch_level          d:d     Sets the squelch level. Returns the old level.
+main.inc_squelch_level          d:d     Increments the squelch level. Returns the new level.
+main.get_reverse                b:n     Returns the Reverse Sideband state.
+main.set_reverse                b:b     Sets the Reverse Sideband state. Returns the old state.
+main.toggle_reverse             b:n     Toggles the Reverse Sideband state. Returns the new state.
+main.get_lock                   b:n     Returns the Transmit Lock state.
+main.set_lock                   b:b     Sets the Transmit Lock state. Returns the old state.
+main.toggle_lock                b:n     Toggles the Transmit Lock state. Returns the new state.
+main.get_txid                   b:n     Returns the TXID state.
+main.set_txid                   b:b     Sets the TXID state. Returns the old state.
+main.toggle_txid                b:n     Toggles the TXID state. Returns the new state.
+main.get_rsid                   b:n     Returns the RSID state.
+main.set_rsid                   b:b     Sets the RSID state. Returns the old state.
+main.toggle_rsid                b:n     Toggles the RSID state. Returns the new state.
+main.get_trx_status             s:n     Returns transmit/tune/receive status.
+main.tx                         n:n     Transmits.
+main.tune                       n:n     Tunes.
+main.rsid                       n:n     [DEPRECATED; use main.{get,set,toggle}_rsid]
+main.rx                         n:n     Receives.
+main.rx_tx                      n:n     Sets normal Rx/Tx switching.
+main.rx_only                    n:n     Disables Tx.
+main.abort                      n:n     Aborts a transmit or tune.
+main.get_trx_state              s:n     Returns T/R state.
+main.get_tx_timing              n:s     Returns transmit duration for test string (samples:sample rate:secs).
+main.get_char_rates             s:n     Returns table of char rates.
+main.get_char_timing            n:i     Input: value of character. Returns transmit duration for specified character (samples:sample rate).
+main.set_rig_name               n:s     [DEPRECATED; use rig.set_name]
+main.set_rig_frequency          d:d     [DEPRECATED; use rig.set_frequency]
+main.set_rig_modes              n:A     [DEPRECATED; use rig.set_modes
+main.set_rig_mode               n:s     [DEPRECATED; use rig.set_mode
+main.get_rig_modes              A:n     [DEPRECATED; use rig.get_modes]
+main.get_rig_mode               s:n     [DEPRECATED; use rig.get_mode]
+main.set_rig_bandwidths         n:A     [DEPRECATED; use rig.set_bandwidths]
+main.set_rig_bandwidth          n:s     [DEPRECATED; use rig.set_bandwidth]
+main.get_rig_bandwidth          s:n     [DEPRECATED; use rig.get_bandwidth]
+main.get_rig_bandwidths         n:A     [DEPRECATED; use rig.get_bandwidths]
+main.run_macro                  n:i     Runs a macro.
+main.get_max_macro_id           i:n     Returns the maximum macro ID number.
+rig.set_name                    n:s     Sets the rig name for xmlrpc rig
+rig.get_name                    s:n     Returns the rig name previously set via rig.set_name
+rig.set_frequency               d:d     Sets the RF carrier frequency. Returns the old value.
+rig.set_smeter                  n:i     Sets the smeter returns null.
+rig.set_pwrmeter                n:i     Sets the power meter returns null.
+rig.set_modes                   n:A     Sets the list of available rig modes
+rig.set_mode                    n:s     Selects a mode previously added by rig.set_modes
+rig.get_modes                   A:n     Returns the list of available rig modes
+rig.get_mode                    s:n     Returns the name of the current transceiver mode
+rig.set_bandwidths              n:A     Sets the list of available rig bandwidths
+rig.set_bandwidth               n:s     Selects a bandwidth previously added by rig.set_bandwidths
+rig.get_frequency               d:n     Returns the RF carrier frequency.
+rig.get_bandwidth               s:n     Returns the name of the current transceiver bandwidth
+rig.get_bandwidths              A:n     Returns the list of available rig bandwidths
+rig.get_notch                   s:n     Reports a notch filter frequency based on WF action
+rig.set_notch                   n:i     Sets the notch filter position on WF
+rig.enable_qsy                  n:i     Enable/disable (1/0) QSY for xmlrpc transceiver control
+log.get_frequency               s:n     Returns the Frequency field contents.
+log.get_time_on                 s:n     Returns the Time-On field contents.
+log.get_time_off                s:n     Returns the Time-Off field contents.
+log.get_date_on                 s:n     Returns the date associated with time_on field contents.
+log.get_date_off                s:n     Returns the date associated with time_off field contents.
+log.get_call                    s:n     Returns the Call field contents.
+log.get_name                    s:n     Returns the Name field contents.
+log.get_rst_in                  s:n     Returns the RST(r) field contents.
+log.get_rst_out                 s:n     Returns the RST(s) field contents.
+log.set_rst_in                  n:s     Sets the RST(r) field contents.
+log.set_rst_out                 n:s     Sets the RST(s) field contents.
+log.get_serial_number           s:n     Returns the serial number field contents.
+log.set_serial_number           n:s     Sets the serial number field contents.
+log.get_serial_number_sent      s:n     Returns the serial number (sent) field contents.
+log.get_exchange                s:n     Returns the contest exchange field contents.
+log.set_exchange                n:s     Sets the contest exchange field contents.
+log.get_state                   s:n     Returns the State field contents.
+log.get_province                s:n     Returns the Province field contents.
+log.get_country                 s:n     Returns the Country field contents.
+log.get_qth                     s:n     Returns the QTH field contents.
+log.get_band                    s:n     Returns the current band name.
+log.get_sideband                s:n     [DEPRECATED; use main.get_wf_sideband]
+log.get_notes                   s:n     Returns the Notes field contents.
+log.get_locator                 s:n     Returns the Locator field contents.
+log.get_az                      s:n     Returns the AZ field contents.
+log.clear                       n:n     Clears the contents of the log fields.
+log.set_call                    n:s     Sets the Call field contents.
+log.set_name                    n:s     Sets the Name field contents.
+log.set_qth                     n:s     Sets the QTH field contents.
+log.set_locator                 n:s     Sets the Locator field contents.
+log.set_rst_in                  n:s     Sets the RST(r) field contents.
+log.set_rst_out                 n:s     Sets the RST(s) field contents.
+logbook.last_record             s:n     Returns the ADIF record of the last logbook record.
+logbook.all_records             s:n     Returns the entire ADIF logbook currently opened.
+main.flmsg_online               n:n     flmsg online indication
+main.flmsg_available            n:n     flmsg data available
+main.flmsg_transfer             n:n     data transfer to flmsg
+main.flmsg_squelch              b:n     Returns the squelch state.
+flmsg.online                    n:n     flmsg online indication
+flmsg.available                 n:n     flmsg data available
+flmsg.transfer                  n:n     data transfer to flmsg
+flmsg.squelch                   b:n     Returns the squelch state.
+flmsg.get_data                  6:n     Returns all RX data received since last query.
+io.in_use                       s:n     Returns the IO port in use (ARQ/KISS).
+io.enable_kiss                  n:n     Switch to KISS I/O
+io.enable_arq                   n:n     Switch to ARQ I/O
+text.get_rx_length              i:n     Returns the number of characters in the RX widget.
+text.get_rx                     6:ii    Returns a range of characters (start, length) from the RX text widget.
+text.clear_rx                   n:n     Clears the RX text widget.
+text.add_tx                     n:s     Adds a string to the TX text widget.
+text.add_tx_queu                n:s     Adds a string to the TX transmit queu.
+text.add_tx_bytes               n:6     Adds a byte string to the TX text widget.
+text.clear_tx                   n:n     Clears the TX text widget.
+rxtx.get_data                   6:n     Returns all RXTX combined data since last query.
+rx.get_data                     6:n     Returns all RX data received since last query.
+tx.get_data                     6:n     Returns all TX data transmitted since last query.
+spot.get_auto                   b:n     Returns the autospotter state.
+spot.set_auto                   b:b     Sets the autospotter state. Returns the old state.
+spot.toggle_auto                b:n     Toggles the autospotter state. Returns the new state.
+spot.pskrep.get_count           i:n     Returns the number of callsigns spotted in the current session.
+wefax.state_string              s:n     Returns Wefax engine state (tx and rx) for information.
+wefax.skip_apt                  s:n     Skip APT during Wefax reception
+wefax.skip_phasing              s:n     Skip phasing during Wefax reception
+wefax.set_tx_abort_flag         s:n     Cancels Wefax image transmission
+wefax.end_reception             s:n     End Wefax image reception
+wefax.start_manual_reception    s:n     Starts fax image reception in manual mode
+wefax.set_adif_log              s:b     Set/reset logging to received/transmit images to ADIF log file
+wefax.set_max_lines             s:i     Set maximum lines for fax image reception
+wefax.get_received_file         s:i     Waits for next received fax file, returns its name with a delay. Empty string if timeout.
+wefax.send_file                 s:si    Send file. returns an empty string if OK otherwise an error message.
+navtex.get_message              s:i     Returns next Navtex/SitorB message with a max delay in seconds.. Empty string if timeout.
+navtex.send_message             s:s     Send a Navtex/SitorB message. Returns an empty string if OK otherwise an error message.
+
 }
diff --git a/src/feQSLUpload.pas b/src/feQSLUpload.pas
index 724ea4d..85cdc70 100644
--- a/src/feQSLUpload.pas
+++ b/src/feQSLUpload.pas
@@ -69,9 +69,12 @@ end;
 
 function TfrmeQSLUpload.ExportData(const FileName : String) : Boolean;
 var
-  nr  : integer = 0;
-  tmp : String = '';
-  f   : TextFile;
+  nr         : integer = 0;
+  tmp        : String = '';
+  ModeOut,
+  SubmodeOut : String;
+  f          : TextFile;
+
 begin
   QSOCount := 0;
   Result := True;
@@ -104,6 +107,7 @@ begin
   AssignFile(f,FileName);
   try try
     Rewrite(f);
+    Writeln(f);
     Writeln(f, 'ADIF export from CQRLOG for Linux version '+dmData.VersionString);
     Writeln(f, 'Copyright (C) ',YearOf(now),' by Petr, OK2CQR and Martin, OK1RR');
     Writeln(f);
@@ -132,34 +136,14 @@ begin
       tmp := dmUtils.StringToADIF('<CALL' ,dmUtils.RemoveSpaces(dmData.Q.FieldByName('callsign').AsString));
       Writeln(f,tmp);
 
-      case dmData.Q.FieldByName('mode').AsString of
-      'JS8'   : begin
-                  tmp := '<MODE:4>MFSK';
-                  Writeln(f,tmp);
-                  tmp := '<SUBMODE:3>JS8';
-                  Writeln(f,tmp);
-                end;
-      'FT4'   : begin
-                  tmp := '<MODE:4>MFSK';
-                  Writeln(f,tmp);
-                  tmp := '<SUBMODE:3>FT4';
-                  Writeln(f,tmp);
-                end;
-      'FST4'  : begin
-                  tmp := '<MODE:4>MFSK';
-                  Writeln(f,tmp);
-                  tmp := '<SUBMODE:4>FST4';
-                  Writeln(f,tmp);
-                end;
-      'PACKET': begin
-                  tmp := '<MODE:3>PKT';
-                  Writeln(f,tmp);
-                end;
-      else      begin
-                  tmp := dmUtils.StringToADIF('<MODE',dmData.Q.FieldByName('mode').AsString);
-                  Writeln(f,tmp);
-                end;
-      end;
+      dmUtils.ModeFromCqr(dmData.Q.FieldByName('mode').AsString,ModeOut,SubmodeOut,dmData.DebugLevel >= 1);
+      tmp := dmUtils.StringToADIF('<MODE',ModeOut);
+      Writeln(f,tmp);
+      if SubmodeOut<>'' then
+                       Begin
+                         tmp := dmUtils.StringToADIF('<SUBMODE',SubmodeOut);
+                         Writeln(f,tmp);
+                       end;
 
       tmp := dmUtils.StringToADIF('<BAND' ,dmData.Q.FieldByName('band').AsString);
       Writeln(f,tmp);
diff --git a/src/gline2.pas b/src/gline2.pas
index e9e7c79..9e6f420 100644
--- a/src/gline2.pas
+++ b/src/gline2.pas
@@ -38,30 +38,39 @@ type
 
 const body_popis_max=30;
 type Tcarobod=record
-       typ:byte; // 0 - nic;1 cara, 2 bod ctverecek , 3 bod krizek
+       typ:byte; // 0 - nothing, 1 square, 2 square points, 3 cross points
        x1,y1,x2,y2:extended;
-       popis:string[body_popis_max];
-       barva:Tcolor;
-       vel_bodu:longint;
+       popis:string[body_popis_max];    //bodu_popis = points_list
+       barva:Tcolor;                    //barva = color
+       vel_bodu:longint;                //vel_bodu ??  bodu = point
      end;
 const body_max=128;
+
+type TGC_point=record
+       La1,Lo1,La2,Lo2 : double;
+     end;
 var star_time_u:extended;
 
 type
   Tgrayline=object
+      const GC_Points_Max = 500;
       constructor init(naz_sou:string);
       destructor done;
       procedure VypocitejSunClock(cas:Tdatetime);
-      procedure kresli(r:Trect;can:Tcanvas); {vykresli v pozadovanych rozmerech}
-      procedure kresli1(x1,y1:longint;can:Tcanvas); {vykresli 1:1, zadavan je "jen" levy horni roh}
+      procedure kresli(r:Trect;can:Tcanvas); {kresli = line  draw in the required dimensions }
+      procedure kresli1(x1,y1:longint;can:Tcanvas); {draw 1: 1, the input is "only" the upper left corner}
       
       procedure jachcucaru(en:boolean;x1,y1,x2,y2:extended);
 
       procedure body_add(typ:byte;x1,y1,x2,y2:extended;popis:string;barva:tcolor;vel_bodu:longint);
       procedure body_smaz;
 
+      procedure GC_line_part(x1,y1,x2,y2:double);   //add ShortPath point
+      procedure GC_Lline_part(x1,y1,x2,y2:double);  //add LongPath point
+      procedure GC_line_clear(what:integer=-1);      //clear S&LPath points
+
     private
-      nrd:boolean; // potrebuje prekreslit (probehl novy vypocet)
+      nrd:boolean; //needs to redraw (a new calculation has been made)
 
       chcipni:boolean;
       ziju:boolean;
@@ -76,13 +85,19 @@ type
       carax1,carax2,caray1,caray2:extended;
       caraen:boolean;
       
-      obrp:TLazIntfImage; // predloha... 1-z disku
-      obrA,obrT:TLazIntfImage;   // obra -  zde vse kreslit
+      obrp:TLazIntfImage; //  template ... 1-of-disk template ... 1-of-disk
+      obrA,obrT:TLazIntfImage;   //picture - draw everything here
 
       obmap: TBitmap;
       body:array[0..body_max] of Tcarobod;
       body_poc:longint;
 
+      GC_point:array[0..GC_points_Max] of TGC_point;  //ShortPath array
+      GCpointer:longint;
+      GC_Lpoint:array[0..GC_points_Max] of TGC_point; //LongPath array
+      GCLpointer:longint;
+      LP        : boolean;  //set LongPath color;
+
       function calc_horizontalx(var coord:t_coord; date:TDateTime; z:longint;latitude: extended):longint;
   end;
   Pgrayline=^Tgrayline;
@@ -507,6 +522,8 @@ var e,z:longint;
    end;
 
   body_poc:=0;
+  GCpointer:=0;
+  GCLpointer:=0;
 
   poslednicas:=now-1000000;
   nrd:=false;
@@ -681,7 +698,7 @@ begin
 end;
 
 
-procedure Tgrayline.kresli(r:Trect;can:Tcanvas);
+procedure Tgrayline.kresli(r:Trect;can:Tcanvas);      //kresli =draw
 var z,x,c:longint;
     ze,zez,ze2,zez2,ze2s,zez2s:extended;
     
@@ -689,19 +706,23 @@ var
 
     xptr:^byte;
 
-
+//-----------------------------------------------------------
     procedure cmarniu(x1,y1,x2,y2:longint);
       begin
             can.pen.color:=clblack;
             can.pen.Width:=5;
             can.moveto(x1,y1);
             can.lineto(x2,y2);
-            can.pen.color:=clyellow;
+            If LP then
+                   can.pen.color:=clFuchsia
+                  else
+                   can.pen.color:=clyellow;
             can.pen.Width:=2;
             can.moveto(x1,y1);
             can.lineto(x2,y2);
       end;
-    
+
+//-----------------------------------------------------------
     procedure cmarni(x1,y1,x2,y2:extended;roh:boolean);
     var dx,dy,ax,ay:extended;
       begin
@@ -726,6 +747,7 @@ var
           end;
       end;
 
+//-----------------------------------------------------------
     procedure bod_cmarniu(x1,y1,x2,y2:longint;b:Tcarobod);
     var vb:longint;
       begin
@@ -775,8 +797,7 @@ var
         end;
       end;
 
-
-
+//-----------------------------------------------------------
     procedure bod_cmarni(b:Tcarobod);
     var dx,dy,ax,ay:extended;
       begin
@@ -790,20 +811,20 @@ var
                     round(ax+round(b.x2*dx/360)),round(ay+round(b.y2*dy/180)),b);
       end;
 
+//-----------------------------------------------------------
 
-  begin
+begin
   if chcipni then exit;
 
   if ((r.left-r.right<>rold.left-rold.right) or (r.top-r.bottom<>rold.top-rold.bottom))
      and (r.right-r.left+1>obsi) then nrd:=true;
 
-    if nrd then
+  if nrd then
     begin
 
        obrA.CopyPixels(obrP);
-
-       //ze2:=0.79;   //zad�n� jak bude tmav� obr�zek - R a G
-       //zez2:=0.90;   //zad�n� jak bude tmav� obr�zek - modry kanal
+       //ze2:=0.79;   // specify how the dark image will be - R and G
+       //zez2:=0.90;   // specify how the dark image will be - blue channel
 
        ze2  := 1.7;
        zez2 := 1.0;
@@ -850,31 +871,44 @@ var
      obmap.LoadFromIntfImage(obrT);
 
    end;
-//        r.right:=r.left;
-        if r.left=r.right then
-          begin
-            r.Right:=r.left+obsi-1;
-            r.bottom:=r.top+obvy-1;
-            Can.Draw(r.left,r.top,obmap);
-          end
-          else
-            Can.StretchDraw(r,obmap);
 
-            if caraen then
-              begin
-                cmarni(carax1,caray1,carax2,caray2,true);
-//                can.Font.Color:=clyellow;
-//                can.TextOut(10,10,inttostr(round(carax1))+':'+inttostr(round(caray1)));
-//                can.TextOut(10,20,inttostr(round(carax2))+':'+inttostr(round(caray2)));
-              end;
-            for z:=0 to body_poc-1 do
-              begin
-                 bod_cmarni(body[z]);
-              end;
+//r.right:=r.left;
+  if r.left=r.right then
+    begin
+      r.Right:=r.left+obsi-1;
+      r.bottom:=r.top+obvy-1;
+      Can.Draw(r.left,r.top,obmap);
+    end
+    else
+      Can.StretchDraw(r,obmap);
+
+  if caraen then
+    begin
+      cmarni(carax1,caray1,carax2,caray2,true);
+//    can.Font.Color:=clBlack;
+//    can.TextOut(10,10,' '+inttostr(round(carax1))+':'+inttostr(round(caray1))+' ');
+//    can.TextOut(10,30,' '+inttostr(round(carax2))+':'+inttostr(round(caray2))+' ');
+    end;
+
+ if GCpointer+GCLpointer > 0 then //same as OR
+    begin
+     LP:=True; //LongPath color plotting
+      for z:=0 to GCLpointer-1 do
+          cmarni(GC_Lpoint[z].La1, GC_Lpoint[z].Lo1, GC_Lpoint[z].La2, GC_Lpoint[z].Lo2, false);
+      LP:=False; //ShortPath color plotting
+      for z:=0 to GCpointer-1 do
+          cmarni(GC_point[z].La1, GC_point[z].Lo1, GC_point[z].La2, GC_point[z].Lo2, false);
+     end;
+
+
+  for z:=0 to body_poc-1 do
+    begin
+       bod_cmarni(body[z]);
+    end;
     nrd:=false;
-  end;
+end;
 
-procedure Tgrayline.kresli1(x1,y1:longint;can:Tcanvas);
+procedure Tgrayline.kresli1(x1,y1:longint;can:Tcanvas);   //kresli =draw
 var r:Trect;
   begin
   if chcipni then exit;
@@ -885,10 +919,10 @@ var r:Trect;
     kresli(r,can);
   end;
 
-procedure Tgrayline.jachcucaru(en:boolean;x1,y1,x2,y2:extended);
+procedure Tgrayline.jachcucaru(en:boolean;x1,y1,x2,y2:extended);     //jachcucaru = ?????
   begin
-  if chcipni then exit;
-    caraen:=en;
+  if chcipni then exit;    //chcipni = "die"
+    caraen:=en;           //cara = "line"
     if  (abs(y1)>90) or (abs(y2)>90) then
       begin
         caraen:=false;exit;
@@ -931,9 +965,49 @@ procedure Tgrayline.body_add(typ:byte;x1,y1,x2,y2:extended;popis:string;barva:tc
       end;
   end;
 
-procedure Tgrayline.body_smaz;
+procedure Tgrayline.body_smaz;   //smaz = delete
   begin
     body_poc:=0;
   end;
 
+procedure Tgrayline.GC_line_part(x1,y1,x2,y2:double);
+
+Begin
+    if chcipni then exit;    //chcipni = "die"
+    if GCpointer < GC_Points_max then
+     begin
+      GC_point[GCpointer].La1:=x1;
+      GC_point[GCpointer].Lo1:=y1;
+      GC_point[GCpointer].La2:=x2;
+      GC_point[GCpointer].Lo2:=y2;
+      inc(GCpointer);
+     end;
+end;
+procedure Tgrayline.GC_Lline_part(x1,y1,x2,y2:double);
+
+Begin
+    if chcipni then exit;    //chcipni = "die"
+    if GCLpointer < GC_Points_max then
+     begin
+      GC_Lpoint[GCLpointer].La1:=x1;
+      GC_Lpoint[GCLpointer].Lo1:=y1;
+      GC_Lpoint[GCLpointer].La2:=x2;
+      GC_Lpoint[GCLpointer].Lo2:=y2;
+      inc(GCLpointer);
+     end;
+end;
+
+procedure Tgrayline.GC_line_clear(what:integer=-1);
+
+begin
+  case what of
+       -1: Begin
+            GCpointer:=0;
+            GCLpointer:=0;
+          end;
+       0: GCpointer:=0;
+       1: GCLpointer:=0;
+  end;
+end;
+
 end.
diff --git a/src/synapse/httpsend.pas b/src/synapse/httpsend.pas
index 3bfc423..fc7b80c 100644
--- a/src/synapse/httpsend.pas
+++ b/src/synapse/httpsend.pas
@@ -197,7 +197,7 @@ type
     property ProxyPass: string read FProxyPass Write FProxyPass;
 
     {:Here you can specify custom User-Agent identification.
-     Default: 'Mozilla/4.0 (compatible; Synapse)'}
+     Default: 'Mozilla/4.0 (X11; Linux x86_64)'}
     property UserAgent: string read FUserAgent Write FUserAgent;
 
     {:Operation result code after successful @link(HTTPMethod) method.}
@@ -291,7 +291,7 @@ begin
   FProtocol := '1.0';
   FKeepAlive := True;
   FStatus100 := False;
-  FUserAgent := 'Mozilla/4.0 (compatible; Synapse)';
+  FUserAgent := 'Mozilla/4.0 (X11; Linux x86_64)';
   FDownloadSize := 0;
   FUploadSize := 0;
   FAddPortNumberToHost := true;
diff --git a/src/uADIFhash.pas b/src/uADIFhash.pas
index 447b790..dee2e7a 100644
--- a/src/uADIFhash.pas
+++ b/src/uADIFhash.pas
@@ -36,7 +36,7 @@ const h_SRX = 6056;
 const h_SRX_STRING = 59227;
 const h_STX = 6072;
 const h_STX_STRING = 61787;
-const h_CONTEST_ID = 33914;
+const h_CONTEST_ID = 33914;
 const h_DARC_DOK = 63762;
 const h_TIME_OFF = 39033;
 const h_TIME_ON = 62223;
@@ -56,3 +56,71 @@ const h_SAT_NAME = 39545;
 const h_FREQ_RX = 2926;
 const h_OP = 16130;
 
+//max length                               database lenght
+const l_BAND = 6;//10;                     // band             varchar(6)        FIXED if longer than database
+const l_CALL = 20;//30;                     // callsign         varchar(20)
+const l_CNTY = 30;//50;                     // county           varchar(30)
+const l_COMMENT = 200;//250;                 // remarks          varchar(200)
+const l_CONT = 2;                      // cont             varchar(3)
+const l_DXCC = 16;                     // qso_dxcc         int(11)
+const l_EQSL_QSLRDATE = 10;            // eqsl_qslrdate    date
+const l_EQSL_QSLSDATE = 10;            // eqsl_qslsdate    date
+const l_EQSL_QSL_RCVD = 1;//2;             // eqsl_qsl_rcvd    varchar(1)
+const l_EQSL_QSL_SENT = 1;//2;             // eqsl_qsl_sent    varchar(1)
+const l_FREQ = 12;                     // freq             decimal(10,4)
+const l_GRIDSQUARE = 6;                // loc              varchar(10)
+const l_IOTA = 6;                      // iota             varchar(6)
+const l_ITUZ = 2;                      // itu              int(11)
+const l_LOTW_QSLRDATE = 10;            // lotw_qslrdate    date
+const l_LOTW_QSLSDATE = 10;            // lotw_qslsdate    date
+const l_LOTW_QSL_RCVD = 2;             // lotw_qslr        varchar(3)
+const l_LOTW_QSL_SENT = 2;             // lotw_qsls        varchar(3)
+const l_MODE = 12;                     // mode             varchar(12)
+const l_SUBMODE = 12;                  // submode          this is never stored, no database column. Just for cqrmode conversion
+const l_MY_GRIDSQUARE = 6;             // my_loc           varchar(10)
+const l_NAME = 40;//50;                     // name             varchar(40)
+const l_NOTES = 250;                   // notes.longremarks  varchar(256)
+const l_PFX = 16;
+const l_QSLMSG = 250;
+const l_QSLRDATE = 10;                // qslr_date        varchar(10)
+const l_QSLSDATE = 10;                // qsls_date        varchar(10)
+const l_QSL_RCVD = 3;//5;                 // qsl_r            varchar(3)
+const l_QSL_SENT = 4;//5;                 // qsl_s            varchar(4)
+const l_QSL_VIA = 30;//20;                 // qsl_via          varchar(30)    FIXED if shorter than database
+const l_QSO_DATE = 10;                // qsodate          date
+const l_QTH = 60;//250;                    // qth              varchar(60)
+const l_RST_RCVD = 20;//6;                 // rst_r            varchar(20)    FIXED if shorter than database
+const l_RST_SENT = 20;//6;                 // rst_s            varchar(20)    FIXED if shorter than database
+const l_SRX = 6;                      // srx              varchar(6)
+const l_SRX_STRING = 50;//250;             // srx_string       varchar(50)
+const l_STX = 6;                      // stx              varchar(6)
+const l_STX_STRING = 50;//250;             // stx_string       varchar(50)
+const l_CONTEST_ID = 40;//250;             // contestname      varchar(40)
+const l_DARC_DOK = 12;                // dok              varchar(12)
+const l_TIME_OFF = 5;                 // time_off         varchar(5)
+const l_TIME_ON = 5;                  // time_on          varchar(5)
+const l_TX_PWR = 10;// 5;                   // pwr              varchar(10)   FIXED if shorter than database
+const l_EOH = 250;
+const l_EOR = 250;
+const l_APP_CQRLOG_QSLS = 4;
+const l_APP_CQRLOG_QSLR = 4;
+const l_APP_CQRLOG_PROFILE = 250;
+const l_APP_CQRLOG_COUNTY = 250;
+const l_APP_CQRLOG_DXCC = 16;
+const l_CQZ = 3;                      // waz              int(11)
+const l_STATE = 4;//3;                    // state            varchar(4)
+const l_AWARD = 50;//250;                  // award            varchar(50)
+const l_POWER = 10;                   // pwr              varchar(10)
+const l_PROP_MODE = 30;               // prop_mode        varchar(30)
+const l_SAT_NAME = 30;                // satellite        varchar(30)
+const l_FREQ_RX = 30;                 // rxfreq           decimal(10,4)
+const l_OP = 20;//30;                      // operator         varchar(20)
+
+                                      // adif             int(11)
+                                      // profile          int(11)
+                                      // idcall           varchar(20)
+                                      // club_nr1         varchar(100)
+                                      // club_nr2         varchar(100)
+                                      // club_nr3         varchar(100)
+                                      // club_nr4         varchar(100)
+                                      // club_nr5         varchar(100)
diff --git a/src/uCWKeying.pas b/src/uCWKeying.pas
index 757c550..55919c4 100644
--- a/src/uCWKeying.pas
+++ b/src/uCWKeying.pas
@@ -119,6 +119,9 @@ type
 
   TCWHamLib = class(TCWDevice)
     private
+      ParamChkVfo: boolean;
+      WaitChkVfo: integer;
+      VfoStr : String;
       AllowCW : Boolean;
       fActive : Boolean;
       fSpeed  : Word;
@@ -699,8 +702,36 @@ begin
   if DebugMode then
      Writeln('CWint connected to hamlib');
 
-  tcp.SendMessage('fmv'+LineEnding);
-  SetSpeed(fSpeed)
+  VfoStr := '';
+  ParamChkVfo :=false;
+  WaitChkVfo:=5; // wait max 5 rcvd blocks
+  tcp.SendMessage('+\chk_vfo'+LineEnding);
+  if DebugMode then
+     Writeln('CW send +\chk_vfo');
+end;
+
+procedure TCWHamLib.OnReceived(aSocket: TLSocket);
+begin
+  if aSocket.GetMessage(Rmsg) > 0 then
+   begin
+     Rmsg := StringReplace(Rmsg,LineEnding,' ',[rfReplaceAll]);
+     if (( not ParamChkVfo ) and (WaitChkVfo>0))then
+       Begin
+         dec(WaitChkVfo);
+         if (pos('CHKVFO',Uppercase(Rmsg))>0) then
+         Begin
+           if (pos('1',Rmsg)>0) then
+                                  VfoStr:=' currVFO';
+           if DebugMode then
+               Writeln('CW commands need parameter: ',VfoStr);
+           WaitChkVfo:=0;
+           SetSpeed(fSpeed);
+         end;
+        ParamChkVfo:= WaitChkVfo < 1;
+       end;
+     if DebugMode then
+         Writeln('HLresp MSG:',Rmsg,':');
+   end;
 end;
 
 procedure TCWHamLib.OnHamLibError(const msg: AnsiString; aSocket: TLSocket);
@@ -725,28 +756,24 @@ begin
   tcp.Connect(fDevice,StrToInt(fPort));
 end;
 
-procedure TCWHamLib.OnReceived(aSocket: TLSocket);
-begin
-  if aSocket.GetMessage(Rmsg) > 0 then
-   begin
-    Rmsg := StringReplace(Rmsg,LineEnding,' ',[rfReplaceAll]);
-    if DebugMode then Writeln('HLresp MSG:',Rmsg,':');
-   end;
-end;
 procedure TCWHamLib.WaitMorse;
 begin
-  tcp.SendMessage('\wait_morse' +LineEnding);
+  tcp.SendMessage('\wait_morse'+VfoStr+LineEnding);
+  if DebugMode then
+         Writeln('CW: \wait_morse');
 end;
 
 procedure TCWHamLib.SetSpeed(speed : Word);
+var      tmp:String;
 begin
   if Speed>fMaxSpeed then speed:= fMaxSpeed;
   if Speed<fMinSpeed then speed:= fMinSpeed;
   fSpeed := speed;
+  tmp:= 'L'+VfoStr+' KEYSPD '+IntToStr(speed)+LineEnding;
   if fActive then
-    tcp.SendMessage('L KEYSPD '+IntToStr(speed)+LineEnding);
+    tcp.SendMessage(tmp);
   if fDebugMode then
-    Writeln('CW speed changed to:',fSpeed)
+    Writeln('CW speed changed to:',fSpeed,'  ',tmp)
 end;
 
 function TCWHamLib.GetSpeed  : Word;
@@ -810,7 +837,8 @@ var
 
                         while ((rpt > 0) and AllowCW) do
                           Begin
-                             if fDebugMode then  Writeln('HLsend MSG:','b'+t+':');
+                             if fDebugMode then
+                               Writeln('HLsend MSG:','b'+t+':');
                              Rmsg:='';
                              tcp.SendMessage('b'+t+LineEnding);
                              dec(rpt);
diff --git a/src/uRigControl.pas b/src/uRigControl.pas
index f687416..1228c81 100644
--- a/src/uRigControl.pas
+++ b/src/uRigControl.pas
@@ -39,6 +39,7 @@ type TRigControl = class
     fVFO         : TVFO;
     RigCommand   : TStringList;
     fRigSendCWR  : Boolean;
+    fRigChkVfo : Boolean;
     BadRcvd      : Integer;
     fRXOffset    : Double;
     fTXOffset    : Double;
@@ -49,8 +50,12 @@ type TRigControl = class
 
     procedure OnReceivedRcvdFreqMode(aSocket: TLSocket);
     procedure OnRigPollTimer(Sender: TObject);
-  public
 
+public
+
+    ParmVfoChkd : Boolean;
+    ParmHasVfo  : integer;
+    VfoStr      : String;
 
     constructor Create;
     destructor  Destroy; override;
@@ -77,6 +82,8 @@ type TRigControl = class
     //poll rate in milliseconds
     property RigSendCWR  : Boolean read fRigSendCWR    write fRigSendCWR;
     //send CWR instead of CW
+     property RigChkVfo  : Boolean read fRigChkVfo    write fRigChkVfo;
+    //test if rigctld "--vfo" start parameter is used
     property LastError   : String  read fLastError;
     //last error during operation
 
@@ -104,8 +111,10 @@ type TRigControl = class
     procedure SetModePass(mode : TRigMode);
     procedure SetFreqKHz(freq : Double);
     procedure SetSplit(up:integer);
-    procedure DisableSplit;
+    procedure DisableSplit;  //this is disable XIT
+    procedure ClearXit;
     procedure ClearRit;
+    procedure DisableRit;
     procedure Restart;
     procedure PwrOn;
     procedure PwrOff;
@@ -130,6 +139,7 @@ begin
   rigProcess   := TProcess.Create(nil);
   tmrRigPoll   := TTimer.Create(nil);
   tmrRigPoll.Enabled := False;
+  VfoStr       := ''; //defaults to non-"--vfo" (legacy) mode
   if DebugMode then Writeln('All objects created');
   tmrRigPoll.OnTimer     := @OnRigPollTimer;
   BadRcvd := 0;
@@ -176,7 +186,6 @@ begin
       exit
     end
   end;
-
   Result := True
 end;
 
@@ -197,15 +206,19 @@ begin
     Writeln('RigCtldHost:',RigCtldHost);
     Writeln('RigPoll:    ',RigPoll);
     Writeln('RigSendCWR: ',RigSendCWR);
+    Writeln('RigChkVfo   ',RigChkVfo);
     Writeln('RigId:      ',RigId);
     Writeln('')
   end;
 
+  { Hamlib Dummy rig allowed helps testing and maybe some operations without CAT rig
+
   if (RigId = 1) then
   begin
     Result := False;
     exit
   end;
+  }
 
   if fRunRigCtld then
   begin
@@ -228,8 +241,11 @@ begin
   begin
     if fDebugMode then Writeln('Connected to rigctld @ ',fRigCtldHost,':',fRigCtldPort);
     result := True;
+    ParmVfoChkd:= not(RigChkVfo); //default: check of "--vfo" not done is false, assigned by preferences not(RigVfoChk)
+    ParmHasVfo:=0;   //default: "--vfo" is not used as start parameter
     tmrRigPoll.Interval := fRigPoll;
-    tmrRigPoll.Enabled  := True
+    tmrRigPoll.Enabled  := True;
+    RigCommand.Clear;
   end
   else begin
     if fDebugMode then Writeln('NOT connected to rigctld @ ',fRigCtldHost,':',fRigCtldPort);
@@ -241,8 +257,12 @@ end;
 procedure TRigControl.SetCurrVFO(vfo : TVFO);
 begin
   case vfo of
-    VFOA : RigCommand.Add('V VFOA');//sendCommand.SendMessage('V VFOA'+LineEnding);
-    VFOB : RigCommand.Add('V VFOB')//sendCommand.SendMessage('V VFOB'+LineEnding);
+    VFOA : Begin
+                RigCommand.Add('V VFOA');//sendCommand.SendMessage('V VFOA'+LineEnding);
+           end;
+    VFOB : Begin
+                RigCommand.Add('V VFOB');//sendCommand.SendMessage('V VFOB'+LineEnding);
+           end;
   end //case
 end;
 
@@ -250,33 +270,41 @@ procedure TRigControl.SetModePass(mode : TRigMode);
 begin
   if (mode.mode='CW') and fRigSendCWR then
     mode.mode := 'CWR';
-  RigCommand.Add('M '+mode.mode+' '+IntToStr(mode.pass))
+  RigCommand.Add('+M'+VfoStr+' '+mode.mode+' '+IntToStr(mode.pass))
 end;
 
 procedure TRigControl.SetFreqKHz(freq : Double);
 begin
-  RigCommand.Add('F '+FloatToStr(freq*1000-TXOffset*1000000))
+  RigCommand.Add('+F'+VfoStr+' '+FloatToStr(freq*1000-TXOffset*1000000))
 end;
 procedure TRigControl.ClearRit;
 begin
-  RigCommand.Add('J 0')
+  RigCommand.Add('+J'+VfoStr+' 0')
+end;
+procedure TRigControl.DisableRit;
+Begin
+  RigCommand.Add('+U'+VfoStr+' RIT 0');
 end;
 procedure TRigControl.SetSplit(up:integer);
 Begin
-  RigCommand.Add('Z '+IntToStr(up));
-  RigCommand.Add('U XIT 1');
+  RigCommand.Add('+Z'+VfoStr+' '+IntToStr(up));
+  RigCommand.Add('+U'+VfoStr+' XIT 1');
+end;
+procedure TRigControl.ClearXit;
+begin
+  RigCommand.Add('+Z'+VfoStr+' 0')
 end;
 procedure TRigControl.DisableSplit;
 Begin
-  RigCommand.Add('U XIT 0');
+  RigCommand.Add('+U'+VfoStr+' XIT 0');
 end;
 procedure TRigControl.PttOn;
 begin
-  RigCommand.Add('T 1')
+  RigCommand.Add('+T'+VfoStr+' 1')
 end;
 procedure TRigControl.PttOff;
 begin
-  RigCommand.Add('T 0')
+  RigCommand.Add('+T'+VfoStr+' 0')
 end;
 procedure TRigControl.PwrOn;
 begin
@@ -406,175 +434,123 @@ end;
 procedure TRigControl.OnReceivedRcvdFreqMode(aSocket: TLSocket);
 var
   msg : String;
-  a   : TExplodeArray;
+  a,b : TExplodeArray;
   i   : Integer;
   f   : Double;
 begin
   if aSocket.GetMessage(msg) > 0 then
   begin
     //Writeln('Whole MSG:|',msg,'|');
-    msg := trim(msg);
+    msg := upcase(trim(msg));        //note the char case!
+
+    if DebugMode then
+         Writeln('Msg from rig: ',msg);
 
-    if DebugMode then Writeln('Msg from rig: ',msg);
+    if not ParmVfoChkd then
+     Begin
+        ParmVfoChkd:=true;
+        if  (msg[1]='1') then ParmHasVfo := 1;  //Hamlib 4.3
+        if (pos('CHKVFO 1',msg)>0) then ParmHasVfo := 2;  //Hamlib 3.3
+        if DebugMode then Writeln('"--vfo" checked:',ParmHasVfo);
+        if ParmHasVfo > 0 then VfoStr:=' currVFO';  //note set leading one space to string!
+     end;
 
     a := Explode(LineEnding,msg);
-    for i:=0 to Length(a)-1 do
+    for i:=0 to Length(a)-1 do     //this handles received message line by line
     begin
       //Writeln('a[i]:',a[i]);
       if a[i]='' then Continue;
 
-      if TryStrToFloat(a[i],f) then
-      begin
-        if f>20000 then
-          fFReq := f
-        else
-          fMode.pass := round(f);
-        Continue
-      end;
+      //we send all commands with '+' prefix that makes receiving sort lot easier
+      b:= Explode(' ', a[i]);
 
-      //if (a[i][1] in ['A'..'Z']) and (a[i][1] <> 'V' ) then //receiving mode info
-      //FT-920 returned VFO as MEM
-      if (a[i][1] in ['A'..'Z']) and (a[i][1] <> 'V' ) and (a[i]<>'MEM') then//receiving mode info
-      begin
-        if Pos('RPRT',a[i]) = 0 then
-        begin
-          BadRcvd := 0;
-          fMode.mode := a[i];
-          fMode.raw  := a[i];
-          if (fMode.mode = 'USB') or (fMode.mode = 'LSB') then
-            fMode.mode := 'SSB';
-          if fMode.mode = 'CWR' then
-            fMode.mode := 'CW'
-        end
-        else begin
-          if BadRcvd>2 then
-          begin
-            fFreq := 0;
-            fVFO := VFOA;
-            fMode.mode := 'SSB';
-            fMode.raw  := 'SSB';
-            fMode.pass := 2700
-          end
+      if b[0]='FREQUENCY:' then
+       Begin
+         if TryStrToFloat(b[1],f) then
+           Begin
+             fFReq := f;
+             BadRcvd := 0;
+           end
           else
-            inc(BadRcvd)
-        end
-      end;
-      if (a[i][1] = 'V') then
-      begin
-        if Pos('VFOB',msg) > 0 then
-          fVFO := VFOB
-        else
-          fVFO := VFOA
-      end
-    end;
-    {
-
-    if (Length(a)<4) then
-    begin
-      for i:=0 to Length(a)-1 do
-        Writeln('a[',i,']:',a[i]);
-      if (msg[1] = 'V') then
-      begin
-        if Pos('VFOB',msg) > 0 then
-          fVFO := VFOB
-        else
-          fVFO := VFOA
-      end;
+           fFReq := 0;
+       end;
+
+      if b[0]='MODE:' then
+       Begin
+         fMode.raw  := b[1];
+         fMode.mode :=  fMode.raw;
+         if (fMode.mode = 'USB') or (fMode.mode = 'LSB') then
+           fMode.mode := 'SSB';
+         if fMode.mode = 'CWR' then
+           fMode.mode := 'CW'
+        end;
 
-      if (msg[1] in ['A'..'Z']) and (msg[1] <> 'V' ) then //receiving mode info
-      begin
-        if Pos('RPRT',msg) = 0 then
-        begin
-          tmp := copy(msg,1,Pos(LineEnding,msg)-1);
-          fMode.mode := trim(tmp);
-          if (fMode.mode = 'USB') or (fMode.mode = 'LSB') then
-            fMode.mode := 'SSB';
-
-          tmp := trim(copy(msg,Pos(LineEnding,msg)+1,5));
-          if not TryStrToInt(tmp,wdt) then
-          begin
-            fMode.pass := 0;
-            fLastError := 'Could not get mode width from radio';
-            if fDebugMode then Writeln(fLastError,':',msg,'*')
-          end
+      //FT-920 returned VFO as MEM
+      //Some rigs report VFO as Main,MainA,MainB or Sub,SubA,SubB
+      //Hamlib dummy has also "None" could it be in some real rigs too?
+      if b[0]='VFO:' then
+       Begin
+         b:= Explode(' ', a[i]);
+         case b[1] of
+           'VFOA',
+           'MAIN',
+           'MAINA',
+           'SUBA'    :fVFO := VFOA;
+
+           'VFOB',
+           'SUB',
+           'MAINB',
+           'SUBB'    :fVFO := VFOB;
           else
-            fMode.pass := wdt
-        end
-      end
-      else begin
-        if (msg[1] <> 'V' ) then
-        begin
-          tmp := trim(msg);
-          if not TryStrToFloat(tmp,fFreq) then
-          begin
-            fFreq      := 0;
-            fLastError := 'Could not get freq from radio';
-            if fDebugMode then Writeln(fLastError,':',msg,'*')
-          end
-        end
-      end
-    end
-    else begin
-      if not TryStrToFloat(a[0],fFreq) then
-      begin
-        fFreq      := 0;
-        fLastError := 'Could not get freq from radio';
-        if fDebugMode then Writeln(fLastError,':',msg,'*',a[0],'*')
-      end;
+            fVFO := VFOA;
+         end;
+        end;
+   end;
+  end;
 
-      if Pos('RPRT',a[1]) = 0 then
-      begin
-        fMode.mode := trim(a[1]);
-        if (fMode.mode = 'USB') or (fMode.mode = 'LSB') then
-          fMode.mode := 'SSB';
-        if fMode.mode = 'CWR' then
-          fMode.mode := 'CW';
-
-        tmp := a[2];
-        if not TryStrToInt(tmp,wdt) then
-        begin
-          fMode.pass := 0;
-          fLastError := 'Could not get mode width from radio';
-          if fDebugMode then Writeln(fLastError,':',msg,'*')
-        end
-        else
-          fMode.pass := wdt
-      end;
-      if Pos('VFOB',a[3]) > 0 then
-        fVFO := VFOB
-      else
-        fVFO := VFOA
-    end;}
-{    Writeln('-----');
-    Writeln('VFO      :',fVFO);
-    Writeln('FREQ     :',fFreq);
-    Writeln('Mode     :',fMode.mode);
-    Writeln('Bandwidth:',fMode.pass);
-    Writeln('-----')}
-  end
-end;
 
+end;
 procedure TRigControl.OnRigPollTimer(Sender: TObject);
 var
   cmd : String;
   i   : Integer;
 begin
+  if not ParmVfoChkd then
+                     RigCommand.Clear; // chk must be first thing to do
+
   if (RigCommand.Text<>'') then
-  begin
-    for i:=0 to RigCommand.Count-1 do
     begin
-      sleep(100);
-      cmd := RigCommand.Strings[i]+LineEnding;
-      rcvdFreqMode.SendMessage(cmd);
-      if DebugMode then Writeln('Sending: '+cmd)
-    end;
-    RigCommand.Clear
-  end
-  else begin
-    cmd := 'fmv'+LineEnding;
-    if DebugMode then Writeln('Sending: '+cmd);
-    rcvdFreqMode.SendMessage(cmd)
-  end
+      for i:=0 to RigCommand.Count-1 do
+      begin
+        sleep(100);
+        cmd := RigCommand.Strings[i]+LineEnding;
+        rcvdFreqMode.SendMessage(cmd);
+        if DebugMode then
+           Writeln('Sending: '+cmd)
+      end;
+      RigCommand.Clear
+    end
+  else
+   begin
+     if not ParmVfoChkd then
+       cmd := '\chk_vfo'+LineEnding
+    else
+     if  ParmHasVfo=2 then
+       cmd := '+f'+VfoStr+' +m'+VfoStr+' +v'+VfoStr+LineEnding //chk this with rigctld v3.1
+      else
+       cmd := '+f'+VfoStr+' +m'+VfoStr+' +v'+LineEnding;
+
+     if DebugMode then
+         Writeln('Poll Sending: '+cmd);
+     rcvdFreqMode.SendMessage(cmd)
+   end;
+
+   inc(BadRcvd);  //we use this now as "no freq reply" counter
+   if BadRcvd > 10 then  // if missed to get frequency during 10 polls, rig connection is dead(?)
+     Begin
+      fFReq := 0;
+      BadRcvd := 10; // prevent overflow
+     end;
 end;
 
 procedure TRigControl.Restart;
diff --git a/src/uRotControl.pas b/src/uRotControl.pas
index 257cdbc..92629a4 100644
--- a/src/uRotControl.pas
+++ b/src/uRotControl.pas
@@ -251,11 +251,11 @@ begin
 end;
 procedure TRotControl.LeftRot ;
 begin
-  rcvdAzimut.SendMessage('M 8 1'+LineEnding);
+  rcvdAzimut.SendMessage('M 8 -1'+LineEnding);
 end;
 procedure TRotControl.RightRot ;
 begin
-  rcvdAzimut.SendMessage('M 16 1'+LineEnding);
+  rcvdAzimut.SendMessage('M 16 -1'+LineEnding);
 end;
 procedure TRotControl.OnReceivedRcvdAzimut(aSocket: TLSocket);
 var
diff --git a/src/uVersion.pas b/src/uVersion.pas
index 7bac56b..cadcf3e 100644
--- a/src/uVersion.pas
+++ b/src/uVersion.pas
@@ -4,13 +4,21 @@ unit uVersion;
 interface
 
 const
-  cVERSION    = '2.5.2 (001)';
+  cVersionBase     = '2.5.2 (001)';
+
+  {$IFDEF LCLGtk2}
+  cVERSION    = cVersionBase+' Gtk2';
+  {$ENDIF}
+  {$IFDEF LCLQt5}
+  cVERSION    = cVersionBase+' QT5';
+  {$ENDIF}
+
   cMAJOR      = 2;
   cMINOR      = 5;
   cRELEAS     = 2;
   cBUILD      = 1;
 
-  cBUILD_DATE = '2021-02-12';
+  cBUILD_DATE = '2022-05-12';
 
 implementation
 
diff --git a/voice_keyer/voice_keyer.sh b/voice_keyer/voice_keyer.sh
index 425cd95..c45d9a6 100755
--- a/voice_keyer/voice_keyer.sh
+++ b/voice_keyer/voice_keyer.sh
@@ -1,17 +1,96 @@
 #!/bin/bash
 
+#Comment lines are starting with #
+#this script requires program 'ncat' (also called 'nc') 
+# 'pidof' and player you select (defaut 'mpg123') to be installed.
+
+
+#You can test this script from command line by typing:
+
+#  voice_keyer.sh F10.mp3  (without typing hash (#) at beginning of line)
+
+#It will then play file F10.mp3 if all is ok.
+
+
+#the script begins:
+#Define your sound player's name below (mpg123, aplay, etc..)
+#If you do not get any sound out:
+#Yor rig may exist as one sound card of Linux. 
+#To get your voice message directed to right sound card consult your player's
+#man pages how to select right sound output device and add those parameter(s)
+#after your player's name (within those parenthesis).
+myplayer="mpg123"
+
+#rigctld PTT commands
+rigctldPttCmdON="T 1"
+rigctldPttCmdOFF="T 0"
+
+   #if Hamlib/rigctld method does not work with you it might be that you have
+   #very latest rigctld and/or you use start parameter '--vfo' with it
+   #then put hash (#) in front of above two lines and remove hash (#) from
+   #start of next two lines
+
+# rigctldPttCmdON="T currVFO 1" 
+# rigctldPttCmdOFF="T currVFO 0"
+
+
+#Search the sound file that was given as first start parameter with script name
 FILE="$1.mp3"
-if [ -e $FILE ]
-then
- echo "Found "$FILE
- if  ! ps aux | grep -q '[m]pg123'
-  then
-   echo "Found mpg123"
+if [ ! -e $FILE ]
+ then 
+ echo "$FILE Not Found!"
+ exit 1
+fi
+
+ #search audio your player 
+ command -v $myplayer >/dev/null 2>&1 
+  if [ $? != 0 ]
+   then 
+    echo "$myplayer is not installed.  Aborting."
+    exit 1
+   fi
+
+   #check that we are not already playing something
+   pidof -q $myplayer
+   if [ $? = 0 ]
+      then
+       echo "$myplayer is already playing, exit!"
+       exit 1
+      fi
+
    echo "PTT on"
-   echo -e '\033a1' | nc -q 1 -u localhost 6789 &
+
+   #This puts your rig ptt ON if you have 'cwdaemon' program in use.
+   #If you want to use this then remove hash (#) from the beginning of next line
+
+#  echo -e '\033a1' | nc -q 1 -u localhost 6789 &
+
+   #This puts your rig ptt ON using hamlib rigctld (same as Cqrlog uses for rig)
+   #if you do not want to use this method put hash (#) to beginning of next line.
+
+   echo -e $rigctldPttCmdON |nc localhost 4532
+
+   #the last words in above line (after 'nc') should be same as your 
+   #'Host' and 'Port number' in Cqrlpg/preferences/TRXControl
+
    echo "Play"
-   mpg123 $FILE
+   $myplayer $FILE
    echo "PTT off"
-   echo -e '\033a0' | nc -q 1 -u localhost 6789 &
-  fi
-fi
+   #This puts your rig ptt OFF if you have 'cwdaemon' program in use.
+   #then remove hash (#) from the  beginning of next line
+
+#  echo -e '\033a0' | nc -q 1 -u localhost 6789 &
+
+   #This puts your rig ptt OFF using hamlib rigctld (same as Cqrlog uses for rig)
+   #if you do not want to use this method put hash (#) to beginning of next line.
+
+   echo -e $rigctldPttCmdOFF |nc localhost 4532
+
+   #the last words in above line (after 'nc') should be same as your 
+   #'Host' and 'Port number' in Cqrlpg/preferences/TRXControl
+
+
+   #If you want to use VOX put hash in start of all four lines 
+   #that controls PTT ON and OFF
+
+#script ends