Blob Blame History Raw
diff --git a/ChangeLog b/ChangeLog
index 0a6f3c79..5308fca3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,34 @@
+2020-06-26  David Freese  <w1hkj@bellsouth.net>
 
+	ca67a417e: alpha
+	9a6c2ae4c: Field Day Logger
+	a9ccff775: flarq update
 
-=Version 4.1.13=
+2020-06-25  Rik van Riel  <riel@surriel.com>
+
+	a38bb1e36: Navtex
+
+2020-06-22  David Freese  <w1hkj@bellsouth.net>
+
+	85c25e27f: Sound Record
+	f952c0808: Freq Control
+
+2020-06-17  Richard Shaw  <hobbes1069@gmail.com>
 
-2020-05-26  David Freese  <w1hkj@bellsouth.net>
+	c5ffb269c: MinGW64
+
+2020-06-12  David Freese  <w1hkj@bellsouth.net>
+
+	d9f379f4e: FSK HELL
+	b3f5f6b16: Cabrillo logs
+	ed7c443ec: sound.cxx warning
+	84f1f3679: SNDFILE
+	05000ef4b: Store/Recall
+	b70cc0b68: wefax
+	5a06abd08: Rx Monitor
+
+
+=Version 4.1.13=
 
 	a09931a2e: doxygen
 	1caa2a467: wefax
diff --git a/configure.ac b/configure.ac
index 3e3f58e9..9479e59a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,10 +9,10 @@ dnl major and minor must be integers; patch may
 dnl contain other characters or be empty
 m4_define(FLDIGI_MAJOR, [4])
 m4_define(FLDIGI_MINOR, [1])
-m4_define(FLDIGI_PATCH, [.13])
+m4_define(FLDIGI_PATCH, [.13.18])
 m4_define(FLARQ_MAJOR,  [4])
 m4_define(FLARQ_MINOR,  [3])
-m4_define(FLARQ_PATCH,  [.7])
+m4_define(FLARQ_PATCH,  [.7.08])
 
 AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[]FLDIGI_PATCH, [fldigi-devel@sourceforge.net])
 
@@ -233,8 +233,11 @@ fi
 # Set ac_cv_sndfile to yes/no
 # Define USE_SNDFILE in config.h
 # Substitute SNDFILE_CFLAGS and SNDFILE_LIBS in Makefile
-AC_FLDIGI_PKG_CHECK([sndfile], [sndfile >= 1.0.10], [yes], [yes],
+# name, version, show-in-help?, optional?, help-text, [am-cond]
+if test "x$ac_cv_want_fldigi" = "xyes"; then
+    AC_FLDIGI_PKG_CHECK([sndfile], [sndfile >= 1.0.10], [yes], [no],
                     [enable reading/writing of audio files via libsndfile @<:@autodetect@:>@] )
+fi
 
 ### portaudio
 # Set ac_cv_portaudio to yes/no
@@ -295,6 +298,13 @@ AC_FLDIGI_PKG_CHECK([libmbedtls], [libmbedtls >= 2.16.0],
   [yes], [yes], [use mbedtls libraries @<:@autodetect@:>@],
   [ENABLE_LIBMBEDTLS])
 
+### regex
+# Does no provide a pkgconf file, so find manually
+AC_SEARCH_LIBS([regcomp], [regex], [], [
+        AC_MSG_ERROR([Unable to find a compatible regex library.])
+])
+
+
 ### libintl
 # Substitute INTL_CFLAGS in Makefile
 # Substitute INTL_LIBS in Makefile
@@ -358,7 +368,6 @@ fi
 if test "x$ac_cv_want_fldigi" = "xyes"; then
   AC_MSG_RESULT([ fldigi build options:
 
-  sndfile ..................... $ac_cv_sndfile
   oss ......................... $ac_cv_oss
   portaudio ................... $ac_cv_portaudio
   pulseaudio .................. $ac_cv_pulseaudio
diff --git a/data/win32/fldigi.nsi b/data/win32/fldigi.nsi
index 63c3fb26..2d89ea5b 100644
--- a/data/win32/fldigi.nsi
+++ b/data/win32/fldigi.nsi
@@ -121,6 +121,7 @@ SectionEnd
         SectionIn RO
         SetOutPath $INSTDIR
         File "${FLDIGI_BINARY}"
+	File /nonfatal "${DIST_DEPS}/*"
         !ifdef FLDIGI_LOCALE_DIR
 	    File /r "${FLDIGI_LOCALE_PATH}/${FLDIGI_LOCALE_DIR}"
         !endif
diff --git a/fldigi_doxygen/user_src_docs/WEFAX.txt b/fldigi_doxygen/user_src_docs/WEFAX.txt
index e5414c56..68a67c12 100644
--- a/fldigi_doxygen/user_src_docs/WEFAX.txt
+++ b/fldigi_doxygen/user_src_docs/WEFAX.txt
@@ -81,12 +81,9 @@ Select an input FIR (Finite Impulse Response) filter:
 <li> narrow</li>
 <li> medium</li>
 <li> wide</li>
-<li> Blackman</li>
-<li> Hamming</li>
-<li> Hanning</li>
 </ul>
 There is rarely any QRM on a government WEFAX broadcast, but the filter selection might
-improve the decoded signal to noise ratio.  My preference is to use the Blackman filter.
+improve the decoded signal to noise ratio.  Start with the medium filter setting.
 <br>
 \image html wefax-filter-impulse.png ""
 \image latex wefax-filter-impulse.png "" width=5.0in
diff --git a/m4/macosx.m4 b/m4/macosx.m4
index 17545b8c..b61b953c 100644
--- a/m4/macosx.m4
+++ b/m4/macosx.m4
@@ -8,12 +8,15 @@ case "$target_os" in
       ;;
 esac
 
-if test "$target_darwin" = "yes"; then
-   AC_MSG_NOTICE([using bundled GNU regex on $target_os])
-   # pretend that the regex.h check failed so that we use the bundled regex code
-   ac_cv_header_regex_h=no
-   AC_DEFINE([HAVE_REGEX_H], 0, [Define to 1 if you have the <regex.h> header file.])
-fi
+### Try to use system regex
+#
+#if test "$target_darwin" = "yes"; then
+#   AC_MSG_NOTICE([using bundled GNU regex on $target_os])
+#   # pretend that the regex.h check failed so that we use the bundled regex code
+#   ac_cv_header_regex_h=no
+#   AC_DEFINE([HAVE_REGEX_H], 0, [Define to 1 if you have the <regex.h> header file.])
+#fi
+
 
 AC_ARG_ENABLE([mac-universal], AC_HELP_STRING([--enable-mac-universal],
                                               [build a universal binary on Mac OS X @<:@no@:>@]),
diff --git a/m4/np-compat.m4 b/m4/np-compat.m4
index 7b8b8100..ca1cc5ee 100644
--- a/m4/np-compat.m4
+++ b/m4/np-compat.m4
@@ -17,9 +17,6 @@ AC_DEFUN([AC_FLDIGI_NP_COMPAT], [
   if test "x$target_mingw32" = "xyes"; then
       # Newer versions of mingw32 comes with pthread.
       sem_libs="pthreadGC2 pthread"
-     # pretend that the regex.h check failed so that we use the bundled regex code
-     ac_cv_header_regex_h=no
-     AC_DEFINE([HAVE_REGEX_H], 0, [Define to 1 if you have the <regex.h> header file.])
   else
       sem_libs="pthread rt"
   fi
diff --git a/scripts/mingw-find-deps b/scripts/mingw-find-deps
new file mode 100755
index 00000000..aff023b5
--- /dev/null
+++ b/scripts/mingw-find-deps
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+# Halt on errors
+set -e
+
+installroot=$PWD/dist;
+
+if [ $# -lt 1 ]; then
+    echo "Usage: $0 win32_binary [--debug]"
+    exit 1;
+fi
+
+if [ ! -f "$1" ]; then
+    echo "Cannot find file $1"
+    echo ""
+    echo "Usage: $0 win32_binary [--debug]"
+    exit 1;
+fi
+
+
+# Note: This script is written to be used with the Fedora mingw environment
+if [ "$(file $1  | grep -o x86-64)" == "x86-64" ]; then
+    echo "Scanning dependencies for $1 (64bit binary)"
+    MINGWROOT=/usr/x86_64-w64-mingw32/sys-root/mingw
+else
+    echo "Scanning dependencies for $1 (32bit binary)"
+    MINGWROOT=/usr/i686-w64-mingw32/sys-root/mingw
+fi
+
+if [ "$2" == "--debug" ]; then
+    withdebug=1
+fi
+
+isqt5=false
+
+# Collect dependencies
+function isnativedll {
+    # If the import library exists but not the dynamic library, the dll ist most likely a native one
+    local lower=${1,,}
+    [ ! -e $MINGWROOT/bin/$1 ] && [ -f $MINGWROOT/lib/lib${lower/%.*/.a} ] && return 0;
+    return 1;
+}
+
+function cpDep {
+# Copy the specified binary dependency
+    destdir="$installroot/${2:-$(dirname $1)}"
+    name="$(basename $1)"
+    test -e "$destdir/$name" && return 0
+    if [ ! -e "$MINGWROOT/$1" ]; then
+        echo "Error: missing $MINGWROOT/$1"
+        return 0
+    fi
+    mkdir -p "$destdir" || return 1
+    echo "Copying $1"
+    cp -a "$MINGWROOT/$1" "$destdir/$name" || return 1
+    if [ $withdebug ]; then test -e "$MINGWROOT/$1.debug" && cp "$MINGWROOT/$1.debug" "$destdir/$name.debug" && echo "Copying $1.debug" || echo "Warning: missing $name.debug"; fi
+    autoCpDeps $destdir/$name || return 1
+    return 0
+}
+
+function autoCpDeps {
+# Collects and links the dependencies of the specified binary
+    for dep in $(mingw-objdump -p "$1" | grep "DLL Name" | awk '{print $3}'); do
+        # Hacks / Workarounds
+        if [ "$dep" == "LIBPQ.dll" ]; then
+            dep="libpq.dll"
+        elif [ "$dep" == "QtUiToolsd4.dll" ]; then
+            continue;
+        elif [ "$dep" == "Qt5Core.dll" ]; then
+            isqt5=true
+        fi
+
+        if [ ! -f "$dep" ] && ! isnativedll "$dep"; then
+            cpDep bin/$dep || return 1
+        fi
+    done
+    return 0
+}
+
+mkdir -p dist/bin
+autoCpDeps $1
+if [ $withdebug ]; then
+    cpDep bin/gdb.exe
+fi
+if [[ $isqt5 == true ]]; then
+    mkdir -p dist/bin/platforms
+    cp -a $MINGWROOT/lib/qt5/plugins/platforms/qwindows.dll dist/bin/platforms/
+    autoCpDeps $MINGWROOT/lib/qt5/plugins/platforms/qwindows.dll
+fi
diff --git a/scripts/mknsisinst.sh b/scripts/mknsisinst.sh
index 3467344a..92995656 100755
--- a/scripts/mknsisinst.sh
+++ b/scripts/mknsisinst.sh
@@ -16,6 +16,7 @@ fi
 PWD=`pwd`
 data="${PWD}/$1"
 build="${PWD}/$2"
+dist="${PWD}/../dist/bin"
 
 # more sanity checks
 for d in "$data" "$build"; do
@@ -54,6 +55,8 @@ if test "x$USE_NLS" = "xyes" && make -C "$srcdir/../po" install prefix="$build"
     def="$def -DFLDIGI_LOCALE_PATH=$build/share -DFLDIGI_LOCALE_DIR=locale"
 fi
 
+def="$def -DDIST_DEPS=$dist"
+
 $MAKENSIS -V2 -NOCD -D"INSTALLER_FILE=$INSTALLER_FILE" -D"LICENSE_FILE=$data/../COPYING" \
     -D"SUPPORT_URL=$PACKAGE_HOME" -D"UPDATES_URL=$PACKAGE_DL" -D"FLDIGI_DOCS_URL=$PACKAGE_DOCS" \
     -D"FLARQ_DOCS_URL=$FLARQ_DOCS" -D"GUIDE_URL=$PACKAGE_GUIDE" $def "$data/win32/fldigi.nsi"
diff --git a/src/Makefile.am b/src/Makefile.am
index e34fdb53..92442828 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -48,7 +48,7 @@ COMMON_WIN32_RES_SRC = common.rc
 
 BENCHMARK_SRC = include/benchmark.h misc/benchmark.cxx
 
-REGEX_SRC = compat/regex.h compat/regex.c
+#REGEX_SRC = compat/regex.h compat/regex.c
 
 STACK_SRC = include/stack.h misc/stack.cxx
 
@@ -980,9 +980,7 @@ flarq_SOURCES += \
 	flarq-src/include/flarq.h \
 	flarq-src/include/flarqenv.h \
 	flarq-src/include/xml_server.h \
-	include/Fl_Text_Display_mod.H \
-	include/Fl_Text_Editor_mod.H \
-	include/FTextView.h \
+	include/F_Edit.h \
 	include/fileselect.h \
 	include/flinput2.h \
 	include/flmisc.h \
@@ -1015,7 +1013,8 @@ flarq_SOURCES += \
 	widgets/Fl_Text_Buffer_mod.cxx \
 	widgets/Fl_Text_Display_mod.cxx \
 	widgets/Fl_Text_Editor_mod.cxx \
-	widgets/FTextView.cxx
+	widgets/FTextView.cxx \
+	widgets/F_Edit.cxx
 
 # Additional files that we distribute
 EXTRA_DIST = \
diff --git a/src/compat/mingw.c b/src/compat/mingw.c
index efc7dc7f..252459e3 100644
--- a/src/compat/mingw.c
+++ b/src/compat/mingw.c
@@ -30,6 +30,7 @@
 // ----------------------------------------------------------------------------
 
 #include <config.h>
+#include <winsock2.h>
 
 #include <ctype.h>
 #include "compat.h"
@@ -124,7 +125,7 @@ static void wsa_init(void)
 	atexit((void(*)(void)) WSACleanup);
 }
 
-int socketpair(int family, int type, int protocol, int *sv)
+int socketpair(int family, int type, int protocol, SOCKET *sv)
 {
 	struct sockaddr_in addr;
 	SOCKET sfd;
diff --git a/src/compat/mingw.h b/src/compat/mingw.h
index f8cec282..530e52e5 100644
--- a/src/compat/mingw.h
+++ b/src/compat/mingw.h
@@ -50,7 +50,6 @@
 extern "C" {
 #endif
 
-typedef int pid_t;
 typedef long suseconds_t;
 #define hstrerror strerror
 
@@ -103,7 +102,7 @@ int mingw_rename(const char*, const char*);
 #endif
 
 int nanosleep (const struct timespec *req, struct timespec *rem);
-int socketpair(int family, int type, int protocol, int *sv);
+int socketpair(int family, int type, int protocol, SOCKET *sv);
 
 /* uname */
 #define UTSNAME_MAX_ 257
diff --git a/src/compat/regex.c b/src/compat/regex.c
index 6045cd0a..74e8ee89 100644
--- a/src/compat/regex.c
+++ b/src/compat/regex.c
@@ -3747,7 +3747,7 @@ re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
 			  regstart[r] = old_regstart[r];
 
 			  /* xx why this test?  */
-			  if ((int) old_regend[r] >= (int) regstart[r])
+			  if ((intptr_t) old_regend[r] >= (intptr_t) regstart[r])
 			    regend[r] = old_regend[r];
 			}
 		    }
diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx
index fa569a49..69e1b8df 100644
--- a/src/dialogs/confdialog.cxx
+++ b/src/dialogs/confdialog.cxx
@@ -7264,6 +7264,12 @@ static void cb_cntTxOffset(Fl_Spinner2* o, void*) {
 progdefaults.changed = true;
 }
 
+Fl_Counter *cntRIT=(Fl_Counter *)0;
+
+static void cb_cntRIT(Fl_Counter* o, void*) {
+  progdefaults.RIT=o->value();
+}
+
 Fl_ListBox *listbox_wav_samplerate=(Fl_ListBox *)0;
 
 static void cb_listbox_wav_samplerate(Fl_ListBox* o, void*) {
@@ -13549,8 +13555,8 @@ le Earth)"));
       { Fl_Choice* o = wefax_choice_rx_filter = new Fl_Choice(302, 137, 110, 24, _("Filter"));
         wefax_choice_rx_filter->down_box(FL_BORDER_BOX);
         wefax_choice_rx_filter->callback((Fl_Callback*)cb_wefax_choice_rx_filter);
-        o->add("Narrow|Middle|Wide|Blackman|Hanning|Hamming");
-        o->value(progdefaults.wefax_filter);
+        o->add("Narrow|Medium|Wide");
+        o->value(progdefaults.wefax_filter < 3 ? progdefaults.wefax_filter : 0);
       } // Fl_Choice* wefax_choice_rx_filter
       { Fl_Counter* o = auto_after_nrows = new Fl_Counter(588, 81, 150, 24, _("Enable Auto-align after"));
         auto_after_nrows->minimum(5);
@@ -16112,21 +16118,25 @@ i.e. localhost"));
         } // Fl_Round_Button* btn_is_full_duplex
         AudioDuplex->end();
       } // Fl_Group* AudioDuplex
-      { AudioAlerts = new Fl_Group(255, 235, 500, 80, _("Alerts / Rx Audio"));
+      { AudioAlerts = new Fl_Group(255, 235, 500, 90);
         AudioAlerts->box(FL_ENGRAVED_FRAME);
-        AudioAlerts->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-        { menuAlertsDev = new Fl_Choice(427, 255, 310, 25, _("Playback"));
+        AudioAlerts->align(Fl_Align(FL_ALIGN_CENTER));
+        { menuAlertsDev = new Fl_Choice(265, 260, 365, 25, _("Audio device shared by Audio Alerts and Rx Monitor"));
           menuAlertsDev->tooltip(_("Audio output device"));
           menuAlertsDev->down_box(FL_BORDER_BOX);
           menuAlertsDev->callback((Fl_Callback*)cb_menuAlertsDev);
+          menuAlertsDev->align(Fl_Align(FL_ALIGN_TOP_LEFT));
         } // Fl_Choice* menuAlertsDev
-        { Fl_Round_Button* o = btn_enable_audio_alerts = new Fl_Round_Button(427, 283, 225, 25, _("Enable Audio alerts"));
+        { Fl_Round_Button* o = btn_enable_audio_alerts = new Fl_Round_Button(657, 260, 76, 25, _("Enable"));
           btn_enable_audio_alerts->tooltip(_("First select audio alert playback device"));
           btn_enable_audio_alerts->down_box(FL_DOWN_BOX);
           btn_enable_audio_alerts->selection_color((Fl_Color)1);
           btn_enable_audio_alerts->callback((Fl_Callback*)cb_btn_enable_audio_alerts);
           o->value(progdefaults.enable_audio_alerts);
         } // Fl_Round_Button* btn_enable_audio_alerts
+        { Fl_Box* o = new Fl_Box(265, 295, 473, 22, _("Note: must be selected and enabled for Rx Audio monitoring!"));
+          o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
+        } // Fl_Box* o
         AudioAlerts->end();
       } // Fl_Group* AudioAlerts
       CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Devices"));
@@ -16199,11 +16209,10 @@ nce.\nYou may change the state from either location.\n..."));
     { Fl_Group* o = new Fl_Group(200, 0, 600, 350, _("Soundcard/Settings"));
       o->box(FL_ENGRAVED_BOX);
       o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      o->hide();
       { grpAudioSampleRate = new Fl_Group(260, 48, 490, 90, _("Sample rate"));
         grpAudioSampleRate->box(FL_ENGRAVED_FRAME);
         grpAudioSampleRate->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-        { Fl_ListBox* o = menuInSampleRate = new Fl_ListBox(270, 77, 100, 22, _("Capture"));
+        { Fl_ListBox* o = menuInSampleRate = new Fl_ListBox(284, 77, 100, 22, _("Capture"));
           menuInSampleRate->tooltip(_("Force a specific sample rate. Select \"Native\" if \"Auto\"\ndoes not work we\
 ll with your audio device."));
           menuInSampleRate->box(FL_DOWN_BOX);
@@ -16220,7 +16229,7 @@ ll with your audio device."));
           o->labelsize(FL_NORMAL_SIZE);
           menuInSampleRate->end();
         } // Fl_ListBox* menuInSampleRate
-        { Fl_ListBox* o = menuOutSampleRate = new Fl_ListBox(270, 107, 100, 22, _("Playback"));
+        { Fl_ListBox* o = menuOutSampleRate = new Fl_ListBox(284, 107, 100, 22, _("Playback"));
           menuOutSampleRate->box(FL_DOWN_BOX);
           menuOutSampleRate->color(FL_BACKGROUND2_COLOR);
           menuOutSampleRate->selection_color(FL_BACKGROUND_COLOR);
@@ -16256,7 +16265,7 @@ ll with your audio device."));
       { Fl_Group* o = new Fl_Group(260, 138, 490, 62, _("Corrections"));
         o->box(FL_ENGRAVED_FRAME);
         o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-        { Fl_Spinner2* o = cntRxRateCorr = new Fl_Spinner2(270, 168, 85, 20, _("RX ppm"));
+        { Fl_Spinner2* o = cntRxRateCorr = new Fl_Spinner2(284, 165, 85, 20, _("RX ppm"));
           cntRxRateCorr->tooltip(_("RX sound card correction"));
           cntRxRateCorr->box(FL_NO_BOX);
           cntRxRateCorr->color(FL_BACKGROUND_COLOR);
@@ -16273,7 +16282,7 @@ ll with your audio device."));
           o->maximum(50000);
           o->labelsize(FL_NORMAL_SIZE);
         } // Fl_Spinner2* cntRxRateCorr
-        { Fl_Spinner2* o = cntTxRateCorr = new Fl_Spinner2(431, 168, 85, 20, _("TX ppm"));
+        { Fl_Spinner2* o = cntTxRateCorr = new Fl_Spinner2(431, 165, 85, 20, _("TX ppm"));
           cntTxRateCorr->tooltip(_("TX sound card correction"));
           cntTxRateCorr->box(FL_NO_BOX);
           cntTxRateCorr->color(FL_BACKGROUND_COLOR);
@@ -16290,7 +16299,7 @@ ll with your audio device."));
           o->maximum(50000);
           o->labelsize(FL_NORMAL_SIZE);
         } // Fl_Spinner2* cntTxRateCorr
-        { Fl_Spinner2* o = cntTxOffset = new Fl_Spinner2(593, 168, 85, 20, _("TX offset"));
+        { Fl_Spinner2* o = cntTxOffset = new Fl_Spinner2(591, 165, 85, 20, _("TX offset"));
           cntTxOffset->tooltip(_("Difference between Rx & Tx freq (rig offset)"));
           cntTxOffset->box(FL_NO_BOX);
           cntTxOffset->color(FL_BACKGROUND_COLOR);
@@ -16309,6 +16318,21 @@ ll with your audio device."));
         } // Fl_Spinner2* cntTxOffset
         o->end();
       } // Fl_Group* o
+      { Fl_Group* o = new Fl_Group(260, 200, 490, 62, _("Frequency Analysis Rx Correction"));
+        o->box(FL_ENGRAVED_FRAME);
+        o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
+        { Fl_Counter* o = cntRIT = new Fl_Counter(284, 226, 130, 20, _("RIT"));
+          cntRIT->tooltip(_("Used ONLY for frequency analysis mode"));
+          cntRIT->minimum(-5);
+          cntRIT->maximum(5);
+          cntRIT->step(0.01);
+          cntRIT->callback((Fl_Callback*)cb_cntRIT);
+          cntRIT->align(Fl_Align(FL_ALIGN_RIGHT));
+          o->value(progdefaults.RIT);
+          o->lstep(0.1);
+        } // Fl_Counter* cntRIT
+        o->end();
+      } // Fl_Group* o
       CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Settings"));
       config_pages.push_back(p);
       tab_tree->add(_("Soundcard/Settings"));
diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl
index e6762f1f..b1026f03 100644
--- a/src/dialogs/confdialog.fl
+++ b/src/dialogs/confdialog.fl
@@ -469,7 +469,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
 static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";} {}
   Fl_Window {} {
     label {Fldigi configuration} open
-    xywh {503 32 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
+    xywh {604 42 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
   } {
     Fl_Group {} {
       xywh {0 0 201 385} resizable
@@ -6070,7 +6070,7 @@ progdefaults.changed = true;}
       }
     }
     Fl_Group {} {
-      label {Modem/Wefax} open selected
+      label {Modem/Wefax}
       xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
       code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Modem/Wefax"));}
       code1 {config_pages.push_back(p);}
@@ -6128,8 +6128,8 @@ progdefaults.changed = true;}
         label Filter
         callback {progdefaults.wefax_filter=o->value();} open
         xywh {302 137 110 24} down_box BORDER_BOX
-        code0 {o->add("Narrow|Middle|Wide|Blackman|Hanning|Hamming");}
-        code1 {o->value(progdefaults.wefax_filter);}
+        code0 {o->add("Narrow|Medium|Wide");}
+        code1 {o->value(progdefaults.wefax_filter < 3 ? progdefaults.wefax_filter : 0);}
       } {}
       Fl_Counter auto_after_nrows {
         label {Enable Auto-align after}
@@ -9058,25 +9058,28 @@ resetSoundCard();}
           code0 {o->value(progdefaults.is_full_duplex);}
         }
       }
-      Fl_Group AudioAlerts {
-        label {Alerts / Rx Audio} open
-        xywh {255 235 500 80} box ENGRAVED_FRAME align 21
+      Fl_Group AudioAlerts {open
+        xywh {255 235 500 90} box ENGRAVED_FRAME align 0
       } {
         Fl_Choice menuAlertsDev {
-          label Playback
+          label {Audio device shared by Audio Alerts and Rx Monitor}
           callback {progdefaults.AlertDevice = o->text();
 progdefaults.AlertIndex = reinterpret_cast<intptr_t>(o->mvalue()->user_data());
 progdefaults.changed = true;} open
-          tooltip {Audio output device} xywh {427 255 310 25} down_box BORDER_BOX
+          tooltip {Audio output device} xywh {265 260 365 25} down_box BORDER_BOX align 5
         } {}
         Fl_Round_Button btn_enable_audio_alerts {
-          label {Enable Audio alerts}
+          label Enable
           callback {progdefaults.enable_audio_alerts = o->value();
 progdefaults.changed = true;
 reset_audio_alerts();}
-          tooltip {First select audio alert playback device} xywh {427 283 225 25} down_box DOWN_BOX selection_color 1
+          tooltip {First select audio alert playback device} xywh {657 260 76 25} down_box DOWN_BOX selection_color 1
           code0 {o->value(progdefaults.enable_audio_alerts);}
         }
+        Fl_Box {} {
+          label {Note: must be selected and enabled for Rx Audio monitoring!}
+          xywh {265 295 473 22} align 16
+        }
       }
     }
     Fl_Group {} {
@@ -9188,8 +9191,8 @@ progdefaults.changed = true;}
       }
     }
     Fl_Group {} {
-      label {Soundcard/Settings}
-      xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
+      label {Soundcard/Settings} open selected
+      xywh {200 0 600 350} box ENGRAVED_BOX align 21
       code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Soundcard/Settings"));}
       code1 {config_pages.push_back(p);}
       code2 {tab_tree->add(_("Soundcard/Settings"));}
@@ -9204,7 +9207,7 @@ progdefaults.changed = true;}
 resetSoundCard();
 progdefaults.changed = true;} open
           tooltip {Force a specific sample rate. Select "Native" if "Auto"
-does not work well with your audio device.} xywh {270 77 100 22} box DOWN_BOX color 7 align 8
+does not work well with your audio device.} xywh {284 77 100 22} box DOWN_BOX color 7 align 8
           code0 {o->clear_changed();}
           code1 {o->labelsize(FL_NORMAL_SIZE);}
           class Fl_ListBox
@@ -9214,7 +9217,7 @@ does not work well with your audio device.} xywh {270 77 100 22} box DOWN_BOX co
           callback {progdefaults.out_sample_rate = o->index() > 1 ? strtol(o->value(), 0, 10) : o->index();
 resetSoundCard();
 progdefaults.changed = true;} open
-          xywh {270 107 100 22} box DOWN_BOX color 7 align 8
+          xywh {284 107 100 22} box DOWN_BOX color 7 align 8
           code0 {o->clear_changed();}
           code1 {o->tooltip(menuInSampleRate->tooltip());}
           code2 {o->labelsize(FL_NORMAL_SIZE);}
@@ -9242,7 +9245,7 @@ o->tooltip(src_get_description(progdefaults.sample_converter));} open
           label {RX ppm}
           callback {progdefaults.RX_corr = (int)o->value();
 progdefaults.changed = true;}
-          tooltip {RX sound card correction} xywh {270 168 85 20} align 8
+          tooltip {RX sound card correction} xywh {284 165 85 20} align 8
           code0 {o->step(1);}
           code1 {o->minimum(-50000);}
           code2 {o->maximum(50000);}
@@ -9253,7 +9256,7 @@ progdefaults.changed = true;}
           label {TX ppm}
           callback {progdefaults.TX_corr = (int)o->value();
 progdefaults.changed = true;}
-          tooltip {TX sound card correction} xywh {431 168 85 20} align 8
+          tooltip {TX sound card correction} xywh {431 165 85 20} align 8
           code0 {o->step(1);}
           code1 {o->minimum(-50000);}
           code2 {o->maximum(50000);}
@@ -9264,7 +9267,7 @@ progdefaults.changed = true;}
           label {TX offset}
           callback {progdefaults.TxOffset = (int)o->value();
 progdefaults.changed = true;}
-          tooltip {Difference between Rx & Tx freq (rig offset)} xywh {593 168 85 20} align 8
+          tooltip {Difference between Rx & Tx freq (rig offset)} xywh {591 165 85 20} align 8
           code0 {o->value(progdefaults.TxOffset);}
           code1 {o->step(1);}
           code2 {o->minimum(-50); o->maximum(50);}
@@ -9272,6 +9275,18 @@ progdefaults.changed = true;}
           class Fl_Spinner2
         }
       }
+      Fl_Group {} {
+        label {Frequency Analysis Rx Correction} open
+        xywh {260 200 490 62} box ENGRAVED_FRAME align 21
+      } {
+        Fl_Counter cntRIT {
+          label RIT
+          callback {progdefaults.RIT=o->value();}
+          tooltip {Used ONLY for frequency analysis mode} xywh {284 226 130 20} align 8 minimum -5 maximum 5 step 0.01
+          code0 {o->value(progdefaults.RIT);}
+          code1 {o->lstep(0.1);}
+        }
+      }
     }
     Fl_Group {} {
       label {Soundcard/Wav file recording}
diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx
index 03c37fb9..a0d58b2b 100644
--- a/src/dialogs/fl_digi.cxx
+++ b/src/dialogs/fl_digi.cxx
@@ -985,7 +985,7 @@ static const Fl_Menu_Item quick_change_feld[] = {
 	{ mode_info[MODE_SLOWHELL].name, 0, cb_init_mode, (void *)MODE_SLOWHELL },
 	{ mode_info[MODE_HELLX5].name,   0, cb_init_mode, (void *)MODE_HELLX5 },
 	{ mode_info[MODE_HELLX9].name,   0, cb_init_mode, (void *)MODE_HELLX9 },
-	{ mode_info[MODE_FSKHELL].name,  0, cb_init_mode, (void *)MODE_FSKHELL },
+	{ mode_info[MODE_FSKH245].name,  0, cb_init_mode, (void *)MODE_FSKH245 },
 	{ mode_info[MODE_FSKH105].name,  0, cb_init_mode, (void *)MODE_FSKH105 },
 	{ mode_info[MODE_HELL80].name,   0, cb_init_mode, (void *)MODE_HELL80 },
 	{ 0 }
@@ -1668,7 +1668,7 @@ void init_modem(trx_mode mode, int freq)
 			mode == MODE_SLOWHELL ||
 			mode == MODE_HELLX5 ||
 			mode == MODE_HELLX9 ||
-			mode == MODE_FSKHELL ||
+			mode == MODE_FSKH245 ||
 			mode == MODE_FSKH105 ||
 			mode == MODE_HELL80 ||
 			mode == MODE_WEFAX_576 ||
@@ -1753,7 +1753,7 @@ void init_modem(trx_mode mode, int freq)
 	case MODE_SLOWHELL:
 	case MODE_HELLX5:
 	case MODE_HELLX9:
-	case MODE_FSKHELL:
+	case MODE_FSKH245:
 	case MODE_FSKH105:
 	case MODE_HELL80:
 		startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
@@ -1988,7 +1988,7 @@ void init_modem(trx_mode mode, int freq)
 		break;
 
 	default:
-		LOG_ERROR("Unknown mode: %" PRIdPTR, mode);
+		LOG_ERROR("Unknown mode: %d", (int)mode);
 		mode = MODE_PSK31;
 		startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
 				  *mode_info[mode].modem = new psk(mode), freq);
@@ -2123,7 +2123,7 @@ void macro_cb(Fl_Widget *w, void *v)
 //	if (active_modem->get_mode() == MODE_FSQ)
 //		return;
 
-	int b = (int)(reinterpret_cast<long> (v));
+	int b = (int)(reinterpret_cast<long long> (v));
 
 	if (b & 0x80) { // 4 bar docked macros
 		b &= 0x7F;
@@ -2288,7 +2288,7 @@ void cb_mnuConfigModems(Fl_Menu_*, void*) {
 			open_config(TAB_DOMINOEX);
 			break;
 		case MODE_FELDHELL: case MODE_SLOWHELL: case MODE_HELLX5: case MODE_HELLX9:
-		case MODE_FSKHELL: case MODE_FSKH105:case MODE_HELL80:
+		case MODE_FSKH245: case MODE_FSKH105:case MODE_HELL80:
 			open_config(TAB_FELDHELL);
 			break;
 		case MODE_WEFAX_576: case MODE_WEFAX_288:
@@ -2435,7 +2435,6 @@ void cb_view_hide_channels(Fl_Menu_ *w, void *d)
 	return;
 }
 
-#if USE_SNDFILE
 
 static bool capval = false;
 static bool genval = false;
@@ -2553,7 +2552,6 @@ void cb_mnuPlayback(Fl_Widget *w, void *d)
 		btnAutoSpot->do_callback();
 	}
 }
-#endif // USE_SNDFILE
 
 bool first_tab_select = true;
 
@@ -2613,7 +2611,7 @@ void cb_mnuVisitURL(Fl_Widget*, void* arg)
 	// be done with the returned HINSTANCE is to cast it to an
 	// int and compare it with the value 32 or one of the error
 	// codes below." (Error codes omitted to preserve sanity).
-	if ((int)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
+	if ((INT_PTR)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
 		fl_alert2(_("Could not open url:\n%s\n"), url);
 #endif
 }
@@ -2977,7 +2975,14 @@ void toggleRSID()
 	cbRSID(NULL, NULL);
 }
 
+static notify_dialog *rx_monitor_alert = 0;
 void cb_mnuRxAudioDialog(Fl_Menu_ *w, void *d) {
+	if (!progdefaults.enable_audio_alerts) {
+		if (!rx_monitor_alert) rx_monitor_alert = new notify_dialog;
+		rx_monitor_alert->notify("Audio-Alert / Rx-Monitor device NOT enabled", 10.0);
+		show_notifier(rx_monitor_alert);
+		return;
+	}
 	if (rxaudio_dialog)
 		rxaudio_dialog->show();
 }
@@ -5755,13 +5760,11 @@ static Fl_Menu_Item menu_[] = {
 { LOG_TO_FILE_MLABEL, 0, cb_logfile, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
 {0,0,0,0,0,0,0,0,0},
 
-#if USE_SNDFILE
 { icons::make_icon_label(_("Audio")), 0, 0, 0, FL_MENU_DIVIDER | FL_SUBMENU, _FL_MULTI_LABEL, 0, 14, 0},
 {_("RX capture"),  0, (Fl_Callback*)cb_mnuCapture,  0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
 {_("TX generate"), 0, (Fl_Callback*)cb_mnuGenerate, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
 {_("Playback"),    0, (Fl_Callback*)cb_mnuPlayback, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL, 0, 14, 0},
 {0,0,0,0,0,0,0,0,0},
-#endif
 
 { icons::make_icon_label(_("Exit"), log_out_icon), 'x',  (Fl_Callback*)cb_E, 0, 0, _FL_MULTI_LABEL, 0, 14, 0},
 {0,0,0,0,0,0,0,0,0},
@@ -5821,7 +5824,7 @@ static Fl_Menu_Item menu_[] = {
 { mode_info[MODE_SLOWHELL].name, 0,  cb_init_mode, (void *)MODE_SLOWHELL, 0, FL_NORMAL_LABEL, 0, 14, 0},
 { mode_info[MODE_HELLX5].name, 0,  cb_init_mode, (void *)MODE_HELLX5, 0, FL_NORMAL_LABEL, 0, 14, 0},
 { mode_info[MODE_HELLX9].name, 0,  cb_init_mode, (void *)MODE_HELLX9, 0, FL_NORMAL_LABEL, 0, 14, 0},
-{ mode_info[MODE_FSKHELL].name, 0, cb_init_mode, (void *)MODE_FSKHELL, 0, FL_NORMAL_LABEL, 0, 14, 0},
+{ mode_info[MODE_FSKH245].name, 0, cb_init_mode, (void *)MODE_FSKH245, 0, FL_NORMAL_LABEL, 0, 14, 0},
 { mode_info[MODE_FSKH105].name, 0, cb_init_mode, (void *)MODE_FSKH105, 0, FL_NORMAL_LABEL, 0, 14, 0},
 { mode_info[MODE_HELL80].name, 0, cb_init_mode, (void *)MODE_HELL80, 0, FL_NORMAL_LABEL, 0, 14, 0},
 {0,0,0,0,0,0,0,0,0},
@@ -8423,7 +8426,7 @@ static void put_rx_char_flmain(unsigned int data, int style)
 	if (mailclient || mailserver)
 		rx_chd.rx((unsigned char *)ascii2[data & 0xFF]);
 
-	else if (progdefaults.show_all_codes)
+	else if (progdefaults.show_all_codes && iscntrl(data & 0xFF))
 		rx_chd.rx((unsigned char *)ascii3[data & 0xFF]);
 
 	else if (mode == MODE_RTTY)
@@ -8434,7 +8437,7 @@ static void put_rx_char_flmain(unsigned int data, int style)
 		} else
 			rx_chd.rx((unsigned char *)ascii[data & 0xFF]);
 	else
-		rx_chd.rx(data);
+		rx_chd.rx(data & 0xFF);
 
 	// feed the decoded data into the RX parser
 	if (rx_chd.data_length() > 0) {
@@ -8969,20 +8972,16 @@ void put_echo_char(unsigned int data, int style)
 	if (mode == MODE_CW && progdefaults.QSKadjust)
 		return;
 
-	REQ(&add_tx_char, data);
+	REQ(&add_tx_char, data & 0xFF);
 
 	// select a byte translation table
 	const char **asc = NULL;//ascii;
-	if (mailclient || mailserver || arq_text_available)
+	if (mailclient || mailserver) {
 		asc = ascii2;
-	else if (progdefaults.show_all_codes)
-		asc = ascii3;
-	else if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST)
-		asc = ascii3;
-
-	// assign a style to the data
-	if (asc == ascii2 && iscntrl(data))
 		style = FTextBase::CTRL;
+	} else if ((progdefaults.show_all_codes && iscntrl(data & 0xFF)) ||
+				PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST)
+		asc = ascii3;
 
 	// receive and convert the data
 	static unsigned int lastdata = 0;
@@ -8990,12 +8989,12 @@ void put_echo_char(unsigned int data, int style)
 	if (data == '\r' && lastdata == '\r') // reject multiple CRs
 		return;
 
-	if (data == '\a') {
+	if (mode == MODE_RTTY && data == '\a') {
 		if (progdefaults.visibleBELL)
 			echo_chd.rx((unsigned char *)ascii2[7]);
 		REQ(TTY_bell);
 	} else if (asc == NULL)
-		echo_chd.rx(data);
+		echo_chd.rx(data & 0xFF);
 	else
 		echo_chd.rx((unsigned char *)asc[data & 0xFF]);
 
diff --git a/src/dialogs/guide.cxx b/src/dialogs/guide.cxx
index 3f4e6f18..3dc7cc54 100644
--- a/src/dialogs/guide.cxx
+++ b/src/dialogs/guide.cxx
@@ -2039,7 +2039,7 @@ numeric keypad&#8217;s 0-9 the sequence will be discarded.</p></div>\n\
 <div id=\"footer\">\n\
 <div id=\"footer-text\">\n\
 Last updated\n\
- 2018-02-24 13:42:49 \n\
+ 2020-06-22 01:38:45 \n\
 </div>\n\
 <div id=\"footer-badges\">\n\
 <a href=\"http://validator.w3.org/check?uri=referer\">\n\
diff --git a/src/feld/feld.cxx b/src/feld/feld.cxx
index 813d0a7a..4d927441 100644
--- a/src/feld/feld.cxx
+++ b/src/feld/feld.cxx
@@ -101,13 +101,19 @@ void feld::init()
 
 }
 
+static void set_HellBW(double val)
+{
+	sldrHellBW->value(val);
+}
+
 void feld::restart()
 {
-	set_bandwidth(hell_bandwidth);
+//	set_bandwidth(hell_bandwidth);
 
 RxColumnLen = progdefaults.HellRcvHeight;
 TxColumnLen = FELD_COLUMN_LEN;
 
+	int fbw;
 	switch (mode) {
 // Amplitude modulation modes
 		case MODE_FELDHELL:
@@ -117,7 +123,10 @@ TxColumnLen = FELD_COLUMN_LEN;
 			downsampleinc = (double)(rxpixrate/samplerate);
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = txpixrate;
-			filter_bandwidth = progdefaults.HELL_BW_FH;
+			fbw = 1.2 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_FH = filter_bandwidth = fbw;
 			break;
 		case MODE_SLOWHELL:
 			feldcolumnrate = 2.1875;
@@ -126,7 +135,10 @@ TxColumnLen = FELD_COLUMN_LEN;
 			downsampleinc = (double)(rxpixrate/samplerate);
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = txpixrate;
-			filter_bandwidth = progdefaults.HELL_BW_SH;
+			fbw = 1.2 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_SH = filter_bandwidth = fbw;
 			break;
 		case MODE_HELLX5:
 			feldcolumnrate = 87.5;
@@ -135,7 +147,10 @@ TxColumnLen = FELD_COLUMN_LEN;
 			downsampleinc = (double)(rxpixrate/samplerate);
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = txpixrate;
-			filter_bandwidth = progdefaults.HELL_BW_X5;
+			fbw = 1.2 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_X5 = filter_bandwidth = fbw;
 			break;
 		case MODE_HELLX9:
 			feldcolumnrate = 157.5;
@@ -144,10 +159,13 @@ TxColumnLen = FELD_COLUMN_LEN;
 			downsampleinc = (double)(rxpixrate/samplerate);
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = txpixrate;
-			filter_bandwidth = progdefaults.HELL_BW_X9;
+			fbw = 1.2 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_X9 = filter_bandwidth = fbw;
 			break;
 // Frequency modulation modes
-		case MODE_FSKHELL:
+		case MODE_FSKH245:
 			feldcolumnrate = 17.5;
 			rxpixrate = (RxColumnLen * feldcolumnrate);
 			txpixrate = (TxColumnLen * feldcolumnrate);
@@ -155,7 +173,10 @@ TxColumnLen = FELD_COLUMN_LEN;
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = 122.5;
 			phi2freq = samplerate / M_PI / (hell_bandwidth / 2.0);
-			filter_bandwidth = progdefaults.HELL_BW_FSK;
+			fbw = 3.0 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_FSKH245 = filter_bandwidth = fbw;
 			cap |= CAP_REV;
 			break;
 		case MODE_FSKH105:
@@ -166,7 +187,10 @@ TxColumnLen = FELD_COLUMN_LEN;
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = 55;
 			phi2freq = samplerate / M_PI / (hell_bandwidth / 2.0);
-			filter_bandwidth = progdefaults.HELL_BW_FSK105;
+			fbw = 4.0 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_FSKH105 = filter_bandwidth = fbw;
 			cap |= CAP_REV;
 			break;
 		case MODE_HELL80:
@@ -177,13 +201,20 @@ TxColumnLen = FELD_COLUMN_LEN;
 			upsampleinc = (double)(txpixrate/samplerate);
 			hell_bandwidth = 300;
 			phi2freq = samplerate / M_PI / (hell_bandwidth / 2.0);
-			filter_bandwidth = progdefaults.HELL_BW_HELL80;
+			fbw = 2.5 * hell_bandwidth;
+			if (fbw % 5 > 2) fbw += (5 - (fbw % 5));
+			else fbw -= (fbw % 5);
+			progdefaults.HELL_BW_HELL80 = filter_bandwidth = fbw;
 			cap |= CAP_REV;
 			break;
 		default :
 			feldcolumnrate = 17.5;
 			break;
 	}
+	set_bandwidth(hell_bandwidth);
+	progdefaults.HELL_BW = filter_bandwidth;
+
+	REQ(set_HellBW, filter_bandwidth);
 /*
 std::cout <<
 "HellRcvHeight:      " << progdefaults.HellRcvHeight << "\n" <<
@@ -204,7 +235,7 @@ std::cout <<
 feld::~feld()
 {
 	if (hilbert) delete hilbert;
-	if (bpfilt) delete bpfilt;
+	if (lpfilt) delete lpfilt;
 	if (bbfilt) delete bbfilt;
 	if (minmaxfilt) delete minmaxfilt;
 }
@@ -219,17 +250,16 @@ feld::feld(trx_mode m)
 
 	restart();
 
-	progdefaults.HELL_BW = filter_bandwidth;
+//	progdefaults.HELL_BW = filter_bandwidth;
+//	set_bandwidth(hell_bandwidth);
 
 	hilbert = new C_FIR_filter();
 	hilbert->init_hilbert(37, 1);
 
-	set_bandwidth(hell_bandwidth);
-
 	wf->redraw_marker();
 
-	lp = filter_bandwidth / samplerate;
-	bpfilt = new fftfilt(0, lp, 1024);
+	lp = 0.5 * filter_bandwidth / samplerate;
+	lpfilt = new fftfilt(0, lp, 1024);
 
 	bbfilt = new Cmovavg(8);
 	average = new Cmovavg( static_cast<int>(500 / downsampleinc));
@@ -261,7 +291,7 @@ cmplx feld::mixer(cmplx in)
 	return z;
 }
 
-void feld::FSKHELL_rx(cmplx z)
+void feld::FSKH_rx(cmplx z)
 {
 	guard_lock raster_lock(&feld_mutex);
 
@@ -299,8 +329,7 @@ void feld::FSKHELL_rx(cmplx z)
 
 	vid = f + 0.5;
 	vid = CLAMP(vid, 0.0, 1.0);
-	if (mode == MODE_HELL80)
-		vid = 1.0 - vid;
+
 	if (reverse)
 		vid = 1.0 - vid;
 	if (progdefaults.HellBlackboard)
@@ -419,18 +448,18 @@ int feld::rx_process(const double *buf, int len)
 			case MODE_HELLX9:
 				progdefaults.HELL_BW_X9 = filter_bandwidth;
 				break;
-			case MODE_FSKHELL:
-				progdefaults.HELL_BW_FSK = filter_bandwidth;
+			case MODE_FSKH245:
+				progdefaults.HELL_BW_FSKH245 = filter_bandwidth;
 				break;
 			case MODE_FSKH105:
-				progdefaults.HELL_BW_FSK105 = filter_bandwidth;
+				progdefaults.HELL_BW_FSKH105 = filter_bandwidth;
 				break;
 			case MODE_HELL80:
 				progdefaults.HELL_BW_HELL80 = filter_bandwidth;
 		}
 
-		lp = filter_bandwidth / samplerate;
-		bpfilt->create_filter(0, lp);
+		lp = 0.5 * filter_bandwidth / samplerate;
+		lpfilt->create_filter(0, lp);
 		wf->redraw_marker();
 	}
 
@@ -439,19 +468,19 @@ int feld::rx_process(const double *buf, int len)
 		z = cmplx( *buf, *buf );
 		buf++;
 
-		hilbert->run(z, z);
+/// hilbert transform need for complex frequency shift
 
-		/* ...so it can be shifted in frequency */
+		hilbert->run(z, z);
 		z = mixer(z);
 
-		n = bpfilt->run(z, &zp);
+		n = lpfilt->run(z, &zp);
 
 		switch (mode) {
-			case MODE_FSKHELL:
+			case MODE_FSKH245:
 			case MODE_FSKH105:
 			case MODE_HELL80:
 				for (i = 0; i < n; i++) {
-					FSKHELL_rx(zp[i]);
+					FSKH_rx(zp[i]);
 				}
 				break;
 			default:
@@ -538,11 +567,11 @@ void feld::send_symbol(int currsymb, int nextsymb)
 		initKeyWaveform();
 	}
 
-	if (mode == MODE_FSKHELL || mode == MODE_FSKH105 || mode == MODE_HELL80)
+	if (mode == MODE_FSKH245 || mode == MODE_FSKH105 || mode == MODE_HELL80)
 		tone += (reverse ? -1 : 1) * (currsymb ? -1 : 1) * bandwidth / 2.0;
 	for (;;) {
 		switch (mode) {
-			case MODE_FSKHELL : case MODE_FSKH105 : case MODE_HELL80 :
+			case MODE_FSKH245 : case MODE_FSKH105 : case MODE_HELL80 :
 				break;
 			case MODE_HELLX5 : case MODE_HELLX9 :
 				Amp = currsymb;
diff --git a/src/flarq-src/arqdialogs.cxx b/src/flarq-src/arqdialogs.cxx
index 00b0190b..ed3d9b2e 100644
--- a/src/flarq-src/arqdialogs.cxx
+++ b/src/flarq-src/arqdialogs.cxx
@@ -91,7 +91,7 @@ Fl_Box *indCONNECT=(Fl_Box *)0;
 
 Fl_Input2 *txtState=(Fl_Input2 *)0;
 
-Fl_Text_Display *txtARQ=(Fl_Text_Display *)0;
+FTextView *txtARQ=(FTextView *)0;
 
 Fl_Input2 *txtStatus=(Fl_Input2 *)0;
 
@@ -105,7 +105,7 @@ static void cb_btnClearText(Fl_Button*, void*) {
   cbClearText();
 }
 
-Fl_Text_Display *txtRX=(Fl_Text_Display *)0;
+FTextView *txtRX=(FTextView *)0;
 
 Fl_Input2 *txtTX=(Fl_Input2 *)0;
 
@@ -194,11 +194,19 @@ Fl_Double_Window* arq_dialog() {
       } // Fl_Group* o
       o->end();
     } // Fl_Group* o
-    { txtARQ = new Fl_Text_Display(0, 87, 515, 117);
+    { txtARQ = new FTextView(0, 87, 515, 117);
       txtARQ->box(FL_DOWN_BOX);
+      txtARQ->color(FL_BACKGROUND2_COLOR);
+      txtARQ->selection_color(FL_SELECTION_COLOR);
+      txtARQ->labeltype(FL_NORMAL_LABEL);
+      txtARQ->labelfont(0);
+      txtARQ->labelsize(14);
+      txtARQ->labelcolor(FL_FOREGROUND_COLOR);
       txtARQ->textfont(4);
+      txtARQ->align(Fl_Align(FL_ALIGN_TOP));
+      txtARQ->when(FL_WHEN_RELEASE);
       Fl_Group::current()->resizable(txtARQ);
-    } // Fl_Text_Display* txtARQ
+    } // FTextView* txtARQ
     { Fl_Group* o = new Fl_Group(0, 206, 516, 26);
       o->box(FL_DOWN_BOX);
       { Fl_Input2* o = txtStatus = new Fl_Input2(5, 208, 220, 22);
@@ -242,11 +250,19 @@ Fl_Double_Window* arq_dialog() {
     { Fl_Group* o = new Fl_Group(0, 235, 515, 180, "Plain Talk");
       o->box(FL_ENGRAVED_FRAME);
       o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      { txtRX = new Fl_Text_Display(5, 255, 505, 130);
+      { txtRX = new FTextView(5, 255, 505, 130);
         txtRX->box(FL_DOWN_BOX);
+        txtRX->color(FL_BACKGROUND2_COLOR);
+        txtRX->selection_color(FL_SELECTION_COLOR);
+        txtRX->labeltype(FL_NORMAL_LABEL);
+        txtRX->labelfont(0);
+        txtRX->labelsize(14);
+        txtRX->labelcolor(FL_FOREGROUND_COLOR);
         txtRX->textfont(4);
+        txtRX->align(Fl_Align(FL_ALIGN_TOP));
+        txtRX->when(FL_WHEN_RELEASE);
         Fl_Group::current()->resizable(txtRX);
-      } // Fl_Text_Display* txtRX
+      } // FTextView* txtRX
       { Fl_Group* o = new Fl_Group(0, 387, 515, 28);
         o->box(FL_ENGRAVED_FRAME);
         { txtTX = new Fl_Input2(5, 390, 450, 22, "input:");
@@ -344,11 +360,18 @@ static void cb_btnOK(Fl_Button*, void*) {
   closeConfig();
 }
 
+Fl_Check_Button *btn_restart_beacon=(Fl_Check_Button *)0;
+
+static void cb_btn_restart_beacon(Fl_Check_Button* o, void*) {
+  restart_beacon = (int)(o->value());
+cbSetConfig();
+}
+
 Fl_Double_Window* arq_configure() {
   Fl_Double_Window* w;
   { Fl_Double_Window* o = new Fl_Double_Window(480, 190, "Configure flarq");
     w = o; if (w) {/* empty */}
-    { Fl_Input2* o = txtMyCall = new Fl_Input2(98, 13, 150, 24, "My Call:");
+    { Fl_Input2* o = txtMyCall = new Fl_Input2(98, 13, 150, 22, "My Call:");
       txtMyCall->box(FL_DOWN_BOX);
       txtMyCall->color(FL_BACKGROUND2_COLOR);
       txtMyCall->selection_color(FL_SELECTION_COLOR);
@@ -361,7 +384,7 @@ Fl_Double_Window* arq_configure() {
       txtMyCall->when(FL_WHEN_RELEASE);
       o->value(MyCall.c_str());
     } // Fl_Input2* txtMyCall
-    { Fl_Input2* o = txtBEACONTXT = new Fl_Input2(98, 42, 370, 24, "Beacon Text");
+    { Fl_Input2* o = txtBEACONTXT = new Fl_Input2(98, 42, 370, 22, "Beacon Text");
       txtBEACONTXT->tooltip("Text for the beacon 64 chars max");
       txtBEACONTXT->box(FL_DOWN_BOX);
       txtBEACONTXT->color(FL_BACKGROUND2_COLOR);
@@ -427,7 +450,7 @@ Fl_Double_Window* arq_configure() {
       o->step(15);
       o->value(itimeout / 1000);
     } // Fl_Spinner2* spnTimeout
-    { Fl_Spinner2* o = spnTxDelay = new Fl_Spinner2(317, 98, 70, 22, "Tx delay (msec):");
+    { Fl_Spinner2* o = spnTxDelay = new Fl_Spinner2(317, 126, 70, 22, "Tx delay (msec):");
       spnTxDelay->tooltip("delay from Rx to Tx");
       spnTxDelay->box(FL_NO_BOX);
       spnTxDelay->color(FL_BACKGROUND_COLOR);
@@ -472,6 +495,7 @@ Fl_Double_Window* arq_configure() {
       spnIDtimer->labelcolor(FL_FOREGROUND_COLOR);
       spnIDtimer->minimum(0);
       spnIDtimer->maximum(10);
+      spnIDtimer->value(10);
       spnIDtimer->callback((Fl_Callback*)cb_spnIDtimer);
       spnIDtimer->align(Fl_Align(FL_ALIGN_LEFT));
       spnIDtimer->when(FL_WHEN_RELEASE);
@@ -480,7 +504,7 @@ Fl_Double_Window* arq_configure() {
       o->step(1);
       o->value(idtimer);
     } // Fl_Spinner2* spnIDtimer
-    { choiceBlockSize = new Fl_ComboBox(314, 126, 72, 24, "Block Size:");
+    { choiceBlockSize = new Fl_ComboBox(314, 155, 72, 22, "Block Size:");
       choiceBlockSize->box(FL_DOWN_BOX);
       choiceBlockSize->color(FL_BACKGROUND2_COLOR);
       choiceBlockSize->selection_color(FL_BACKGROUND_COLOR);
@@ -496,6 +520,13 @@ Fl_Double_Window* arq_configure() {
     { btnOK = new Fl_Button(406, 154, 62, 24, "Ok");
       btnOK->callback((Fl_Callback*)cb_btnOK);
     } // Fl_Button* btnOK
+    { Fl_Check_Button* o = btn_restart_beacon = new Fl_Check_Button(448, 101, 20, 20, "Restart Beacon");
+      btn_restart_beacon->tooltip("Restart beacon after disconnect");
+      btn_restart_beacon->down_box(FL_DOWN_BOX);
+      btn_restart_beacon->callback((Fl_Callback*)cb_btn_restart_beacon);
+      btn_restart_beacon->align(Fl_Align(FL_ALIGN_LEFT));
+      o->value(restart_beacon);
+    } // Fl_Check_Button* btn_restart_beacon
     o->end();
   } // Fl_Double_Window* o
   return w;
@@ -543,11 +574,13 @@ Fl_Double_Window* arq_SendSelect() {
   return w;
 }
 
+Fl_Input2 *inpMailFrom=(Fl_Input2 *)0;
+
 Fl_Input2 *inpMailTo=(Fl_Input2 *)0;
 
 Fl_Input2 *inpMailSubj=(Fl_Input2 *)0;
 
-Fl_Text_Editor *txtMailText=(Fl_Text_Editor *)0;
+F_Edit *txtMailText=(F_Edit *)0;
 
 Fl_Button *btnOpenComposedMail=(Fl_Button *)0;
 
@@ -581,9 +614,20 @@ static void cb_btnSaveComposedMail(Fl_Button*, void*) {
 
 Fl_Double_Window* arq_composer() {
   Fl_Double_Window* w;
-  { Fl_Double_Window* o = new Fl_Double_Window(515, 275, "Flarq Mail Composer");
+  { Fl_Double_Window* o = new Fl_Double_Window(515, 300, "Flarq Mail Composer");
     w = o; if (w) {/* empty */}
-    { inpMailTo = new Fl_Input2(48, 4, 460, 24, "To:");
+    { inpMailFrom = new Fl_Input2(47, 5, 460, 24, "From");
+      inpMailFrom->box(FL_DOWN_BOX);
+      inpMailFrom->color(FL_BACKGROUND2_COLOR);
+      inpMailFrom->selection_color(FL_SELECTION_COLOR);
+      inpMailFrom->labeltype(FL_NORMAL_LABEL);
+      inpMailFrom->labelfont(0);
+      inpMailFrom->labelsize(14);
+      inpMailFrom->labelcolor(FL_FOREGROUND_COLOR);
+      inpMailFrom->align(Fl_Align(FL_ALIGN_LEFT));
+      inpMailFrom->when(FL_WHEN_RELEASE);
+    } // Fl_Input2* inpMailFrom
+    { inpMailTo = new Fl_Input2(48, 32, 460, 24, "To");
       inpMailTo->box(FL_DOWN_BOX);
       inpMailTo->color(FL_BACKGROUND2_COLOR);
       inpMailTo->selection_color(FL_SELECTION_COLOR);
@@ -594,7 +638,7 @@ Fl_Double_Window* arq_composer() {
       inpMailTo->align(Fl_Align(FL_ALIGN_LEFT));
       inpMailTo->when(FL_WHEN_RELEASE);
     } // Fl_Input2* inpMailTo
-    { inpMailSubj = new Fl_Input2(48, 30, 460, 24, "Subj:");
+    { inpMailSubj = new Fl_Input2(48, 59, 460, 24, "Subj");
       inpMailSubj->box(FL_DOWN_BOX);
       inpMailSubj->color(FL_BACKGROUND2_COLOR);
       inpMailSubj->selection_color(FL_SELECTION_COLOR);
@@ -605,42 +649,51 @@ Fl_Double_Window* arq_composer() {
       inpMailSubj->align(Fl_Align(FL_ALIGN_LEFT));
       inpMailSubj->when(FL_WHEN_RELEASE);
     } // Fl_Input2* inpMailSubj
-    { txtMailText = new Fl_Text_Editor(0, 56, 510, 188);
+    { txtMailText = new F_Edit(0, 85, 510, 188);
+      txtMailText->box(FL_DOWN_FRAME);
+      txtMailText->color(FL_BACKGROUND2_COLOR);
+      txtMailText->selection_color(FL_SELECTION_COLOR);
+      txtMailText->labeltype(FL_NORMAL_LABEL);
+      txtMailText->labelfont(0);
+      txtMailText->labelsize(14);
+      txtMailText->labelcolor(FL_FOREGROUND_COLOR);
+      txtMailText->textfont(4);
+      txtMailText->align(Fl_Align(FL_ALIGN_TOP));
+      txtMailText->when(FL_WHEN_RELEASE);
       Fl_Group::current()->resizable(txtMailText);
-    } // Fl_Text_Editor* txtMailText
-    { Fl_Pack* o = new Fl_Pack(0, 247, 515, 28);
-      o->type(1);
-      { btnOpenComposedMail = new Fl_Button(4, 251, 70, 20, "Open");
+    } // F_Edit* txtMailText
+    { Fl_Group* o = new Fl_Group(0, 274, 515, 28);
+      { btnOpenComposedMail = new Fl_Button(4, 278, 70, 20, "Open");
         btnOpenComposedMail->tooltip("Open existing Composed email");
         btnOpenComposedMail->callback((Fl_Callback*)cb_btnOpenComposedMail);
       } // Fl_Button* btnOpenComposedMail
-      { new Fl_Box(75, 251, 5, 20);
+      { new Fl_Box(75, 278, 5, 20);
       } // Fl_Box* o
-      { btnClearComposer = new Fl_Button(81, 251, 70, 20, "Clear");
+      { btnClearComposer = new Fl_Button(81, 278, 70, 20, "Clear");
         btnClearComposer->tooltip("Clear all fields");
         btnClearComposer->callback((Fl_Callback*)cb_btnClearComposer);
       } // Fl_Button* btnClearComposer
-      { new Fl_Box(152, 251, 5, 20);
+      { new Fl_Box(152, 278, 5, 20);
       } // Fl_Box* o
-      { btnUseTemplate = new Fl_Button(159, 251, 70, 20, "Template");
+      { btnUseTemplate = new Fl_Button(159, 278, 70, 20, "Template");
         btnUseTemplate->tooltip("Use template file");
         btnUseTemplate->callback((Fl_Callback*)cb_btnUseTemplate);
       } // Fl_Button* btnUseTemplate
-      { Fl_Box* o = new Fl_Box(230, 251, 127, 20);
+      { Fl_Box* o = new Fl_Box(230, 278, 127, 20);
         Fl_Group::current()->resizable(o);
       } // Fl_Box* o
-      { btnCancelComposedMail = new Fl_Button(358, 251, 70, 20, "Cancel");
+      { btnCancelComposedMail = new Fl_Button(358, 278, 70, 20, "Cancel");
         btnCancelComposedMail->tooltip("Close Dialog");
         btnCancelComposedMail->callback((Fl_Callback*)cb_btnCancelComposedMail);
       } // Fl_Button* btnCancelComposedMail
-      { new Fl_Box(429, 251, 5, 20);
+      { new Fl_Box(429, 278, 5, 20);
       } // Fl_Box* o
-      { btnSaveComposedMail = new Fl_Button(436, 251, 70, 20, "Save");
+      { btnSaveComposedMail = new Fl_Button(436, 278, 70, 20, "Save");
         btnSaveComposedMail->tooltip("Save this message (shift click Save Template)");
         btnSaveComposedMail->callback((Fl_Callback*)cb_btnSaveComposedMail);
       } // Fl_Button* btnSaveComposedMail
       o->end();
-    } // Fl_Pack* o
+    } // Fl_Group* o
     o->end();
   } // Fl_Double_Window* o
   return w;
diff --git a/src/flarq-src/arqdialogs.fl b/src/flarq-src/arqdialogs.fl
index 8ec715e9..cc383fcf 100644
--- a/src/flarq-src/arqdialogs.fl
+++ b/src/flarq-src/arqdialogs.fl
@@ -1,5 +1,5 @@
 # data file for the Fltk User Interface Designer (fluid)
-version 1.0304
+version 1.0305
 header_name {.h}
 code_name {.cxx}
 decl {\#include <config.h>} {private local
@@ -20,12 +20,11 @@ decl {\#include "flslider2.h"} {public local
 decl {\#include "combo.h"} {public local
 }
 
-Function {arq_dialog()} {open
-} {
+Function {arq_dialog()} {} {
   Fl_Window {} {
     label flarq
-    callback {arqCLOSE();}
-    xywh {825 38 515 415} type Double color 50 resizable visible
+    callback {arqCLOSE();} open
+    xywh {848 29 515 415} type Double color 50 resizable visible
   } {
     Fl_Menu_Bar mnu {open
       xywh {0 0 516 22}
@@ -142,6 +141,8 @@ Function {arq_dialog()} {open
     }
     Fl_Text_Display txtARQ {
       xywh {0 87 515 117} box DOWN_BOX textfont 4 resizable
+      code0 {\#include "FTextView.h"}
+      class FTextView
     }
     Fl_Group {} {open
       xywh {0 206 516 26} box DOWN_BOX
@@ -173,6 +174,7 @@ Function {arq_dialog()} {open
     } {
       Fl_Text_Display txtRX {
         xywh {5 255 505 130} box DOWN_BOX textfont 4 resizable
+        class FTextView
       }
       Fl_Group {} {open
         xywh {0 387 515 28} box ENGRAVED_FRAME
@@ -199,26 +201,26 @@ Function {arq_configure()} {open
 } {
   Fl_Window {} {
     label {Configure flarq} open
-    xywh {741 499 480 190} type Double resizable visible
+    xywh {658 503 480 190} type Double resizable visible
   } {
     Fl_Input txtMyCall {
       label {My Call:}
       callback {changeMyCall(o->value());}
-      xywh {98 13 150 24}
+      xywh {98 13 150 22}
       code0 {o->value(MyCall.c_str());}
       class Fl_Input2
     }
     Fl_Input txtBEACONTXT {
       label {Beacon Text}
       callback {changeBeaconText(o->value());}
-      tooltip {Text for the beacon 64 chars max} xywh {98 42 370 24} resizable
+      tooltip {Text for the beacon 64 chars max} xywh {98 42 370 22} resizable
       code0 {o->value(beacontext.c_str());}
       class Fl_Input2
     }
     Fl_Spinner spnRetries {
       label {Retries:}
       callback {iretries = (int)o->value();
-cbSetConfig();} selected
+cbSetConfig();}
       tooltip {\# retries before connection declared down} xywh {146 71 45 22}
       code0 {o->minimum(2);}
       code1 {o->maximum(20);}
@@ -252,7 +254,7 @@ cbSetConfig();}
       label {Tx delay (msec):}
       callback {txdelay = (int)o->value();
 cbSetConfig();}
-      tooltip {delay from Rx to Tx} xywh {317 98 70 22}
+      tooltip {delay from Rx to Tx} xywh {317 126 70 22}
       code0 {o->minimum(200);}
       code1 {o->maximum(2000);}
       code2 {o->step(100);}
@@ -273,7 +275,7 @@ cbSetConfig();}
       label {ID timer (min):}
       callback {idtimer = (int)(o->value());
 cb_idtimer();}
-      tooltip {ID timer\\n0 = disable} xywh {121 155 70 22} minimum 0 maximum 10
+      tooltip {ID timer\\n0 = disable} xywh {121 155 70 22} minimum 0 maximum 10 value 10
       code0 {o->minimum(0);}
       code1 {o->maximum(10);}
       code2 {o->step(1);}
@@ -283,8 +285,8 @@ cb_idtimer();}
     Fl_Group choiceBlockSize {
       label {Block Size:}
       callback {exponent = (int)o->index() + 4;
-cbSetConfig();} open
-      xywh {314 126 72 24} box DOWN_BOX color 7 align 4
+cbSetConfig();} open selected
+      xywh {314 155 72 22} box DOWN_BOX color 7 align 4
       class Fl_ComboBox
     } {}
     Fl_Button btnOK {
@@ -292,6 +294,13 @@ cbSetConfig();} open
       callback {closeConfig();}
       xywh {406 154 62 24}
     }
+    Fl_Check_Button btn_restart_beacon {
+      label {Restart Beacon}
+      callback {restart_beacon = (int)(o->value());
+cbSetConfig();}
+      tooltip {Restart beacon after disconnect} xywh {448 101 20 20} down_box DOWN_BOX align 4
+      code0 {o->value(restart_beacon);}
+    }
   }
 }
 
@@ -323,64 +332,71 @@ Function {arq_SendSelect()} {} {
 Function {arq_composer()} {} {
   Fl_Window {} {
     label {Flarq Mail Composer} open
-    xywh {575 537 515 275} type Double hide resizable
+    xywh {848 430 515 300} type Double hide resizable
   } {
+    Fl_Input inpMailFrom {
+      label From
+      xywh {47 5 460 24}
+      class Fl_Input2
+    }
     Fl_Input inpMailTo {
-      label {To:}
-      xywh {48 4 460 24}
+      label To
+      xywh {48 32 460 24}
       class Fl_Input2
     }
     Fl_Input inpMailSubj {
-      label {Subj:}
-      xywh {48 30 460 24}
+      label Subj
+      xywh {48 59 460 24}
       class Fl_Input2
     }
     Fl_Text_Editor txtMailText {
-      xywh {0 56 510 188} resizable
+      xywh {0 85 510 188} textfont 4 resizable
+      code0 {\#include "F_Edit.h"}
+      class F_Edit
     }
-    Fl_Pack {} {open
-      xywh {0 247 515 28} type HORIZONTAL
+    Fl_Group {} {open
+      xywh {0 274 515 28}
     } {
       Fl_Button btnOpenComposedMail {
         label Open
         callback {cb_OpenComposeMail();}
-        tooltip {Open existing Composed email} xywh {4 251 70 20}
+        tooltip {Open existing Composed email} xywh {4 278 70 20}
         code0 {extern void cb_OpenComposeMail();}
       }
       Fl_Box {} {
-        xywh {75 251 5 20}
+        xywh {75 278 5 20}
       }
       Fl_Button btnClearComposer {
         label Clear
         callback {cb_ClearComposer();}
-        tooltip {Clear all fields} xywh {81 251 70 20}
+        tooltip {Clear all fields} xywh {81 278 70 20}
         code0 {extern void cb_ClearComposer();}
       }
       Fl_Box {} {
-        xywh {152 251 5 20}
+        xywh {152 278 5 20}
       }
       Fl_Button btnUseTemplate {
         label Template
         callback {cb_UseTemplate();}
-        tooltip {Use template file} xywh {159 251 70 20}
+        tooltip {Use template file} xywh {159 278 70 20}
         code0 {extern void cb_UseTemplate();}
       }
       Fl_Box {} {
-        xywh {230 251 127 20} resizable
+        xywh {230 278 127 20} resizable
       }
       Fl_Button btnCancelComposedMail {
         label Cancel
         callback {cb_CancelComposeMail();}
-        tooltip {Close Dialog} xywh {358 251 70 20}
+        tooltip {Close Dialog} xywh {358 278 70 20}
         code0 {extern void cb_CancelComposeMail();}
       }
       Fl_Box {} {
-        xywh {429 251 5 20}
+        xywh {429 278 5 20}
       }
       Fl_Button btnSaveComposedMail {
         label Save
         callback {cb_SaveComposeMail();}
-        tooltip {Save this message (shift click Save Template)} xywh {436 251 70 20}
+        tooltip {Save this message (shift click Save Template)} xywh {436 278 70 20}
         code0 {extern void cb_SaveComposeMail();}
       }
     }
diff --git a/src/flarq-src/flarq.cxx b/src/flarq-src/flarq.cxx
index 17b8d7e2..bbc746da 100644
--- a/src/flarq-src/flarq.cxx
+++ b/src/flarq-src/flarq.cxx
@@ -79,6 +79,8 @@
 
 #include "xml_server.h"
 
+#include "FTextView.h"
+
 #define FLDIGI_port "7322"
 #define MPSK_port "3122"
 
@@ -128,19 +130,9 @@ bool SHOWDEBUG = false;
 
 extern void STATUSprint(string s);
 
-Fl_Text_Buffer *txtbuffARQ;
-Fl_Text_Buffer *stylebufARQ;
-Fl_Text_Buffer *txtbuffRX;
-Fl_Text_Buffer *stylebufRX;
-Fl_Text_Buffer *txtbuffComposer;
-//Fl_Text_Buffer *styleComposer;
-
-Fl_Text_Display::Style_Table_Entry styletable[] = {     // Style table
-  { FL_BLACK,      FL_SCREEN,        FL_NORMAL_SIZE }, // A - RX
-  { FL_DARK_RED,   FL_SCREEN,        FL_NORMAL_SIZE }, // B - TX
-  { FL_DARK_GREEN, FL_SCREEN,        FL_NORMAL_SIZE }, // C - DEBUG rx text
-  { FL_MAGENTA,    FL_SCREEN,        FL_NORMAL_SIZE }  // D - DEBUG tx text
-};
+Fl_Text_Buffer_mod *txtbuffARQ;
+Fl_Text_Buffer_mod *txtbuffRX;
+Fl_Text_Buffer_mod *txtbuffComposer;
 
 Fl_Double_Window *arqwin = 0;
 Fl_Double_Window *dlgconfig = 0;
@@ -194,8 +186,10 @@ long   itimeout = 60000;
 int    idtimer = 10;
 int	   bcnInterval = 30;
 
-bool   autobeacon = false;
+enum {OFF, ON, WAIT};
+int    autobeacon = OFF;
 bool   beaconrcvd = false;
+bool   restart_beacon = false;
 
 int    blocksSent = 0;
 
@@ -411,14 +405,25 @@ void readComposedFile(string filename)
 		char szline[10000];
 		string fline, tempstr;
 		size_t p;
-		txtbuffComposer->text("");
+		txtMailText->clear();
+		inpMailFrom->value("");
+		inpMailTo->value("");
+		inpMailSubj->value("");
 		while (!textfile.eof()) {
 			memset(szline,0, 10000);
 			textfile.getline(szline,10000);
 			fline = szline;
-			if ((p = fline.find("//FLARQ COMPOSER")) != string::npos) continue;
-			if ((p = fline.find("Date: ")) != string::npos) continue;
-			if ((p = fline.find("From:")) != string::npos) continue;
+			if ((p = fline.find("//FLARQ COMPOSER")) != string::npos)
+				continue;
+			if ((p = fline.find("Date: ")) != string::npos)
+				continue;
+			if ((p = fline.find("Content-Type:")) != string::npos)
+				continue;
+			if ((p = fline.find("From: ")) != string::npos) {
+				tempstr = fline.substr(p + 6);
+				inpMailFrom->value(tempstr.c_str());
+				continue;
+			}
 			if ((p = fline.find("To: ")) != string::npos) {
 				tempstr = fline.substr(p + 4);
 				p = tempstr.find("<");
@@ -433,8 +438,8 @@ void readComposedFile(string filename)
 				continue;
 			}
 			if (strlen(szline) == 0 && txtbuffComposer->length() == 0) continue;
-			txtbuffComposer->append(szline);
-			txtbuffComposer->append("\n");
+			txtMailText->add(szline);
+			txtMailText->add("\n");
 		}
 		textfile.close();
 	}
@@ -452,7 +457,8 @@ void cb_UseTemplate()
 void cb_ClearComposer()
 {
 	sendfilename.clear();
-	txtbuffComposer->text("");
+	txtMailText->clear();
+	inpMailFrom->value("");
 	inpMailTo->value("");
 	inpMailSubj->value("");
 }
@@ -499,10 +505,12 @@ void saveComposedText(string filename)
 	struct tm *gmt = gmtime(&maildt);
 	strftime(szmaildt, sizeof(szmaildt), "%x %X", gmt);
 	textfile << "Date: " << szmaildt << endl;
+	textfile << "From: " << inpMailFrom->value() << endl;
 	textfile << "To: " << inpMailTo->value() << endl;
-	textfile << "From: " << endl;
 	textfile << "Subject: " << inpMailSubj->value() << endl;
-	textfile << endl << txtbuffComposer->text() << endl;
+	textfile << "Content-Type: text/plain; charset=\"UTF-8\"" << endl;
+	textfile << endl;
+	textfile << txtbuffComposer->text() << endl;
 	textfile.close();
 	cb_ClearComposer();
 }
@@ -552,11 +560,11 @@ void ComposeMail()
 	if (composer == 0) {
 		composer = arq_composer();
 		composer->xclass(PACKAGE_TARNAME);
-		txtbuffComposer = new Fl_Text_Buffer();
-		txtMailText->buffer(txtbuffComposer);
+		txtbuffComposer = txtMailText->buffer();
 		txtMailText->wrap_mode(1,80);
 	}
 	txtbuffComposer->text("");
+	inpMailFrom->value("");
 	inpMailTo->value("");
 	inpMailSubj->value("");
 
@@ -580,7 +588,7 @@ void createAsciiChars()
 	AsciiChars += 0x09; // tab
 	AsciiChars += 0x0A; // lf
 	AsciiChars += 0x0D; // cr
-	for (int n = 20; n < 128; n++) AsciiChars += n;
+	for (int n = 20; n < 256; n++) AsciiChars += n;
 }
 
 void initVals()
@@ -637,6 +645,8 @@ void readConfig()
 			configfile.ignore();
 			configfile.getline(tempstr, 200);
 			beacontext = tempstr;
+			configfile >> restart_beacon;
+
 			digi_arq->myCall(MyCall.c_str());
 			digi_arq->setExponent(exponent);
 			digi_arq->setRetries(iretries);
@@ -673,6 +683,7 @@ void saveConfig()
 		configfile << mainW << endl;
 		configfile << mainH << endl;
 		configfile << beacontext.c_str() << endl;
+		configfile << restart_beacon << endl;
 		configfile.close();
 	}
 }
@@ -891,7 +902,7 @@ char bcnMsg[40];
 
 void arqAutoBeacon(void *)
 {
-	if (autobeacon == true) {
+	if (autobeacon == ON) {
 		int currstate = digi_arq->state();
 		btnCONNECT->deactivate();
 		btnCONNECT->redraw();
@@ -926,7 +937,7 @@ void arqAutoBeacon(void *)
 			btnBEACON->redraw();
 			txtBeaconing->value("Beacon Off");
 		}
-	} else {
+	} else if (autobeacon == OFF) {
 		autobeaconcounter = 0;
 		btnCONNECT->activate();
 		btnCONNECT->redraw();
@@ -936,16 +947,22 @@ void arqAutoBeacon(void *)
 		btnBEACON->activate();
 		btnBEACON->redraw();
 		txtBeaconing->value("Beacon Off");
+	} else { // autobeacon == WAIT
+		btnBEACON->deactivate();
+		btnBEACON->redraw();
+		Fl::repeat_timeout(1.0, arqAutoBeacon);
 	}
 }
 
 void arqBEACON()
 {
-	if (autobeacon == false) {
-		autobeacon = true;
+	if (autobeacon != ON) {
+		autobeacon = ON;
+		btnBEACON->value(1);
 		Fl::add_timeout(0.01, arqAutoBeacon);
 	} else {
-		autobeacon = false;
+		autobeacon = OFF;
+		btnBEACON->value(0);
 	}
 }
 
@@ -1107,10 +1124,7 @@ void payloadText(string s)
 {
 	static char szPercent[10];
 	string text = noCR(s);
-	string style;
 
-	style.append(text.length(), 'A');
-	stylebufARQ->append(style.c_str());
 	txtARQ->insert(text.c_str());
 	txtARQ->show_insert_position();
 	txtARQ->redraw();
@@ -1278,11 +1292,15 @@ void sendEmailFile()
 		TX.append(sendfilename.substr(p));
 		TX.append("\n");
 		TX.append(arqemail);
-		while (textfile.get(cin))
+
 // only allow ASCII printable characters
-			if ((cin >= ' ' && cin <= '~') ||
-				(cin == 0x09 || (cin == 0x0a) || cin == 0x0d) )
-			textin += cin;
+		while (textfile.get(cin)) textin += (cin & 0xFF);
+		textfile.close();
+		if ( textin.find_first_not_of(AsciiChars) != string::npos) {
+			fl_alert2("File contains non-ASCII bytes and must be sent as binary.");
+			return;
+		}
+
 		textfile.close();
 		txtsize = textin.length();
 		arqPayloadSize = txtsize;
@@ -1332,13 +1350,14 @@ void sendAsciiFile()
 			TX.append(p);
 			TX.append("\n");
 			TX.append(arqascii);
-			while (textfile.get(cin))
-				textin += cin;
+
+			while (textfile.get(cin)) textin += (cin & 0xFF);
 			textfile.close();
 			if ( textin.find_first_not_of(AsciiChars) != string::npos) {
 				fl_alert2("File contains non-ASCII bytes and must be sent as binary.");
 				return;
 			}
+
 			txtsize = textin.length();
 			arqPayloadSize = txtsize;
 			blocksSent = 0;
@@ -1367,7 +1386,7 @@ void sendImageFile()
 		fl_alert2("Not connected");
 		return;
 	}
-	const char *p = FSEL::select("ARQ image file", "*.{png,jpg,bmp}\t*", "");
+	const char *p = FSEL::select(_("ARQ image file"), "Images\t*.{png,jpg,bmp}", "");
 	char cin;
 	size_t b64size;
 	string textin = "";
@@ -1496,89 +1515,103 @@ void send_xml_text(std::string fname, std::string txt)
 	sendingfile = false;
 }
 
-char statemsg[80];
+static char statemsg[80];
 
 void dispState()
 {
+	static int last_state = DOWN;
 	int currstate = digi_arq->state();
 	static char xfrmsg[80];
 	static char szPercent[10];
 
 	arqstate = currstate & 0x7F;
-
-	if (arqstate == DOWN  || arqstate == TIMEDOUT) {
-		if (btnCONNECT->active())
-			btnCONNECT->label("Connect");
-		if (!autobeacon)
+	if (last_state != currstate) {
+		last_state = currstate;
+		if (arqstate == DOWN  || arqstate == TIMEDOUT) {
+			if (btnCONNECT->active()) {
+				btnCONNECT->label("Connect");
+			}
 			btnBEACON->activate();
-//		mnuSend->deactivate();
-		mnu->redraw();
-	}
-	else if (arqstate == ARQ_CONNECTED || arqstate == WAITING) {
-		if (btnCONNECT->active())
-			btnCONNECT->label("Disconnect");
-		if (!autobeacon)
-			btnBEACON->deactivate();
-		mnuSend->activate();
-		mnu->redraw();
-	}
-	if (rxARQfile || sendingfile) {
+			mnu->redraw();
+		}
+		else if (arqstate == ARQ_CONNECTED || arqstate == WAITING) {
+			if (btnCONNECT->active())
+				btnCONNECT->label("Disconnect");
+			if (!autobeacon)
+				btnBEACON->deactivate();
+			mnuSend->activate();
+			mnu->redraw();
+		}
+		if (rxARQfile || sendingfile) {
+			if (btnCONNECT->active())
+				btnCONNECT->label("Abort");
+		}
 		if (btnCONNECT->active())
-			btnCONNECT->label("Abort");
-	}
-	if (btnCONNECT->active())
-		btnCONNECT->redraw_label();
-
-	if (currstate <= 0x7F) // receiving
-		switch (currstate) {
-			case ARQ_CONNECTING :
-				snprintf(statemsg, sizeof(statemsg), "CONNECTING: %d", digi_arq->getTimeLeft());
-				txtState->value(statemsg);
-				txtState->redraw();
-				autobeacon = false;
-				break;
-			case WAITFORACK :
-				snprintf(statemsg, sizeof(statemsg), "WAITING FOR ACK   ");
-				txtState->value(statemsg);
-				txtState->redraw();
-				autobeacon = false;
-				break;
-			case ABORT:
-			case ABORTING :
-				txtState->value("ABORTING XFR");
-				txtState->redraw();
-				autobeacon = false;
-				break;
-			case WAITING :
-			case ARQ_CONNECTED :
-				char szState[80];
-				snprintf(szState, sizeof(szState),"CONNECTED - Quality = %4.2f",
-					digi_arq->quality());
-				indCONNECT->color(FL_GREEN);
-				indCONNECT->redraw();
-				txtState->value(szState);
-				txtURCALL->value( digi_arq->urCall().c_str() );
-				autobeacon = false;
-				break;
-			case TIMEDOUT :
-				indCONNECT->color(FL_WHITE);
-				indCONNECT->redraw();
-				txtState->value("TIMED OUT");
-				txtStatus->value("");
-				autobeacon = false;
-				beaconrcvd = false;
-				break;
-			case DISCONNECT:
-			case DISCONNECTING:
-				txtState->value("DISCONNECTING");
-				break;
-			case DOWN :
-			default :
-				indCONNECT->color(FL_WHITE);
-				indCONNECT->redraw();
-				txtState->value("NOT CONNECTED");
-				txtStatus->value("");
+			btnCONNECT->redraw_label();
+
+		if (currstate <= 0x7F) { // receiving
+			switch (currstate) {
+				case ARQ_CONNECTING :
+					snprintf(statemsg, sizeof(statemsg), "CONNECTING: %d", digi_arq->getTimeLeft());
+					txtState->value(statemsg);
+					txtState->redraw();
+					autobeacon = WAIT;
+					break;
+				case WAITFORACK :
+					snprintf(statemsg, sizeof(statemsg), "WAITING FOR ACK   ");
+					txtState->value(statemsg);
+					txtState->redraw();
+					autobeacon = WAIT;
+					break;
+				case ABORT:
+				case ABORTING :
+					txtState->value("ABORTING XFR");
+					txtState->redraw();
+					autobeacon = WAIT;
+					break;
+				case WAITING :
+				case ARQ_CONNECTED :
+					char szState[80];
+					snprintf(szState, sizeof(szState),"CONNECTED - Quality = %4.2f",
+						digi_arq->quality());
+					indCONNECT->color(FL_GREEN);
+					indCONNECT->redraw();
+					txtBeaconing->value("");
+					txtState->value(szState);
+					txtURCALL->value( digi_arq->urCall().c_str() );
+					autobeacon = WAIT;
+					break;
+				case TIMEDOUT :
+					indCONNECT->color(FL_WHITE);
+					indCONNECT->redraw();
+					txtState->value("TIMED OUT");
+					txtStatus->value("");
+					if (restart_beacon && autobeacon != ON) {
+						autobeacon = ON;
+						Fl::remove_timeout(arqAutoBeacon);
+						Fl::add_timeout(1.0 + txdelay / 1000.0, arqAutoBeacon);
+					}
+					beaconrcvd = false;
+					break;
+				case DISCONNECT:
+				case DISCONNECTING:
+					txtState->value("DISCONNECTING");
+					break;
+				case DOWN :
+				default :
+					if (autobeacon != ON && restart_beacon) {
+						btnBEACON->activate();
+						Fl::remove_timeout(arqAutoBeacon);
+						Fl::add_timeout(1.0 + txdelay / 1000.0, arqAutoBeacon);
+					}
+					indCONNECT->color(FL_WHITE);
+					indCONNECT->redraw();
+					autobeacon = ON;
+					txtState->value("NOT CONNECTED");
+					txtStatus->value("");
+			}
 		}
+	}
 
 	if (sendingfile == true) {
 		if (digi_arq->transferComplete()) {
@@ -1671,9 +1704,6 @@ void changeBeaconText(const char *txt)
 
 void TALKprint(string s)
 {
-	string style;
-	style.append(s.length(), 'A');
-	stylebufRX->append(style.c_str());
 	txtRX->insert(s.c_str());
 	txtRX->show_insert_position();
 	txtRX->redraw();
@@ -1697,14 +1727,11 @@ void STATUSprint(string s, double disptime)
 void cbSendTalk()
 {
 	string tosend;
-	string style;
 	tosend = txtTX->value();
 	if (tosend.empty()) return;
 	tosend += '\n';
 	digi_arq->sendPlainText(tosend);
 	txtTX->value("");
-	style.append(tosend.length(), 'B');
-	stylebufRX->append(style.c_str());
 	txtRX->insert(tosend.c_str());
 	txtRX->show_insert_position();
 	txtRX->redraw();
@@ -1733,10 +1760,7 @@ void arqlog(string nom,string s)
 
 void DEBUGrxprint(string s)
 {
-	string style;
 	string text = noCR(s);
-	style.append(text.length(), 'C');
-	stylebufRX->append(style.c_str());
 	txtRX->insert(text.c_str());
 	txtRX->show_insert_position();
 	txtRX->redraw();
@@ -1745,10 +1769,7 @@ void DEBUGrxprint(string s)
 
 void DEBUGtxprint(string s)
 {
-	string style;
 	string text = noCR(s);
-	style.append(text.length(), 'D');
-	stylebufRX->append(style.c_str());
 	txtRX->insert(text.c_str());
 	txtRX->show_insert_position();
 	txtRX->redraw();
@@ -1757,11 +1778,8 @@ void DEBUGtxprint(string s)
 
 void TXecho(string s)
 {
-	string style;
 	blocksSent += s.length();
 	string text = noCR(s);
-	style.append(text.length(), 'B');
-	stylebufARQ->append(style.c_str());
 	txtARQ->insert(text.c_str());
 	txtARQ->show_insert_position();
 	txtARQ->redraw();
@@ -1774,7 +1792,6 @@ void style_unfinished_cb(int, void*) {
 void cbClearTalk()
 {
 	txtbuffRX->text("");
-	stylebufRX->text("");
 }
 
 void cb_arqwin(Fl_Widget *, void*)
@@ -1865,21 +1882,11 @@ int main (int argc, char *argv[] )
 			menu_mnu[i].labelsize(FL_NORMAL_SIZE);
 
 
-	txtbuffRX = new Fl_Text_Buffer();
-	txtRX->buffer(txtbuffRX);
+	txtbuffRX = txtRX->buffer();
 	txtRX->wrap_mode(1,80);
-	stylebufRX = new Fl_Text_Buffer();
-	txtRX->highlight_data(stylebufRX, styletable,
-                          sizeof(styletable) / sizeof(styletable[0]),
-                          'A', style_unfinished_cb, 0);
 
-	txtbuffARQ = new Fl_Text_Buffer();
-	txtARQ->buffer(txtbuffARQ);
+	txtbuffARQ = txtARQ->buffer();
 	txtARQ->wrap_mode(1,80);
-	stylebufARQ = new Fl_Text_Buffer();
-	txtARQ->highlight_data(stylebufARQ, styletable,
-                          sizeof(styletable) / sizeof(styletable[0]),
-                          'A', style_unfinished_cb, 0);
 
 	digi_arq = new arq();
 
@@ -2043,7 +2050,7 @@ void cb_mnuVisitURL(Fl_Widget*, void* arg)
 	// be done with the returned HINSTANCE is to cast it to an
 	// int and compare it with the value 32 or one of the error
 	// codes below." (Error codes omitted to preserve sanity).
-	if ((int)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
+	if ((INT_PTR)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
 		fl_alert2(_("Could not open url:\n%s\n"), url);
 #endif
 }
diff --git a/src/flarq-src/include/arqdialogs.h b/src/flarq-src/include/arqdialogs.h
index 849e834c..3f5a29a8 100644
--- a/src/flarq-src/include/arqdialogs.h
+++ b/src/flarq-src/include/arqdialogs.h
@@ -22,14 +22,14 @@ extern Fl_Input2 *txtBeaconing;
 #include <FL/Fl_Box.H>
 extern Fl_Box *indCONNECT;
 extern Fl_Input2 *txtState;
-#include <FL/Fl_Text_Display.H>
-extern Fl_Text_Display *txtARQ;
+#include "FTextView.h"
+extern FTextView *txtARQ;
 extern Fl_Input2 *txtStatus;
 extern Fl_Input2 *txtStatus2;
 #include <FL/Fl_Progress.H>
 extern Fl_Progress *prgStatus;
 extern Fl_Button *btnClearText;
-extern Fl_Text_Display *txtRX;
+extern FTextView *txtRX;
 extern Fl_Input2 *txtTX;
 extern Fl_Button *btnSendTalk;
 Fl_Double_Window* arq_dialog();
@@ -56,6 +56,8 @@ extern Fl_Spinner2 *spnBcnInterval;
 extern Fl_Spinner2 *spnIDtimer;
 extern Fl_ComboBox *choiceBlockSize;
 extern Fl_Button *btnOK;
+#include <FL/Fl_Check_Button.H>
+extern Fl_Check_Button *btn_restart_beacon;
 Fl_Double_Window* arq_configure();
 #include "table.h"
 extern Table *tblOutgoing;
@@ -65,11 +67,11 @@ extern Fl_Button *send_Cancel;
 extern void sendOK();
 extern Fl_Return_Button *send_OK;
 Fl_Double_Window* arq_SendSelect();
+extern Fl_Input2 *inpMailFrom;
 extern Fl_Input2 *inpMailTo;
 extern Fl_Input2 *inpMailSubj;
-#include <FL/Fl_Text_Editor.H>
-extern Fl_Text_Editor *txtMailText;
-#include <FL/Fl_Pack.H>
+#include "F_Edit.h"
+extern F_Edit *txtMailText;
 extern void cb_OpenComposeMail();
 extern Fl_Button *btnOpenComposedMail;
 extern void cb_ClearComposer();
diff --git a/src/flarq-src/include/flarq.h b/src/flarq-src/include/flarq.h
index 5359c6bf..93e51181 100644
--- a/src/flarq-src/include/flarq.h
+++ b/src/flarq-src/include/flarq.h
@@ -66,6 +66,7 @@ extern long		iwaittime;
 extern long		itimeout;
 extern int		bcnInterval;
 extern int		idtimer;
+extern bool		restart_beacon;
 
 extern void		cb_idtimer();
 
diff --git a/src/fsq/fsq.cxx b/src/fsq/fsq.cxx
index b1d17c8d..2b2a0a62 100644
--- a/src/fsq/fsq.cxx
+++ b/src/fsq/fsq.cxx
@@ -1291,7 +1291,9 @@ int fsq::rx_process(const double *buf, int len)
 				memmove(rx_stream,							// to
 						&rx_stream[SHIFT_SIZE],				// from
 						BLOCK_SIZE*sizeof(*rx_stream));	// # bytes
-				memset(fft_data, 0, sizeof(fft_data));
+                // fft_data gets overwritten each time with a fixed number of
+                // elements. Do we need to zero it out?
+				//memset(fft_data, 0, sizeof(fft_data));
 				for (int i = 0; i < BLOCK_SIZE; i++) {
 					double d = rx_stream[i] * a_blackman[i];
 					fft_data[i] = cmplx(d, d);
diff --git a/src/globals/globals.cxx b/src/globals/globals.cxx
index c0a9a98e..559fda48 100644
--- a/src/globals/globals.cxx
+++ b/src/globals/globals.cxx
@@ -49,7 +49,7 @@ using namespace std;
 
 //struc entries:
 // mode, **modem, *sname, *name, *pskmail_name, *adif_name, *export_mode, *export_submode, *vid_name, iface_io
-
+// *** DO NOT PUT A '/' in the name string
 
 const struct mode_info_t mode_info[NUM_MODES] = {
 {MODE_NULL,&null_modem,"NULL","NULL","","NULL","","","", DISABLED_IO },
@@ -95,8 +95,8 @@ const struct mode_info_t mode_info[NUM_MODES] = {
 {MODE_SLOWHELL,&feld_slowmodem,"SLOWHELL","Slow Hell","","HELL","HELL","","SHLL", DISABLED_IO },
 {MODE_HELLX5,&feld_x5modem,"HELLX5","Feld Hell X5","","HELL","HELL","","HLX5", DISABLED_IO },
 {MODE_HELLX9,&feld_x9modem,"HELLX9","Feld Hell X9","","HELL","HELL","","HLX9", DISABLED_IO },
-{MODE_FSKHELL,&feld_FMmodem,"FSKHELL","FSK Hell","","FSKHELL","HELL","FSKHELL","FSKHL", DISABLED_IO  },
-{MODE_FSKH105,&feld_FM105modem,"FSKH105","FSK Hell-105","","FMHELL","HELL","FMHELL","H105", DISABLED_IO },
+{MODE_FSKH245,&feld_FMmodem,"FSKH245","FSK Hell-245","","FSKH245","HELL","FSKH245","FSKHL", DISABLED_IO  },
+{MODE_FSKH105,&feld_FM105modem,"FSKH105","FSK Hell-105","","FSKH105","HELL","FSKH105","H105", DISABLED_IO },
 {MODE_HELL80,&feld_80modem,"HELL80","Hell 80","","HELL80","HELL","HELL80","HL80", DISABLED_IO },
 
 {MODE_MFSK8,&mfsk8_modem,"MFSK8","MFSK-8","MFSK8","MFSK8","MFSK","MFSK8","MK 8", DISABLED_IO  },
@@ -174,7 +174,7 @@ const struct mode_info_t mode_info[NUM_MODES] = {
 
 {MODE_OLIVIA_16_500,&olivia_16_500_modem,"OLIVIA-16/500","OL 16-500","OLIV 16-500","OLIVIA 16/500","OLIVIA","OLIVIA 16/500","OL16/500", ARQ_IO | KISS_IO },
 {MODE_OLIVIA_16_1000,&olivia_16_1000_modem,"OLIVIA-16/1K","OL 16-1K","OLIV 16-1K","OLIVIA 16/1K","OLIVIA","OLIVIA 16/1K","OL16/1K", ARQ_IO | KISS_IO  },
-{MODE_OLIVIA_16_1000,&olivia_16_2000_modem,"OLIVIA-16/2K","OL 16-2K","OLIV 16-2K","OLIVIA 16/2K","OLIVIA","OLIVIA 16/2K","OL16/2K", ARQ_IO | KISS_IO  },
+{MODE_OLIVIA_16_2000,&olivia_16_2000_modem,"OLIVIA-16/2K","OL 16-2K","OLIV 16-2K","OLIVIA 16/2K","OLIVIA","OLIVIA 16/2K","OL16/2K", ARQ_IO | KISS_IO  },
 
 {MODE_OLIVIA_32_1000,&olivia_32_1000_modem,"OLIVIA-32/1K","OL 32-1K","OLIV 32-1K","OLIVIA 32/1K","OLIVIA","OLIVIA 32/1K","OL32/1K", ARQ_IO | KISS_IO  },
 {MODE_OLIVIA_32_2000,&olivia_32_2000_modem,"OLIVIA-32/2K","OL 32-2K","OLIV 32-2K","OLIVIA 32/2K","OLIVIA","OLIVIA 32/2K","OL32/2K", ARQ_IO | KISS_IO  },
diff --git a/src/include/F_Edit.h b/src/include/F_Edit.h
new file mode 100644
index 00000000..f77e742b
--- /dev/null
+++ b/src/include/F_Edit.h
@@ -0,0 +1,82 @@
+// ----------------------------------------------------------------------------
+//      FTextView.h
+//
+// Copyright (C) 2007-2009
+//              Stelios Bounanos, M0GLD
+//
+// This file is part of fldigi.
+//
+// fldigi is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef F_EDIT_H_
+#define F_EDIT_H_
+
+#include <stddef.h>
+#include <string>
+
+#include <FL/Fl.H>
+#include <FL/Enumerations.H>
+#include <FL/Fl_Menu_Item.H>
+#include <FL/Fl_Tile.H>
+
+#include "FTextView.h"
+
+/// A FTextBase subclass to display and edit text
+
+class F_Edit : public FTextEdit
+{
+public:
+	F_Edit(int x, int y, int w, int h, const char *l = 0);
+
+	virtual int	handle(int event);
+
+	void		clear(void);
+	void		add_text(std::string s);
+
+	void		setFont(Fl_Font f, int attr = NATTR);
+
+protected:
+	enum {
+		EDIT_MENU_CUT, EDIT_MENU_COPY, EDIT_MENU_PASTE,
+		EDIT_MENU_CLEAR, EDIT_MENU_READ, EDIT_MENU_WRAP
+	};
+	int			handle_key(int key);
+	int			handle_dnd_drag(int pos);
+	void		handle_context_menu(void);
+	void		menu_cb(size_t item);
+	void		change_keybindings(void);
+	static int	kf_default(int c, Fl_Text_Editor_mod* e);
+	static int	kf_enter(int c, Fl_Text_Editor_mod* e);
+	static int	kf_delete(int c, Fl_Text_Editor_mod* e);
+	static int	kf_cut(int c, Fl_Text_Editor_mod* e);
+	static int	kf_paste(int c, Fl_Text_Editor_mod* e);
+
+private:
+	F_Edit();
+	F_Edit(const F_Edit &t);
+
+protected:
+	static		Fl_Menu_Item	menu[];
+	int			editpos;
+	int			bkspaces;
+	static int	*p_editpos;
+};
+
+#endif // F_EDIT_H_
+
+// Local Variables:
+// mode: c++
+// c-file-style: "linux"
+// End:
diff --git a/src/include/FreqControl.h b/src/include/FreqControl.h
index 8e034589..b3013e48 100644
--- a/src/include/FreqControl.h
+++ b/src/include/FreqControl.h
@@ -60,9 +60,9 @@ public:
 	cFreqControl(int x, int y, int w, int h, const char *lbl = "9");
 	~cFreqControl();
 	void updatevalue();
-	void value(long lv);
-	long value(){return val;};
-	long int maximum(void);
+	void value(unsigned long int lv);
+	unsigned long int value() {return val;};
+	unsigned long int maximum(void);
 	void font(Fl_Font fnt);
 	void SetONCOLOR (uchar r, uchar g, uchar b);
 	void SetOFFCOLOR (uchar r, uchar g, uchar b);
@@ -122,7 +122,7 @@ private:
 	Fl_Repeat_Button	  	*Digit[MAX_DIGITS];
 	Fl_Float_Input			*finp;
 	static const char	 	*Label[];
-	long int		mult[MAX_DIGITS];
+	unsigned long int		mult[MAX_DIGITS];
 	Fl_Box				*decbx;
 	Fl_Box				*hfill1;
 	Fl_Box				*hfill2;
@@ -135,8 +135,8 @@ private:
 	Fl_Color REVOFFCOLOR;
 	int nD;
 	//int active;
-	long int maxVal;
-	long int minVal;
+	unsigned long int maxVal;
+	unsigned long int minVal;
 
 	int pw; // decimal width
 	int wfill;
@@ -153,7 +153,7 @@ private:
 	void cancel_kb_entry(void);
 
 protected:
-	long int val, oldval;
+	unsigned long int val, oldval;
 	int  precision;
 	int  dpoint;
 
diff --git a/src/include/analysis.h b/src/include/analysis.h
index 8bb1c21e..930616f4 100644
--- a/src/include/analysis.h
+++ b/src/include/analysis.h
@@ -60,6 +60,7 @@ private:
 	long int wf_freq;
 	double   dspcnt;
 	long int passno;
+	int		rxcorr;
 
 	struct timespec start_time;
 	struct tm File_Start_Date;
diff --git a/src/include/confdialog.h b/src/include/confdialog.h
index 7c95ecbb..d9d11a59 100644
--- a/src/include/confdialog.h
+++ b/src/include/confdialog.h
@@ -821,6 +821,7 @@ extern Fl_ListBox *menuSampleConverter;
 extern Fl_Spinner2 *cntRxRateCorr;
 extern Fl_Spinner2 *cntTxRateCorr;
 extern Fl_Spinner2 *cntTxOffset;
+extern Fl_Counter *cntRIT;
 extern Fl_ListBox *listbox_wav_samplerate;
 extern Fl_Check_Button *btn_record_both;
 extern Fl_Spinner2 *cntChannels;
diff --git a/src/include/configuration.h b/src/include/configuration.h
index a9f54c84..c788cfcf 100644
--- a/src/include/configuration.h
+++ b/src/include/configuration.h
@@ -570,9 +570,9 @@
         ELEM_(double, HELL_BW_SH, "HELL_BW2", "Slow Hell bandwidth",  30.0)             \
         ELEM_(double, HELL_BW_X5, "HELL_BW3", "X5 Hell bandwidth",  1225.)              \
         ELEM_(double, HELL_BW_X9, "HELL_BW4", "X9 Hell bandwidth",  2205.0)             \
-        ELEM_(double, HELL_BW_FSK, "HELL_BW5", "FSK Hell bandwidth",  180.0)            \
-        ELEM_(double, HELL_BW_FSK105, "HELL_BW6", "FSK105 Hell bandwidth",  100.0)      \
-        ELEM_(double, HELL_BW_HELL80, "HELL_BW7", "HELL80 bandwidth",  450.0)           \
+        ELEM_(double, HELL_BW_FSKH245, "HELL_BW5", "FSKH-245 bandwidth",  250.0)        \
+        ELEM_(double, HELL_BW_FSKH105, "HELL_BW6", "FSKH-105 Hell bandwidth",  120.0)   \
+        ELEM_(double, HELL_BW_HELL80, "HELL_BW7", "HELL-80 bandwidth",  450.0)          \
         ELEM_(int, HellRcvWidth, "HELLRCVWIDTH",                                        \
               "Horizontal size multiplier for each hell character, 1, 2, or 3",         \
               2)                                                                        \
@@ -1581,6 +1581,9 @@
         ELEM_(int, TxOffset, "TXOFFSET",                                                \
               "Difference between RX and TX freq (rig offset)",                         \
               0)                                                                        \
+        ELEM_(double, RIT, "RIT",                                                       \
+              "Linear frequency correction applied to frequency analysis",              \
+              0)                                                                        \
         ELEM_(int, wavSampleRate, "WAV_SAMPLERATE",                                     \
               "Wave file record sample rate\n"                                          \
               "0 - 8000, 1 - 11025, 2 - 16000, 3 - 22050\n"                             \
diff --git a/src/include/fd_view.h b/src/include/fd_view.h
index a1c37c27..d6bfa751 100644
--- a/src/include/fd_view.h
+++ b/src/include/fd_view.h
@@ -10,13 +10,13 @@ extern Fl_Output *view_FD_class;
 extern Fl_Output *view_FD_section;
 extern Fl_Output *view_FD_mult;
 extern Fl_Output *view_FD_score;
-#include <FL/Fl_Box.H>
 extern Fl_Output *view_FD_CW[12];
 extern Fl_Output *view_FD_CW_OP[12];
 extern Fl_Output *view_FD_DIG[12];
 extern Fl_Output *view_FD_DIG_OP[12];
 extern Fl_Output *view_FD_PHONE[12];
 extern Fl_Output *view_FD_PHONE_OP[12];
+#include <FL/Fl_Box.H>
 #include <FL/Fl_Group.H>
 #include "flinput2.h"
 extern Fl_Input2 *inp_fd_tcpip_addr;
diff --git a/src/include/feld.h b/src/include/feld.h
index b05b2827..f2e0208f 100644
--- a/src/include/feld.h
+++ b/src/include/feld.h
@@ -62,7 +62,7 @@ protected:
 	double phi2freq;
 
 	C_FIR_filter	*hilbert;
-	fftfilt			*bpfilt;
+	fftfilt			*lpfilt;
 	Cmovavg			*bbfilt;
 	Cmovavg			*minmaxfilt;
 	Cmovavg			*average;
@@ -92,7 +92,7 @@ protected:
 	cmplx mixer(cmplx);
 	double nco(double);
 	void	rx(cmplx);
-	void	FSKHELL_rx(cmplx);
+	void	FSKH_rx(cmplx);
 	void	send_symbol(int currsymbol, int nextsymbol);
 	void	send_null_column();
 	void	tx_char(char);
diff --git a/src/include/globals.h b/src/include/globals.h
index a7fe296e..ff4fb8cd 100644
--- a/src/include/globals.h
+++ b/src/include/globals.h
@@ -91,7 +91,7 @@ enum {
 	MODE_SLOWHELL,
 	MODE_HELLX5,
 	MODE_HELLX9,
-	MODE_FSKHELL,
+	MODE_FSKH245,
 	MODE_FSKH105,
 	MODE_HELL80,
 	MODE_HELL_FIRST = MODE_FELDHELL,
diff --git a/src/include/qrunner.h b/src/include/qrunner.h
index 36159e61..2350c2a8 100644
--- a/src/include/qrunner.h
+++ b/src/include/qrunner.h
@@ -56,6 +56,7 @@ extern void qrunner_debug(int tid, const char * name);
 extern const char *sztid[];
 
 #ifndef __MINGW32__
+typedef int SOCKET;
 #  define QRUNNER_READ(fd__, buf__, len__) read(fd__, buf__, len__)
 #  define QRUNNER_WRITE(fd__, buf__, len__) write(fd__, buf__, len__)
 #else
@@ -167,7 +168,7 @@ public:
 
 protected:
 	fqueue *fifo;
-	int pfd[2];
+	SOCKET pfd[2];
 	bool attached;
 	int _id_no;
 	std::string _id_string;
diff --git a/src/include/rigsupport.h b/src/include/rigsupport.h
index 5af07872..467de103 100644
--- a/src/include/rigsupport.h
+++ b/src/include/rigsupport.h
@@ -95,7 +95,7 @@ extern void FLRIG_start_flrig_thread();
 extern void stop_flrig_thread();
 extern void reconnect_to_flrig();
 extern void set_flrig_ptt(int on);
-extern void set_flrig_freq(long int fr);
+extern void set_flrig_freq(unsigned long int fr);
 extern void set_flrig_mode(const char *md);
 extern void set_flrig_bw(int bw1, int bw2 = 0);
 extern void set_flrig_notch();
diff --git a/src/include/sound.h b/src/include/sound.h
index 4a11ba22..29d13cfb 100644
--- a/src/include/sound.h
+++ b/src/include/sound.h
@@ -31,9 +31,7 @@
 #include <cstring>
 #include <climits>
 
-#if USE_SNDFILE
 #  include <sndfile.h>
-#endif
 
 #include <samplerate.h>
 
@@ -74,8 +72,6 @@ protected:
 	SRC_STATE	*rx_src_state;
 	double		*wrt_buffer;
 
-#if USE_SNDFILE
-
 	SNDFILE* ofCapture;
 	SNDFILE* ifPlayback;
 	SNDFILE* ofGenerate;
@@ -105,13 +101,10 @@ protected:
 	float modem_play_sr;
 
 	bool   new_playback;
-
 	sf_count_t  read_file(SNDFILE* file, float* buf, size_t count);
 	void	write_file(SNDFILE* file, float* buf_left, float *buf_right, size_t count);
 	void	write_file(SNDFILE* file, double* buf_left, double *buf_right, size_t count);
 
-#endif
-
 public:
 	SoundBase();
 	virtual ~SoundBase();
@@ -125,7 +118,6 @@ public:
 	virtual void    flush(unsigned dir = UINT_MAX) = 0;
 	virtual bool	must_close(int dir = 0) = 0;
 
-#if USE_SNDFILE
 	int		startCapture(std::string fname, int format);
 	void	stopCapture();
 
@@ -138,7 +130,6 @@ public:
 	int		AudioMP3(std::string fname);
 	int		AudioWAV(std::string fname);
 	int		Audio(std::string fname);
-#endif
 };
 
 
diff --git a/src/logbook/fd_logger.cxx b/src/logbook/fd_logger.cxx
index c06f3abb..0eae1126 100644
--- a/src/logbook/fd_logger.cxx
+++ b/src/logbook/fd_logger.cxx
@@ -496,7 +496,8 @@ void FD_logoff()
 void FD_band_check() {
 	if (fd_band != FD_opband()) {
 		FD_logoff();
-//		FD_start();
+		MilliSleep(50);
+		FD_start();
 		FD_logon();
 	}
 }
@@ -507,7 +508,8 @@ void FD_band_check() {
 void FD_mode_check() {
 	if (fd_mode != FD_opmode()) {
 		FD_logoff();
-//		FD_start();
+		MilliSleep(50);
+		FD_start();
 		FD_logon();
 	}
 }
diff --git a/src/logbook/fd_view.cxx b/src/logbook/fd_view.cxx
index a265e641..6e80da4c 100644
--- a/src/logbook/fd_view.cxx
+++ b/src/logbook/fd_view.cxx
@@ -65,273 +65,417 @@ Fl_Box *box_fdserver_connected=(Fl_Box *)0;
 
 Fl_Double_Window* make_fd_view() {
   Fl_Double_Window* w;
-  { Fl_Double_Window* o = new Fl_Double_Window(785, 270, _("Field Day Viewer - use with program \'fdserver\'"));
+  { Fl_Double_Window* o = new Fl_Double_Window(670, 270, _("Field Day Viewer - use with program \'fdserver\'"));
     w = o; if (w) {/* empty */}
     o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-    { Fl_Output* o = view_FD_call = new Fl_Output(98, 6, 77, 24, _("FD Call"));
+    { Fl_Output* o = view_FD_call = new Fl_Output(59, 6, 77, 24, _("FD Call"));
       o->value(progdefaults.my_FD_call.c_str());
     } // Fl_Output* view_FD_call
-    { Fl_Output* o = view_FD_class = new Fl_Output(277, 5, 38, 24, _("FD Class"));
+    { Fl_Output* o = view_FD_class = new Fl_Output(219, 5, 38, 24, _("FD Class"));
       o->value(progdefaults.my_FD_class.c_str());
     } // Fl_Output* view_FD_class
-    { Fl_Output* o = view_FD_section = new Fl_Output(417, 5, 38, 24, _("FD Section"));
+    { Fl_Output* o = view_FD_section = new Fl_Output(341, 5, 38, 24, _("FD Section"));
       o->value(progdefaults.my_FD_section.c_str());
     } // Fl_Output* view_FD_section
-    { Fl_Output* o = view_FD_mult = new Fl_Output(557, 5, 38, 24, _("FD Mult"));
+    { Fl_Output* o = view_FD_mult = new Fl_Output(462, 5, 38, 24, _("FD Mult"));
       o->value(progdefaults.my_FD_mult.c_str());
     } // Fl_Output* view_FD_mult
-    { view_FD_score = new Fl_Output(698, 5, 80, 24, _("Score"));
+    { view_FD_score = new Fl_Output(584, 5, 80, 24, _("Score"));
     } // Fl_Output* view_FD_score
-    { Fl_Box* o = new Fl_Box(55, 33, 50, 17, _("160"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(114, 33, 50, 17, _("80"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(174, 33, 50, 17, _("40"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(233, 33, 50, 17, _("20"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(293, 33, 50, 17, _("17"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(352, 33, 50, 17, _("15"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(414, 33, 50, 17, _("12"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(476, 33, 50, 17, _("10"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(538, 33, 50, 17, _("6"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(600, 33, 50, 17, _("2"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(660, 33, 60, 17, _("220"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(720, 33, 60, 17, _("440"));
-      o->box(FL_FLAT_BOX);
-    } // Fl_Box* o
-    { view_FD_CW[0] = new Fl_Output(55, 49, 60, 24, _("CW"));
+    { view_FD_CW[0] = new Fl_Output(55, 49, 50, 24, _("CW"));
+      view_FD_CW[0]->textfont(4);
+      view_FD_CW[0]->textsize(12);
     } // Fl_Output* view_FD_CW[0]
-    { view_FD_CW[1] = new Fl_Output(115, 49, 60, 24);
+    { view_FD_CW[1] = new Fl_Output(106, 49, 50, 24);
+      view_FD_CW[1]->textfont(4);
+      view_FD_CW[1]->textsize(12);
       view_FD_CW[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[1]
-    { view_FD_CW[2] = new Fl_Output(174, 49, 60, 24);
+    { view_FD_CW[2] = new Fl_Output(156, 49, 50, 24);
+      view_FD_CW[2]->textfont(4);
+      view_FD_CW[2]->textsize(12);
       view_FD_CW[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[2]
-    { view_FD_CW[3] = new Fl_Output(234, 49, 60, 24);
+    { view_FD_CW[3] = new Fl_Output(207, 49, 50, 24);
+      view_FD_CW[3]->textfont(4);
+      view_FD_CW[3]->textsize(12);
       view_FD_CW[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[3]
-    { view_FD_CW[4] = new Fl_Output(293, 49, 60, 24);
+    { view_FD_CW[4] = new Fl_Output(258, 49, 50, 24);
+      view_FD_CW[4]->textfont(4);
+      view_FD_CW[4]->textsize(12);
       view_FD_CW[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[4]
-    { view_FD_CW[5] = new Fl_Output(353, 49, 60, 24);
+    { view_FD_CW[5] = new Fl_Output(309, 49, 50, 24);
+      view_FD_CW[5]->textfont(4);
+      view_FD_CW[5]->textsize(12);
       view_FD_CW[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[5]
-    { view_FD_CW[6] = new Fl_Output(415, 49, 60, 24);
+    { view_FD_CW[6] = new Fl_Output(360, 49, 50, 24);
+      view_FD_CW[6]->textfont(4);
+      view_FD_CW[6]->textsize(12);
       view_FD_CW[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[6]
-    { view_FD_CW[7] = new Fl_Output(475, 49, 60, 24);
+    { view_FD_CW[7] = new Fl_Output(411, 49, 50, 24);
+      view_FD_CW[7]->textfont(4);
+      view_FD_CW[7]->textsize(12);
       view_FD_CW[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[7]
-    { view_FD_CW[8] = new Fl_Output(536, 49, 60, 24);
+    { view_FD_CW[8] = new Fl_Output(462, 49, 50, 24);
+      view_FD_CW[8]->textfont(4);
+      view_FD_CW[8]->textsize(12);
       view_FD_CW[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[8]
-    { view_FD_CW[9] = new Fl_Output(598, 49, 60, 24);
+    { view_FD_CW[9] = new Fl_Output(513, 49, 50, 24);
+      view_FD_CW[9]->textfont(4);
+      view_FD_CW[9]->textsize(12);
       view_FD_CW[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[9]
-    { view_FD_CW[10] = new Fl_Output(659, 49, 60, 24);
+    { view_FD_CW[10] = new Fl_Output(564, 49, 50, 24);
+      view_FD_CW[10]->textfont(4);
+      view_FD_CW[10]->textsize(12);
       view_FD_CW[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[10]
-    { view_FD_CW[11] = new Fl_Output(719, 49, 60, 24);
+    { view_FD_CW[11] = new Fl_Output(615, 49, 50, 24);
+      view_FD_CW[11]->textfont(4);
+      view_FD_CW[11]->textsize(12);
       view_FD_CW[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW[11]
-    { view_FD_CW_OP[0] = new Fl_Output(55, 73, 60, 24, _("Oper\'"));
+    { view_FD_CW_OP[0] = new Fl_Output(55, 75, 50, 24, _("Oper\'"));
+      view_FD_CW_OP[0]->textfont(4);
+      view_FD_CW_OP[0]->textsize(12);
     } // Fl_Output* view_FD_CW_OP[0]
-    { view_FD_CW_OP[1] = new Fl_Output(115, 73, 60, 24);
+    { view_FD_CW_OP[1] = new Fl_Output(106, 73, 50, 24);
+      view_FD_CW_OP[1]->textfont(4);
+      view_FD_CW_OP[1]->textsize(12);
       view_FD_CW_OP[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[1]
-    { view_FD_CW_OP[2] = new Fl_Output(174, 73, 60, 24);
+    { view_FD_CW_OP[2] = new Fl_Output(156, 73, 50, 24);
+      view_FD_CW_OP[2]->textfont(4);
+      view_FD_CW_OP[2]->textsize(12);
       view_FD_CW_OP[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[2]
-    { view_FD_CW_OP[3] = new Fl_Output(234, 73, 60, 24);
+    { view_FD_CW_OP[3] = new Fl_Output(207, 73, 50, 24);
+      view_FD_CW_OP[3]->textfont(4);
+      view_FD_CW_OP[3]->textsize(12);
       view_FD_CW_OP[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[3]
-    { view_FD_CW_OP[4] = new Fl_Output(293, 73, 60, 24);
+    { view_FD_CW_OP[4] = new Fl_Output(258, 73, 50, 24);
+      view_FD_CW_OP[4]->textfont(4);
+      view_FD_CW_OP[4]->textsize(12);
       view_FD_CW_OP[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[4]
-    { view_FD_CW_OP[5] = new Fl_Output(353, 73, 60, 24);
+    { view_FD_CW_OP[5] = new Fl_Output(309, 73, 50, 24);
+      view_FD_CW_OP[5]->textfont(4);
+      view_FD_CW_OP[5]->textsize(12);
       view_FD_CW_OP[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[5]
-    { view_FD_CW_OP[6] = new Fl_Output(415, 73, 60, 24);
+    { view_FD_CW_OP[6] = new Fl_Output(360, 73, 50, 24);
+      view_FD_CW_OP[6]->textfont(4);
+      view_FD_CW_OP[6]->textsize(12);
       view_FD_CW_OP[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[6]
-    { view_FD_CW_OP[7] = new Fl_Output(475, 73, 60, 24);
+    { view_FD_CW_OP[7] = new Fl_Output(411, 73, 50, 24);
+      view_FD_CW_OP[7]->textfont(4);
+      view_FD_CW_OP[7]->textsize(12);
       view_FD_CW_OP[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[7]
-    { view_FD_CW_OP[8] = new Fl_Output(536, 73, 60, 24);
+    { view_FD_CW_OP[8] = new Fl_Output(462, 73, 50, 24);
+      view_FD_CW_OP[8]->textfont(4);
+      view_FD_CW_OP[8]->textsize(12);
       view_FD_CW_OP[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[8]
-    { view_FD_CW_OP[9] = new Fl_Output(598, 73, 60, 24);
+    { view_FD_CW_OP[9] = new Fl_Output(513, 73, 50, 24);
+      view_FD_CW_OP[9]->textfont(4);
+      view_FD_CW_OP[9]->textsize(12);
       view_FD_CW_OP[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[9]
-    { view_FD_CW_OP[10] = new Fl_Output(659, 73, 60, 24);
+    { view_FD_CW_OP[10] = new Fl_Output(564, 73, 50, 24);
+      view_FD_CW_OP[10]->textfont(4);
+      view_FD_CW_OP[10]->textsize(12);
       view_FD_CW_OP[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[10]
-    { view_FD_CW_OP[11] = new Fl_Output(719, 73, 60, 24);
+    { view_FD_CW_OP[11] = new Fl_Output(615, 73, 50, 24);
+      view_FD_CW_OP[11]->textfont(4);
+      view_FD_CW_OP[11]->textsize(12);
       view_FD_CW_OP[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_CW_OP[11]
-    { view_FD_DIG[0] = new Fl_Output(55, 103, 60, 24, _("DIG"));
+    { view_FD_DIG[0] = new Fl_Output(55, 102, 50, 24, _("DIG"));
+      view_FD_DIG[0]->textfont(4);
+      view_FD_DIG[0]->textsize(12);
     } // Fl_Output* view_FD_DIG[0]
-    { view_FD_DIG[1] = new Fl_Output(115, 103, 60, 24);
+    { view_FD_DIG[1] = new Fl_Output(106, 103, 50, 24);
+      view_FD_DIG[1]->textfont(4);
+      view_FD_DIG[1]->textsize(12);
       view_FD_DIG[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[1]
-    { view_FD_DIG[2] = new Fl_Output(174, 103, 60, 24);
+    { view_FD_DIG[2] = new Fl_Output(156, 103, 50, 24);
+      view_FD_DIG[2]->textfont(4);
+      view_FD_DIG[2]->textsize(12);
       view_FD_DIG[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[2]
-    { view_FD_DIG[3] = new Fl_Output(234, 103, 60, 24);
+    { view_FD_DIG[3] = new Fl_Output(207, 103, 50, 24);
+      view_FD_DIG[3]->textfont(4);
+      view_FD_DIG[3]->textsize(12);
       view_FD_DIG[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[3]
-    { view_FD_DIG[4] = new Fl_Output(293, 103, 60, 24);
+    { view_FD_DIG[4] = new Fl_Output(258, 103, 50, 24);
+      view_FD_DIG[4]->textfont(4);
+      view_FD_DIG[4]->textsize(12);
       view_FD_DIG[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[4]
-    { view_FD_DIG[5] = new Fl_Output(353, 103, 60, 24);
+    { view_FD_DIG[5] = new Fl_Output(309, 103, 50, 24);
+      view_FD_DIG[5]->textfont(4);
+      view_FD_DIG[5]->textsize(12);
       view_FD_DIG[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[5]
-    { view_FD_DIG[6] = new Fl_Output(415, 103, 60, 24);
+    { view_FD_DIG[6] = new Fl_Output(360, 103, 50, 24);
+      view_FD_DIG[6]->textfont(4);
+      view_FD_DIG[6]->textsize(12);
       view_FD_DIG[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[6]
-    { view_FD_DIG[7] = new Fl_Output(475, 103, 60, 24);
+    { view_FD_DIG[7] = new Fl_Output(411, 103, 50, 24);
+      view_FD_DIG[7]->textfont(4);
+      view_FD_DIG[7]->textsize(12);
       view_FD_DIG[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[7]
-    { view_FD_DIG[8] = new Fl_Output(536, 103, 60, 24);
+    { view_FD_DIG[8] = new Fl_Output(462, 103, 50, 24);
+      view_FD_DIG[8]->textfont(4);
+      view_FD_DIG[8]->textsize(12);
       view_FD_DIG[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[8]
-    { view_FD_DIG[9] = new Fl_Output(598, 103, 60, 24);
+    { view_FD_DIG[9] = new Fl_Output(513, 103, 50, 24);
+      view_FD_DIG[9]->textfont(4);
+      view_FD_DIG[9]->textsize(12);
       view_FD_DIG[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[9]
-    { view_FD_DIG[10] = new Fl_Output(659, 103, 60, 24);
+    { view_FD_DIG[10] = new Fl_Output(564, 103, 50, 24);
+      view_FD_DIG[10]->textfont(4);
+      view_FD_DIG[10]->textsize(12);
       view_FD_DIG[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[10]
-    { view_FD_DIG[11] = new Fl_Output(719, 103, 60, 24);
+    { view_FD_DIG[11] = new Fl_Output(615, 103, 50, 24);
+      view_FD_DIG[11]->textfont(4);
+      view_FD_DIG[11]->textsize(12);
       view_FD_DIG[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG[11]
-    { view_FD_DIG_OP[0] = new Fl_Output(55, 128, 60, 24, _("Oper\'"));
+    { view_FD_DIG_OP[0] = new Fl_Output(55, 129, 50, 24, _("Oper\'"));
+      view_FD_DIG_OP[0]->textfont(4);
+      view_FD_DIG_OP[0]->textsize(12);
     } // Fl_Output* view_FD_DIG_OP[0]
-    { view_FD_DIG_OP[1] = new Fl_Output(115, 128, 60, 24);
+    { view_FD_DIG_OP[1] = new Fl_Output(106, 128, 50, 24);
+      view_FD_DIG_OP[1]->textfont(4);
+      view_FD_DIG_OP[1]->textsize(12);
       view_FD_DIG_OP[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[1]
-    { view_FD_DIG_OP[2] = new Fl_Output(174, 128, 60, 24);
+    { view_FD_DIG_OP[2] = new Fl_Output(156, 128, 50, 24);
+      view_FD_DIG_OP[2]->textfont(4);
+      view_FD_DIG_OP[2]->textsize(12);
       view_FD_DIG_OP[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[2]
-    { view_FD_DIG_OP[3] = new Fl_Output(234, 128, 60, 24);
+    { view_FD_DIG_OP[3] = new Fl_Output(207, 128, 50, 24);
+      view_FD_DIG_OP[3]->textfont(4);
+      view_FD_DIG_OP[3]->textsize(12);
       view_FD_DIG_OP[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[3]
-    { view_FD_DIG_OP[4] = new Fl_Output(293, 128, 60, 24);
+    { view_FD_DIG_OP[4] = new Fl_Output(258, 128, 50, 24);
+      view_FD_DIG_OP[4]->textfont(4);
+      view_FD_DIG_OP[4]->textsize(12);
       view_FD_DIG_OP[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[4]
-    { view_FD_DIG_OP[5] = new Fl_Output(353, 128, 60, 24);
+    { view_FD_DIG_OP[5] = new Fl_Output(309, 128, 50, 24);
+      view_FD_DIG_OP[5]->textfont(4);
+      view_FD_DIG_OP[5]->textsize(12);
       view_FD_DIG_OP[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[5]
-    { view_FD_DIG_OP[6] = new Fl_Output(415, 128, 60, 24);
+    { view_FD_DIG_OP[6] = new Fl_Output(360, 128, 50, 24);
+      view_FD_DIG_OP[6]->textfont(4);
+      view_FD_DIG_OP[6]->textsize(12);
       view_FD_DIG_OP[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[6]
-    { view_FD_DIG_OP[7] = new Fl_Output(475, 128, 60, 24);
+    { view_FD_DIG_OP[7] = new Fl_Output(411, 128, 50, 24);
+      view_FD_DIG_OP[7]->textfont(4);
+      view_FD_DIG_OP[7]->textsize(12);
       view_FD_DIG_OP[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[7]
-    { view_FD_DIG_OP[8] = new Fl_Output(536, 128, 60, 24);
+    { view_FD_DIG_OP[8] = new Fl_Output(462, 128, 50, 24);
+      view_FD_DIG_OP[8]->textfont(4);
+      view_FD_DIG_OP[8]->textsize(12);
       view_FD_DIG_OP[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[8]
-    { view_FD_DIG_OP[9] = new Fl_Output(598, 128, 60, 24);
+    { view_FD_DIG_OP[9] = new Fl_Output(513, 128, 50, 24);
+      view_FD_DIG_OP[9]->textfont(4);
+      view_FD_DIG_OP[9]->textsize(12);
       view_FD_DIG_OP[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[9]
-    { view_FD_DIG_OP[10] = new Fl_Output(659, 128, 60, 24);
+    { view_FD_DIG_OP[10] = new Fl_Output(564, 128, 50, 24);
+      view_FD_DIG_OP[10]->textfont(4);
+      view_FD_DIG_OP[10]->textsize(12);
       view_FD_DIG_OP[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[10]
-    { view_FD_DIG_OP[11] = new Fl_Output(719, 128, 60, 24);
+    { view_FD_DIG_OP[11] = new Fl_Output(615, 128, 50, 24);
+      view_FD_DIG_OP[11]->textfont(4);
+      view_FD_DIG_OP[11]->textsize(12);
       view_FD_DIG_OP[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_DIG_OP[11]
-    { view_FD_PHONE[0] = new Fl_Output(55, 158, 60, 24, _("PHONE"));
+    { view_FD_PHONE[0] = new Fl_Output(55, 156, 50, 24, _("PHONE"));
+      view_FD_PHONE[0]->textfont(4);
+      view_FD_PHONE[0]->textsize(12);
     } // Fl_Output* view_FD_PHONE[0]
-    { view_FD_PHONE[1] = new Fl_Output(115, 158, 60, 24);
+    { view_FD_PHONE[1] = new Fl_Output(106, 158, 50, 24);
+      view_FD_PHONE[1]->textfont(4);
+      view_FD_PHONE[1]->textsize(12);
       view_FD_PHONE[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[1]
-    { view_FD_PHONE[2] = new Fl_Output(174, 158, 60, 24);
+    { view_FD_PHONE[2] = new Fl_Output(156, 158, 50, 24);
+      view_FD_PHONE[2]->textfont(4);
+      view_FD_PHONE[2]->textsize(12);
       view_FD_PHONE[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[2]
-    { view_FD_PHONE[3] = new Fl_Output(234, 158, 60, 24);
+    { view_FD_PHONE[3] = new Fl_Output(207, 158, 50, 24);
+      view_FD_PHONE[3]->textfont(4);
+      view_FD_PHONE[3]->textsize(12);
       view_FD_PHONE[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[3]
-    { view_FD_PHONE[4] = new Fl_Output(293, 158, 60, 24);
+    { view_FD_PHONE[4] = new Fl_Output(258, 158, 50, 24);
+      view_FD_PHONE[4]->textfont(4);
+      view_FD_PHONE[4]->textsize(12);
       view_FD_PHONE[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[4]
-    { view_FD_PHONE[5] = new Fl_Output(353, 158, 60, 24);
+    { view_FD_PHONE[5] = new Fl_Output(309, 158, 50, 24);
+      view_FD_PHONE[5]->textfont(4);
+      view_FD_PHONE[5]->textsize(12);
       view_FD_PHONE[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[5]
-    { view_FD_PHONE[6] = new Fl_Output(415, 158, 60, 24);
+    { view_FD_PHONE[6] = new Fl_Output(360, 158, 50, 24);
+      view_FD_PHONE[6]->textfont(4);
+      view_FD_PHONE[6]->textsize(12);
       view_FD_PHONE[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[6]
-    { view_FD_PHONE[7] = new Fl_Output(475, 158, 60, 24);
+    { view_FD_PHONE[7] = new Fl_Output(411, 158, 50, 24);
+      view_FD_PHONE[7]->textfont(4);
+      view_FD_PHONE[7]->textsize(12);
       view_FD_PHONE[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[7]
-    { view_FD_PHONE[8] = new Fl_Output(536, 158, 60, 24);
+    { view_FD_PHONE[8] = new Fl_Output(462, 158, 50, 24);
+      view_FD_PHONE[8]->textfont(4);
+      view_FD_PHONE[8]->textsize(12);
       view_FD_PHONE[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[8]
-    { view_FD_PHONE[9] = new Fl_Output(598, 158, 60, 24);
+    { view_FD_PHONE[9] = new Fl_Output(513, 158, 50, 24);
+      view_FD_PHONE[9]->textfont(4);
+      view_FD_PHONE[9]->textsize(12);
       view_FD_PHONE[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[9]
-    { view_FD_PHONE[10] = new Fl_Output(659, 158, 60, 24);
+    { view_FD_PHONE[10] = new Fl_Output(564, 158, 50, 24);
+      view_FD_PHONE[10]->textfont(4);
+      view_FD_PHONE[10]->textsize(12);
       view_FD_PHONE[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[10]
-    { view_FD_PHONE[11] = new Fl_Output(719, 158, 60, 24);
+    { view_FD_PHONE[11] = new Fl_Output(615, 158, 50, 24);
+      view_FD_PHONE[11]->textfont(4);
+      view_FD_PHONE[11]->textsize(12);
       view_FD_PHONE[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE[11]
-    { view_FD_PHONE_OP[0] = new Fl_Output(55, 183, 60, 24, _("Oper\'"));
+    { view_FD_PHONE_OP[0] = new Fl_Output(55, 183, 50, 24, _("Oper\'"));
+      view_FD_PHONE_OP[0]->textfont(4);
+      view_FD_PHONE_OP[0]->textsize(12);
     } // Fl_Output* view_FD_PHONE_OP[0]
-    { view_FD_PHONE_OP[1] = new Fl_Output(115, 183, 60, 24);
+    { view_FD_PHONE_OP[1] = new Fl_Output(106, 183, 50, 24);
+      view_FD_PHONE_OP[1]->textfont(4);
+      view_FD_PHONE_OP[1]->textsize(12);
       view_FD_PHONE_OP[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[1]
-    { view_FD_PHONE_OP[2] = new Fl_Output(174, 183, 60, 24);
+    { view_FD_PHONE_OP[2] = new Fl_Output(156, 183, 50, 24);
+      view_FD_PHONE_OP[2]->textfont(4);
+      view_FD_PHONE_OP[2]->textsize(12);
       view_FD_PHONE_OP[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[2]
-    { view_FD_PHONE_OP[3] = new Fl_Output(234, 183, 60, 24);
+    { view_FD_PHONE_OP[3] = new Fl_Output(207, 183, 50, 24);
+      view_FD_PHONE_OP[3]->textfont(4);
+      view_FD_PHONE_OP[3]->textsize(12);
       view_FD_PHONE_OP[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[3]
-    { view_FD_PHONE_OP[4] = new Fl_Output(293, 183, 60, 24);
+    { view_FD_PHONE_OP[4] = new Fl_Output(258, 183, 50, 24);
+      view_FD_PHONE_OP[4]->textfont(4);
+      view_FD_PHONE_OP[4]->textsize(12);
       view_FD_PHONE_OP[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[4]
-    { view_FD_PHONE_OP[5] = new Fl_Output(353, 183, 60, 24);
+    { view_FD_PHONE_OP[5] = new Fl_Output(309, 183, 50, 24);
+      view_FD_PHONE_OP[5]->textfont(4);
+      view_FD_PHONE_OP[5]->textsize(12);
       view_FD_PHONE_OP[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[5]
-    { view_FD_PHONE_OP[6] = new Fl_Output(415, 183, 60, 24);
+    { view_FD_PHONE_OP[6] = new Fl_Output(360, 183, 50, 24);
+      view_FD_PHONE_OP[6]->textfont(4);
+      view_FD_PHONE_OP[6]->textsize(12);
       view_FD_PHONE_OP[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[6]
-    { view_FD_PHONE_OP[7] = new Fl_Output(475, 183, 60, 24);
+    { view_FD_PHONE_OP[7] = new Fl_Output(411, 183, 50, 24);
+      view_FD_PHONE_OP[7]->textfont(4);
+      view_FD_PHONE_OP[7]->textsize(12);
       view_FD_PHONE_OP[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[7]
-    { view_FD_PHONE_OP[8] = new Fl_Output(536, 183, 60, 24);
+    { view_FD_PHONE_OP[8] = new Fl_Output(462, 183, 50, 24);
+      view_FD_PHONE_OP[8]->textfont(4);
+      view_FD_PHONE_OP[8]->textsize(12);
       view_FD_PHONE_OP[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[8]
-    { view_FD_PHONE_OP[9] = new Fl_Output(598, 183, 60, 24);
+    { view_FD_PHONE_OP[9] = new Fl_Output(513, 183, 50, 24);
+      view_FD_PHONE_OP[9]->textfont(4);
+      view_FD_PHONE_OP[9]->textsize(12);
       view_FD_PHONE_OP[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[9]
-    { view_FD_PHONE_OP[10] = new Fl_Output(659, 183, 60, 24);
+    { view_FD_PHONE_OP[10] = new Fl_Output(564, 183, 50, 24);
+      view_FD_PHONE_OP[10]->textfont(4);
+      view_FD_PHONE_OP[10]->textsize(12);
       view_FD_PHONE_OP[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[10]
-    { view_FD_PHONE_OP[11] = new Fl_Output(719, 183, 60, 24);
+    { view_FD_PHONE_OP[11] = new Fl_Output(615, 183, 50, 24);
+      view_FD_PHONE_OP[11]->textfont(4);
+      view_FD_PHONE_OP[11]->textsize(12);
       view_FD_PHONE_OP[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
     } // Fl_Output* view_FD_PHONE_OP[11]
-    { Fl_Group* o = new Fl_Group(5, 212, 775, 55, _("\"fdserver\" Client"));
+    { Fl_Box* o = new Fl_Box(60, 33, 40, 17, _("160"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(111, 33, 40, 17, _("80"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(161, 33, 40, 17, _("40"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(212, 33, 40, 17, _("20"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(263, 33, 40, 17, _("17"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(314, 33, 40, 17, _("15"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(365, 33, 40, 17, _("12"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(416, 33, 40, 17, _("10"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(467, 33, 40, 17, _("6"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(518, 33, 40, 17, _("2"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(569, 33, 40, 17, _("220"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Box* o = new Fl_Box(620, 33, 40, 17, _("440"));
+      o->box(FL_FLAT_BOX);
+    } // Fl_Box* o
+    { Fl_Group* o = new Fl_Group(5, 212, 660, 55, _("\"fdserver\" Client"));
       o->box(FL_ENGRAVED_BOX);
       o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      { Fl_Input2* o = inp_fd_tcpip_addr = new Fl_Input2(85, 234, 198, 24, _("tcpip addr"));
+      { Fl_Input2* o = inp_fd_tcpip_addr = new Fl_Input2(85, 234, 150, 24, _("tcpip addr"));
         inp_fd_tcpip_addr->tooltip(_("fdserver tcipip address"));
         inp_fd_tcpip_addr->box(FL_DOWN_BOX);
         inp_fd_tcpip_addr->color(FL_BACKGROUND2_COLOR);
@@ -345,7 +489,7 @@ Fl_Double_Window* make_fd_view() {
         inp_fd_tcpip_addr->when(FL_WHEN_RELEASE);
         o->value(progdefaults.fd_tcpip_addr.c_str());
       } // Fl_Input2* inp_fd_tcpip_addr
-      { Fl_Input2* o = inp_fd_tcpip_port = new Fl_Input2(325, 234, 75, 24, _("port"));
+      { Fl_Input2* o = inp_fd_tcpip_port = new Fl_Input2(273, 234, 75, 24, _("port"));
         inp_fd_tcpip_port->tooltip(_("fdserver tcpip port"));
         inp_fd_tcpip_port->box(FL_DOWN_BOX);
         inp_fd_tcpip_port->color(FL_BACKGROUND2_COLOR);
@@ -359,7 +503,7 @@ Fl_Double_Window* make_fd_view() {
         inp_fd_tcpip_port->when(FL_WHEN_RELEASE);
         o->value(progdefaults.fd_tcpip_port.c_str());
       } // Fl_Input2* inp_fd_tcpip_port
-      { Fl_Input2* o = inp_fd_op_call = new Fl_Input2(500, 234, 90, 24, _("OP callsign"));
+      { Fl_Input2* o = inp_fd_op_call = new Fl_Input2(402, 234, 90, 24, _("OP call"));
         inp_fd_op_call->tooltip(_("free form exchange"));
         inp_fd_op_call->box(FL_DOWN_BOX);
         inp_fd_op_call->color(FL_BACKGROUND2_COLOR);
@@ -373,13 +517,13 @@ Fl_Double_Window* make_fd_view() {
         inp_fd_op_call->when(FL_WHEN_RELEASE);
         o->value(progdefaults.fd_op_call.c_str());
       } // Fl_Input2* inp_fd_op_call
-      { Fl_Check_Button* o = btn_fd_connect = new Fl_Check_Button(608, 236, 70, 20, _("Connect"));
+      { Fl_Check_Button* o = btn_fd_connect = new Fl_Check_Button(502, 236, 70, 20, _("Connect"));
         btn_fd_connect->tooltip(_("Connect / Disconnect^jAddr/Port/OP required"));
         btn_fd_connect->down_box(FL_DOWN_BOX);
         btn_fd_connect->callback((Fl_Callback*)cb_btn_fd_connect);
         o->value(progdefaults.connect_to_fdserver);
       } // Fl_Check_Button* btn_fd_connect
-      { box_fdserver_connected = new Fl_Box(722, 237, 18, 18, _("Connected"));
+      { box_fdserver_connected = new Fl_Box(608, 237, 18, 18, _("Connected"));
         box_fdserver_connected->box(FL_ROUND_DOWN_BOX);
         box_fdserver_connected->color((Fl_Color)31);
         box_fdserver_connected->align(Fl_Align(FL_ALIGN_TOP));
diff --git a/src/logbook/fd_view.fl b/src/logbook/fd_view.fl
index c2fc549c..47b5418f 100644
--- a/src/logbook/fd_view.fl
+++ b/src/logbook/fd_view.fl
@@ -1,5 +1,5 @@
 # data file for the Fltk User Interface Designer (fluid)
-version 1.0304
+version 1.0305
 i18n_type 1
 i18n_include "gettext.h"
 i18n_function _
@@ -11,312 +11,312 @@ decl {\#include "configuration.h"} {private local
 Function {make_fd_view()} {open
 } {
   Fl_Window {} {
-    label {Field Day Viewer - use with program 'fdserver'} open
-    xywh {745 38 785 270} type Double align 5 visible
+    label {Field Day Viewer - use with program 'fdserver'} open selected
+    xywh {603 168 670 270} type Double align 5 visible
   } {
     Fl_Output view_FD_call {
       label {FD Call}
-      xywh {98 6 77 24}
+      xywh {59 6 77 24}
       code0 {o->value(progdefaults.my_FD_call.c_str());}
     }
     Fl_Output view_FD_class {
       label {FD Class}
-      xywh {277 5 38 24}
+      xywh {219 5 38 24}
       code0 {o->value(progdefaults.my_FD_class.c_str());}
     }
     Fl_Output view_FD_section {
       label {FD Section}
-      xywh {417 5 38 24}
+      xywh {341 5 38 24}
       code0 {o->value(progdefaults.my_FD_section.c_str());}
     }
     Fl_Output view_FD_mult {
       label {FD Mult}
-      xywh {557 5 38 24}
+      xywh {462 5 38 24}
       code0 {o->value(progdefaults.my_FD_mult.c_str());}
     }
     Fl_Output view_FD_score {
       label Score
-      xywh {698 5 80 24}
-    }
-    Fl_Box {} {
-      label 160
-      xywh {55 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 80
-      xywh {114 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 40
-      xywh {174 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 20
-      xywh {233 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 17
-      xywh {293 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 15
-      xywh {352 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 12
-      xywh {414 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 10
-      xywh {476 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 6
-      xywh {538 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 2
-      xywh {600 33 50 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 220
-      xywh {660 33 60 17} box FLAT_BOX
-    }
-    Fl_Box {} {
-      label 440
-      xywh {720 33 60 17} box FLAT_BOX
+      xywh {584 5 80 24}
     }
     Fl_Output {view_FD_CW[0]} {
       label CW
-      xywh {55 49 60 24}
+      xywh {55 49 50 24} textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[1]} {
-      xywh {115 49 60 24} align 20
+      xywh {106 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[2]} {
-      xywh {174 49 60 24} align 20
+      xywh {156 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[3]} {
-      xywh {234 49 60 24} align 20
+      xywh {207 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[4]} {
-      xywh {293 49 60 24} align 20
+      xywh {258 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[5]} {
-      xywh {353 49 60 24} align 20
+      xywh {309 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[6]} {
-      xywh {415 49 60 24} align 20
+      xywh {360 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[7]} {
-      xywh {475 49 60 24} align 20
+      xywh {411 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[8]} {
-      xywh {536 49 60 24} align 20
+      xywh {462 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[9]} {
-      xywh {598 49 60 24} align 20
+      xywh {513 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[10]} {
-      xywh {659 49 60 24} align 20
+      xywh {564 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW[11]} {
-      xywh {719 49 60 24} align 20
+      xywh {615 49 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[0]} {
       label {Oper'}
-      xywh {55 73 60 24}
+      xywh {55 75 50 24} textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[1]} {
-      xywh {115 73 60 24} align 20
+      xywh {106 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[2]} {
-      xywh {174 73 60 24} align 20
+      xywh {156 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[3]} {
-      xywh {234 73 60 24} align 20
+      xywh {207 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[4]} {
-      xywh {293 73 60 24} align 20
+      xywh {258 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[5]} {
-      xywh {353 73 60 24} align 20
+      xywh {309 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[6]} {
-      xywh {415 73 60 24} align 20
+      xywh {360 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[7]} {
-      xywh {475 73 60 24} align 20
+      xywh {411 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[8]} {
-      xywh {536 73 60 24} align 20
+      xywh {462 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[9]} {
-      xywh {598 73 60 24} align 20
+      xywh {513 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[10]} {
-      xywh {659 73 60 24} align 20
+      xywh {564 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_CW_OP[11]} {
-      xywh {719 73 60 24} align 20
+      xywh {615 73 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[0]} {
       label DIG
-      xywh {55 103 60 24}
+      xywh {55 102 50 24} textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[1]} {
-      xywh {115 103 60 24} align 20
+      xywh {106 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[2]} {
-      xywh {174 103 60 24} align 20
+      xywh {156 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[3]} {
-      xywh {234 103 60 24} align 20
+      xywh {207 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[4]} {
-      xywh {293 103 60 24} align 20
+      xywh {258 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[5]} {
-      xywh {353 103 60 24} align 20
+      xywh {309 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[6]} {
-      xywh {415 103 60 24} align 20
+      xywh {360 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[7]} {
-      xywh {475 103 60 24} align 20
+      xywh {411 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[8]} {
-      xywh {536 103 60 24} align 20
+      xywh {462 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[9]} {
-      xywh {598 103 60 24} align 20
+      xywh {513 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[10]} {
-      xywh {659 103 60 24} align 20
+      xywh {564 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG[11]} {
-      xywh {719 103 60 24} align 20
+      xywh {615 103 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[0]} {
       label {Oper'}
-      xywh {55 128 60 24}
+      xywh {55 129 50 24} textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[1]} {
-      xywh {115 128 60 24} align 20
+      xywh {106 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[2]} {
-      xywh {174 128 60 24} align 20
+      xywh {156 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[3]} {
-      xywh {234 128 60 24} align 20
+      xywh {207 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[4]} {
-      xywh {293 128 60 24} align 20
+      xywh {258 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[5]} {
-      xywh {353 128 60 24} align 20
+      xywh {309 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[6]} {
-      xywh {415 128 60 24} align 20
+      xywh {360 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[7]} {
-      xywh {475 128 60 24} align 20
+      xywh {411 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[8]} {
-      xywh {536 128 60 24} align 20
+      xywh {462 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[9]} {
-      xywh {598 128 60 24} align 20
+      xywh {513 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[10]} {
-      xywh {659 128 60 24} align 20
+      xywh {564 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_DIG_OP[11]} {
-      xywh {719 128 60 24} align 20
+      xywh {615 128 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[0]} {
       label PHONE
-      xywh {55 158 60 24}
+      xywh {55 156 50 24} textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[1]} {
-      xywh {115 158 60 24} align 20
+      xywh {106 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[2]} {
-      xywh {174 158 60 24} align 20
+      xywh {156 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[3]} {
-      xywh {234 158 60 24} align 20
+      xywh {207 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[4]} {
-      xywh {293 158 60 24} align 20
+      xywh {258 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[5]} {
-      xywh {353 158 60 24} align 20
+      xywh {309 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[6]} {
-      xywh {415 158 60 24} align 20
+      xywh {360 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[7]} {
-      xywh {475 158 60 24} align 20
+      xywh {411 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[8]} {
-      xywh {536 158 60 24} align 20
+      xywh {462 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[9]} {
-      xywh {598 158 60 24} align 20
+      xywh {513 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[10]} {
-      xywh {659 158 60 24} align 20
+      xywh {564 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE[11]} {
-      xywh {719 158 60 24} align 20
+      xywh {615 158 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[0]} {
       label {Oper'}
-      xywh {55 183 60 24}
+      xywh {55 183 50 24} textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[1]} {
-      xywh {115 183 60 24} align 20
+      xywh {106 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[2]} {
-      xywh {174 183 60 24} align 20
+      xywh {156 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[3]} {
-      xywh {234 183 60 24} align 20
+      xywh {207 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[4]} {
-      xywh {293 183 60 24} align 20
+      xywh {258 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[5]} {
-      xywh {353 183 60 24} align 20
+      xywh {309 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[6]} {
-      xywh {415 183 60 24} align 20
+      xywh {360 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[7]} {
-      xywh {475 183 60 24} align 20
+      xywh {411 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[8]} {
-      xywh {536 183 60 24} align 20
+      xywh {462 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[9]} {
-      xywh {598 183 60 24} align 20
+      xywh {513 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[10]} {
-      xywh {659 183 60 24} align 20
+      xywh {564 183 50 24} align 20 textfont 4 textsize 12
     }
     Fl_Output {view_FD_PHONE_OP[11]} {
-      xywh {719 183 60 24} align 20
+      xywh {615 183 50 24} align 20 textfont 4 textsize 12
+    }
+    Fl_Box {} {
+      label 160
+      xywh {60 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 80
+      xywh {111 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 40
+      xywh {161 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 20
+      xywh {212 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 17
+      xywh {263 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 15
+      xywh {314 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 12
+      xywh {365 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 10
+      xywh {416 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 6
+      xywh {467 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 2
+      xywh {518 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 220
+      xywh {569 33 40 17} box FLAT_BOX
+    }
+    Fl_Box {} {
+      label 440
+      xywh {620 33 40 17} box FLAT_BOX
     }
     Fl_Group {} {
       label {"fdserver" Client} open
-      xywh {5 212 775 55} box ENGRAVED_BOX align 21
+      xywh {5 212 660 55} box ENGRAVED_BOX align 21
     } {
       Fl_Input inp_fd_tcpip_addr {
         label {tcpip addr}
         callback {progdefaults.fd_tcpip_addr=o->value();
 progdefaults.changed = true;}
-        tooltip {fdserver tcipip address} xywh {85 234 198 24}
+        tooltip {fdserver tcipip address} xywh {85 234 150 24}
         code0 {o->value(progdefaults.fd_tcpip_addr.c_str());}
         code1 {\#include "flinput2.h"}
         class Fl_Input2
@@ -325,15 +325,15 @@ progdefaults.changed = true;}
         label port
         callback {progdefaults.fd_tcpip_port=o->value();
 progdefaults.changed = true;}
-        tooltip {fdserver tcpip port} xywh {325 234 75 24}
+        tooltip {fdserver tcpip port} xywh {273 234 75 24}
         code0 {o->value(progdefaults.fd_tcpip_port.c_str());}
         class Fl_Input2
       }
       Fl_Input inp_fd_op_call {
-        label {OP callsign}
+        label {OP call}
         callback {progdefaults.fd_op_call=o->value();
 progdefaults.changed = true;}
-        tooltip {free form exchange} xywh {500 234 90 24}
+        tooltip {free form exchange} xywh {402 234 90 24}
         code0 {o->value(progdefaults.fd_op_call.c_str());}
         class Fl_Input2
       }
@@ -348,15 +348,15 @@ if (progdefaults.connect_to_fdserver) {
 	progdefaults.logging = LOG_QSO;
 }
 UI_select();}
-        tooltip {Connect / Disconnect^jAddr/Port/OP required} xywh {608 236 70 20} down_box DOWN_BOX
+        tooltip {Connect / Disconnect^jAddr/Port/OP required} xywh {502 236 70 20} down_box DOWN_BOX
         code0 {o->value(progdefaults.connect_to_fdserver);}
         code1 {\#include "confdialog.h"}
         code2 {\#include "fl_digi.h"}
         code3 {\#include "logsupport.h"}
       }
       Fl_Box box_fdserver_connected {
-        label Connected selected
-        xywh {722 237 18 18} box ROUND_DOWN_BOX color 31 align 1
+        label Connected
+        xywh {608 237 18 18} box ROUND_DOWN_BOX color 31 align 1
       }
     }
   }
diff --git a/src/logbook/logsupport.cxx b/src/logbook/logsupport.cxx
index 909b3060..a8ca2ed9 100644
--- a/src/logbook/logsupport.cxx
+++ b/src/logbook/logsupport.cxx
@@ -2190,9 +2190,9 @@ void cabrillo_append_qso (FILE *fp, cQsoRec *rec)
 	if (btnCabMode->value()) {
 		mode = adif2export(rec->getField(ADIF_MODE));
 		if (mode.compare("USB") == 0 || mode.compare("LSB") == 0 ||
+			mode.compare("FM") == 0 ||
 			mode.compare("SSB") == 0 || mode.compare("PH") == 0 ) mode = "PH";
-		else if (mode.compare("FM") == 0 || mode.compare("CW") == 0 ) ;
-		else mode = "RY";
+		else if (mode.compare("RTTY") == 0) mode = "RY";
 		qsoline.append(mode); qsoline.append(" ");
 	}
 
diff --git a/src/logbook/table.cxx b/src/logbook/table.cxx
index 31b755de..f5a2b3b2 100644
--- a/src/logbook/table.cxx
+++ b/src/logbook/table.cxx
@@ -1097,28 +1097,30 @@ int Table::handle(int event) {
       }
       break;
 
-    // Push on cell.
-          default:
+      // Push on cell.
+      default:
       bool changed = selected != row;
       selected = row;
 
       // Create new selection
       int len = 0;
       char **tableRow = data[selected];
-      char *buffer;
+      char *buffer = nullptr;
 
       for (int col = 0; col < nCols; col++)
         len += strlen(tableRow[col]) + 1;
 
       // Create a tab separated list from data.
       buffer = (char*)malloc(len);
-      strcpy(buffer, tableRow[0]);
-      for (int col = 1; col < nCols; col++) {
-        strcat(buffer, "\t");
-        strcat(buffer, tableRow[col]);
+      if (buffer != nullptr) {
+          strcpy(buffer, tableRow[0]);
+          for (int col = 1; col < nCols; col++) {
+            strcat(buffer, "\t");
+            strcat(buffer, tableRow[col]);
+          }
+          Fl::selection(*this, buffer, len);
+          free(buffer);
       }
-      Fl::selection(*this, buffer, len);
-      free(buffer);
 
       // Update view.
       damage(DAMAGE_ROWS);
diff --git a/src/main.cxx b/src/main.cxx
index 783e0eec..4e840b54 100644
--- a/src/main.cxx
+++ b/src/main.cxx
@@ -1397,10 +1397,8 @@ void generate_option_help(void) {
 		 << "    Specify the input\n"
 		 << "    Must be a positive integer indicating the number of samples\n"
 		"    of silence to generate as the input"
-#  if USE_SNDFILE
 		", or a filename containing\n"
 		"    non-digit characters"
-#endif
 		"\n\n"
 
 		 << "  --benchmark-output FILE\n"
@@ -1882,9 +1880,7 @@ void generate_version_text(void)
 
 	  << "  libraries      : " "FLTK " FLTK_BUILD_VERSION "\n"
 	  << "                   " "libsamplerate " << SAMPLERATE_BUILD_VERSION "\n";
-#if USE_SNDFILE
 	s << "                   " "libsndfile " << SNDFILE_BUILD_VERSION "\n";
-#endif
 #if USE_PORTAUDIO
 	s << "                   " "PortAudio " << PORTAUDIO_BUILD_VERSION "\n";
 #endif
@@ -1903,11 +1899,9 @@ void generate_version_text(void)
 	}
 
 	s << "  libraries      : " << src_get_version() << '\n';
-#if USE_SNDFILE
 	char sndfile_version[32];
 	sf_command(NULL, SFC_GET_LIB_VERSION, sndfile_version, sizeof(sndfile_version));
 	s << "                   " << sndfile_version << '\n';
-#endif
 #if USE_PORTAUDIO
 	s << "                   " << Pa_GetVersionText() << ' ' << Pa_GetVersion() << '\n';
 #endif
diff --git a/src/misc/benchmark.cxx b/src/misc/benchmark.cxx
index 81c3340c..7aa9987e 100644
--- a/src/misc/benchmark.cxx
+++ b/src/misc/benchmark.cxx
@@ -39,9 +39,7 @@
 #  include "compat.h"
 #endif
 
-#if USE_SNDFILE
 #  include <sndfile.h>
-#endif
 
 #include "fl_digi.h"
 #include "modem.h"
@@ -70,13 +68,8 @@ int setup_benchmark(void)
 		char* p;
 		benchmark.samples = (size_t)strtol(benchmark.input.c_str(), &p, 10);
 		if (*p != '\0') { // invalid char in input string
-#if USE_SNDFILE
 			// treat as filename
 			benchmark.samples = 0;
-#else
-			LOG_ERROR("Bad input string, \"%s\"", benchmark.input.c_str());
-			return 1;
-#endif
 		}
 	}
 	if (!benchmark.output.empty())
@@ -104,9 +97,7 @@ int setup_benchmark(void)
 	return 0;
 }
 
-#if USE_SNDFILE
 SNDFILE* infile = 0;
-#endif
 
 static size_t do_rx(struct rusage ru[2], struct timespec wall_time[2]);
 static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2]);
@@ -129,7 +120,6 @@ void do_benchmark(void)
 			 << " rate=" << active_modem->get_samplerate();
 	LOG_INFO("%s", info.str().c_str());
 
-#if USE_SNDFILE
 	if (!benchmark.samples) {
 		SF_INFO info = { 0, 0, 0, 0, 0, 0 };
 		if ((infile = sf_open(benchmark.input.c_str(), SFM_READ, &info)) == NULL) {
@@ -137,7 +127,6 @@ void do_benchmark(void)
 			return;
 		}
 	}
-#endif
 
 	struct rusage ru[2];
 	struct timespec wall_time[2];
@@ -151,12 +140,10 @@ void do_benchmark(void)
 	ru[1].ru_utime -= ru[0].ru_utime;
 	wall_time[1] -= wall_time[0];
 
-#if USE_SNDFILE
 	if (infile) {
 		sf_close(infile);
 		infile = 0;
 	}
-#endif
 
 	info << "processed: " << nproc << " samples (decoded " << nrx << ") in "
 		 << precision(3)
@@ -180,7 +167,6 @@ static size_t do_rx(struct rusage ru[2], struct timespec wall_time[2])
 	size_t inlen = 1 << 19;
 	double* inbuf = new double[inlen];
 
-#if USE_SNDFILE
 	if (infile) {
 		nread = 0;
 		clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
@@ -189,9 +175,7 @@ static size_t do_rx(struct rusage ru[2], struct timespec wall_time[2])
 		for (size_t n; (n = sf_readf_double(infile, inbuf, inlen)); nread += n)
 			active_modem->rx_process(inbuf, n);
 	}
-	else
-#endif
-	{
+	else {
 		memset(inbuf, 0, sizeof(double) * inlen);
 		clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
 		getrusage(RUSAGE_SELF, &ru[0]);
@@ -218,25 +202,21 @@ static long src_read(void* arg, float** data)
 	*data = inbuf;
 	return inlen;
 }
-#if USE_SNDFILE
 static long src_readf(void* arg, float** data)
 {
 	long n = (long)sf_readf_float(infile, inbuf, inlen);
 	*data = n ? inbuf : 0;
 	return n;
 }
-#endif
 
 static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2])
 {
 	int err;
 	SRC_STATE* src_state;
 
-#if USE_SNDFILE
 	if (infile)
 		src_state = src_callback_new(src_readf, benchmark.src_type, 1, &err, NULL);
 	else
-#endif
 		src_state = src_callback_new(src_read, benchmark.src_type, 1, &err, NULL);
 
 	if (!src_state) {
@@ -251,7 +231,6 @@ static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2])
 
 	long n;
 	size_t nread;
-#if USE_SNDFILE
 	if (infile) { // read until src returns 0
 		nread = 0;
 		clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
@@ -266,9 +245,7 @@ static size_t do_rx_src(struct rusage ru[2], struct timespec wall_time[2])
 
 		nread = (size_t)round(nread * benchmark.src_ratio);
 	}
-	else
-#endif
-	{ // read benchmark.samples * benchmark.src_ratio
+	else { // read benchmark.samples * benchmark.src_ratio
 		nread = (size_t)round(benchmark.samples * benchmark.src_ratio);
 		clock_gettime(CLOCK_MONOTONIC, &wall_time[0]);
 		getrusage(RUSAGE_SELF, &ru[0]);
diff --git a/src/misc/kiss_io.cxx b/src/misc/kiss_io.cxx
index af76c89e..8cc41915 100644
--- a/src/misc/kiss_io.cxx
+++ b/src/misc/kiss_io.cxx
@@ -786,7 +786,7 @@ static void reply_csma_mode(char *arg)
 static void set_busy_channel_inhibit(char *arg)
 {
 	std::string argstr = "";
-	time_t temp = 0;
+	int temp = 0;
 
 	if(arg) {
 		argstr.assign(arg);
@@ -796,7 +796,7 @@ static void set_busy_channel_inhibit(char *arg)
 					temp_disable_tx_inhibit = time(0) + temp_disable_tx_duration;
 				}
 			} else if(isdigit(argstr[0])) {
-				sscanf(arg, "%lu", &temp);
+				sscanf(arg, "%d", &temp);
 				if(temp == 0)
 					temp_disable_tx_duration = DISABLE_TX_INHIBIT_DURATION;
 				else
diff --git a/src/misc/log.cxx b/src/misc/log.cxx
index 112d1e7f..f11122fa 100644
--- a/src/misc/log.cxx
+++ b/src/misc/log.cxx
@@ -95,7 +95,9 @@ void cLogfile::log_to_file(log_t type, const string& s)
 	else {
 		time(&t);
 		gmtime_r(&t, &tm);
-		strftime(timestr, sizeof(timestr), "%a %b %e %H:%M:%S %Y UTC", &tm);
+        // Was %e (space padded month) but it's not available in the MS C
+        // runtime library, %d (zero-padded) is more portable.
+		strftime(timestr, sizeof(timestr), "%a %b %d %H:%M:%S %Y UTC", &tm);
 		fprintf(logfile, "\n--- Logging %s at %s ---\n", s.c_str(), timestr);
 	}
 
diff --git a/src/navtex/navtex.cxx b/src/navtex/navtex.cxx
index a84dc202..f196b2d3 100644
--- a/src/navtex/navtex.cxx
+++ b/src/navtex/navtex.cxx
@@ -1231,7 +1231,7 @@ private:
 			// the average of the two is a valid character.
 			for (i = 0; i < 7; i++) {
 				int a = m_bit_values[m_bit_cursor + i];
-				int r = m_bit_values[rep + i];
+				int r = m_bit_values[reppos + i];
 				avg[i] = a + r;
 			}
 
diff --git a/src/network/socket.cxx b/src/network/socket.cxx
index 34075154..18a2e3e0 100644
--- a/src/network/socket.cxx
+++ b/src/network/socket.cxx
@@ -1181,7 +1181,7 @@ size_t Socket::sendTo(const void* buf, size_t len)
 		unsigned long host_addr = get_address4((struct sockaddr *)useAddr);
 		unsigned int  host_port = get_port((struct sockaddr *) useAddr);
 
-		LOG_VERBOSE("HAP:%lX:%d count=%d buf=%s", host_addr, host_port, len, buf);
+		LOG_VERBOSE("HAP:%lX:%d count=%d buf=%s", host_addr, host_port, (int)len, (char*)buf);
 	}
 #endif
 
diff --git a/src/network/xmlrpc.cxx b/src/network/xmlrpc.cxx
index 2da693ef..e687fc6c 100644
--- a/src/network/xmlrpc.cxx
+++ b/src/network/xmlrpc.cxx
@@ -1083,9 +1083,10 @@ LOG_VERBOSE("main.set_wf_sideband %s", s.c_str());
 
 void xmlrpc_set_qsy(long long rfc)
 {
-	wf->rfcarrier(rfc);
+	unsigned long int freq = static_cast<unsigned long int>(rfc);
+	wf->rfcarrier(freq);
 	wf->movetocenter();
-	show_frequency(rfc);
+	show_frequency(freq);
 }
 
 class Main_set_freq : public xmlrpc_c::method
@@ -2215,8 +2216,8 @@ public:
 	{
 		XMLRPC_LOCK;
 		double rfc = wf->rfcarrier();
-long int f = (long int)(params.getDouble(0,0.0));
-LOG_VERBOSE("rig.set_frequency: %ld", f);
+		unsigned long int f = (long int)(params.getDouble(0,0.0));
+		LOG_VERBOSE("rig.set_frequency: %lu", f);
 		REQ(set_frequency, (long long int)params.getDouble(0, 0.0));
 		*retval = xmlrpc_c::value_double(rfc);
 	}
diff --git a/src/qrunner/qrunner.cxx b/src/qrunner/qrunner.cxx
index 04756e06..3cde3c63 100644
--- a/src/qrunner/qrunner.cxx
+++ b/src/qrunner/qrunner.cxx
@@ -111,7 +111,7 @@ qrunner::~qrunner()
 
 void qrunner::attach(int id_no, std::string id_string)
 {
-	Fl::add_fd(pfd[0], FL_READ, qrunner::execute, this);
+	Fl::add_fd(pfd[0], FL_READ, reinterpret_cast<Fl_FD_Handler>(qrunner::execute), this);
 	attached = true;
 	_id_no = id_no;
 	_id_string.assign(id_string);
@@ -119,7 +119,7 @@ void qrunner::attach(int id_no, std::string id_string)
 
 void qrunner::attach(void)
 {
-	Fl::add_fd(pfd[0], FL_READ, qrunner::execute, this);
+	Fl::add_fd(pfd[0], FL_READ, reinterpret_cast<Fl_FD_Handler>(qrunner::execute), this);
 	attached = true;
 }
 void qrunner::detach(void)
diff --git a/src/rigcontrol/FreqControl.cxx b/src/rigcontrol/FreqControl.cxx
index 0b0c4a58..566a5610 100644
--- a/src/rigcontrol/FreqControl.cxx
+++ b/src/rigcontrol/FreqControl.cxx
@@ -44,14 +44,14 @@ const char *cFreqControl::Label[10] = {
 
 void cFreqControl::IncFreq (int nbr) {
 	double v = (double)val + (double)mult[nbr] * precision;
-	if (v <= maxVal) val = (long int)v;
+	if (v <= maxVal) val = (unsigned long int)v;
 	updatevalue();
 	do_callback();
 }
 
 void cFreqControl::DecFreq (int nbr) {
 	double v = (double)val - (double)mult[nbr] * precision;
-	if (v >= minVal) val = (long int)v;
+	if (v >= minVal) val = (unsigned long int)v;
 	updatevalue();
 	do_callback();
 }
@@ -60,7 +60,7 @@ void cbSelectDigit (Fl_Widget *btn, void * nbr)
 {
 
 	Fl_Button *b = (Fl_Button *)btn;
-	int Nbr = (int)(reinterpret_cast<long> (nbr));
+	int Nbr = reinterpret_cast<intptr_t> (nbr);
 
 	cFreqControl *fc = (cFreqControl *)b->parent();
 	if (fc->hrd_buttons) {
@@ -132,7 +132,7 @@ cFreqControl::cFreqControl(int x, int y, int w, int h, const char *lbl):
 
 	minVal = 0;
 	double fmaxval = (pow(10.0, nD) - 1) * precision;
-	long int UMAX = maximum();
+	unsigned long int UMAX = maximum();
 	if (fmaxval > UMAX) fmaxval = UMAX;
 	maxVal = fmaxval;
 	fmaxval /= 1000.0;
@@ -222,7 +222,7 @@ cFreqControl::~cFreqControl()
 
 void cFreqControl::updatevalue()
 {
-	long int v = val / precision;
+	unsigned long int v = val / precision;
 	int i;
 	if (likely(v > 0L)) {
 		for (i = 0; i < nD; i++) {
@@ -332,16 +332,16 @@ static void blink_point(Fl_Widget* w)
 	Fl::add_timeout(0.2, (Fl_Timeout_Handler)blink_point, w);
 }
 
-void cFreqControl::value(long lv)
+void cFreqControl::value(unsigned long int lv)
 {
 	oldval = val = lv;
 	Fl::remove_timeout((Fl_Timeout_Handler)blink_point, decbx);
 	updatevalue();
 }
 
-long int cFreqControl::maximum(void)
+unsigned long int cFreqControl::maximum(void)
 {
-	return (long int)(pow(2.0, 31) - 1);
+	return (unsigned long int)(pow(2.0, 32) - 1);
 }
 
 
@@ -549,7 +549,7 @@ void cFreqControl::freq_input_cb(Fl_Widget*, void* arg)
 {
 	cFreqControl* fc = reinterpret_cast<cFreqControl*>(arg);
 	double val = strtod(fc->finp->value(), NULL);
-	long int lval;
+	unsigned long int lval;
 	val *= 1e3;
 	val += 0.5;
 	lval = (long)val;
@@ -619,7 +619,7 @@ void cFreqControl::set_ndigits(int nbr)
 
 	minVal = 0;
 	double fmaxval = (pow(10.0, nD) - 1) * precision;
-	long int UMAX = (long int)(pow(2.0, 31) - 1);
+	unsigned long int UMAX = (unsigned long int)(pow(2.0, 32) - 1);
 	if (fmaxval > UMAX) fmaxval = UMAX;
 	maxVal = fmaxval;
 	fmaxval /= 1000.0;
diff --git a/src/rigcontrol/rigio.cxx b/src/rigcontrol/rigio.cxx
index 3832f014..458d9ab6 100644
--- a/src/rigcontrol/rigio.cxx
+++ b/src/rigcontrol/rigio.cxx
@@ -1376,7 +1376,7 @@ static void rigcat_set_smeter(void *data)
 			pwrmeter->hide();
 			smeter->show();
 		}
-		int val = reinterpret_cast<long>(data);
+		int val = reinterpret_cast<intptr_t>(data);
 		smeter->value(val);
 	}
 }
@@ -1528,7 +1528,7 @@ static void rigcat_set_pmeter(void *data)
 			smeter->hide();
 			pwrmeter->show();
 		}
-		int val = reinterpret_cast<long>(data);
+		int val = reinterpret_cast<intptr_t>(data);
 		pwrmeter->value(val);
 	}
 }
@@ -1635,7 +1635,7 @@ void rigCAT_get_pwrmeter()
 
 static void rigcat_notch(void *data)
 {
-	int val = reinterpret_cast<long>(data);
+	int val = reinterpret_cast<intptr_t>(data);
 	notch_frequency = val;
 }
 
@@ -2080,9 +2080,9 @@ void rigCAT_set_notch(int freq)
 		LOG_ERROR("%s failed", symbol);
 }
 
-int pwrlevel_data(DATA d, size_t p)
+long pwrlevel_data(DATA d, size_t p)
 {
-	int val = 0;
+	long val = 0;
 
 	if (d.dtype == "BCD") {
 		if (d.reverse == true)
@@ -2102,7 +2102,7 @@ int pwrlevel_data(DATA d, size_t p)
 	}
 
 	size_t n;
-	int pwr1, pwr2, val1, val2;
+	long pwr1, pwr2, val1, val2;
 	for (n = 0; n < xmlrig.pwrlevel.size() - 1; n++) {
 		if ((val > xmlrig.pwrlevel[n].val) && (val <= xmlrig.pwrlevel[n+1].val))
 			break;
@@ -2148,9 +2148,9 @@ int pwrlevel_val(int pwr)
 // called by rigio thread
 // must use REQ(...) to set the power level control
 
-static void rigCAT_update_pwrlevel(void *v)
+static void rigCAT_update_pwrlevel(const long v)
 {
-	long pwr = reinterpret_cast<long>(v);
+	long pwr = v;
 	char szpwr[10];
 	snprintf(szpwr, sizeof(szpwr), "%ld", pwr);
 	progdefaults.mytxpower = szpwr;
@@ -2253,7 +2253,7 @@ void rigCAT_get_pwrlevel()
 // convert the data field
 	pwr = pwrlevel_data(rTemp.data, pData);
 
-	REQ(rigCAT_update_pwrlevel, (void *)pwr);
+	REQ(rigCAT_update_pwrlevel, pwr);
 }
 
 void rigCAT_set_pwrlevel(int pwr)
diff --git a/src/rigcontrol/rigsupport.cxx b/src/rigcontrol/rigsupport.cxx
index 68cdcbf8..5aa8ce5f 100644
--- a/src/rigcontrol/rigsupport.cxx
+++ b/src/rigcontrol/rigsupport.cxx
@@ -414,7 +414,7 @@ void qso_movFreq(Fl_Widget* w, void *data)
 {
 	cFreqControl *fc = (cFreqControl *)w;
 	long int f;
-	long restore = reinterpret_cast<long>(data);
+	long restore = reinterpret_cast<intptr_t>(data);
 	f = fc->value();
 	if (fc == qsoFreqDisp1) {
 		qsoFreqDisp2->value(f);
diff --git a/src/rigcontrol/serial.cxx b/src/rigcontrol/serial.cxx
index 3b0d1a1e..921f044d 100644
--- a/src/rigcontrol/serial.cxx
+++ b/src/rigcontrol/serial.cxx
@@ -395,7 +395,7 @@ BOOL Cserial::OpenPort()
 		LOG_PERROR(win_error_string(errno).c_str());
 		return FALSE;
 	}
-	LOG_INFO("COM port %s opened, handle = %d", device.c_str(), (int)hComm);
+	LOG_INFO("COM port %s opened, handle = %p", device.c_str(), hComm);
 
 	FlushBuffer();
 
@@ -410,7 +410,7 @@ BOOL Cserial::OpenPort()
 ///////////////////////////////////////////////////////
 void Cserial::ClosePort()
 {
-	LOG_INFO("Closing COM port, handle = %d", (int)hComm);
+	LOG_INFO("Closing COM port, handle = %p", hComm);
 
 	if (hComm != INVALID_HANDLE_VALUE) {
 		if (restore_tio)
diff --git a/src/rigcontrol/xmlrpc_rig.cxx b/src/rigcontrol/xmlrpc_rig.cxx
index 94aa3be3..88a55094 100644
--- a/src/rigcontrol/xmlrpc_rig.cxx
+++ b/src/rigcontrol/xmlrpc_rig.cxx
@@ -110,11 +110,12 @@ static int wait_bws_timeout = 0;
 
 void xmlrpc_rig_set_qsy(long long rfc)
 {
-	set_flrig_freq(static_cast<long>(rfc));
-	wf->rfcarrier(rfc);
+	unsigned long int freq = static_cast<unsigned long int>(rfc);
+	set_flrig_freq(freq);
+	wf->rfcarrier(freq);
 	wf->movetocenter();
-	show_frequency(rfc);
-	LOG_VERBOSE("set qsy: %d", (int)rfc);
+	show_frequency(freq);
+	LOG_VERBOSE("set qsy: %lu", freq);
 }
 
 //======================================================================
@@ -192,7 +193,7 @@ pthread_mutex_t mutex_flrig_ptt = PTHREAD_MUTEX_INITIALIZER;
 void xmlrpc_rig_show_ptt(void *data)
 {
 	guard_lock flrig_lock(&mutex_flrig_ptt);
-	int on = reinterpret_cast<long>(data);
+	int on = reinterpret_cast<intptr_t>(data);
 	if (wf && (trx_state != STATE_TUNE)) {
 		wf->xmtrcv->value(on);
 		wf->xmtrcv->do_callback();
@@ -234,7 +235,7 @@ void flrig_get_ptt()
 
 static bool wait_freq = false; // wait for transceiver to respond
 static int  wait_freq_timeout = 5; // 5 polls and then disable wait
-static long int  xcvr_freq = 0;
+static unsigned long int  xcvr_freq = 0;
 
 pthread_mutex_t mutex_flrig_freq = PTHREAD_MUTEX_INITIALIZER;
 
@@ -242,13 +243,13 @@ void xmlrpc_rig_show_freq(void * fr)
 {
 	guard_lock flrig_lock(&mutex_flrig_freq);
 	if (!wf) return;
-	long freq = reinterpret_cast<long>(fr);
+	unsigned long int freq = reinterpret_cast<intptr_t>(fr);
 	wf->rfcarrier(freq);
 	wf->movetocenter();
 	show_frequency(freq);
 }
 
-void set_flrig_freq(long int fr)
+void set_flrig_freq(unsigned long int fr)
 {
 	if (!connected_to_flrig) return;
 
@@ -279,13 +280,13 @@ void flrig_get_frequency()
 		if (!freq_posted) return;
 		if (flrig_client->execute("rig.get_vfo", XmlRpcValue(), result, timeout) ) {
 			str_freq = string(result);
-			int fr = atoi(str_freq.c_str());
+			unsigned long int fr = atoll(str_freq.c_str());
 
 			if (!wait_freq && (fr != xcvr_freq)) {
 				xcvr_freq = fr;
 				guard_lock flrig_lock(&mutex_flrig_freq);
 				Fl::awake(xmlrpc_rig_show_freq, reinterpret_cast<void*>(fr));
-				LOG_VERBOSE("get freq: %d", fr);
+				LOG_VERBOSE("get freq: %lu", fr);
 			} else if (wait_freq && (fr == xcvr_freq)) {
 				wait_freq = false;
 				wait_freq_timeout = 0;
@@ -824,7 +825,7 @@ static void xmlrpc_rig_set_smeter(void *data)
 			pwrmeter->hide();
 			smeter->show();
 		}
-		int val = reinterpret_cast<long>(data);
+		int val = reinterpret_cast<intptr_t>(data);
 		smeter->value(val);
 	}
 }
@@ -852,7 +853,7 @@ static void xmlrpc_rig_set_pwrmeter(void *data)
 			smeter->hide();
 			pwrmeter->show();
 		}
-		int val = reinterpret_cast<long>(data);
+		int val = reinterpret_cast<intptr_t>(data);
 		pwrmeter->value(val);
 	}
 }
diff --git a/src/rsid/rsid_defs.cxx b/src/rsid/rsid_defs.cxx
index 140668ed..6796de66 100644
--- a/src/rsid/rsid_defs.cxx
+++ b/src/rsid/rsid_defs.cxx
@@ -185,7 +185,7 @@
         ELEM_(105, PSK_HELL, NUM_MODES)                 \
         ELEM_(106, HELL_80, MODE_HELL80)                \
         ELEM_(107, FM_HELL_105, MODE_FSKH105)           \
-        ELEM_(108, FM_HELL_245, NUM_MODES)              \
+        ELEM_(108, FM_HELL_245, MODE_FSKH245)           \
                                                         \
         ELEM_(114, MODE_141A, NUM_MODES)                \
         ELEM_(123, DTMF, NUM_MODES)                     \
diff --git a/src/soundcard/play.pa.cxx b/src/soundcard/play.pa.cxx
index 69d44004..0ea9c905 100644
--- a/src/soundcard/play.pa.cxx
+++ b/src/soundcard/play.pa.cxx
@@ -308,11 +308,11 @@ c_portaudio::c_portaudio()
 	b_len = 0;
 	rc = src_new (progdefaults.sample_converter, 1, &rc_error) ;
 	monitor_rb = new ringbuffer<float>(RBUFF_SIZE);
-	start_alert_thread();
-	start_filelist_thread();
 
-	bpfilt = 0;
+	bpfilt = new C_FIR_filter();
 
+	start_alert_thread();
+	start_filelist_thread();
 }
 
 c_portaudio::~c_portaudio()
@@ -626,6 +626,8 @@ void c_portaudio::mon_write(double *buffer, int len, int mon_sr)
 	float vol = 0.01 * progdefaults.RxFilt_vol;
 	float *rsbuffer = 0;
 
+	if (!bpfilt) init_filter();
+
 	try {
 
 // do not resample if alert samplerate == modem samplerate
diff --git a/src/soundcard/sound.cxx b/src/soundcard/sound.cxx
index f3533209..02dd8fcb 100644
--- a/src/soundcard/sound.cxx
+++ b/src/soundcard/sound.cxx
@@ -104,18 +104,16 @@ namespace SND_SUPPORT {
 	}
 
 	void get_file_params(std::string def_fname, std::string &fname, int &format, bool check) {
+		bool isplayback = (def_fname.find("playback") != std::string::npos);
 		std::string filters;
-		if (def_fname.find("playback") != std::string::npos)
+		if (isplayback)
 			filters = "Audio format\t*.{mp3,wav}\n";
 		else
 			filters = "Audio format\t*.wav\n";
-		if (format_supported(SF_FORMAT_FLAC | SF_FORMAT_PCM_16)) {
-			filters.append("FLAC format\t*.flac");
-		}
 		format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
 		int fsel = 0;
 		const char *fn = 0;
-		if (def_fname.find("playback") != std::string::npos)
+		if (isplayback)
 			fn = FSEL::select(_("Audio file"), filters.c_str(), def_fname.c_str(), &fsel);
 		else
 			fn = FSEL::saveas(_("Audio file"), filters.c_str(), def_fname.c_str(), &fsel);
@@ -125,6 +123,9 @@ namespace SND_SUPPORT {
 		}
 		fname = fn;
 
+		if (!isplayback && (fname.find(".wav") == std::string::npos))
+			fname.append(".wav");
+
 		if (check) {
 			FILE *f = fopen(fname.c_str(), "r");
 			if (f) {
@@ -162,13 +163,10 @@ SoundBase::SoundBase()
 	  txppm(progdefaults.TX_corr), rxppm(progdefaults.RX_corr),
 		  tx_src_state(0), rx_src_state(0),
 		  wrt_buffer(new double[SND_BUF_LEN]),
-#if USE_SNDFILE
 		  ofCapture(0), ifPlayback(0), ofGenerate(0)
-#endif
 {
 	memset(wrt_buffer, 0, SND_BUF_LEN * sizeof(*wrt_buffer));
 
-#if USE_SNDFILE
 	int err;
 	writ_src_data_left = new SRC_DATA;
 	writ_src_data_right = new SRC_DATA;
@@ -207,14 +205,12 @@ SoundBase::SoundBase()
 
 	modem_wr_sr = modem_play_sr = 0;
 	out_pointer = src_rd_out_buffer;
-#endif
 }
 
 SoundBase::~SoundBase()
 {
 	delete [] wrt_buffer;
 
-#if USE_SNDFILE
 	if (ofGenerate)
 		sf_close(ofGenerate);
 	if (ofCapture)
@@ -228,11 +224,8 @@ SoundBase::~SoundBase()
 	delete [] src_write_buffer_right;
 	delete [] src_rd_inp_buffer;
 	delete [] src_rd_out_buffer;
-#endif
 }
 
-#if USE_SNDFILE
-
 void SoundBase::stopCapture()
 {
 	if (ofCapture) {
@@ -683,8 +676,6 @@ void SoundBase::write_file(SNDFILE* file, double* bufleft, double *bufright, siz
 	return;
 }
 
-#endif // USE_SNDFILE
-
 #if USE_OSS
 
 #define MAXSC 32767.0f
@@ -932,14 +923,12 @@ size_t SoundOSS::Read(float *buffer, size_t buffersize)
 	for (size_t i = 0; i < buffersize; i++)
 		buffer[i] = src_buffer[2*i + (progdefaults.ReverseRxAudio ? 1 : 0)];
 
-#if USE_SNDFILE
 	if (ofCapture)
 		write_file(ofCapture, buffer, NULL, buffersize);
 	if (ifPlayback) {
 		read_file(ifPlayback, buffer, buffersize);
 		return buffersize;
 	}
-#endif
 
 	if (rxppm != progdefaults.RX_corr) {
 		rxppm = progdefaults.RX_corr;
@@ -976,10 +965,8 @@ size_t SoundOSS::Write(double *buf, size_t count)
 	short int *wbuff;
 	unsigned char *p;
 
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, buf, NULL, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -1053,10 +1040,8 @@ size_t SoundOSS::Write_stereo(double *bufleft, double *bufright, size_t count)
 	short int *wbuff;
 	unsigned char *p;
 
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, bufleft, bufright, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -1477,7 +1462,6 @@ do { \
 
 size_t SoundPort::Read(float *buf, size_t count)
 {
-#if USE_SNDFILE
 	if (ifPlayback) {
 		read_file(ifPlayback, buf, count);
 		if (!ofCapture) {
@@ -1486,7 +1470,6 @@ size_t SoundPort::Read(float *buf, size_t count)
 			return count;
 		}
 	}
-#endif
 
 	if (rxppm != progdefaults.RX_corr)
 		rxppm = progdefaults.RX_corr;
@@ -1565,20 +1548,16 @@ size_t SoundPort::Read(float *buf, size_t count)
 		buf[i] = rbuf[n];
 	}
 
-#if USE_SNDFILE
 	if (ofCapture)
 		write_file(ofCapture, buf, NULL, count);
-#endif
 
-		return count;
+	return count;
 }
 
 size_t SoundPort::Write(double *buf, size_t count)
 {
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, buf, NULL, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -1604,10 +1583,8 @@ size_t SoundPort::Write_stereo(double *bufleft, double *bufright, size_t count)
 	if (sd[1].params.channelCount != 2)
 		return Write(bufleft, count);
 
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofCapture, bufleft, bufright, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -2275,10 +2252,8 @@ void SoundPulse::flush(unsigned dir)
 
 size_t SoundPulse::Write(double* buf, size_t count)
 {
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, buf, NULL, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -2304,10 +2279,8 @@ size_t SoundPulse::Write_stereo(double* bufleft, double* bufright, size_t count)
 	if (sd[1].stream_params.channels != 2)
 		return Write(bufleft, count);
 
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, bufleft, bufright, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -2378,7 +2351,6 @@ long SoundPulse::src_read_cb(void* arg, float** data)
 
 size_t SoundPulse::Read(float *buf, size_t count)
 {
-#if USE_SNDFILE
 	if (ifPlayback) {
 		read_file(ifPlayback, buf, count);
 		if (!ofCapture) {
@@ -2388,7 +2360,6 @@ size_t SoundPulse::Read(float *buf, size_t count)
 			return count;
 		}
 	}
-#endif
 
 	size_t n = 0;
 	long r = 0;
@@ -2423,10 +2394,8 @@ size_t SoundPulse::Read(float *buf, size_t count)
 		n += sd[0].stream_params.channels;
 	}
 
-#if USE_SNDFILE
 	if (ofCapture)
 		write_file(ofCapture, buf, NULL, count);
-#endif
 
 	return count;
 }
@@ -2458,10 +2427,8 @@ void SoundPulse::src_data_reset(int mode)
 
 size_t SoundNull::Write(double* buf, size_t count)
 {
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, buf, NULL, count);
-#endif
 
 	if (PERFORM_CPS_TEST || active_modem->XMLRPC_CPS_TEST) {
 		return count;
@@ -2474,10 +2441,8 @@ size_t SoundNull::Write(double* buf, size_t count)
 
 size_t SoundNull::Write_stereo(double* bufleft, double* bufright, size_t count)
 {
-#if USE_SNDFILE
 	if (ofGenerate)
 		write_file(ofGenerate, bufleft, bufright, count);
-#endif
 
 	MilliSleep((long)ceil((1e3 * count) / sample_frequency));
 
@@ -2486,16 +2451,12 @@ size_t SoundNull::Write_stereo(double* bufleft, double* bufright, size_t count)
 
 size_t SoundNull::Read(float *buf, size_t count)
 {
-#if USE_SNDFILE
 	if (ifPlayback)
 		read_file(ifPlayback, buf, count);
 	else
-#endif
 		memset(buf, 0, count * sizeof(*buf));
-#if USE_SNDFILE
 	if (ofCapture)
 		write_file(ofCapture, buf, NULL, count);
-#endif
 	if (!bHighSpeed)
 		MilliSleep((long)ceil((1e3 * count) / sample_frequency));
 
@@ -2505,9 +2466,7 @@ size_t SoundNull::Read(float *buf, size_t count)
 
 void SoundNull::flush(unsigned)
 {
-#if USE_SNDFILE
 	if (ofGenerate)
 		sf_close(ofGenerate);
-#endif
 }
 
diff --git a/src/trx/modem.cxx b/src/trx/modem.cxx
index 7deacaa5..8676b65d 100644
--- a/src/trx/modem.cxx
+++ b/src/trx/modem.cxx
@@ -455,7 +455,7 @@ double modem::sigmaN (double es_ovr_n0)
 //	case MODE_MFSK64: case MODE_MFSK8: case MODE_MFSK16: case MODE_MFSK32:
 //	case MODE_THOR4: case MODE_THOR5: case MODE_THOR8:
 //	case MODE_THOR11:case MODE_THOR16: case MODE_THOR22:
-//	case MODE_FSKHELL: case MODE_FSKH105: case MODE_HELL80:
+//	case MODE_FSKH245: case MODE_FSKH105: case MODE_HELL80:
 	default: break;
 	}
 	if (trx_state == STATE_TUNE) mode_factor = 0.707;
diff --git a/src/waterfall/waterfall.cxx b/src/waterfall/waterfall.cxx
index 648c3f1c..59a391e3 100644
--- a/src/waterfall/waterfall.cxx
+++ b/src/waterfall/waterfall.cxx
@@ -1538,8 +1538,9 @@ void btnMem_cb(Fl_Widget *, void *menu_event)
 	switch (op) {
 		case SELECT:
 			m = qrg_list[elem];
-			if (active_modem != *mode_info[m.mode].modem)
+			if (active_modem != *mode_info[m.mode].modem) {
 				init_modem_sync(m.mode);
+			}
 			if (m.rfcarrier && m.rfcarrier != wf->rfcarrier())
 				qsy(m.rfcarrier, m.carrier);
 			else
@@ -1568,7 +1569,7 @@ void btnMem_cb(Fl_Widget *, void *menu_event)
 // write the menu item text
 			{
 				ostringstream o;
-				o << mode_info[m.mode].sname << " @@ ";
+				o << mode_info[m.mode].name << " @@ ";
 				if (m.rfcarrier > 0) { // write 1000s separators
 					char s[20], *p = s + sizeof(s) - 1;
 					int i = 0;
@@ -1584,10 +1585,11 @@ void btnMem_cb(Fl_Widget *, void *menu_event)
 					o << p << (wf->USB() ? " + " : " - ");
 				}
 				o << m.carrier;
-				if (op == APPEND)
+				if (op == APPEND) {
 					wf->mbtnMem->add(o.str().c_str());
-				else
+				} else {
 					wf->mbtnMem->replace(elem, o.str().c_str());
+				}
 			}
 			break;
 	}
diff --git a/src/wefax/wefax.cxx b/src/wefax/wefax.cxx
index eba80018..f1cf94d4 100644
--- a/src/wefax/wefax.cxx
+++ b/src/wefax/wefax.cxx
@@ -89,30 +89,54 @@ struct fir_coeffs
 
 // Narrow, middle and wide fir low pass filter from ACfax
 static const fir_coeffs input_filters[] = {
-	{ _("Narrow"), 17,
-		{ -7,-18,-15, 11, 56,116,177,223,240,223,177,116, 56, 11,-15,-18, -7}
-	},
-	{ _("Middle"), 17,
-		{  0,-18,-38,-39,  0, 83,191,284,320,284,191, 83,  0,-39,-38,-18,  0}
-	},
-	{ _("Wide"),   17,
-		{  6, 20,  7,-42,-74,-12,159,353,440,353,159,-12,-74,-42,  7, 20,  6}
-	},
-	{ "Blackman", 17,
-		{  -2.7756e-15, 2.9258e+00, 1.3289e+01, 3.4418e+01, 6.8000e+01,
-			1.1095e+02, 1.5471e+02, 1.8770e+02, 2.0000e+02, 1.8770e+02,
-			1.5471e+02, 1.1095e+02, 6.8000e+01, 3.4418e+01, 1.3289e+01,
-			2.9258e+00, -2.7756e-15 } },
-	{ "Hanning", 17,
-		{	0.00000,   7.61205,   29.28932, 61.73166, 100.00000,
-   			138.26834, 170.71068, 192.38795, 200.00000, 192.38795,
-   			170.71068, 138.26834, 100.00000, 61.73166, 29.28932,
-     		7.61205, 0.00000 } },
-	{ "Hamming", 17,
-		{	16.000, 23.003, 42.946, 72.793, 108.000,
-			143.207, 173.054, 192.997, 200.000, 192.997,
-			173.054, 143.207, 108.000, 72.793, 42.946,
-			23.003, 16.000 } }
+{ _("Narrow"), 65,
+{
+  0.000495,  0.000684,  0.000885,  0.00109,   0.00128,  
+  0.00141,   0.00142,   0.00124,   0.000793,  2.94e-05,  
+ -0.00108,  -0.00251,  -0.0042,   -0.00602,  -0.00778,  
+ -0.00925,  -0.0101,   -0.0102,   -0.00909,  -0.00664,  
+ -0.00267,   0.00289,   0.01,      0.0185,    0.0281,  
+  0.0383,    0.0488,    0.059,     0.0682,    0.0761,  
+  0.0821,    0.0858,    0.0871,    0.0858,    0.0821,  
+  0.0761,    0.0682,    0.059,     0.0488,    0.0383,  
+  0.0281,    0.0185,    0.01,      0.00289,  -0.00267,  
+ -0.00664,  -0.00909,  -0.0102,   -0.0101,   -0.00925,  
+ -0.00778,  -0.00602,  -0.0042,   -0.00251,  -0.00108,  
+  2.94e-05,  0.000793,  0.00124,   0.00142,   0.00141,  
+  0.00128,   0.00109,   0.000885,  0.000684,  0.000495
+} },
+{ _("Medium"), 65,
+{
+ -0.000795, -0.000779, -0.000698, -0.000517, -0.000195,  
+  0.000303,  0.000982,  0.0018,    0.00267,   0.00343,  
+  0.00389,   0.00383,   0.00306,   0.00144,  -0.00102,  
+ -0.0042,   -0.0078,   -0.0114,   -0.0143,   -0.0159,  
+ -0.0156,   -0.0127,   -0.00695,   0.00188,   0.0136,  
+  0.0277,    0.0434,    0.0596,    0.0752,    0.0889,  
+  0.0997,    0.106,     0.109,     0.106,     0.0997,  
+  0.0889,    0.0752,    0.0596,    0.0434,    0.0277,  
+  0.0136,    0.00188,  -0.00695,  -0.0127,   -0.0156,  
+ -0.0159,   -0.0143,   -0.0114,   -0.0078,   -0.0042,  
+ -0.00102,   0.00144,   0.00306,   0.00383,   0.00389,  
+  0.00343,   0.00267,   0.0018,    0.000982,  0.000303,  
+ -0.000195, -0.000517, -0.000698, -0.000779, -0.000795
+} },
+{ _("Wide"),   65,
+{
+  0.000716,  0.000844,  0.000845,  0.000668,  0.000259,  
+ -0.000402, -0.00126,  -0.00216,  -0.00284,  -0.003,  
+ -0.00234,  -0.00073,   0.00175,   0.0047,    0.00747,  
+  0.00922,   0.00911,   0.00655,   0.00143,  -0.00575,  
+ -0.0138,   -0.0209,   -0.025,    -0.0241,   -0.0167,  
+ -0.00203,   0.0193,    0.0457,    0.0743,    0.102,  
+  0.125,     0.14,      0.145,     0.14,      0.125,  
+  0.102,     0.0743,    0.0457,    0.0193,   -0.00203,  
+ -0.0167,   -0.0241,   -0.025,    -0.0209,   -0.0138,  
+ -0.00575,   0.00143,   0.00655,   0.00911,   0.00922,  
+  0.00747,   0.0047,    0.00175,  -0.00073,  -0.00234,  
+ -0.003,    -0.00284,  -0.00216,  -0.00126,  -0.000402,  
+  0.000259,  0.000668,  0.000845,  0.000844,  0.000716
+} }
 };
 
 static const size_t nb_filters = sizeof(input_filters)/sizeof(input_filters[0]); ;
@@ -1921,7 +1945,10 @@ void fax_implementation::rx_new_samples(const double* audio_ptr, int audio_sz)
 	int ix = 0;
 
 	/// The reception filter may have been changed by the GUI.
-	C_FIR_filter & ref_fir_filt_pair = m_rx_filters[ progdefaults.wefax_filter ];
+	if (progdefaults.wefax_filter > 2 || progdefaults.wefax_filter < 0)
+		progdefaults.wefax_filter = 0;
+
+	C_FIR_filter & ref_fir_filt_pair = m_rx_filters[ progdefaults.wefax_filter];
 
 	for (int i = 0; i < audio_sz; i++) {
 		if (!ref_fir_filt_pair.run(
diff --git a/src/widgets/FTextRXTX.cxx b/src/widgets/FTextRXTX.cxx
index 92908af4..c84d0028 100644
--- a/src/widgets/FTextRXTX.cxx
+++ b/src/widgets/FTextRXTX.cxx
@@ -2413,6 +2413,7 @@ void FTextTX::handle_context_menu(void)
 
 	bool modify_text_ok = insert_position() >= txpos;
 	bool selected = tbuf->selected();
+std::cout << "FTextTX::tbuf " << (selected ? "selected" : "not selected") << std::endl;
  	icons::set_active(&menu[TX_MENU_MFSK16_IMG], active_modem->get_cap() & modem::CAP_IMG);
 	icons::set_active(&menu[TX_MENU_CLEAR], tbuf->length());
 	icons::set_active(&menu[TX_MENU_CUT], selected && modify_text_ok);
diff --git a/src/widgets/FTextView.cxx b/src/widgets/FTextView.cxx
index 1916d5bd..9531923e 100644
--- a/src/widgets/FTextView.cxx
+++ b/src/widgets/FTextView.cxx
@@ -651,7 +651,7 @@ Fl_Menu_Item FTextEdit::menu[] = {
 	{ icons::make_icon_label(_("Paste"), edit_paste_icon), 0, 0, 0, 0, _FL_MULTI_LABEL },
 	{ icons::make_icon_label(_("Clear"), edit_clear_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
 	{ icons::make_icon_label(_("Insert file..."), file_open_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL },
-	{ _("Word wrap"), 0, 0, 0, FL_MENU_TOGGLE, FL_NORMAL_LABEL } ,
+	{ _("Word wrap"), 0, 0, 0, FL_MENU_TOGGLE | FL_MENU_DIVIDER, FL_NORMAL_LABEL } ,
 	{ 0 }
 };
 
@@ -855,6 +855,7 @@ int FTextEdit::handle_dnd_drop(void)
 void FTextEdit::handle_context_menu(void)
 {
 	bool selected = tbuf->selected();
+std::cout << "FTextEdit::tbuf " << (selected ? "selected" : "not selected") << std::endl;
 	icons::set_active(&menu[EDIT_MENU_CUT], selected);
 	icons::set_active(&menu[EDIT_MENU_COPY], selected);
 	icons::set_active(&menu[EDIT_MENU_CLEAR], tbuf->length());
@@ -892,6 +893,11 @@ void FTextEdit::menu_cb(size_t item)
 	case EDIT_MENU_WRAP:
 		set_word_wrap(!wrap, true);
 		break;
+	default:
+		if (FTextEdit::menu[item].flags == 0) { // not an FL_SUB_MENU
+			add(FTextEdit::menu[item].text[0]);
+			add(FTextEdit::menu[item].text[1]);
+		}
 	}
 }
 
diff --git a/src/widgets/F_Edit.cxx b/src/widgets/F_Edit.cxx
new file mode 100644
index 00000000..1144bc3b
--- /dev/null
+++ b/src/widgets/F_Edit.cxx
@@ -0,0 +1,408 @@
+// ----------------------------------------------------------------------------
+//      FTextView.cxx
+//
+// Copyright (C) 2007-2009
+//              Stelios Bounanos, M0GLD
+//
+// Copyright (C) 2008-2009
+//              Dave Freese, W1HKJ
+//
+// This file is part of fldigi.
+//
+// fldigi is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+#include <cmath>
+#include <sys/stat.h>
+#include <map>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+#include <algorithm>
+#include <iomanip>
+
+#include <string>
+
+#include <FL/Fl_Tooltip.H>
+
+#include "flmisc.h"
+#include "fileselect.h"
+#include "font_browser.h"
+#include "ascii.h"
+#include "icons.h"
+#include "gettext.h"
+#include "macros.h"
+
+#include "F_Edit.h"
+
+#include "debug.h"
+
+using namespace std;
+
+int * F_Edit::p_editpos;
+
+Fl_Menu_Item F_Edit::menu[] = {
+	{ 0 }, // EDIT_MENU_CUT
+	{ 0 }, // EDIT_MENU_COPY
+	{ 0 }, // EDIT_MENU_PASTE
+	{ 0 }, // EDIT_MENU_CLEAR
+	{ 0 }, // EDIT_MENU_READ
+	{ 0 }, // EDIT_MENU_WRAP
+
+	{ _("Spec Char"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+		{ "¢ - cent", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ "£ - pound", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ "µ - micro", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ "° - degree", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ "¿ - iques", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ "× - times", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ "÷ - divide", 0, 0, 0, 0, FL_NORMAL_LABEL },
+		{ _("A"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "À - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "à - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Á - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "á - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Â - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "â - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ã - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ã - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ä - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ä - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Å - ring", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "å - ring", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Æ - aelig", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "æ - aelig", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("E"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "È - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "è - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "É - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "é - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ê - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ê - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ë - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ë - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("I"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "Ì - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ì - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Í - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "í - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Î - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "î - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ï - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ï - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("N"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "Ñ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ñ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("O"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "Ò - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ò - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ó - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ó - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ô - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ô - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Õ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "õ - tilde", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ö - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ö - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ø - slash", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ø - slash", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("U"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "Ù - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ù - grave", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ú - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ú - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Û - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "û - circ", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ü - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ü - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("Y"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "Ý - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ý - acute", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ÿ - umlaut", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{ _("Other"), 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL },
+			{ "ß - szlig", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ç - cedil", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ç - cedil", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Ð - eth", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "ð - eth", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{ "Þ - thorn", 0, 0, 0, 0, FL_NORMAL_LABEL },
+			{0,0,0,0,0,0,0,0,0},
+		{0,0,0,0,0,0,0,0,0},
+	{ 0 }
+};
+
+F_Edit::F_Edit(int x, int y, int w, int h, const char *l)
+	: FTextEdit(x, y, w, h, l), editpos(0), bkspaces(0)
+{
+	change_keybindings();
+
+	memcpy(menu + EDIT_MENU_CUT, FTextEdit::menu, (FTextEdit::menu->size() - 1) * sizeof(*FTextEdit::menu));
+	context_menu = menu;
+	init_context_menu();
+
+	p_editpos = &editpos;
+
+}
+
+/// Handles fltk events for this widget.
+/// We pass keyboard events to handle_key() and handle mouse3 presses to show
+/// the popup menu. We also disallow mouse2 events in the transmitted text area.
+/// Everything else is passed to the base class handle().
+///
+/// @param event
+///
+/// @return
+///
+int F_Edit::handle(int event)
+{
+//	if ( !(Fl::event_inside(this) || (event == FL_KEYBOARD && Fl::focus() == this)) )
+//		return FTextEdit::handle(event);
+
+//	if (event == FL_KEYBOARD)
+//		return handle_key(Fl::event_key()) ? 1 : FTextEdit::handle(event);
+
+	return FTextEdit::handle(event);
+}
+
+/// Clears the buffer.
+/// Also resets the transmit position, stored backspaces and tx pause flag.
+///
+void F_Edit::clear(void)
+{
+	FTextEdit::clear();
+	editpos = 0;
+	bkspaces = 0;
+}
+
+void F_Edit::add_text(string s)
+{
+	for (size_t n = 0; n < s.length(); n++) {
+		if (s[n] == '\b') {
+			int ipos = insert_position();
+			if (tbuf->length()) {
+				if (ipos > 0) {
+					bkspaces++;
+					int nn;
+					tbuf->get_char_at(editpos, nn);
+					editpos -= nn;
+				}
+				tbuf->remove(tbuf->length() - 1, tbuf->length());
+				sbuf->remove(sbuf->length() - 1, sbuf->length());
+				redraw();
+			}
+		} else {
+			add(s[n] & 0xFF, RECV);
+		}
+	}
+}
+
+void F_Edit::setFont(Fl_Font f, int attr)
+{
+	FTextBase::setFont(f, attr);
+}
+
+/// Handles keyboard events to override Fl_Text_Editor_mod's handling of some
+/// keystrokes.
+///
+/// @param key
+///
+/// @return
+///
+int F_Edit::handle_key(int key)
+{
+	switch (key) {
+	case FL_Tab:
+		if (editpos != insert_position())
+			insert_position(editpos);
+		else
+			insert_position(tbuf->length());
+		return 1;
+	case FL_BackSpace: {
+			int ipos = insert_position();
+			if (editpos > 0 && editpos == ipos) {
+				bkspaces++;
+				editpos = tbuf->prev_char(ipos);
+			}
+			return 0;
+		}
+	default:
+		break;
+	}
+
+// read ctl-ddd, where d is a digit, as ascii characters (in base 10)
+// and insert verbatim; e.g. ctl-001 inserts a <soh>
+	if (Fl::event_state() & FL_CTRL && (key >= FL_KP) && (key <= FL_KP + '9'))
+		return handle_key_ascii(key);
+
+// restart the numeric keypad entries.
+	ascii_cnt = 0;
+	ascii_chr = 0;
+
+	return 0;
+}
+
+int F_Edit::handle_dnd_drag(int pos)
+{
+	return 1;
+	return FTextEdit::handle_dnd_drag(pos);
+}
+
+/// Handles mouse-3 clicks by displaying the context menu
+///
+/// @param val
+///
+void F_Edit::handle_context_menu(void)
+{
+	bool selected = tbuf->selected();
+std::cout << "F_Edit::tbuf " << (selected ? "selected" : "not selected") << std::endl;
+	icons::set_active(&menu[EDIT_MENU_CLEAR], tbuf->length());
+	icons::set_active(&menu[EDIT_MENU_CUT], selected);
+	icons::set_active(&menu[EDIT_MENU_COPY], selected);
+	icons::set_active(&menu[EDIT_MENU_PASTE], true);
+	icons::set_active(&menu[EDIT_MENU_READ], true);
+
+	if (wrap)
+		menu[EDIT_MENU_WRAP].set();
+	else
+		menu[EDIT_MENU_WRAP].clear();
+
+	show_context_menu();
+}
+
+/// The context menu handler
+///
+/// @param val
+///
+void F_Edit::menu_cb(size_t item)
+{
+  	switch (item) {
+	case EDIT_MENU_CLEAR:
+		clear();
+		break;
+	case EDIT_MENU_CUT:
+		kf_cut(0, this);
+		break;
+	case EDIT_MENU_COPY:
+		kf_copy(0, this);
+		break;
+	case EDIT_MENU_PASTE:
+		kf_paste(0, this);
+		break;
+	case EDIT_MENU_READ: {
+		restore_wrap = wrap;
+		set_word_wrap(false);
+		readFile();
+		break;
+	}
+	case EDIT_MENU_WRAP:
+		set_word_wrap(!wrap, true);
+		break;
+	default:
+		if (F_Edit::menu[item].flags == 0) { // not an FL_SUB_MENU
+			add(F_Edit::menu[item].text[0]);
+			add(F_Edit::menu[item].text[1]);
+		}
+	}
+}
+
+/// Overrides some useful Fl_Text_Edit keybindings that we want to keep working,
+/// provided that they don't try to change chunks of transmitted text.
+///
+void F_Edit::change_keybindings(void)
+{
+	struct {
+		Fl_Text_Editor_mod::Key_Func function, override;
+	} fbind[] = {
+		{ Fl_Text_Editor_mod::kf_default, F_Edit::kf_default },
+		{ Fl_Text_Editor_mod::kf_enter,   F_Edit::kf_enter   },
+		{ Fl_Text_Editor_mod::kf_delete,  F_Edit::kf_delete  },
+		{ Fl_Text_Editor_mod::kf_cut,     F_Edit::kf_cut     },
+		{ Fl_Text_Editor_mod::kf_paste,   F_Edit::kf_paste   }
+	};
+	int n = sizeof(fbind) / sizeof(fbind[0]);
+
+	// walk the keybindings linked list and replace items containing
+	// functions for which we have an override in fbind
+	for (Fl_Text_Editor_mod::Key_Binding *k = key_bindings; k; k = k->next) {
+		for (int i = 0; i < n; i++)
+			if (fbind[i].function == k->function)
+				k->function = fbind[i].override;
+	}
+}
+
+// The kf_* functions below call the corresponding Fl_Text_Editor_mod routines, but
+// may make adjustments so that no transmitted text is modified.
+
+int F_Edit::kf_default(int c, Fl_Text_Editor_mod* e)
+{
+	return e->insert_position() < *p_editpos ? 1 : Fl_Text_Editor_mod::kf_default(c, e);
+}
+
+int F_Edit::kf_enter(int c, Fl_Text_Editor_mod* e)
+{
+	return e->insert_position() < *p_editpos ? 1 : Fl_Text_Editor_mod::kf_enter(c, e);
+}
+
+int F_Edit::kf_delete(int c, Fl_Text_Editor_mod* e)
+{
+	// single character
+	if (!e->buffer()->selected()) {
+                if (e->insert_position() >= *p_editpos &&
+                    e->insert_position() != e->buffer()->length())
+                        return Fl_Text_Editor_mod::kf_delete(c, e);
+                else
+                        return 1;
+        }
+
+	// region: delete as much as we can
+	int start, end;
+	e->buffer()->selection_position(&start, &end);
+	if (*p_editpos >= end)
+		return 1;
+	if (*p_editpos > start)
+		e->buffer()->select(*p_editpos, end);
+
+	return Fl_Text_Editor_mod::kf_delete(c, e);
+}
+
+int F_Edit::kf_cut(int c, Fl_Text_Editor_mod* e)
+{
+	if (e->buffer()->selected()) {
+		int start, end;
+		e->buffer()->selection_position(&start, &end);
+		if (*p_editpos >= end)
+			return 1;
+		if (*p_editpos > start)
+			e->buffer()->select(*p_editpos, end);
+	}
+
+	return Fl_Text_Editor_mod::kf_cut(c, e);
+}
+
+int F_Edit::kf_paste(int c, Fl_Text_Editor_mod* e)
+{
+	return e->insert_position() < *p_editpos ? 1 : Fl_Text_Editor_mod::kf_paste(c, e);
+}
diff --git a/src/widgets/Fl_Text_Display_mod.cxx b/src/widgets/Fl_Text_Display_mod.cxx
index a971de8e..c11cfc53 100644
--- a/src/widgets/Fl_Text_Display_mod.cxx
+++ b/src/widgets/Fl_Text_Display_mod.cxx
@@ -87,7 +87,7 @@ static int scroll_x = 0;
  */
 Fl_Text_Display_mod::Fl_Text_Display_mod(int X, int Y, int W, int H, const char* l)
 : Fl_Group(X, Y, W, H, l) {
-  int i;
+  //int i;
 
   TOP_MARGIN = DEFAULT_TOP_MARGIN;
   BOTTOM_MARGIN = DEFAULT_BOTTOM_MARGIN;
@@ -148,8 +148,9 @@ Fl_Text_Display_mod::Fl_Text_Display_mod(int X, int Y, int W, int H, const char*
   mNVisibleLines = 1;
   mLineStarts = new int[mNVisibleLines];
   mLineStarts[0] = 0;
-  for (i=1; i<mNVisibleLines; i++)
-    mLineStarts[i] = -1;
+// for loop will never "fire" due to nVisibleLines, i = 1
+//  for (i=1; i<mNVisibleLines; i++)
+//    mLineStarts[i] = -1;
   mSuppressResync = 0;
   mNLinesDeleted = 0;
   mModifyingTabDistance = 0;
diff --git a/src/wwv/analysis.cxx b/src/wwv/analysis.cxx
index c95e2b45..3503a8a2 100644
--- a/src/wwv/analysis.cxx
+++ b/src/wwv/analysis.cxx
@@ -32,6 +32,7 @@
 #include <cstdio>
 #include <ctime>
 
+#include "configuration.h"
 #include "analysis.h"
 #include "modem.h"
 #include "misc.h"
@@ -68,6 +69,7 @@ void anal::init()
 	modem::init();
 	rx_init();
 	set_scope_mode(Digiscope::RTTY);
+	rxcorr = progdefaults.RX_corr;
 }
 
 anal::~anal()
@@ -75,6 +77,7 @@ anal::~anal()
 	delete bpfilt;
 	delete ffilt;
 	delete afilt;
+	progdefaults.RX_corr = rxcorr;
 }
 
 // used for checking file exists function
@@ -247,7 +250,7 @@ void anal::writeFile()
 
 	fprintf(out, "%02d:%02d:%02d, %13.3f, %6.3f, %8.6f, %6.2f\n",
 		tm.tm_hour, tm.tm_min, tm.tm_sec,
-		(wf->rfcarrier() + (wf->USB() ? 1.0 : -1.0) * (frequency + fout)), fout, 
+		(wf->rfcarrier() + (wf->USB() ? 1.0 : -1.0) * (frequency + fout) + progdefaults.RIT), fout + progdefaults.RIT, 
 		amp, 20.0 * log10( (amp == 0 ? 1e-6 : amp) ) );
 
 	fclose(out);
@@ -310,9 +313,9 @@ int anal::rx_process(const double *buf, int len)
 				set_scope(pipe, PIPE_LEN, false);
 
 				if (wf->USB())
-					snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() + frequency + fout );
+					snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() + frequency + fout + progdefaults.RIT);
 				else
-					snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() - frequency - fout );
+					snprintf(msg1, sizeof(msg1), "%13.3f", wf->rfcarrier() - frequency - fout + progdefaults.RIT);
 				put_Status2(msg1, 2.0);
 				writeFile();
 			}