diff --git a/.circleci/config.yml b/.circleci/config.yml
index cbec1783..4b4d76d2 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -33,7 +33,6 @@ jobs:
        xcode: "11.4.1"
      environment:
        - OCPN_TARGET:  macos
-       - TRAVIS_TAG: ON
      steps:
        - checkout
        - restore_cache:
@@ -100,16 +99,13 @@ workflows:
               only:
                 - flatpak
                 - master
-                - v5.6.x
       - build-macos:
           filters:
             branches:
               only:
                 - master
-                - v5.6.x
       - build-android-armhf:
           filters:
             branches:
               only:
                 - master
-                - v5.6.x
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..bbceba71
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,102 @@
+# See: https://github.com/alexkaratarakis/gitattributes
+
+# Documents
+*.doc      diff=astextplain
+*.DOC      diff=astextplain
+*.docx     diff=astextplain
+*.DOCX     diff=astextplain
+*.dot      diff=astextplain
+*.DOT      diff=astextplain
+*.pdf      diff=astextplain
+*.PDF      diff=astextplain
+*.rtf      diff=astextplain
+*.RTF      diff=astextplain
+*.md       text diff=markdown
+*.adoc     text
+*.textile  text
+*.csv      text
+*.tab      text
+*.tsv      text
+*.txt      text
+*.sql      text
+
+# Graphics
+*.png      binary
+*.jpg      binary
+*.jpeg     binary
+*.gif      binary
+*.tif      binary
+*.tiff     binary
+*.ico      binary
+*.svg      text
+*.eps      binary
+
+# Scripts
+*.bash     text eol=lf
+*.sh       text eol=lf
+# These are explicitly windows files and should use crlf
+*.bat      text eol=crlf
+*.cmd      text eol=crlf
+*.ps1      text eol=crlf
+
+# Serialisation
+*.json     text
+*.toml     text
+*.xml      text
+*.yaml     text
+*.yml      text
+
+# Archives
+*.7z       binary
+*.gz       binary
+*.tar      binary
+*.tgz      binary
+*.zip      binary
+*.jar      binary
+
+# Web
+*.css      text diff=css
+*.htm      text diff=html
+*.html     text diff=html
+*.wav      binary
+
+# scm
+*.i        binary
+
+# C/C++
+*.c        text diff=c
+*.cc       text diff=cpp
+*.cxx      text diff=cpp
+*.cpp      text diff=cpp
+*.c++      text diff=cpp
+*.hpp      text diff=cpp
+*.h        text diff=c
+*.h++      text diff=cpp
+*.hh       text diff=cpp
+
+*.in       text
+*.ini      text
+
+*.o        binary
+*.a        binary
+*.dll      binary
+*.so       binary
+*.exe      binary
+
+#  Misc
+*.dat      binary
+*.cpt      binary
+*.enc      binary
+*.cmake    text
+
+
+# Text files where line endings should be preserved
+*.patch    -text
+
+#
+# Exclude files from exporting
+#
+
+.gitattributes export-ignore
+.gitignore     export-ignore
+.gitkeep       export-ignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..e95d5d38
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+cscope.files
+tags
+index.sh
+build
+cscope.out
+*~
+*.kdev*
+*.patch
+crowdin.yaml
+buildwin/NSIS_Unicode/Include/Langstrings_*.nsh
+buildwin/crashrpt/CrashRpt1402.dll
+buildwin/crashrpt/CrashSender1402.exe
+buildwin/expat*/
+buildwin/gtk*/
+buildwin/libcurl.dll
+buildwin/vc/
+buildwin/wxWidgets/
+buildwin/include/
+buildwin/*.dll
+buildwin/*.lib
+buildwin/*.exe
+buildwin/*.crt
+.DS_Store
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a60f5c2..4e8a9aa3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -430,7 +430,7 @@ if (APPLE)
 
   set(
     CMAKE_EXE_LINKER_FLAGS
-    "-O2 ${OCPN_LIBCPP} -arch ${ARCH} ${CMAKE_EXE_LINKER_FLAGS}"
+    "-O2 ${OCPN_LIBCPP} -arch ${ARCH} ${CMAKE_EXE_LINKER_FLAGS} -framework CoreGraphics"
   )
   set(CMAKE_SHARED_LINKER_FLAGS "-O2 ${OCPN_LIBCPP} -arch ${ARCH}")
   set(CMAKE_MODULE_LINKER_FLAGS "-O2 ${OCPN_LIBCPP} -arch ${ARCH}")
@@ -1055,18 +1055,6 @@ if (OCPN_USE_GARMINHOST)
   set(SRCS ${SRCS} src/garmin_wrapper.cpp)
 endif ()
 
-
-if (APPLE)
-  if (DARWIN_VERSION LESS 16)
-    message(
-      STATUS "DarkMode not included, requires Mac build host Darwin >= 16"
-    )
-  else ()
-    list(APPEND SRCS src/DarkMode.mm src/DarkMode.h)
-    add_definitions(-DOCPN_USE_DARKMODE)
-  endif ()
-endif (APPLE)
-
 if (LINUX AND NOT QT_ANDROID)
   list(APPEND SRCS src/linux_devices.cpp src/udev_rule_mgr.cpp)
   list(APPEND HDRS include/linux_devices.h include/udev_rule_mgr.h)
diff --git a/VERSION.cmake b/VERSION.cmake
index 5fdc8f56..77383e39 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1,4 +1,4 @@
 SET(VERSION_MAJOR "5")
 SET(VERSION_MINOR "6")
-SET(VERSION_PATCH "2")
-SET(VERSION_DATE "2022-04-21")
+SET(VERSION_PATCH "1")
+SET(VERSION_DATE "2022-01-29")
diff --git a/appveyor.yml b/appveyor.yml
index a700ce7e..a01ba33d 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -50,9 +50,6 @@ before_build:
   - cd build
   - ps: Start-FileDownload https://download.opencpn.org/s/i3QdxibNL732mgJ/download -FileName OpenCPN_buildwin-4.99c.7z
   - cmd: 7z x -y OpenCPN_buildwin-4.99c.7z -oc:\project\opencpn\buildwin
-
-  # OCPN_CI_BUILD=ON   : Generated extended package name for Beta test tracking
-  # OCPN_CI_BUILD=OFF  : Generated simplified package name for Production Release
   - cmake -T v141_xp -DOCPN_CI_BUILD=OFF ..
 
 build_script:
diff --git a/data/s57data/chartsymbols.xml b/data/s57data/chartsymbols.xml
index 2d7dc197..3d3f0ac5 100644
--- a/data/s57data/chartsymbols.xml
+++ b/data/s57data/chartsymbols.xml
@@ -16663,7 +16663,7 @@
             <radar-prio>On Top</radar-prio>
             <table-name>Simplified</table-name>
             <attrib-code index="0">$SCODEDNGHILIT</attrib-code>
-            <instruction>SY(DNGHILIT))</instruction>
+            <instruction>SY(DNGHILIT)</instruction>
             <display-cat>Mariners</display-cat>
             <comment>53010</comment>
         </lookup>
@@ -30105,7 +30105,7 @@
             <radar-prio>On Top</radar-prio>
             <table-name>Paper</table-name>
             <attrib-code index="0">$SCODEDNGHILIT</attrib-code>
-            <instruction>SY(DNGHILIT))</instruction>
+            <instruction>SY(DNGHILIT)</instruction>
             <display-cat>Mariners</display-cat>
             <comment>53010</comment>
         </lookup>
@@ -31536,7 +31536,7 @@
                     <lookup id="2" RCID="32038" name="ACHARE">
                         <type>Area</type>
                         <disp-prio>Area 2</disp-prio>
-                        <radar-prio>Supressed</radar-prio>
+                        <radar-prio>Suppressed</radar-prio>
                         <table-name>Plain</table-name>
                         <instruction>SY(ACHARE51);LS(DASH,2,CHMGF);CS(RESTRN01)</instruction>
                         <display-cat>Standard</display-cat>
@@ -31546,7 +31546,7 @@
                 <lookup id="342" RCID="32377" name="ACHARE">
                         <type>Area</type>
                         <disp-prio>Area 2</disp-prio>
-                        <radar-prio>Supressed</radar-prio>
+                        <radar-prio>Suppressed</radar-prio>
                         <table-name>Symbolized</table-name>
                         <instruction>SY(ACHARE51);LC(ACHARE51);CS(RESARE01)</instruction>
                         <display-cat>Standard</display-cat>
@@ -31556,7 +31556,7 @@
                 <lookup id="84" RCID="32120" name="LNDARE">
                         <type>Area</type>
                         <disp-prio>Group 1</disp-prio>
-                        <radar-prio>Supressed</radar-prio>
+                        <radar-prio>Suppressed</radar-prio>
                         <table-name>Plain</table-name>
                         <instruction>AC(LANDA);TX(OBJNAM,1,2,3,'15118',-1,-1,CHBLK,26)</instruction>
                         <display-cat>Displaybase</display-cat>
@@ -31566,7 +31566,7 @@
                 <lookup id="424" RCID="32459" name="LNDARE">
                         <type>Area</type>
                         <disp-prio>Group 1</disp-prio>
-                        <radar-prio>Supressed</radar-prio>
+                        <radar-prio>Suppressed</radar-prio>
                         <table-name>Symbolized</table-name>
                         <instruction>AC(LANDA);TX(OBJNAM,1,2,3,'15118',-1,-1,CHBLK,26)</instruction>
                         <display-cat>Displaybase</display-cat>
diff --git a/debian/changelog b/debian/changelog
index 88acc4aa..84ca820c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+opencpn (5.6.2+git20220425.1.aa496ef-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Tue, 26 Apr 2022 10:46:15 -0000
+
 opencpn (5.6.2+dfsg-1) unstable; urgency=medium
 
   * New upstream release.
diff --git a/debian/patches/0001-build-Handle-missing-doc-files.patch b/debian/patches/0001-build-Handle-missing-doc-files.patch
index 34d36254..9106c43a 100644
--- a/debian/patches/0001-build-Handle-missing-doc-files.patch
+++ b/debian/patches/0001-build-Handle-missing-doc-files.patch
@@ -15,11 +15,11 @@ Forwarded: not-needed
  2 files changed, 55 insertions(+), 4 deletions(-)
  create mode 100644 data/help_web.html
 
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 837cbda..5a8c10e 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -2117,7 +2117,7 @@ if (APPLE)
+Index: opencpn/CMakeLists.txt
+===================================================================
+--- opencpn.orig/CMakeLists.txt
++++ opencpn/CMakeLists.txt
+@@ -2004,7 +2004,7 @@ if (APPLE)
    )
  
    set_source_files_properties(
@@ -28,7 +28,7 @@ index 837cbda..5a8c10e 100644
      PROPERTIES
        MACOSX_PACKAGE_LOCATION SharedSupport/doc
    )
-@@ -2174,12 +2174,12 @@ if (APPLE)
+@@ -2061,12 +2061,12 @@ if (APPLE)
    if (OCPN_BUNDLE_DOCS )
      set(
        DOC_FILES
@@ -43,7 +43,7 @@ index 837cbda..5a8c10e 100644
    endif (OCPN_BUNDLE_DOCS )
  
    target_sources(
-@@ -2330,7 +2330,7 @@ if (NOT APPLE)
+@@ -2217,7 +2217,7 @@ if (NOT APPLE)
    if (OCPN_BUNDLE_DOCS )
      install(DIRECTORY data/doc/ DESTINATION ${PREFIX_PKGDATA}/doc)
    else (OCPN_BUNDLE_DOCS )
@@ -52,11 +52,10 @@ index 837cbda..5a8c10e 100644
    endif (OCPN_BUNDLE_DOCS )
  
    if (UNIX)
-diff --git a/data/help_web.html b/data/help_web.html
-new file mode 100644
-index 0000000..e71cf85
+Index: opencpn/data/help_web.html
+===================================================================
 --- /dev/null
-+++ b/data/help_web.html
++++ opencpn/data/help_web.html
 @@ -0,0 +1,51 @@
 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 +<html>
diff --git a/debian/patches/0002-build-Drop-CoC-909_2013-InlandECDIS_20170308s.pdf.patch b/debian/patches/0002-build-Drop-CoC-909_2013-InlandECDIS_20170308s.pdf.patch
index 9c0dba4d..8802aa39 100644
--- a/debian/patches/0002-build-Drop-CoC-909_2013-InlandECDIS_20170308s.pdf.patch
+++ b/debian/patches/0002-build-Drop-CoC-909_2013-InlandECDIS_20170308s.pdf.patch
@@ -15,11 +15,11 @@ Forwarded: not-ńeeded
  CMakeLists.txt | 5 -----
  1 file changed, 5 deletions(-)
 
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5a8c10e..b115328 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -2193,7 +2193,6 @@ if (APPLE)
+Index: opencpn/CMakeLists.txt
+===================================================================
+--- opencpn.orig/CMakeLists.txt
++++ opencpn/CMakeLists.txt
+@@ -2080,7 +2080,6 @@ if (APPLE)
      data/authors.html
      data/opencpn.png
      data/ocpn-plugins.xml
@@ -27,7 +27,7 @@ index 5a8c10e..b115328 100644
      ${SOUND_FILES}
      buildosx/opencpn.icns
      buildosx/MainMenu.xib
-@@ -2306,10 +2305,6 @@ if (NOT APPLE)
+@@ -2193,10 +2192,6 @@ if (NOT APPLE)
    file(GLOB LICENSES "${CMAKE_SOURCE_DIR}/COPYING.*")
    install(FILES ${LICENSES} LICENSING DESTINATION "${PREFIX_PKGDATA}")
  
diff --git a/debian/patches/0003-Fix-wrong-desktop-filename-in-appdata.patch b/debian/patches/0003-Fix-wrong-desktop-filename-in-appdata.patch
index 9f8b4393..1207ad5e 100644
--- a/debian/patches/0003-Fix-wrong-desktop-filename-in-appdata.patch
+++ b/debian/patches/0003-Fix-wrong-desktop-filename-in-appdata.patch
@@ -10,10 +10,10 @@ Forwarded: https://github.com/OpenCPN/OpenCPN/pull/2505
  data/opencpn.appdata.xml.in | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/data/opencpn.appdata.xml.in b/data/opencpn.appdata.xml.in
-index 1bb449a..e568d7e 100644
---- a/data/opencpn.appdata.xml.in
-+++ b/data/opencpn.appdata.xml.in
+Index: opencpn/data/opencpn.appdata.xml.in
+===================================================================
+--- opencpn.orig/data/opencpn.appdata.xml.in
++++ opencpn/data/opencpn.appdata.xml.in
 @@ -10,7 +10,7 @@
    <provides>
      <binary>opencpn</binary>
diff --git a/include/CanvasOptions.h b/include/CanvasOptions.h
index 266fa4de..fb372703 100644
--- a/include/CanvasOptions.h
+++ b/include/CanvasOptions.h
@@ -86,8 +86,7 @@ private:
   wxCheckBox *pAutoAnchorMark, *pCDOQuilting, *pCBRaster, *pCBVector;
   wxCheckBox *pCBCM93, *pCBLookAhead, *pSkewComp, *pOpenGL, *pSmoothPanZoom;
   wxCheckBox *pFullScreenQuilt, *pMobile, *pResponsive, *pOverzoomEmphasis;
-  wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis,
-      *pDarkDecorations;
+  wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis;
   wxTextCtrl *pCOGUPUpdateSecs, *m_pText_OSCOG_Predictor, *pScreenMM;
   wxTextCtrl *pToolbarHideSecs, *m_pText_OSHDT_Predictor;
   wxChoice *m_pShipIconType, *m_pcTCDatasets;
@@ -108,4 +107,4 @@ private:
   DECLARE_EVENT_TABLE()
 };
 
-#endif  // guard
\ No newline at end of file
+#endif  // guard
diff --git a/include/options.h b/include/options.h
index 1869e5a5..0dc5f082 100644
--- a/include/options.h
+++ b/include/options.h
@@ -203,7 +203,6 @@ enum {
   // LIVE ETA OPTION
   ID_CHECK_LIVEETA,
   ID_DEFAULT_BOAT_SPEED,
-  ID_DARKDECORATIONSBOX,
   ID_SCREENCONFIG1,
   ID_SCREENCONFIG2,
   ID_CONFIGEDIT_OK,
@@ -360,7 +359,6 @@ public:
   ArrayOfCDI GetUnSelectedChartDirs();
   void SetDirActionButtons();
 
-
   void OnCreateConfig(wxCommandEvent &event);
   void OnEditConfig(wxCommandEvent &event);
   void OnDeleteConfig(wxCommandEvent &event);
@@ -410,8 +408,7 @@ public:
   wxCheckBox *pFullScreenQuilt, *pMobile, *pResponsive, *pOverzoomEmphasis;
   //  wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis,
   //  *pRollover;
-  wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis, *pRollover,
-      *pDarkDecorations;
+  wxCheckBox *pOZScaleVector, *pToolbarAutoHideCB, *pInlandEcdis, *pRollover;
   wxCheckBox *pZoomButtons;
   wxTextCtrl *pCOGUPUpdateSecs, *m_pText_OSCOG_Predictor, *pScreenMM;
   wxTextCtrl *pToolbarHideSecs, *m_pText_OSHDT_Predictor;
@@ -498,7 +495,7 @@ public:
   void OnDiscoverButton(wxCommandEvent &event);
   void UpdateDiscoverStatus(wxString stat);
   void OnAISRolloverClick(wxCommandEvent &event);
-  void UpdateChartDirList( );
+  void UpdateChartDirList();
 
   void OnCanvasConfigSelectClick(int ID, bool selected);
 
diff --git a/libs/easywsclient/.gitignore b/libs/easywsclient/.gitignore
new file mode 100644
index 00000000..bf4a78d9
--- /dev/null
+++ b/libs/easywsclient/.gitignore
@@ -0,0 +1,166 @@
+# Compiled Object files
+*.slo
+*.lo
+*.o
+
+# Compiled Dynamic libraries
+*.so
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+
+node_modules/
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
+!packages/*/build/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+*.pubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+# =========================
+# Windows detritus
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac crap
+.DS_Store
diff --git a/plugins/chartdldr_pi/po/de_DE.po b/plugins/chartdldr_pi/po/de_DE.po
index 22ce5e7c..f2eb13a3 100644
--- a/plugins/chartdldr_pi/po/de_DE.po
+++ b/plugins/chartdldr_pi/po/de_DE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
diff --git a/plugins/chartdldr_pi/po/es_ES.po b/plugins/chartdldr_pi/po/es_ES.po
index c53762b4..ed551714 100644
--- a/plugins/chartdldr_pi/po/es_ES.po
+++ b/plugins/chartdldr_pi/po/es_ES.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
diff --git a/plugins/chartdldr_pi/po/fi_FI.po b/plugins/chartdldr_pi/po/fi_FI.po
index 635c635e..34020fd2 100644
--- a/plugins/chartdldr_pi/po/fi_FI.po
+++ b/plugins/chartdldr_pi/po/fi_FI.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
@@ -294,7 +294,7 @@ msgstr "Karttaluettelon määrittely on virheellinen"
 
 #: src/chartdldrgui.cpp:206
 msgid "Dialog"
-msgstr "Dialogi"
+msgstr ""
 
 #: src/chartdldrgui.cpp:253
 msgid "Predefined"
@@ -314,15 +314,15 @@ msgstr "Mukautettu"
 
 #: src/chartdldrgui.cpp:304
 msgid "Proposed chart installation directory"
-msgstr "Ehdotettu kartta-asennuksen hakemisto"
+msgstr ""
 
 #: src/chartdldrgui.cpp:324
 msgid "Select a different directory"
-msgstr "Valitse toinen hakemisto"
+msgstr ""
 
 #: src/chartdldrgui.cpp:331
 msgid "OK"
-msgstr "OK"
+msgstr ""
 
 #: src/chartdldrgui.cpp:333 src/chartdldrgui.cpp:908
 msgid "Cancel"
diff --git a/plugins/chartdldr_pi/po/fr_FR.po b/plugins/chartdldr_pi/po/fr_FR.po
index 92f9fd05..0d4962ba 100644
--- a/plugins/chartdldr_pi/po/fr_FR.po
+++ b/plugins/chartdldr_pi/po/fr_FR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 14:42\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
diff --git a/plugins/chartdldr_pi/po/hu_HU.po b/plugins/chartdldr_pi/po/hu_HU.po
index 90c5bbb3..f549a5b8 100644
--- a/plugins/chartdldr_pi/po/hu_HU.po
+++ b/plugins/chartdldr_pi/po/hu_HU.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-15 01:43\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
diff --git a/plugins/chartdldr_pi/po/it_IT.po b/plugins/chartdldr_pi/po/it_IT.po
index 7beb4f83..58b4c703 100644
--- a/plugins/chartdldr_pi/po/it_IT.po
+++ b/plugins/chartdldr_pi/po/it_IT.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
diff --git a/plugins/chartdldr_pi/po/pt_BR.po b/plugins/chartdldr_pi/po/pt_BR.po
index f9046378..12a01909 100644
--- a/plugins/chartdldr_pi/po/pt_BR.po
+++ b/plugins/chartdldr_pi/po/pt_BR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-15 01:43\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
diff --git a/plugins/chartdldr_pi/po/sv_SE.po b/plugins/chartdldr_pi/po/sv_SE.po
index 2fb56fb3..cfe959d1 100644
--- a/plugins/chartdldr_pi/po/sv_SE.po
+++ b/plugins/chartdldr_pi/po/sv_SE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:37-0400\n"
-"PO-Revision-Date: 2022-04-21 14:21\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
diff --git a/plugins/chartdldr_pi/src/chartdldrgui.cpp b/plugins/chartdldr_pi/src/chartdldrgui.cpp
index ac9fb731..9aae30f6 100644
--- a/plugins/chartdldr_pi/src/chartdldrgui.cpp
+++ b/plugins/chartdldr_pi/src/chartdldrgui.cpp
@@ -360,7 +360,9 @@ void AddSourceDlg::OnNbPage(wxNotebookEvent& event) {
     m_buttonChartDirectory->Enable();
   } else {
     wxTreeItemId item = m_treeCtrlPredefSrcs->GetSelection();
-    ChartSource *cs = (ChartSource *)(m_treeCtrlPredefSrcs->GetItemData(item));
+    ChartSource* cs = nullptr;
+    if (item.IsOk())
+      cs = (ChartSource *)(m_treeCtrlPredefSrcs->GetItemData(item));
     if(!cs)
       m_buttonChartDirectory->Disable();
   }
diff --git a/plugins/chartdldr_pi/src/icons.bat b/plugins/chartdldr_pi/src/icons.bat
index bc31127c..758926cd 100644
--- a/plugins/chartdldr_pi/src/icons.bat
+++ b/plugins/chartdldr_pi/src/icons.bat
@@ -1 +1 @@
-png2wx.pl -C icons.cpp -H icons.h -M ICONS_H chartdldr.png chartdldr_pi.png
+png2wx.pl -C icons.cpp -H icons.h -M ICONS_H chartdldr.png chartdldr_pi.png
diff --git a/plugins/dashboard_pi/po/de_DE.po b/plugins/dashboard_pi/po/de_DE.po
index 8c86e462..be766344 100644
--- a/plugins/dashboard_pi/po/de_DE.po
+++ b/plugins/dashboard_pi/po/de_DE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
diff --git a/plugins/dashboard_pi/po/es_ES.po b/plugins/dashboard_pi/po/es_ES.po
index 4bc4b327..73f306ca 100644
--- a/plugins/dashboard_pi/po/es_ES.po
+++ b/plugins/dashboard_pi/po/es_ES.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
diff --git a/plugins/dashboard_pi/po/fi_FI.po b/plugins/dashboard_pi/po/fi_FI.po
index 715aba5f..2dab460f 100644
--- a/plugins/dashboard_pi/po/fi_FI.po
+++ b/plugins/dashboard_pi/po/fi_FI.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
diff --git a/plugins/dashboard_pi/po/fr_FR.po b/plugins/dashboard_pi/po/fr_FR.po
index a5d0d008..ee105d76 100644
--- a/plugins/dashboard_pi/po/fr_FR.po
+++ b/plugins/dashboard_pi/po/fr_FR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 14:42\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
diff --git a/plugins/dashboard_pi/po/hu_HU.po b/plugins/dashboard_pi/po/hu_HU.po
index 82110869..0f7c5e61 100644
--- a/plugins/dashboard_pi/po/hu_HU.po
+++ b/plugins/dashboard_pi/po/hu_HU.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-13 13:57\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
diff --git a/plugins/dashboard_pi/po/it_IT.po b/plugins/dashboard_pi/po/it_IT.po
index c445baca..275efc86 100644
--- a/plugins/dashboard_pi/po/it_IT.po
+++ b/plugins/dashboard_pi/po/it_IT.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
diff --git a/plugins/dashboard_pi/po/pt_BR.po b/plugins/dashboard_pi/po/pt_BR.po
index 67423aa8..0af1e8f8 100644
--- a/plugins/dashboard_pi/po/pt_BR.po
+++ b/plugins/dashboard_pi/po/pt_BR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2021-11-09 02:12\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
diff --git a/plugins/dashboard_pi/po/sv_SE.po b/plugins/dashboard_pi/po/sv_SE.po
index df3881d7..331e3b60 100644
--- a/plugins/dashboard_pi/po/sv_SE.po
+++ b/plugins/dashboard_pi/po/sv_SE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:21\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
diff --git a/plugins/grib_pi/po/de_DE.po b/plugins/grib_pi/po/de_DE.po
index cd9a9bd3..b96ca9f6 100644
--- a/plugins/grib_pi/po/de_DE.po
+++ b/plugins/grib_pi/po/de_DE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
diff --git a/plugins/grib_pi/po/es_ES.po b/plugins/grib_pi/po/es_ES.po
index 6b732262..e74b262b 100644
--- a/plugins/grib_pi/po/es_ES.po
+++ b/plugins/grib_pi/po/es_ES.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
diff --git a/plugins/grib_pi/po/fi_FI.po b/plugins/grib_pi/po/fi_FI.po
index 053b4a18..faf6e28a 100644
--- a/plugins/grib_pi/po/fi_FI.po
+++ b/plugins/grib_pi/po/fi_FI.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
diff --git a/plugins/grib_pi/po/fr_FR.po b/plugins/grib_pi/po/fr_FR.po
index db718293..e0dedb8c 100644
--- a/plugins/grib_pi/po/fr_FR.po
+++ b/plugins/grib_pi/po/fr_FR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 14:42\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
diff --git a/plugins/grib_pi/po/hu_HU.po b/plugins/grib_pi/po/hu_HU.po
index e067ab5a..2e0ed87c 100644
--- a/plugins/grib_pi/po/hu_HU.po
+++ b/plugins/grib_pi/po/hu_HU.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-13 13:57\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
diff --git a/plugins/grib_pi/po/it_IT.po b/plugins/grib_pi/po/it_IT.po
index 68359c70..ebe1e624 100644
--- a/plugins/grib_pi/po/it_IT.po
+++ b/plugins/grib_pi/po/it_IT.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
diff --git a/plugins/grib_pi/po/pt_BR.po b/plugins/grib_pi/po/pt_BR.po
index 37e7bd1b..079907e4 100644
--- a/plugins/grib_pi/po/pt_BR.po
+++ b/plugins/grib_pi/po/pt_BR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2021-11-09 02:12\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
diff --git a/plugins/grib_pi/po/sv_SE.po b/plugins/grib_pi/po/sv_SE.po
index 8768f632..b00b9599 100644
--- a/plugins/grib_pi/po/sv_SE.po
+++ b/plugins/grib_pi/po/sv_SE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-09-21 20:19-0400\n"
-"PO-Revision-Date: 2022-04-21 14:21\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
diff --git a/plugins/wmm_pi/po/de_DE.po b/plugins/wmm_pi/po/de_DE.po
index 56b99eb9..995900f1 100644
--- a/plugins/wmm_pi/po/de_DE.po
+++ b/plugins/wmm_pi/po/de_DE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
diff --git a/plugins/wmm_pi/po/es_ES.po b/plugins/wmm_pi/po/es_ES.po
index 3bed670c..82bf61a9 100644
--- a/plugins/wmm_pi/po/es_ES.po
+++ b/plugins/wmm_pi/po/es_ES.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
diff --git a/plugins/wmm_pi/po/fi_FI.po b/plugins/wmm_pi/po/fi_FI.po
index df84fe69..9a55133a 100644
--- a/plugins/wmm_pi/po/fi_FI.po
+++ b/plugins/wmm_pi/po/fi_FI.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
diff --git a/plugins/wmm_pi/po/fr_FR.po b/plugins/wmm_pi/po/fr_FR.po
index 95e323c5..26a1fd6c 100644
--- a/plugins/wmm_pi/po/fr_FR.po
+++ b/plugins/wmm_pi/po/fr_FR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 14:42\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
diff --git a/plugins/wmm_pi/po/hu_HU.po b/plugins/wmm_pi/po/hu_HU.po
index 976c7af7..4e3a63b0 100644
--- a/plugins/wmm_pi/po/hu_HU.po
+++ b/plugins/wmm_pi/po/hu_HU.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-13 13:57\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
diff --git a/plugins/wmm_pi/po/it_IT.po b/plugins/wmm_pi/po/it_IT.po
index 368f2c55..1fe2ba83 100644
--- a/plugins/wmm_pi/po/it_IT.po
+++ b/plugins/wmm_pi/po/it_IT.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
diff --git a/plugins/wmm_pi/po/pt_BR.po b/plugins/wmm_pi/po/pt_BR.po
index ccf4ab54..5677744d 100644
--- a/plugins/wmm_pi/po/pt_BR.po
+++ b/plugins/wmm_pi/po/pt_BR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2021-11-09 02:12\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
diff --git a/plugins/wmm_pi/po/sv_SE.po b/plugins/wmm_pi/po/sv_SE.po
index 591469af..0178d92f 100644
--- a/plugins/wmm_pi/po/sv_SE.po
+++ b/plugins/wmm_pi/po/sv_SE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-08-25 22:20-0400\n"
-"PO-Revision-Date: 2022-04-21 14:21\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
diff --git a/po/opencpn_de_DE.po b/po/opencpn_de_DE.po
index 8de0b729..3e53b450 100644
--- a/po/opencpn_de_DE.po
+++ b/po/opencpn_de_DE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
 "Language: de_DE\n"
diff --git a/po/opencpn_es_ES.po b/po/opencpn_es_ES.po
index 20eda444..ab187c20 100644
--- a/po/opencpn_es_ES.po
+++ b/po/opencpn_es_ES.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
 "Language: es_ES\n"
diff --git a/po/opencpn_fi_FI.po b/po/opencpn_fi_FI.po
index f972a497..03537142 100644
--- a/po/opencpn_fi_FI.po
+++ b/po/opencpn_fi_FI.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 00:45\n"
 "Last-Translator: \n"
 "Language-Team: Finnish\n"
 "Language: fi_FI\n"
@@ -89,7 +89,7 @@ msgstr "(Nimeämätön jälki)"
 
 #: include/trackprintout.h:78 src/trackprintout.cpp:274
 msgid "Print Track Selection"
-msgstr "Jäljen tulostuksen valinnat"
+msgstr ""
 
 #: include/TrackPropDlg.h:191 src/TrackPropDlg.cpp:1218
 #: src/TrackPropDlg.cpp:1232
@@ -2679,27 +2679,27 @@ msgstr "Ankkuri luotu "
 #: src/androidUTIL.cpp:4885 src/androidUTIL.cpp:5033 src/androidUTIL.cpp:5121
 #: src/androidUTIL.cpp:5186
 msgid "OpenCPN for Android Migration Assistant"
-msgstr "OpenCPN Android karttojen kopiointiavustin"
+msgstr ""
 
 #: src/androidUTIL.cpp:4911
 msgid "OpenCPN has detected chart folders in your configuration file that cannot be accessed on this version of Android"
-msgstr "OpenCPN:n asetustiedostossa on määritelty karttojen tallennushakemistoja, joita ei voi käyttää tässä Android-versiossa."
+msgstr ""
 
 #: src/androidUTIL.cpp:4934 src/androidUTIL.cpp:4947
 msgid "OpenCPN can copy these chart folders to a suitable location, if desired."
-msgstr "Mikäli haluat, OpenCPN voi kopioida näissä hakemistoissa olevat kartat sopivaan paikkaan."
+msgstr ""
 
 #: src/androidUTIL.cpp:4936 src/androidUTIL.cpp:4949
 msgid "To proceed with chart folder migration, choose the chart source folder, and follow the instructions given."
-msgstr "Jatkaaksesi karttojen kopiointia, valitse karttojen lähdehakemisto ja noudata annettuja ohjeita."
+msgstr ""
 
 #: src/androidUTIL.cpp:4946
 msgid "Some chart folders may be inaccessible to OpenCPN on this version of Android. "
-msgstr "Joitakin karttojen tallennushakemistoja ei ehkä voida käyttää OpenCPN:ssä tässä Android-versiossa. "
+msgstr ""
 
 #: src/androidUTIL.cpp:4963
 msgid "Migrate destination"
-msgstr "Kopioinnin kohdehakemisto"
+msgstr ""
 
 #: src/androidUTIL.cpp:4967
 msgid "OpenCPN Internal Storage"
@@ -2711,7 +2711,7 @@ msgstr "OpenCPN SD-kortin tallennustila"
 
 #: src/androidUTIL.cpp:4978
 msgid "Choose chart source folder."
-msgstr "Valitse karttojen lähdehakemisto."
+msgstr ""
 
 #: src/androidUTIL.cpp:4984
 msgid "Status"
@@ -2730,12 +2730,11 @@ msgstr "Peruuta"
 #: src/androidUTIL.cpp:5027
 msgid "On the next page, find and choose the root folder containing chart files to migrate\n\n"
 "Example: /storage/emulated/0/Charts\n\n"
-msgstr "Etsi ja valitse seuraavalla sivulla kopioitavien karttojen juurihakemisto\n\n"
-"Example: /storage/emulated/0/Charts\n\n"
+msgstr ""
 
 #: src/androidUTIL.cpp:5029
 msgid "This entire folder will be migrated.\n"
-msgstr "Kansio kopioidaan kokonaisuudessaan.\n"
+msgstr ""
 
 #: src/androidUTIL.cpp:5030
 msgid "Proceed?"
@@ -2743,51 +2742,51 @@ msgstr "Jatka?"
 
 #: src/androidUTIL.cpp:5042
 msgid "Waiting for permission grant...."
-msgstr "Odotetaan käyttöoikeuden antamista..."
+msgstr ""
 
 #: src/androidUTIL.cpp:5076
 msgid "Migration started..."
-msgstr "Kopiointi alkoi..."
+msgstr ""
 
 #: src/androidUTIL.cpp:5092
 msgid "Permission granted to "
-msgstr "Käyttöoikeus on annettu hakemistoon "
+msgstr ""
 
 #: src/androidUTIL.cpp:5104
 msgid "OpenCPN has obtained temporary permission to access the selected chart folders."
-msgstr "OpenCPN on saanut väliaikaisen luvan käyttää valittuja karttahakemistoja."
+msgstr ""
 
 #: src/androidUTIL.cpp:5106
 msgid "Chart migration is ready to proceed."
-msgstr "Karttojen kopiointi voidaan aloittaa."
+msgstr ""
 
 #: src/androidUTIL.cpp:5108
 msgid "Source: "
-msgstr "Lähdehakemisto: "
+msgstr ""
 
 #: src/androidUTIL.cpp:5112
 msgid "Destination: OpenCPN Internal Storage"
-msgstr "Kohde: OpenCPN sisäinen tallennustila"
+msgstr ""
 
 #: src/androidUTIL.cpp:5114
 msgid "Destination: OpenCPN SDCard Storage"
-msgstr "Kohde: OpenCPN SD-kortin tallennustila"
+msgstr ""
 
 #: src/androidUTIL.cpp:5116
 msgid "Migrate charts now?"
-msgstr "Kopioidaanko kartat?"
+msgstr ""
 
 #: src/androidUTIL.cpp:5177
 msgid "Chart migration is finished."
-msgstr "Karttojen kopiointi on valmis."
+msgstr ""
 
 #: src/androidUTIL.cpp:5179
 msgid "Migrated chart folders are now accessible to OpenCPN."
-msgstr "Kopioidut kartat ovat nyt käytettävissä OpenCPN:ssä."
+msgstr ""
 
 #: src/androidUTIL.cpp:5181
 msgid "You may need to adjust your chart folders further, to accommodate individual chart groups"
-msgstr "Voit joutua muuttamaan karttahakemistojasi, jotta erilliset karttaryhmät saadaan mahtumaan."
+msgstr ""
 
 #: src/androidUTIL.cpp:5183
 msgid "OpenCPN will now restart to apply changes."
@@ -2795,7 +2794,7 @@ msgstr "OpenCPN käynnistyy nyt uudelleen, jotta muutokset tulevat voimaan."
 
 #: src/androidUTIL.cpp:5218
 msgid "Finishing migration"
-msgstr "Viimeistelään kopiointia"
+msgstr ""
 
 #: src/canvasMenu.cpp:250 src/canvasMenu.cpp:255 src/canvasMenu.cpp:269
 #: src/canvasMenu.cpp:287 src/canvasMenu.cpp:962 src/canvasMenu.cpp:980
@@ -3239,7 +3238,7 @@ msgstr "Käyttäjän valitsemat"
 
 #: src/cat_settings.cpp:95
 msgid "Select new flavour"
-msgstr "Valitse uusi asetus"
+msgstr ""
 
 #: src/cat_settings.cpp:96
 msgid "Default setting"
@@ -3259,7 +3258,7 @@ msgstr "Yhteensopivuus"
 
 #: src/cat_settings.cpp:179
 msgid "Active setting:"
-msgstr "Nykyinen asetus:"
+msgstr "Aktiivinen asetus:"
 
 #: src/cat_settings.cpp:191
 msgid "Cache"
@@ -3292,7 +3291,7 @@ msgstr "Piilota"
 
 #: src/catalog_mgr.cpp:102
 msgid "Ultra advanced"
-msgstr "Erittäin edistyneet"
+msgstr ""
 
 #: src/catalog_mgr.cpp:190
 msgid "Catalog URL status: "
@@ -3324,7 +3323,7 @@ msgstr "Tietoja ei voi ladata URL-osoitteesta"
 
 #: src/catalog_mgr.cpp:296
 msgid "Cannot parse downloaded data"
-msgstr "Ladattua dataa ei voi purkaa"
+msgstr ""
 
 #: src/catalog_mgr.cpp:299
 msgid "Catalog update problem"
@@ -3356,7 +3355,7 @@ msgstr "Luettelo päivitettiin"
 
 #: src/catalog_mgr.cpp:561
 msgid "Server is reachable..."
-msgstr "Yhteys palvelimeen OK..."
+msgstr ""
 
 #: src/catalog_mgr.cpp:563
 msgid "Check channel..."
@@ -4371,7 +4370,7 @@ msgstr "Asennusvirhe"
 
 #: src/garmin_wrapper.cpp:295
 msgid "Overwrite Garmin device route number 1?"
-msgstr "Korvataanko Garmin-laitteen reitti numero 1?"
+msgstr ""
 
 #: src/garmin_wrapper.cpp:296
 msgid "OpenCPN Message"
@@ -4388,7 +4387,7 @@ msgstr "Odotetaan rasterikartan pakkaussäikeen loppumista."
 
 #: src/glTextureManager.cpp:1456
 msgid "OpenCPN Compressed Cache Update"
-msgstr "OpenCPN:n karttavälimuistin päivitys"
+msgstr ""
 
 #: src/GoToPositionDialog.cpp:119 src/MarkInfo.cpp:432 src/RoutePropDlg.cpp:309
 #: src/TrackPropDlg.cpp:302
@@ -5622,7 +5621,7 @@ msgstr "Pakkaa"
 
 #: src/options.cpp:4007
 msgid "Migrate Charts.."
-msgstr "Kopioidaan karttoja..."
+msgstr ""
 
 #: src/options.cpp:4015
 msgid "Update Control"
@@ -6323,7 +6322,7 @@ msgstr "ENC syvyystietojen suurennuskerroin"
 
 #: src/options.cpp:7015
 msgid "Mouse wheel zoom sensitivity"
-msgstr "Hiiren rullan zoomausherkkyys"
+msgstr ""
 
 #: src/options.cpp:7270 src/options.cpp:7330
 msgid "Connections"
@@ -6589,7 +6588,7 @@ msgstr "Katso lisätietoja järjestemän lokista."
 
 #: src/PluginHandler.cpp:1163
 msgid " successfully installed from cache"
-msgstr " asennettiin onnistuneesti välimuistista"
+msgstr ""
 
 #: src/pluginmanager.cpp:283
 msgid "Plugin is a standard system plugin"
@@ -7563,7 +7562,7 @@ msgstr "Näytä nopeus"
 
 #: src/trackprintout.cpp:399
 msgid "Track Print"
-msgstr "Jäljen tulostus"
+msgstr ""
 
 #: src/TrackPropDlg.cpp:305
 msgid "Timestamp"
diff --git a/po/opencpn_fr_FR.po b/po/opencpn_fr_FR.po
index 0881c1db..7ed8d439 100644
--- a/po/opencpn_fr_FR.po
+++ b/po/opencpn_fr_FR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-17 14:42\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
diff --git a/po/opencpn_hu_HU.po b/po/opencpn_hu_HU.po
index c3d1b897..a568c710 100644
--- a/po/opencpn_hu_HU.po
+++ b/po/opencpn_hu_HU.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-15 01:43\n"
 "Last-Translator: \n"
 "Language-Team: Hungarian\n"
 "Language: hu_HU\n"
@@ -2683,23 +2683,23 @@ msgstr "OpenCPN for Android migrálási segéd"
 
 #: src/androidUTIL.cpp:4911
 msgid "OpenCPN has detected chart folders in your configuration file that cannot be accessed on this version of Android"
-msgstr "Az OpenCPN olyan térkép mappákat érzékelt a konfigurációban, amelyek az Android ezen verzióján nem érhetőek el."
+msgstr ""
 
 #: src/androidUTIL.cpp:4934 src/androidUTIL.cpp:4947
 msgid "OpenCPN can copy these chart folders to a suitable location, if desired."
-msgstr "Az OpenCPN a megfeleleő helyere tudja másolni ezeket a térkép mappákat, ha szükséges."
+msgstr ""
 
 #: src/androidUTIL.cpp:4936 src/androidUTIL.cpp:4949
 msgid "To proceed with chart folder migration, choose the chart source folder, and follow the instructions given."
-msgstr "A térkép mappák átmozgatásáház válaszd ki a forrás mappát és kövesd az utasításokat!"
+msgstr ""
 
 #: src/androidUTIL.cpp:4946
 msgid "Some chart folders may be inaccessible to OpenCPN on this version of Android. "
-msgstr "Az OpenCPN nem tud elérni néhány térkép mappát ezen az Android verzión."
+msgstr ""
 
 #: src/androidUTIL.cpp:4963
 msgid "Migrate destination"
-msgstr "Mozgatási célpont"
+msgstr ""
 
 #: src/androidUTIL.cpp:4967
 msgid "OpenCPN Internal Storage"
@@ -2730,12 +2730,11 @@ msgstr "Mégsem"
 #: src/androidUTIL.cpp:5027
 msgid "On the next page, find and choose the root folder containing chart files to migrate\n\n"
 "Example: /storage/emulated/0/Charts\n\n"
-msgstr "A következő oldalon keresd meg és válaszd ki a migrálni  kívánt térkép állományokat tartalmazó gyökér mappát.\n\n"
-"Például:  /storage/emulated/0/Charts\n\n"
+msgstr ""
 
 #: src/androidUTIL.cpp:5029
 msgid "This entire folder will be migrated.\n"
-msgstr "Az egész mappa migrálva lesz.\n"
+msgstr ""
 
 #: src/androidUTIL.cpp:5030
 msgid "Proceed?"
@@ -2755,11 +2754,11 @@ msgstr "Hozzáférés engedélyezve"
 
 #: src/androidUTIL.cpp:5104
 msgid "OpenCPN has obtained temporary permission to access the selected chart folders."
-msgstr "Az OpenCPN ideiglenes engedélyt kapott a kiválasztott térkép mappák eléréséhez."
+msgstr ""
 
 #: src/androidUTIL.cpp:5106
 msgid "Chart migration is ready to proceed."
-msgstr "Térkép migrálás kész az indulásra."
+msgstr ""
 
 #: src/androidUTIL.cpp:5108
 msgid "Source: "
@@ -2775,27 +2774,27 @@ msgstr "Cél: OpenCPN SD kártya tárhely"
 
 #: src/androidUTIL.cpp:5116
 msgid "Migrate charts now?"
-msgstr "Térképek migráása most?"
+msgstr ""
 
 #: src/androidUTIL.cpp:5177
 msgid "Chart migration is finished."
-msgstr "Térkép migrálás befejezve."
+msgstr ""
 
 #: src/androidUTIL.cpp:5179
 msgid "Migrated chart folders are now accessible to OpenCPN."
-msgstr "Az átmigrált térkép mappák most már elérhetőek az OpenCPN-nek."
+msgstr ""
 
 #: src/androidUTIL.cpp:5181
 msgid "You may need to adjust your chart folders further, to accommodate individual chart groups"
-msgstr "Lehet, hogy további beállításokat kell tenni a mappákon az egyedi térkép csoportok elhelyezéséhez."
+msgstr ""
 
 #: src/androidUTIL.cpp:5183
 msgid "OpenCPN will now restart to apply changes."
-msgstr "A módosítások érvénybe léptetéséhez az OpenCPN újra indul."
+msgstr ""
 
 #: src/androidUTIL.cpp:5218
 msgid "Finishing migration"
-msgstr "Migrálás befejezése."
+msgstr ""
 
 #: src/canvasMenu.cpp:250 src/canvasMenu.cpp:255 src/canvasMenu.cpp:269
 #: src/canvasMenu.cpp:287 src/canvasMenu.cpp:962 src/canvasMenu.cpp:980
@@ -3124,7 +3123,7 @@ msgstr "OpenCPN nyomvonal törlése"
 
 #: src/CanvasOptions.cpp:111
 msgid "Chart Panel Options"
-msgstr "Térkép panel beálltások."
+msgstr ""
 
 #: src/CanvasOptions.cpp:136 src/options.cpp:5410 src/options.cpp:5591
 msgid "Navigation Mode"
@@ -3174,7 +3173,7 @@ msgstr "AIS célpontok megjelenítése"
 
 #: src/CanvasOptions.cpp:225
 msgid "Minimize less critical targets"
-msgstr "Kevésbé kritikus célpontok minimalizálása."
+msgstr ""
 
 #: src/CanvasOptions.cpp:236
 msgid "Tides and Currents"
@@ -3182,7 +3181,7 @@ msgstr "Árapály és áramlatok"
 
 #: src/CanvasOptions.cpp:241
 msgid "Show Tide stations"
-msgstr "Árapály állomások mutatása"
+msgstr ""
 
 #: src/CanvasOptions.cpp:248 src/chart1.cpp:5606 src/chcanv.cpp:1308
 #: src/toolbar.cpp:1237
@@ -3235,11 +3234,11 @@ msgstr "Mind, kivéve"
 
 #: src/CanvasOptions.cpp:319
 msgid "User Standard"
-msgstr "Szabványos használata"
+msgstr ""
 
 #: src/cat_settings.cpp:95
 msgid "Select new flavour"
-msgstr "Új kinézet használata"
+msgstr ""
 
 #: src/cat_settings.cpp:96
 msgid "Default setting"
@@ -3247,7 +3246,7 @@ msgstr "Alapértelmezett beállítások"
 
 #: src/cat_settings.cpp:162
 msgid "Active catalog"
-msgstr "Aktív katalógus"
+msgstr ""
 
 #: src/cat_settings.cpp:164
 msgid "Select plugin catalog"
@@ -3272,7 +3271,7 @@ msgstr "Gyorsítótár ürítése"
 #: src/cat_settings.cpp:217
 #, c-format
 msgid "Size: %d MB in %d files"
-msgstr "Méret: %d MB %d állományban"
+msgstr ""
 
 #: src/cat_settings.cpp:228 src/catalog_mgr.cpp:129 src/download_mgr.cpp:382
 msgid "Done"
@@ -3280,7 +3279,7 @@ msgstr "Kész"
 
 #: src/cat_settings.cpp:236
 msgid "Plugin Catalog Settings"
-msgstr "Plugin katalógus beállítások"
+msgstr ""
 
 #: src/catalog_mgr.cpp:92
 msgid "Manage Plugin Catalog"
@@ -3292,31 +3291,31 @@ msgstr "Elrejt"
 
 #: src/catalog_mgr.cpp:102
 msgid "Ultra advanced"
-msgstr "Ultra haladó"
+msgstr ""
 
 #: src/catalog_mgr.cpp:190
 msgid "Catalog URL status: "
-msgstr "Katalógus URL státusz:"
+msgstr ""
 
 #: src/catalog_mgr.cpp:193
 msgid "Error"
-msgstr "Hiba"
+msgstr ""
 
 #: src/catalog_mgr.cpp:222
 msgid "Current active plugin catalog"
-msgstr "Jelenlegi aktív plugin katalógus"
+msgstr ""
 
 #: src/catalog_mgr.cpp:229
 msgid "Default catalog"
-msgstr "Alapértelmezett katalógus"
+msgstr ""
 
 #: src/catalog_mgr.cpp:232 src/catalog_mgr.cpp:242
 msgid "Use as active catalog"
-msgstr "Akvív katalógusként használ"
+msgstr ""
 
 #: src/catalog_mgr.cpp:239
 msgid "Latest available catalog:"
-msgstr "Lgefrissebb elérhető katalógus:"
+msgstr ""
 
 #: src/catalog_mgr.cpp:292 src/pluginmanager.cpp:5131
 msgid "Cannot download data from url"
@@ -3324,55 +3323,55 @@ msgstr "Nem tölthető le adat az urlről"
 
 #: src/catalog_mgr.cpp:296
 msgid "Cannot parse downloaded data"
-msgstr "A letöltött adat nem értemezhető"
+msgstr ""
 
 #: src/catalog_mgr.cpp:299
 msgid "Catalog update problem"
-msgstr "Katalógus frissítési probléma"
+msgstr ""
 
 #: src/catalog_mgr.cpp:345
 msgid "Use default location"
-msgstr "Alapértelmezett hely használata"
+msgstr ""
 
 #: src/catalog_mgr.cpp:350
 msgid "Save"
-msgstr "Mentés"
+msgstr ""
 
 #: src/catalog_mgr.cpp:384
 msgid "Catalog channel: "
-msgstr "Katalógus csatorna:"
+msgstr ""
 
 #: src/catalog_mgr.cpp:418
 msgid "Custom catalog URL: "
-msgstr "Egyéni katalógus URL:"
+msgstr ""
 
 #: src/catalog_mgr.cpp:467 src/catalog_mgr.cpp:565
 msgid "Check latest release..."
-msgstr "Legújabb verzió ellenőrzése..."
+msgstr ""
 
 #: src/catalog_mgr.cpp:497
 msgid "Catalog updated"
-msgstr "Katalógus frissítve"
+msgstr ""
 
 #: src/catalog_mgr.cpp:561
 msgid "Server is reachable..."
-msgstr "A szerver elérhető."
+msgstr ""
 
 #: src/catalog_mgr.cpp:563
 msgid "Check channel..."
-msgstr "Csatorna ellenőrzése..."
+msgstr ""
 
 #: src/catalog_mgr.cpp:571
 msgid "Custom URL"
-msgstr "Egyéni URL"
+msgstr ""
 
 #: src/catalog_mgr.cpp:589
 msgid "Fail: "
-msgstr "Sikertelen:"
+msgstr ""
 
 #: src/catalog_mgr.cpp:630 src/catalog_mgr.cpp:655
 msgid "Catalog Manager"
-msgstr "Katalógus kezelő"
+msgstr ""
 
 #: src/chart1.cpp:1031
 msgid "\n"
@@ -4160,7 +4159,7 @@ msgstr "Leírás"
 
 #: src/ConfigMgr.cpp:623
 msgid "Recovery Template"
-msgstr "Helyreállítási sablon"
+msgstr ""
 
 #: src/ConfigMgr.cpp:625
 msgid "Apply this template to return to a known safe configuration"
@@ -4331,11 +4330,11 @@ msgstr "Visszaállás korábbi verzióra"
 
 #: src/download_mgr.cpp:315 src/update_mgr.cpp:307
 msgid "More"
-msgstr "Több"
+msgstr ""
 
 #: src/download_mgr.cpp:318 src/update_mgr.cpp:310
 msgid "Less"
-msgstr "Kevesebb"
+msgstr ""
 
 #: src/download_mgr.cpp:391
 msgid "Update plugin catalog"
@@ -4371,11 +4370,11 @@ msgstr "Hiba a telepítés során"
 
 #: src/garmin_wrapper.cpp:295
 msgid "Overwrite Garmin device route number 1?"
-msgstr "Felülírjam a Garmin eszköz 1-es útvonalát?"
+msgstr ""
 
 #: src/garmin_wrapper.cpp:296
 msgid "OpenCPN Message"
-msgstr "OpenCPN üzenet"
+msgstr ""
 
 #: src/glChartCanvas.cpp:2182 src/s52plib.cpp:2263 src/s52plib.cpp:2288
 #: src/s52plib.cpp:2392 src/s52plib.cpp:2565
@@ -4388,7 +4387,7 @@ msgstr "Raszteres térkép tömörítésének befejezésére vár."
 
 #: src/glTextureManager.cpp:1456
 msgid "OpenCPN Compressed Cache Update"
-msgstr "OpenCPN tömörített gyorsítótár frissítés"
+msgstr ""
 
 #: src/GoToPositionDialog.cpp:119 src/MarkInfo.cpp:432 src/RoutePropDlg.cpp:309
 #: src/TrackPropDlg.cpp:302
@@ -4548,11 +4547,11 @@ msgstr "GUID"
 
 #: src/MarkInfo.cpp:671
 msgid "Tide Station"
-msgstr "Árapály állomás"
+msgstr ""
 
 #: src/MarkInfo.cpp:699
 msgid "Arrival Radius"
-msgstr "Érkezési kör sugara"
+msgstr ""
 
 #: src/MarkInfo.cpp:714
 msgid "Planned Speed"
@@ -4589,7 +4588,7 @@ msgstr "Néhány alapértelmezés mentése"
 #: src/MarkInfo.cpp:1809
 msgid "Check which properties of current waypoint\n"
 " should be set as default for NEW waypoints."
-msgstr "Jelöld be, hogy az aktuális útvonalpont melyik tulajdonságai legyenek az alapértelmezettek az új útvonalpontoknál."
+msgstr ""
 
 #: src/MarkInfo.cpp:1816 src/MarkInfo.cpp:1836
 msgid "Do use"
@@ -4605,7 +4604,7 @@ msgstr "Útvonapont nevének mutatása"
 
 #: src/MarkInfo.cpp:1850
 msgid "Arrival radius"
-msgstr "Érkezési kör sugara"
+msgstr ""
 
 #: src/MarkInfo.cpp:1861
 msgid "Show only if"
@@ -4617,19 +4616,19 @@ msgstr "Mindig mutassa"
 
 #: src/MarkInfo.cpp:1864
 msgid "Show only at scale"
-msgstr "Csak adott méretaránynál mutassa"
+msgstr ""
 
 #: src/MarkInfo.cpp:1903
 msgid "Tide Station not found"
-msgstr "Árapály állomás nem találhtó"
+msgstr ""
 
 #: src/MUIBar.cpp:97 src/MUIBar.cpp:106
 msgid "Set scale"
-msgstr "Méretarány beállítása"
+msgstr ""
 
 #: src/MUIBar.cpp:175
 msgid "Chart Scale"
-msgstr "Térkép méretarány"
+msgstr ""
 
 #: src/multiplexer.cpp:413
 msgid "Route Upload"
@@ -5618,7 +5617,7 @@ msgstr "Tömörít"
 
 #: src/options.cpp:4007
 msgid "Migrate Charts.."
-msgstr "Térképek migrálása..."
+msgstr ""
 
 #: src/options.cpp:4015
 msgid "Update Control"
@@ -5852,7 +5851,7 @@ msgstr "Mély"
 
 #: src/options.cpp:4947 src/options.cpp:5157
 msgid "User Standard Objects"
-msgstr "Szabványos objektumok használata"
+msgstr ""
 
 #: src/options.cpp:4958 src/options.cpp:5164 src/options.cpp:11532
 msgid "Select All"
@@ -5916,7 +5915,7 @@ msgstr "Kurzorhoz nagyítás"
 
 #: src/options.cpp:5478 src/options.cpp:5663
 msgid "Display Features"
-msgstr "Elemek megjelenítése"
+msgstr ""
 
 #: src/options.cpp:5508
 msgid "Status Bar Option"
@@ -5924,7 +5923,7 @@ msgstr "Állapotsor opciók"
 
 #: src/options.cpp:5515 src/options.cpp:5700
 msgid "Live ETA at Cursor"
-msgstr "Aktuális ETA a kurzornál"
+msgstr ""
 
 #: src/options.cpp:5523 src/options.cpp:5708
 msgid "Default Boat Speed "
@@ -5932,7 +5931,7 @@ msgstr "Alapértelmezett hajó sebesség"
 
 #: src/options.cpp:5538 src/options.cpp:5723
 msgid "Canvas Layout"
-msgstr "Canvas Layout"
+msgstr ""
 
 #: src/options.cpp:5693
 msgid "Status Bar"
@@ -6022,20 +6021,20 @@ msgstr "fok (-Ny, +K)"
 
 #: src/options.cpp:6002 src/options.cpp:6381
 msgid "Show true bearings and headings"
-msgstr "Valós iránylatok és irányok mutatása"
+msgstr ""
 
 #: src/options.cpp:6005 src/options.cpp:6384
 msgid "Show magnetic bearings and headings."
-msgstr "Mágneses iránylatok és irányok mutatása."
+msgstr ""
 
 #: src/options.cpp:6017 src/options.cpp:6395 src/options.cpp:7527
 msgid "WMM Plugin calculated magnetic variation"
-msgstr "WMM plugin által számolt mágneses variáció"
+msgstr ""
 
 #: src/options.cpp:6035 src/options.cpp:6409
 msgid " To set the magnetic variation manually,\n"
 " you must disable the WMM plugin."
-msgstr "A mágneses variáció kézzel történő beállításához kapcsold ki a WMM plugint!"
+msgstr ""
 
 #: src/options.cpp:6048
 msgid "Sounds"
@@ -6062,7 +6061,7 @@ msgstr "Horgonyőr riasztás hang kiválasztása"
 #: src/options.cpp:6217 src/options.cpp:6249 src/options.cpp:6282
 #: src/options.cpp:6314
 msgid "Test"
-msgstr "Teszt"
+msgstr ""
 
 #: src/options.cpp:6230
 msgid "Play Sound on AIS Alert."
@@ -6090,7 +6089,7 @@ msgstr "DSC riasztás"
 
 #: src/options.cpp:6295
 msgid "Play Sound on DSC notification."
-msgstr "Hang lejátszása DSC értesítésnél."
+msgstr ""
 
 #: src/options.cpp:6308
 msgid "Select DSC notification Sound"
@@ -6142,11 +6141,11 @@ msgstr "Veszteglő/kikötött célpontok elnyomása, max sebesség (csomó)"
 
 #: src/options.cpp:6549
 msgid "Draw AIS realtime prediction, target speed min (kn)"
-msgstr "Valósidejű AIS predikciók rajzolása, minimális célpont sebesség (csomó)"
+msgstr ""
 
 #: src/options.cpp:6559
 msgid "Allow attenuation of less critical targets if more than ... targets"
-msgstr "Kevésbé kritikus célpontok rejtése, ha több mint ... céélpont van"
+msgstr ""
 
 #: src/options.cpp:6567
 msgid "Show area notices (from AIS binary messages)"
@@ -6158,11 +6157,11 @@ msgstr "AIS célpontok mutatása valós méretben"
 
 #: src/options.cpp:6581
 msgid "Show names with AIS targets at scale greater than 1:"
-msgstr "Nevek mutatása az AIS célpontokkal ha a méretarány nagyobb, mint 1:"
+msgstr ""
 
 #: src/options.cpp:6589
 msgid "Use WPL position messages. Action when received:"
-msgstr "WPL pozíció üzenetek használata. Vételük esetén végrehajtandó:"
+msgstr ""
 
 #: src/options.cpp:6592
 msgid "APRS position report"
@@ -6178,7 +6177,7 @@ msgstr "Görgetés"
 
 #: src/options.cpp:6604
 msgid "Enable route/AIS info block"
-msgstr "Útvonal/AIS infó engedélyezése"
+msgstr ""
 
 #: src/options.cpp:6612
 msgid "\"Ship Name\" MMSI (Call Sign)"
@@ -6258,11 +6257,11 @@ msgstr "Menüsor megjelenítése"
 
 #: src/options.cpp:6826
 msgid "Show Compass/GPS Status Window"
-msgstr "Kompassz/GPS státusz ablak mutatása"
+msgstr ""
 
 #: src/options.cpp:6834
 msgid "Enable Toolbar auto-hide"
-msgstr "Eszköztár automatikus elrejtése"
+msgstr ""
 
 #: src/options.cpp:6849
 msgid "Play Ships Bells"
@@ -6270,7 +6269,7 @@ msgstr "Hajóharang kongatása"
 
 #: src/options.cpp:6860
 msgid "Audio Play command:"
-msgstr "Audio Play parancs:"
+msgstr ""
 
 #: src/options.cpp:6876
 msgid "Unknown device :"
@@ -6290,7 +6289,7 @@ msgstr "Érintőképernyő engedélyezése"
 
 #: src/options.cpp:6925
 msgid "Enable Scaled Graphics interface"
-msgstr "Átméretezett grafikus felület engedélyezése"
+msgstr ""
 
 #: src/options.cpp:6935
 msgid "Show Zoom buttons"
@@ -6298,23 +6297,23 @@ msgstr "Zoom gombok megjelenítése"
 
 #: src/options.cpp:6942
 msgid "Use Inland ECDIS V2.3"
-msgstr "Belvízi ECDIS V2.3 használata"
+msgstr ""
 
 #: src/options.cpp:6962
 msgid "User Interface scale factor"
-msgstr "Felhasználói felület méretaránya"
+msgstr ""
 
 #: src/options.cpp:6976
 msgid "Chart Object scale factor"
-msgstr "Térkép objektumok méretaránya"
+msgstr ""
 
 #: src/options.cpp:6990
 msgid "Ship scale factor"
-msgstr "Hajó méretaránya"
+msgstr ""
 
 #: src/options.cpp:7004
 msgid "ENC Sounding factor"
-msgstr "ENC mélység faktor"
+msgstr ""
 
 #: src/options.cpp:7015
 msgid "Mouse wheel zoom sensitivity"
@@ -6411,11 +6410,11 @@ msgstr "OpenCPN figyelmeztetés"
 
 #: src/options.cpp:9489 src/options.cpp:9533
 msgid "OpenCPN Compress Charts"
-msgstr "OpenCPN térképek tömörítése"
+msgstr ""
 
 #: src/options.cpp:9526
 msgid "No charts found to compress."
-msgstr "Nincs tömöríthető térkép"
+msgstr ""
 
 #: src/options.cpp:9558
 #, c-format
@@ -6446,7 +6445,7 @@ msgstr "Keresés leállítása"
 
 #: src/options.cpp:11359
 msgid "Configure new connection"
-msgstr "Új kapcsolat beállítása"
+msgstr ""
 
 #: src/options.cpp:11454
 msgid "Signal K server available."
@@ -6568,11 +6567,11 @@ msgstr "OpenCPN S57 SENC fájl létrehozása..."
 
 #: src/PluginHandler.cpp:1154
 msgid "Please check system log for more info."
-msgstr "További nformációért nézd meg a naplóűllományt!"
+msgstr ""
 
 #: src/PluginHandler.cpp:1163
 msgid " successfully installed from cache"
-msgstr "sikeresen telepítve a gyorsítótárból"
+msgstr ""
 
 #: src/pluginmanager.cpp:283
 msgid "Plugin is a standard system plugin"
@@ -6743,7 +6742,7 @@ msgstr "Plugin sikeresen importálva"
 
 #: src/pluginmanager.cpp:5571
 msgid "Active catalog updated."
-msgstr "Aktív katalógus frissítve."
+msgstr ""
 
 #: src/pluginmanager.cpp:5573
 msgid "Plugin may be installed or updated now."
@@ -6755,11 +6754,11 @@ msgstr ""
 
 #: src/pluginmanager.cpp:5580
 msgid "Active Catalog"
-msgstr "Aktív katalógus"
+msgstr ""
 
 #: src/pluginmanager.cpp:5580
 msgid "Last Catalog"
-msgstr "Utolsó katalógus"
+msgstr ""
 
 #: src/pluginmanager.cpp:5594
 msgid "Last change: "
@@ -6803,7 +6802,7 @@ msgstr "TideCurrentGraphRollover"
 
 #: src/Route.cpp:1255
 msgid "Route Transmitted."
-msgstr "Útvonal átküldve."
+msgstr ""
 
 #: src/Route.cpp:1258
 msgid "Error on Route Upload.  Garmin GPS not connected"
@@ -6972,11 +6971,11 @@ msgstr "Réteg típus"
 
 #: src/routemanagerdialog.cpp:883
 msgid "Create Temporary layer"
-msgstr "Ideiglenes réteg létrehozása"
+msgstr ""
 
 #: src/routemanagerdialog.cpp:889
 msgid "Create Persistent layer"
-msgstr "Állandó réteg létrehozása"
+msgstr ""
 
 #: src/routemanagerdialog.cpp:909
 msgid "Show WPT names"
@@ -7052,7 +7051,7 @@ msgstr "Biztos, hogy MINDEGYIK nyomvonalat törölni akarod?"
 
 #: src/routemanagerdialog.cpp:2214
 msgid "Overruled"
-msgstr "Felülbírálva"
+msgstr ""
 
 #: src/routemanagerdialog.cpp:2524
 msgid "The waypoint you want to delete is used in a route, do you really want to delete it?"
@@ -7337,7 +7336,7 @@ msgstr ""
 
 #: src/RoutePropDlgImpl.cpp:860
 msgid "OpenCPN Move Waypoint"
-msgstr "OpenCPN útvonalpont mozgatása"
+msgstr ""
 
 #: src/RoutePropDlgImpl.cpp:894
 msgid "Are you sure you want to remove this waypoint?"
@@ -7425,7 +7424,7 @@ msgstr ""
 
 #: src/SencManager.cpp:158 src/SencManager.cpp:190
 msgid "Preparing vector chart  "
-msgstr "Vektor térkép előkészítése"
+msgstr ""
 
 #: src/SendToGpsDlg.cpp:90
 msgid "GPS/Plotter Port"
@@ -7433,11 +7432,11 @@ msgstr "GPS/Plotter Port"
 
 #: src/SendToGpsDlg.cpp:177
 msgid "Prepare GPS for Route/Waypoint upload and press Send..."
-msgstr "Készítsd fel a GPS-t az útvonal/útpont feltötlésére és nyomd meg a Küldést"
+msgstr ""
 
 #: src/SendToGpsDlg.cpp:181
 msgid "Progress..."
-msgstr "Folyamat..."
+msgstr ""
 
 #: src/tcmgr.cpp:691
 msgid "It seems you have no tide/current harmonic data installed."
@@ -7461,11 +7460,11 @@ msgstr "Következő"
 
 #: src/TCWin.cpp:152
 msgid "LMT@Station"
-msgstr "LMT az adott helyen"
+msgstr ""
 
 #: src/TCWin.cpp:243
 msgid "Reference Station :"
-msgstr "Referencia állomás:"
+msgstr ""
 
 #: src/TCWin.cpp:257
 msgid "Data Source :"
@@ -7473,11 +7472,11 @@ msgstr "Adatforrás:"
 
 #: src/TCWin.cpp:648
 msgid "HW"
-msgstr "HW"
+msgstr ""
 
 #: src/TCWin.cpp:648
 msgid "LW"
-msgstr "LW"
+msgstr ""
 
 #: src/TCWin.cpp:849
 msgid "Today"
@@ -7527,15 +7526,15 @@ msgstr "Eszköztár ikonok kiválasztása"
 
 #: src/trackprintout.cpp:334
 msgid "Show Time."
-msgstr "Idő megjelenítése."
+msgstr ""
 
 #: src/trackprintout.cpp:343
 msgid "Show Speed."
-msgstr "Sebesség megjelenítése."
+msgstr ""
 
 #: src/trackprintout.cpp:399
 msgid "Track Print"
-msgstr "Nyomvonal nyomtatása"
+msgstr ""
 
 #: src/TrackPropDlg.cpp:305
 msgid "Timestamp"
@@ -7740,7 +7739,7 @@ msgstr "Kapcsolat beállításai"
 
 #: libs/wxcurl/src/dialog.cpp:461
 msgid "Connection settings used for the transfer:"
-msgstr "Csatlakozási beállíátsok az átvitelhez:"
+msgstr ""
 
 #: libs/wxcurl/src/dialog.cpp:516
 msgid "0 (transfer completed)"
diff --git a/po/opencpn_it_IT.po b/po/opencpn_it_IT.po
index 541319bd..ff35351f 100644
--- a/po/opencpn_it_IT.po
+++ b/po/opencpn_it_IT.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
 "Language: it_IT\n"
diff --git a/po/opencpn_pt_BR.po b/po/opencpn_pt_BR.po
index 9d523eab..0d04e228 100644
--- a/po/opencpn_pt_BR.po
+++ b/po/opencpn_pt_BR.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:20\n"
+"PO-Revision-Date: 2022-04-15 01:43\n"
 "Last-Translator: \n"
 "Language-Team: Portuguese, Brazilian\n"
 "Language: pt_BR\n"
@@ -89,7 +89,7 @@ msgstr "(Acompanhamento sem Nome)"
 
 #: include/trackprintout.h:78 src/trackprintout.cpp:274
 msgid "Print Track Selection"
-msgstr "Imprimir seleção de rota"
+msgstr ""
 
 #: include/TrackPropDlg.h:191 src/TrackPropDlg.cpp:1218
 #: src/TrackPropDlg.cpp:1232
@@ -117,23 +117,23 @@ msgstr "Diálogo"
 
 #: src/about.cpp:393
 msgid "The Open Source Chart Plotter/Navigator"
-msgstr "O Plotter/Navegador de código aberto "
+msgstr ""
 
 #: src/about.cpp:415
 msgid "Copy Log File to Clipboard"
-msgstr "Copiar o arquivo de Log para área de transferência"
+msgstr ""
 
 #: src/about.cpp:418
 msgid "Copy Settings File to Clipboard"
-msgstr "Copiar Arquivo de Configurações para Área de Transferência"
+msgstr ""
 
 #: src/about.cpp:442
 msgid "About"
-msgstr "Sobre"
+msgstr ""
 
 #: src/about.cpp:459
 msgid "Authors"
-msgstr "Autores"
+msgstr ""
 
 #: src/about.cpp:475 src/AboutFrame.cpp:249
 msgid "License"
@@ -158,7 +158,7 @@ msgstr "OpenCPN"
 
 #: src/AboutFrame.cpp:74
 msgid "(c) 2000-2021"
-msgstr "(c) 2000-2021"
+msgstr ""
 
 #: src/AboutFrame.cpp:81
 msgid "The OpenCPN Authors"
@@ -2679,43 +2679,43 @@ msgstr "Fundeadouro criado "
 #: src/androidUTIL.cpp:4885 src/androidUTIL.cpp:5033 src/androidUTIL.cpp:5121
 #: src/androidUTIL.cpp:5186
 msgid "OpenCPN for Android Migration Assistant"
-msgstr "OpenCPN para Android Assistente de Migração "
+msgstr ""
 
 #: src/androidUTIL.cpp:4911
 msgid "OpenCPN has detected chart folders in your configuration file that cannot be accessed on this version of Android"
-msgstr "OpenCPN detectou pastas de cartas no seu arquivo de configuração que não pode ser acessado nesta versão do Android"
+msgstr ""
 
 #: src/androidUTIL.cpp:4934 src/androidUTIL.cpp:4947
 msgid "OpenCPN can copy these chart folders to a suitable location, if desired."
-msgstr "OpenCPN pode copiar estas pastas de cartas para um local adequado, se desejado."
+msgstr ""
 
 #: src/androidUTIL.cpp:4936 src/androidUTIL.cpp:4949
 msgid "To proceed with chart folder migration, choose the chart source folder, and follow the instructions given."
-msgstr "Para prosseguir com a migração da pasta de cartas, escolha a pasta de origem da carta e siga as instruções fornecidas."
+msgstr ""
 
 #: src/androidUTIL.cpp:4946
 msgid "Some chart folders may be inaccessible to OpenCPN on this version of Android. "
-msgstr "Algumas pastas de cartas podem estar inacessíveis para OpenCPN nesta versão do Android. "
+msgstr ""
 
 #: src/androidUTIL.cpp:4963
 msgid "Migrate destination"
-msgstr "Migrar destino"
+msgstr ""
 
 #: src/androidUTIL.cpp:4967
 msgid "OpenCPN Internal Storage"
-msgstr "OpenCPN Armazenamento Interno"
+msgstr ""
 
 #: src/androidUTIL.cpp:4970
 msgid "OpenCPN SDCard Storage"
-msgstr "OpenCPN Armazenamento cartão SD "
+msgstr ""
 
 #: src/androidUTIL.cpp:4978
 msgid "Choose chart source folder."
-msgstr "Escolha a pasta fonte da carta"
+msgstr ""
 
 #: src/androidUTIL.cpp:4984
 msgid "Status"
-msgstr "Status"
+msgstr ""
 
 #: src/androidUTIL.cpp:5001 src/catalog_mgr.cpp:604
 #: src/GoToPositionDialog.cpp:145 src/LinkPropDlg.cpp:76 src/MarkInfo.cpp:775
@@ -2730,72 +2730,71 @@ msgstr "Cancelar"
 #: src/androidUTIL.cpp:5027
 msgid "On the next page, find and choose the root folder containing chart files to migrate\n\n"
 "Example: /storage/emulated/0/Charts\n\n"
-msgstr "Na próxima página, encontre e escolha a pasta raiz contendo arquivos de cartas para migração\n\n"
-"Exemplo: /storage/emulated/0/Charts\n\n"
+msgstr ""
 
 #: src/androidUTIL.cpp:5029
 msgid "This entire folder will be migrated.\n"
-msgstr "Esta pasta inteira será migrada.\n"
+msgstr ""
 
 #: src/androidUTIL.cpp:5030
 msgid "Proceed?"
-msgstr "Continuar?"
+msgstr ""
 
 #: src/androidUTIL.cpp:5042
 msgid "Waiting for permission grant...."
-msgstr "Aguardando permissões..."
+msgstr ""
 
 #: src/androidUTIL.cpp:5076
 msgid "Migration started..."
-msgstr "Migração iniciada..."
+msgstr ""
 
 #: src/androidUTIL.cpp:5092
 msgid "Permission granted to "
-msgstr "Permissão concedida"
+msgstr ""
 
 #: src/androidUTIL.cpp:5104
 msgid "OpenCPN has obtained temporary permission to access the selected chart folders."
-msgstr "OpenCPN obteve permissão temporária para acessar as pastas de cartas selecionadas."
+msgstr ""
 
 #: src/androidUTIL.cpp:5106
 msgid "Chart migration is ready to proceed."
-msgstr "A migração da carta está pronta para continuar."
+msgstr ""
 
 #: src/androidUTIL.cpp:5108
 msgid "Source: "
-msgstr "Fonte: "
+msgstr ""
 
 #: src/androidUTIL.cpp:5112
 msgid "Destination: OpenCPN Internal Storage"
-msgstr "Destino: OpenCPN Armazenamento Interno"
+msgstr ""
 
 #: src/androidUTIL.cpp:5114
 msgid "Destination: OpenCPN SDCard Storage"
-msgstr "Destino: OpenCPN Armazenamento do Cartão SD "
+msgstr ""
 
 #: src/androidUTIL.cpp:5116
 msgid "Migrate charts now?"
-msgstr "Migrar cartas agora?"
+msgstr ""
 
 #: src/androidUTIL.cpp:5177
 msgid "Chart migration is finished."
-msgstr "A migração de cartas está terminada."
+msgstr ""
 
 #: src/androidUTIL.cpp:5179
 msgid "Migrated chart folders are now accessible to OpenCPN."
-msgstr "Pastas de cartas migradas agora são acessíveis ao OpenCPN."
+msgstr ""
 
 #: src/androidUTIL.cpp:5181
 msgid "You may need to adjust your chart folders further, to accommodate individual chart groups"
-msgstr "Você pode precisar ajustar as pastas de cartas para acomodar grupos individuais de cartas"
+msgstr ""
 
 #: src/androidUTIL.cpp:5183
 msgid "OpenCPN will now restart to apply changes."
-msgstr "OpenCPN irá agora reiniciar para aplicar as alterações."
+msgstr ""
 
 #: src/androidUTIL.cpp:5218
 msgid "Finishing migration"
-msgstr "Concluindo a migração"
+msgstr ""
 
 #: src/canvasMenu.cpp:250 src/canvasMenu.cpp:255 src/canvasMenu.cpp:269
 #: src/canvasMenu.cpp:287 src/canvasMenu.cpp:962 src/canvasMenu.cpp:980
@@ -3239,84 +3238,84 @@ msgstr "Usuário padrão"
 
 #: src/cat_settings.cpp:95
 msgid "Select new flavour"
-msgstr "Selecione novo Layout"
+msgstr ""
 
 #: src/cat_settings.cpp:96
 msgid "Default setting"
-msgstr "Definições padrão"
+msgstr ""
 
 #: src/cat_settings.cpp:162
 msgid "Active catalog"
-msgstr "Catálogo Ativo"
+msgstr ""
 
 #: src/cat_settings.cpp:164
 msgid "Select plugin catalog"
-msgstr "Selecionar catálogo de plugins"
+msgstr ""
 
 #: src/cat_settings.cpp:177
 msgid "Compatibility"
-msgstr "Compatibilidade"
+msgstr ""
 
 #: src/cat_settings.cpp:179
 msgid "Active setting:"
-msgstr "Configurações de atividade"
+msgstr ""
 
 #: src/cat_settings.cpp:191
 msgid "Cache"
-msgstr "Cache"
+msgstr ""
 
 #: src/cat_settings.cpp:200
 msgid "Clear cache"
-msgstr "Limpar cache"
+msgstr ""
 
 #: src/cat_settings.cpp:217
 #, c-format
 msgid "Size: %d MB in %d files"
-msgstr "Tamanho: %d MB em %d arquivos"
+msgstr ""
 
 #: src/cat_settings.cpp:228 src/catalog_mgr.cpp:129 src/download_mgr.cpp:382
 msgid "Done"
-msgstr "Feito"
+msgstr ""
 
 #: src/cat_settings.cpp:236
 msgid "Plugin Catalog Settings"
-msgstr "Configurações de Catálogo de Plugins"
+msgstr ""
 
 #: src/catalog_mgr.cpp:92
 msgid "Manage Plugin Catalog"
-msgstr "Gerenciar Catálogo de Plugins"
+msgstr ""
 
 #: src/catalog_mgr.cpp:99
 msgid "Hide"
-msgstr "Ocultar"
+msgstr ""
 
 #: src/catalog_mgr.cpp:102
 msgid "Ultra advanced"
-msgstr "Ultra avançado"
+msgstr ""
 
 #: src/catalog_mgr.cpp:190
 msgid "Catalog URL status: "
-msgstr "Status da URL do catálogo: "
+msgstr ""
 
 #: src/catalog_mgr.cpp:193
 msgid "Error"
-msgstr "Erro"
+msgstr ""
 
 #: src/catalog_mgr.cpp:222
 msgid "Current active plugin catalog"
-msgstr "Catálogo do plugin ativo "
+msgstr ""
 
 #: src/catalog_mgr.cpp:229
 msgid "Default catalog"
-msgstr "Catálogo padrão"
+msgstr ""
 
 #: src/catalog_mgr.cpp:232 src/catalog_mgr.cpp:242
 msgid "Use as active catalog"
-msgstr "Usar como catálogo ativo"
+msgstr ""
 
 #: src/catalog_mgr.cpp:239
 msgid "Latest available catalog:"
-msgstr "Último catálogo disponível:"
+msgstr ""
 
 #: src/catalog_mgr.cpp:292 src/pluginmanager.cpp:5131
 msgid "Cannot download data from url"
@@ -3324,55 +3323,55 @@ msgstr "Não é possível baixar dados da url"
 
 #: src/catalog_mgr.cpp:296
 msgid "Cannot parse downloaded data"
-msgstr "Não é possível analisar dados baixados"
+msgstr ""
 
 #: src/catalog_mgr.cpp:299
 msgid "Catalog update problem"
-msgstr "Problema ao atualizar catálogo"
+msgstr ""
 
 #: src/catalog_mgr.cpp:345
 msgid "Use default location"
-msgstr "Usar local padrão"
+msgstr ""
 
 #: src/catalog_mgr.cpp:350
 msgid "Save"
-msgstr "Salvar"
+msgstr ""
 
 #: src/catalog_mgr.cpp:384
 msgid "Catalog channel: "
-msgstr "Canal do catálogo: "
+msgstr ""
 
 #: src/catalog_mgr.cpp:418
 msgid "Custom catalog URL: "
-msgstr "URL do catálogo personalizado: "
+msgstr ""
 
 #: src/catalog_mgr.cpp:467 src/catalog_mgr.cpp:565
 msgid "Check latest release..."
-msgstr "Verifique a versão mais recente..."
+msgstr ""
 
 #: src/catalog_mgr.cpp:497
 msgid "Catalog updated"
-msgstr "Catálogo atualizado"
+msgstr ""
 
 #: src/catalog_mgr.cpp:561
 msgid "Server is reachable..."
-msgstr "Servidor está disponível..."
+msgstr ""
 
 #: src/catalog_mgr.cpp:563
 msgid "Check channel..."
-msgstr "Verificar canal..."
+msgstr ""
 
 #: src/catalog_mgr.cpp:571
 msgid "Custom URL"
-msgstr "URL personalizada"
+msgstr ""
 
 #: src/catalog_mgr.cpp:589
 msgid "Fail: "
-msgstr "Falhou: "
+msgstr ""
 
 #: src/catalog_mgr.cpp:630 src/catalog_mgr.cpp:655
 msgid "Catalog Manager"
-msgstr "Gerenciador de catálogos"
+msgstr ""
 
 #: src/chart1.cpp:1031
 msgid "\n"
@@ -4310,7 +4309,7 @@ msgstr "Zoom Carta Vetor/Ponderação de Escala"
 
 #: src/download_mgr.cpp:212 src/update_mgr.cpp:209
 msgid "Install"
-msgstr "Instalar"
+msgstr ""
 
 #: src/download_mgr.cpp:255 src/download_mgr.cpp:272 src/pluginmanager.cpp:6208
 #: src/update_mgr.cpp:245
@@ -4319,7 +4318,7 @@ msgstr "Reinstalar"
 
 #: src/download_mgr.cpp:270 src/update_mgr.cpp:243
 msgid "Update"
-msgstr "Atualizar"
+msgstr ""
 
 #: src/download_mgr.cpp:274 src/pluginmanager.cpp:6214 src/update_mgr.cpp:247
 msgid "Downgrade"
@@ -4327,51 +4326,51 @@ msgstr "Rebaixar"
 
 #: src/download_mgr.cpp:315 src/update_mgr.cpp:307
 msgid "More"
-msgstr "Mais"
+msgstr ""
 
 #: src/download_mgr.cpp:318 src/update_mgr.cpp:310
 msgid "Less"
-msgstr "Menos"
+msgstr ""
 
 #: src/download_mgr.cpp:391
 msgid "Update plugin catalog"
-msgstr "Atualizar Catálogo de Plugins"
+msgstr ""
 
 #: src/download_mgr.cpp:404
 msgid "Advanced catalog update..."
-msgstr "Atualização de catálogo avançado..."
+msgstr ""
 
 #: src/download_mgr.cpp:482 src/update_mgr.cpp:454
 msgid "Plugin Manager"
-msgstr "Gerenciador de plugin"
+msgstr ""
 
 #: src/download_mgr.cpp:516
 msgid "Downloading "
-msgstr "Baixando "
+msgstr ""
 
 #: src/download_mgr.cpp:519
 msgid "Downloading"
-msgstr "Baixando"
+msgstr ""
 
 #: src/download_mgr.cpp:575
 msgid " successfully installed"
-msgstr " instalado com sucesso!"
+msgstr ""
 
 #: src/download_mgr.cpp:576 src/PluginHandler.cpp:1164
 msgid "Installation complete"
-msgstr "Instalação concluída"
+msgstr ""
 
 #: src/download_mgr.cpp:592 src/PluginHandler.cpp:1155
 msgid "Installation error"
-msgstr "Erro na instalação"
+msgstr ""
 
 #: src/garmin_wrapper.cpp:295
 msgid "Overwrite Garmin device route number 1?"
-msgstr "Substituir o itinerário do dispositivo Garmin número 1?"
+msgstr ""
 
 #: src/garmin_wrapper.cpp:296
 msgid "OpenCPN Message"
-msgstr "OpenCPN Mensagem"
+msgstr ""
 
 #: src/glChartCanvas.cpp:2182 src/s52plib.cpp:2263 src/s52plib.cpp:2288
 #: src/s52plib.cpp:2392 src/s52plib.cpp:2565
@@ -4384,7 +4383,7 @@ msgstr "Esperando por linha de saída para compressão de cartas raster."
 
 #: src/glTextureManager.cpp:1456
 msgid "OpenCPN Compressed Cache Update"
-msgstr "OpenCPN Atualização de Cache Compactado"
+msgstr ""
 
 #: src/GoToPositionDialog.cpp:119 src/MarkInfo.cpp:432 src/RoutePropDlg.cpp:309
 #: src/TrackPropDlg.cpp:302
@@ -4622,11 +4621,11 @@ msgstr "Estação de Maré não encontrada"
 
 #: src/MUIBar.cpp:97 src/MUIBar.cpp:106
 msgid "Set scale"
-msgstr "Definir escala"
+msgstr ""
 
 #: src/MUIBar.cpp:175
 msgid "Chart Scale"
-msgstr "Escala da Carta"
+msgstr ""
 
 #: src/multiplexer.cpp:413
 msgid "Route Upload"
@@ -5607,15 +5606,15 @@ msgstr "Selecionado Compactar"
 
 #: src/options.cpp:3977
 msgid "Add.."
-msgstr "Adicionar.."
+msgstr ""
 
 #: src/options.cpp:3979
 msgid "Compress"
-msgstr "Compactar"
+msgstr ""
 
 #: src/options.cpp:4007
 msgid "Migrate Charts.."
-msgstr "Migrar Charts.."
+msgstr ""
 
 #: src/options.cpp:4015
 msgid "Update Control"
@@ -6060,7 +6059,7 @@ msgstr "Selecionar Som do Alarme Âncora"
 #: src/options.cpp:6217 src/options.cpp:6249 src/options.cpp:6282
 #: src/options.cpp:6314
 msgid "Test"
-msgstr "Teste"
+msgstr ""
 
 #: src/options.cpp:6230
 msgid "Play Sound on AIS Alert."
@@ -6276,7 +6275,7 @@ msgstr "Dispositivo desconhecido :"
 
 #: src/options.cpp:6881
 msgid "Input device :"
-msgstr "Dispositivo de entrada"
+msgstr ""
 
 #: src/options.cpp:6909
 msgid "Sound Device"
@@ -6316,7 +6315,7 @@ msgstr "Fator de Sondagem ENC"
 
 #: src/options.cpp:7015
 msgid "Mouse wheel zoom sensitivity"
-msgstr "Sensitividade da roda do mouse"
+msgstr ""
 
 #: src/options.cpp:7270 src/options.cpp:7330
 msgid "Connections"
@@ -6577,11 +6576,11 @@ msgstr "OpenCPN S57 SENC  criar arquivo..."
 
 #: src/PluginHandler.cpp:1154
 msgid "Please check system log for more info."
-msgstr "Por favor, verifique o log do sistema para mais informações."
+msgstr ""
 
 #: src/PluginHandler.cpp:1163
 msgid " successfully installed from cache"
-msgstr " instalado do cache com sucesso"
+msgstr ""
 
 #: src/pluginmanager.cpp:283
 msgid "Plugin is a standard system plugin"
@@ -6701,11 +6700,11 @@ msgstr "Desabilitado"
 
 #: src/pluginmanager.cpp:5050
 msgid "Update Plugin Catalog: master"
-msgstr "Atualizar Catálogo de Plugin: mestre"
+msgstr ""
 
 #: src/pluginmanager.cpp:5065
 msgid "Update Plugin Catalog:master"
-msgstr "Atualizar Catálogo de Plugins: Mestre"
+msgstr ""
 
 #: src/pluginmanager.cpp:5132 src/pluginmanager.cpp:5144
 #: src/pluginmanager.cpp:5154 src/pluginmanager.cpp:5163
@@ -6897,7 +6896,7 @@ msgstr "&Exportar Selecionado..."
 
 #: src/routemanagerdialog.cpp:473
 msgid "&Resequence Waypoints"
-msgstr "&Renumerar Waypoints"
+msgstr ""
 
 #: src/routemanagerdialog.cpp:479 src/routemanagerdialog.cpp:753
 msgid "&Send to GPS"
@@ -7435,17 +7434,15 @@ msgstr "<font size=-2> (setores de ângulos são direções verdadeiras do lado
 msgid "The last opencpn run seems to have failed. Do you want to run\n"
 "in safe mode without plugins and other possibly problematic\n"
 "features?\n"
-msgstr "A última execução de opencpn parece ter falhado. Você quer executar\n"
-"no modo de segurança sem plugins e outros recursos\n"
-"possivelmente problemáticos?\n"
+msgstr ""
 
 #: src/safe_mode.cpp:65
 msgid "Safe restart"
-msgstr "Reinício seguro"
+msgstr ""
 
 #: src/SencManager.cpp:158 src/SencManager.cpp:190
 msgid "Preparing vector chart  "
-msgstr "Preparando a carta vetorial  "
+msgstr ""
 
 #: src/SendToGpsDlg.cpp:90
 msgid "GPS/Plotter Port"
@@ -7547,15 +7544,15 @@ msgstr "Escolher os ícones da barra de ferramentas"
 
 #: src/trackprintout.cpp:334
 msgid "Show Time."
-msgstr "Exibir Hora"
+msgstr ""
 
 #: src/trackprintout.cpp:343
 msgid "Show Speed."
-msgstr "Exibir Velocidade"
+msgstr ""
 
 #: src/trackprintout.cpp:399
 msgid "Track Print"
-msgstr "Impressão da trilha"
+msgstr ""
 
 #: src/TrackPropDlg.cpp:305
 msgid "Timestamp"
@@ -7712,7 +7709,7 @@ msgstr "Mover o Ponto da Derrota"
 
 #: src/update_mgr.cpp:409
 msgid "Dismiss"
-msgstr "Dispensar"
+msgstr ""
 
 #: libs/wxcurl/src/dialog.cpp:137
 msgid "Not available"
diff --git a/po/opencpn_sv_SE.po b/po/opencpn_sv_SE.po
index db396c24..225a9d7a 100644
--- a/po/opencpn_sv_SE.po
+++ b/po/opencpn_sv_SE.po
@@ -3,7 +3,7 @@ msgstr ""
 "Project-Id-Version: opencpn\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-14 21:36-0400\n"
-"PO-Revision-Date: 2022-04-21 14:21\n"
+"PO-Revision-Date: 2022-04-16 15:48\n"
 "Last-Translator: \n"
 "Language-Team: Swedish\n"
 "Language: sv_SE\n"
diff --git a/src/DarkMode.h b/src/DarkMode.h
deleted file mode 100644
index 9bc58c22..00000000
--- a/src/DarkMode.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/******************************************************************************
- *
- * Project:  OpenCPN
- *
- ***************************************************************************
- *   Copyright (C) 2018 by David S. Register                               *
- *                                                                         *
- *   This program 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 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program 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, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA.         *
- ***************************************************************************
- */
-
-#include "wx/wxprec.h"
-#include "wx/osx/private.h"
-
-void setAppLevelDarkMode(bool enabled = true);
-
-void setWindowLevelDarkMode(NSWindow *window, bool enabled = true);
-
-bool isDarkMode();
diff --git a/src/DarkMode.mm b/src/DarkMode.mm
deleted file mode 100644
index d655c8a7..00000000
--- a/src/DarkMode.mm
+++ /dev/null
@@ -1,56 +0,0 @@
-/******************************************************************************
- *
- * Project:  OpenCPN
- *
- ***************************************************************************
- *   Copyright (C) 2018 by David S. Register                               *
- *                                                                         *
- *   This program 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 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program 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, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA.         *
- ***************************************************************************
- */
-
-#import "DarkMode.h"
-
-void setAppLevelDarkMode(bool enabled)
-{
-    if (@available(macOS 10.14, *)) {
-        NSAppearance *appearance = (enabled ? [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua] : nil);
-        [[NSApplication sharedApplication] setAppearance:appearance];
-    }
-}
-
-bool isDarkMode()
-{
-    // Discussiopn here:
-    // https://stackoverflow.com/questions/51672124/how-can-dark-mode-be-detected-on-macos-10-14
-
-    NSAppearance *appearance = NSApp.mainWindow.effectiveAppearance;
-    if (@available(macOS 10.14, *)) {
-      NSAppearanceName basicAppearance = [appearance bestMatchFromAppearancesWithNames:@[
-            NSAppearanceNameAqua,
-            NSAppearanceNameDarkAqua
-        ]];
-      return [basicAppearance isEqualToString:NSAppearanceNameDarkAqua];
-    }
-
-    return false;
-}
-
-void setWindowLevelDarkMode(NSWindow *window, bool enabled)
-{
-    NSAppearance *appearance = (enabled ? [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark] : nil);
-    [window setAppearance: appearance];
-}
diff --git a/src/Quilt.cpp b/src/Quilt.cpp
index 11ddcb5e..b20fd75e 100644
--- a/src/Quilt.cpp
+++ b/src/Quilt.cpp
@@ -32,7 +32,7 @@
 #include "ocpn_pixel.h"  // for ocpnUSE_DIBSECTION
 #include "chartimg.h"
 #ifdef __OCPN__ANDROID__
- #include "androidUTIL.h"
+  #include "androidUTIL.h"
 #endif
 #include <algorithm>
 
diff --git a/src/SignalKEventHandler.cpp b/src/SignalKEventHandler.cpp
index bb1c0e73..57a6877a 100644
--- a/src/SignalKEventHandler.cpp
+++ b/src/SignalKEventHandler.cpp
@@ -112,13 +112,13 @@ void SignalKEventHandler::updateItem(wxJSONValue &item,
   if (item.HasMember("path") && item.HasMember("value")) {
     const wxString &update_path = item["path"].AsString();
     wxJSONValue &value = item["value"];
-    if (update_path == _T("navigation.position")) {
+    if (update_path == _T("navigation.position") && !value.IsNull()) {
       updateNavigationPosition(value, sfixtime);
     } else if (update_path == _T("navigation.speedOverGround") &&
-               bGPSValid_SK) {
+               bGPSValid_SK && !value.IsNull()) {
       updateNavigationSpeedOverGround(value, sfixtime);
     } else if (update_path == _T("navigation.courseOverGroundTrue") &&
-               bGPSValid_SK) {
+               bGPSValid_SK && !value.IsNull()) {
       updateNavigationCourseOverGround(value, sfixtime);
     } else if (update_path == _T("navigation.courseOverGroundMagnetic")) {
     }  // Ignore magnetic COG as OpenCPN don't handle yet.
diff --git a/src/androidUTIL.cpp b/src/androidUTIL.cpp
index 0e046aee..c0c3d1bc 100644
--- a/src/androidUTIL.cpp
+++ b/src/androidUTIL.cpp
@@ -4810,7 +4810,6 @@ void CheckMigrateCharts()
   g_migrateDialog->ShowModal();
 
 
-
 }
 
 wxString androidGetDownloadDirectory()
@@ -5404,6 +5403,3 @@ void InProgressIndicator::Stop()
 
 }
 
-
-
-
diff --git a/src/cat_settings.cpp b/src/cat_settings.cpp
index 4c3ca663..26baf995 100644
--- a/src/cat_settings.cpp
+++ b/src/cat_settings.cpp
@@ -161,10 +161,9 @@ public:
   CatalogSizer(wxWindow* parent)
       : wxStaticBoxSizer(wxHORIZONTAL, parent, _("Active catalog")) {
     auto flags = wxSizerFlags().Border();
-    Add(new wxStaticText(parent, wxID_ANY, _("Select plugin catalog")),
-        flags.Center());
+    Add(new wxStaticText(parent, wxID_ANY, _("Select plugin catalog")), flags);
     auto custom_ctrl = new CustomCatalogCtrl(parent);
-    Add(new CatalogChoice(parent, custom_ctrl), flags.Expand());
+    Add(new CatalogChoice(parent, custom_ctrl), flags);
     Add(custom_ctrl, flags.Expand().Proportion(1));
     Layout();
   }
@@ -224,7 +223,8 @@ private:
 class ButtonsSizer : public wxStdDialogButtonSizer {
 public:
   ButtonsSizer(wxWindow* parent) : wxStdDialogButtonSizer() {
-    auto button = new wxButton(parent, wxID_OK, "LongLabel", wxDefaultPosition, wxSize(10 * parent->GetCharWidth(), -1));
+    auto button = new wxButton(parent, wxID_OK, "LongLabel", wxDefaultPosition,
+                               wxSize(10 * parent->GetCharWidth(), -1));
     button->SetLabel(_("Done"));
     SetAffirmativeButton(button);
     Realize();
@@ -236,7 +236,6 @@ CatalogSettingsDialog::CatalogSettingsDialog(wxWindow* parent)
     : wxDialog(parent, wxID_ANY, _("Plugin Catalog Settings"),
                wxDefaultPosition, wxDefaultSize,
                wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
-
 #ifdef __OCPN__ANDROID__
   SetBackgroundColour(wxColour(0x7c, 0xb0, 0xe9));  // light blue
 #endif
diff --git a/src/chart1.cpp b/src/chart1.cpp
index fc021bf1..5f893bb7 100644
--- a/src/chart1.cpp
+++ b/src/chart1.cpp
@@ -186,10 +186,6 @@
 #include "crashprint.h"
 #endif
 
-#ifdef __WXOSX__
-#include "DarkMode.h"
-#endif
-
 #ifdef OCPN_USE_NEWSERIAL
 #include "serial/serial.h"
 #endif
@@ -1887,14 +1883,12 @@ bool MyApp::OnInit() {
   OCPN_OSDetail *detail = g_Platform->GetOSDetail();
   wxString msgplat;
   wxString like0;
-  if(!detail->osd_names_like.empty())
+  if (!detail->osd_names_like.empty())
     like0 = detail->osd_names_like[0].c_str();
-  msgplat.Printf( "OCPN_OSDetail:  %s ; %s ; %s ; %s ; %s",
-              detail->osd_arch.c_str(),
-              detail->osd_name.c_str(),
-              detail->osd_version.c_str(),
-              detail->osd_ID.c_str(),
-              like0.mb_str() );
+  msgplat.Printf("OCPN_OSDetail:  %s ; %s ; %s ; %s ; %s",
+                 detail->osd_arch.c_str(), detail->osd_name.c_str(),
+                 detail->osd_version.c_str(), detail->osd_ID.c_str(),
+                 like0.mb_str());
   wxLogMessage(msgplat);
 
   //    Initialize embedded PNG icon graphics
@@ -2022,8 +2016,7 @@ bool MyApp::OnInit() {
 
   if (g_useMUI) {
     ocpnStyle::Style *style = g_StyleManager->GetCurrentStyle();
-    if (style)
-      style->chartStatusWindowTransparent = true;
+    if (style) style->chartStatusWindowTransparent = true;
   }
 
   //      Init the WayPoint Manager
@@ -3061,7 +3054,7 @@ void MyFrame::OnBellsFinished(wxCommandEvent &event) {
 
   OcpnSound *sound = bells_sound[bells - 1];
   sound->SetFinishedCallback(onBellsFinishedCB, this);
-  auto cmd_sound = dynamic_cast<SystemCmdSound*>(sound);
+  auto cmd_sound = dynamic_cast<SystemCmdSound *>(sound);
   if (cmd_sound) cmd_sound->SetCmd(g_CmdSoundString.mb_str(wxConvUTF8));
   sound->Load(soundfile);
   if (!sound->IsOk()) {
@@ -3111,17 +3104,6 @@ void MyFrame::SetAndApplyColorScheme(ColorScheme cs) {
       break;
   }
 
-#if defined(__WXOSX__) && defined(OCPN_USE_DARKMODE)
-  bool darkMode = (cs == GLOBAL_COLOR_SCHEME_DUSK ||
-                   cs == GLOBAL_COLOR_SCHEME_NIGHT );
-
-  if (wxPlatformInfo::Get().CheckOSVersion(10, 14)) {
-    setAppLevelDarkMode(darkMode);
-  } else if (wxPlatformInfo::Get().CheckOSVersion(10, 12)) {
-    setWindowLevelDarkMode(MacGetTopLevelWindowRef(), darkMode);
-  }
-#endif
-
   g_pauidockart->SetMetric(wxAUI_DOCKART_GRADIENT_TYPE, wxAUI_GRADIENT_NONE);
 
   g_pauidockart->SetColour(wxAUI_DOCKART_BORDER_COLOUR, wxColour(0, 0, 0));
@@ -5924,7 +5906,8 @@ int MyFrame::DoOptionsDialog() {
     pConfig->Read("OptionsSizeX", &sx, -1);
     pConfig->Read("OptionsSizeY", &sy, -1);
 
-    g_options = new options(this, -1, _("Options"), wxPoint(-1, -1), wxSize(sx, sy) );
+    g_options =
+        new options(this, -1, _("Options"), wxPoint(-1, -1), wxSize(sx, sy));
 
     g_Platform->HideBusySpinner();
   }
@@ -6632,10 +6615,10 @@ bool MyFrame::UpdateChartDatabaseInplace(ArrayOfCDI &DirArray, bool b_force,
   ChartData->SaveBinary(ChartListFileName);
   wxLogMessage(_T("Finished chart database Update"));
   wxLogMessage(_T("   "));
-  if (gWorldMapLocation
-          .empty()) {  // Last resort. User might have deleted all GSHHG data,
-                       // but we still might have the default dataset distributed
-                       // with OpenCPN or from the package repository...
+  if (gWorldMapLocation.empty()) {  // Last resort. User might have deleted all
+                                    // GSHHG data, but we still might have the
+                                    // default dataset distributed with OpenCPN
+                                    // or from the package repository...
     gWorldMapLocation = gDefaultWorldMapLocation;
     gshhg_chart_loc = wxEmptyString;
   }
@@ -6969,7 +6952,8 @@ void MyFrame::OnInitTimer(wxTimerEvent &event) {
       pConfig->Read("OptionsSizeX", &sx, -1);
       pConfig->Read("OptionsSizeY", &sy, -1);
 
-      g_options = new options(this, -1, _("Options"), wxPoint(-1, -1), wxSize(sx, sy));
+      g_options =
+          new options(this, -1, _("Options"), wxPoint(-1, -1), wxSize(sx, sy));
 
       // needed to ensure that the chart window starts with keyboard focus
       SurfaceAllCanvasToolbars();
@@ -10579,24 +10563,25 @@ double AnchorDistFix(double const d, double const AnchorPointMinDist,
       return d;
 
   else
-      // if ( d < 0.0 )
-      if (d > -AnchorPointMinDist)
-    return -AnchorPointMinDist;
-  else if (d < -AnchorPointMaxDist)
-    return -AnchorPointMaxDist;
-  else
-    return d;
+    // if ( d < 0.0 )
+    if (d > -AnchorPointMinDist)
+      return -AnchorPointMinDist;
+    else if (d < -AnchorPointMaxDist)
+      return -AnchorPointMaxDist;
+    else
+      return d;
 }
 
 //      Auto timed popup Window implementation
 
 BEGIN_EVENT_TABLE(TimedPopupWin, wxWindow)
-EVT_PAINT(TimedPopupWin::OnPaint) EVT_TIMER(POPUP_TIMER, TimedPopupWin::OnTimer)
+EVT_PAINT(TimedPopupWin::OnPaint)
+EVT_TIMER(POPUP_TIMER, TimedPopupWin::OnTimer)
 
-    END_EVENT_TABLE()
+END_EVENT_TABLE()
 
-    // Define a constructor
-    TimedPopupWin::TimedPopupWin(wxWindow *parent, int timeout)
+// Define a constructor
+TimedPopupWin::TimedPopupWin(wxWindow *parent, int timeout)
     : wxWindow(parent, wxID_ANY, wxPoint(0, 0), wxSize(1, 1), wxNO_BORDER) {
   m_pbm = NULL;
 
diff --git a/src/navutil.cpp b/src/navutil.cpp
index 76ab43d3..e3f9f6e4 100644
--- a/src/navutil.cpp
+++ b/src/navutil.cpp
@@ -93,10 +93,6 @@
 #include "androidUTIL.h"
 #endif
 
-#ifdef __WXOSX__
-#include "DarkMode.h"
-#endif
-
 //    Statics
 
 extern OCPNPlatform *g_Platform;
@@ -857,7 +853,7 @@ int MyConfig::LoadMyConfigRaw(bool bAsTemplate) {
   Read(_T ( "ChartObjectScaleFactor" ), &g_ChartScaleFactor);
   Read(_T ( "ShipScaleFactor" ), &g_ShipScaleFactor);
   Read(_T ( "ENCSoundingScaleFactor" ), &g_ENCSoundingScaleFactor);
-  Read( _T ( "ObjQueryAppendFilesExt" ),  &g_ObjQFileExt);
+  Read(_T ( "ObjQueryAppendFilesExt" ), &g_ObjQFileExt);
 
   // Plugin catalog handler persistent variables.
   Read("CatalogCustomURL", &g_catalog_custom_url);
@@ -873,7 +869,6 @@ int MyConfig::LoadMyConfigRaw(bool bAsTemplate) {
     Read(_T ( "UseMagAPB" ), &g_bMagneticAPB);
     Read(_T ( "TrackContinuous" ), &g_btrackContinuous, false);
     Read(_T ( "FilterTrackDropLargeJump" ), &g_trackFilterMax, 0);
-
   }
 
   Read(_T ( "ShowTrue" ), &g_bShowTrue);
@@ -3179,7 +3174,7 @@ void SwitchInlandEcdisMode(bool Switch) {
     // g_toolbarConfig = _T ( ".....XXXX.X...XX.XXXXXXXXXXXX" );
     g_iDistanceFormat = 2;  // 0 = "Nautical miles"), 1 = "Statute miles", 2 =
                             // "Kilometers", 3 = "Meters"
-    g_iSpeedFormat = 2;  // 0 = "kts"), 1 = "mph", 2 = "km/h", 3 = "m/s"
+    g_iSpeedFormat = 2;     // 0 = "kts"), 1 = "mph", 2 = "km/h", 3 = "m/s"
     if (ps52plib) ps52plib->SetDisplayCategory(STANDARD);
     g_bDrawAISSize = false;
     if (gFrame) gFrame->RequestNewToolbars(true);
@@ -4871,18 +4866,6 @@ void DimeControl(wxWindow *ctrl, wxColour col, wxColour window_back_color,
 
     ctrl->SetBackgroundColour(window_back_color);
     if (darkMode) ctrl->SetForegroundColour(text_color);
-
-#if defined(__WXOSX__) && defined(OCPN_USE_DARKMODE)
-    // On macOS 10.12, enable dark mode at the window level if appropriate.
-    // This will enable dark window decorations but will not darken the rest of
-    // the UI.
-    if (wxPlatformInfo::Get().CheckOSVersion(10, 12)) {
-      setWindowLevelDarkMode(ctrl->MacGetTopLevelWindowRef(), darkMode);
-    }
-    // Force consistent coloured UI text; dark in light mode and light in dark
-    // mode.
-    uitext = darkMode ? wxColor(228, 228, 228) : wxColor(0, 0, 0);
-#endif
   }
 
   wxWindowList kids = ctrl->GetChildren();
diff --git a/src/pluginmanager.cpp b/src/pluginmanager.cpp
index e6c19119..3c750aba 100644
--- a/src/pluginmanager.cpp
+++ b/src/pluginmanager.cpp
@@ -169,7 +169,6 @@ void catch_signals_PIM(int signo) {
 
 #endif
 
-
 extern wxImage LoadSVGIcon(wxString filename, int width, int height);
 
 extern MyConfig *pConfig;
@@ -277,26 +276,35 @@ struct EnumClassHash {
   }
 };
 
-
-wxString message_by_status( PluginStatus stat ){
-  switch (stat){
-    case     PluginStatus::System: return _("Plugin is a standard system plugin");
-    case     PluginStatus::Managed: return  _("Plugin is managed by OpenCPN");
-    case     PluginStatus::Unmanaged: return  _("Plugin is not managed by OpenCPN");
-    case     PluginStatus::Ghost: return  ("");
-    case     PluginStatus::Unknown: return  _("Plugin status unknown");
-    case     PluginStatus::LegacyUpdateAvailable: return _("Update to managed Plugin is available");
-    case     PluginStatus::ManagedInstallAvailable: return _("New managed Plugin installation available");
-    case     PluginStatus::ManagedInstalledUpdateAvailable: return _("Update to installed Plugin is available");
-    case     PluginStatus::ManagedInstalledCurrentVersion: return  _("Plugin is latest available");
-    case     PluginStatus::ManagedInstalledDowngradeAvailable: return  ("");
-    case     PluginStatus::PendingListRemoval: return  ("");
-    default:  return  ("");
-    }
+wxString message_by_status(PluginStatus stat) {
+  switch (stat) {
+    case PluginStatus::System:
+      return _("Plugin is a standard system plugin");
+    case PluginStatus::Managed:
+      return _("Plugin is managed by OpenCPN");
+    case PluginStatus::Unmanaged:
+      return _("Plugin is not managed by OpenCPN");
+    case PluginStatus::Ghost:
+      return ("");
+    case PluginStatus::Unknown:
+      return _("Plugin status unknown");
+    case PluginStatus::LegacyUpdateAvailable:
+      return _("Update to managed Plugin is available");
+    case PluginStatus::ManagedInstallAvailable:
+      return _("New managed Plugin installation available");
+    case PluginStatus::ManagedInstalledUpdateAvailable:
+      return _("Update to installed Plugin is available");
+    case PluginStatus::ManagedInstalledCurrentVersion:
+      return _("Plugin is latest available");
+    case PluginStatus::ManagedInstalledDowngradeAvailable:
+      return ("");
+    case PluginStatus::PendingListRemoval:
+      return ("");
+    default:
+      return ("");
+  }
 }
 
-
-
 static std::unordered_map<PluginStatus, const char *, EnumClassHash>
     icon_by_status(
         {{PluginStatus::System, "emblem-system.svg"},
@@ -452,7 +460,8 @@ static void gui_uninstall(PlugInContainer *pic, const char *plugin) {
 }
 
 static void run_update_dialog(PluginListPanel *parent, PlugInContainer *pic,
-                              bool uninstall, const char *name = 0, bool b_forceEnable = false) {
+                              bool uninstall, const char *name = 0,
+                              bool b_forceEnable = false) {
   wxString pluginName = pic->m_common_name;
   const char *plugin = name == 0 ? pic->m_common_name.mb_str().data() : name;
   auto updates = getUpdates(plugin);
@@ -540,8 +549,7 @@ static void run_update_dialog(PluginListPanel *parent, PlugInContainer *pic,
                          wxICON_INFORMATION | wxOK, 10);
 
           PluginHandler::cleanupFiles(manifestPath, update.name);
-        }
-        else {
+        } else {
           pluginFile = str;
         }
         break;
@@ -549,7 +557,7 @@ static void run_update_dialog(PluginListPanel *parent, PlugInContainer *pic,
     }
   }
 
-  if (b_forceEnable && pluginFile.Length()){
+  if (b_forceEnable && pluginFile.Length()) {
     wxString config_section = (_T ( "/PlugIns/" ));
     wxFileName fn(pluginFile);
     config_section += fn.GetFullName();
@@ -1161,8 +1169,8 @@ bool PlugInManager::LoadPlugInDirectory(const wxString &plugin_dir,
     wxLog::FlushActive();
 
     wxString file_name = file_list[i];
-//     if (file_name.Contains("aisradar"))
-//       int yyp = 3;
+    //     if (file_name.Contains("aisradar"))
+    //       int yyp = 3;
 
     wxString plugin_file = wxFileName(file_name).GetFullName();
     wxLogMessage("Checking plugin candidate: %s", file_name.mb_str().data());
@@ -1194,12 +1202,12 @@ bool PlugInManager::LoadPlugInDirectory(const wxString &plugin_dir,
             delete pic_test;
           } else {
             loaded = true;
-            loaded_pic= pic_test;
+            loaded_pic = pic_test;
             break;
           }
         } else {
           loaded = true;
-          loaded_pic= pic_test;
+          loaded_pic = pic_test;
           break;
         }
       }
@@ -1235,15 +1243,14 @@ bool PlugInManager::LoadPlugInDirectory(const wxString &plugin_dir,
                      10);
     }
 
-    if (!b_compat){
+    if (!b_compat) {
       wxString dmsg(wxString::Format(_T("%s: %s"), _T("Jailing"), plugin_file));
       wxRenameFile(plugin_file, plugin_file + _T(".jail"));
       wxLogMessage(dmsg);
     }
 
     PlugInContainer *pic = NULL;
-    if (b_compat)
-        pic = LoadPlugIn(file_name);
+    if (b_compat) pic = LoadPlugIn(file_name);
 
     wxLog::FlushActive();
 
@@ -1275,11 +1282,10 @@ bool PlugInManager::LoadPlugInDirectory(const wxString &plugin_dir,
             }
           }
 
-          if (g_options && g_boptionsactive){
+          if (g_options && g_boptionsactive) {
             if (pic->m_cap_flag & INSTALLS_TOOLBAR_TOOL)
-              g_options->SetForceNewToolbarOnCancel( true );
+              g_options->SetForceNewToolbarOnCancel(true);
           }
-
         }
         wxLog::FlushActive();
 
@@ -1296,7 +1302,6 @@ bool PlugInManager::LoadPlugInDirectory(const wxString &plugin_dir,
         pic->m_version_major = pic->m_pplugin->GetPlugInVersionMajor();
         pic->m_version_minor = pic->m_pplugin->GetPlugInVersionMinor();
         pic->m_bitmap = pic->m_pplugin->GetPlugInBitmap();
-
         if (pic->m_bitmap && pic->m_bitmap->IsOk()) {
           wxBitmap *pbm = new wxBitmap(pic->m_bitmap->GetSubBitmap(wxRect(
               0, 0, pic->m_bitmap->GetWidth(), pic->m_bitmap->GetHeight())));
@@ -1307,6 +1312,7 @@ bool PlugInManager::LoadPlugInDirectory(const wxString &plugin_dir,
           pic->m_bitmap = new wxBitmap(style->GetIcon(_T("default_pi")));
         }
 
+
         ret = true;
 
         if (!pic->m_bEnabled && pic->m_destroy_fn) {
@@ -1560,12 +1566,11 @@ bool PlugInManager::UpdatePlugIns() {
 
       if (g_options && g_boptionsactive) {
         if (pic->m_cap_flag & INSTALLS_TOOLBAR_TOOL)
-          g_options->SetForceNewToolbarOnCancel( true );
+          g_options->SetForceNewToolbarOnCancel(true);
       }
 
       bret = true;
     } else if (!pic->m_bEnabled && pic->m_bInitState) {
-
       // Save a local copy of the plugin icon before unloading
       if (pic->m_bitmap && pic->m_bitmap->IsOk()) {
         wxBitmap *pbm = new wxBitmap(pic->m_bitmap->GetSubBitmap(wxRect(
@@ -1577,6 +1582,7 @@ bool PlugInManager::UpdatePlugIns() {
         pic->m_bitmap = new wxBitmap(style->GetIcon(_T("default_pi")));
       }
 
+
       bret = DeactivatePlugIn(pic);
       if (pic->m_pplugin) pic->m_destroy_fn(pic->m_pplugin);
       if (pic->m_library.IsLoaded()) pic->m_library.Unload();
@@ -1587,7 +1593,7 @@ bool PlugInManager::UpdatePlugIns() {
 
   UpDateChartDataTypes();
 
-    // Tell all the PlugIns about the current OCPN configuration
+  // Tell all the PlugIns about the current OCPN configuration
   SendBaseConfigToAllPlugIns();
   SendS52ConfigToAllPlugIns(true);
   SendSKConfigToAllPlugIns();
@@ -1816,9 +1822,9 @@ bool PlugInManager::DeactivatePlugIn(PlugInContainer *pic) {
         ChartData->PurgeCachePlugins();
         gFrame->InvalidateAllQuilts();
       }
-      if(g_pOptions && g_boptionsactive){
+      if (g_pOptions && g_boptionsactive) {
         if (pic->m_cap_flag & INSTALLS_TOOLBAR_TOOL)
-          g_pOptions->SetForceNewToolbarOnCancel( true );
+          g_pOptions->SetForceNewToolbarOnCancel(true);
       }
 
       pic->m_bInitState = false;
@@ -2336,7 +2342,7 @@ bool PlugInManager::CheckBlacklistedPlugin(opencpn_plugin *plugin) {
       if (!PluginBlacklist[i].mute_dialog) {
         if (m_benable_blackdialog)
           OCPNMessageBox(NULL, msg, wxString(_("OpenCPN Info")),
-                       wxICON_INFORMATION | wxOK, 10);  // 10 second timeout
+                         wxICON_INFORMATION | wxOK, 10);  // 10 second timeout
         else
           m_deferred_blacklist_messages.Add(msg);
       }
@@ -2467,7 +2473,8 @@ PlugInContainer *PlugInManager::LoadPlugIn(wxString plugin_file,
   SemanticVersion pi_ver(pi_major, pi_minor, -1);
 
   if (CheckBlacklistedPlugin(plug_in)) {
-    wxString dmsg(wxString::Format(_T("%s: %s"), _T("Jailing due to Blacklist"), plugin_file));
+    wxString dmsg(wxString::Format(_T("%s: %s"), _T("Jailing due to Blacklist"),
+                                   plugin_file));
     wxRenameFile(plugin_file, plugin_file + _T(".jail.blacklist"));
     wxLogMessage(dmsg);
     return NULL;
@@ -2805,8 +2812,7 @@ void PlugInManager::SendViewPortToRequestingPlugIns(ViewPort &vp) {
     if (pic->m_bEnabled && pic->m_bInitState) {
       if (pic->m_cap_flag & WANTS_ONPAINT_VIEWPORT) {
         PlugIn_ViewPort pivp = CreatePlugInViewport(vp);
-        if (pic->m_pplugin)
-          pic->m_pplugin->SetCurrentViewPort(pivp);
+        if (pic->m_pplugin) pic->m_pplugin->SetCurrentViewPort(pivp);
       }
     }
   }
@@ -2817,8 +2823,7 @@ void PlugInManager::SendCursorLatLonToAllPlugIns(double lat, double lon) {
     PlugInContainer *pic = plugin_array[i];
     if (pic->m_bEnabled && pic->m_bInitState) {
       if (pic->m_cap_flag & WANTS_CURSOR_LATLON)
-        if (pic->m_pplugin)
-          pic->m_pplugin->SetCursorLatLon(lat, lon);
+        if (pic->m_pplugin) pic->m_pplugin->SetCursorLatLon(lat, lon);
     }
   }
 }
@@ -2947,10 +2952,10 @@ void PlugInManager::SendNMEASentenceToAllPlugIns(const wxString &sentence) {
   sigaction(SIGSEGV, NULL, &temp);  // inspect existing action for this signal
 
   temp.sa_handler = catch_signals_PIM;  // point to my handler
-  sigemptyset(&temp.sa_mask);             // make the blocking set
-                                            // empty, so that all
-                                            // other signals will be
-                                            // unblocked during my handler
+  sigemptyset(&temp.sa_mask);           // make the blocking set
+                                        // empty, so that all
+                                        // other signals will be
+                                        // unblocked during my handler
   temp.sa_flags = 0;
   sigaction(SIGSEGV, &temp, NULL);
 #endif
@@ -2958,21 +2963,20 @@ void PlugInManager::SendNMEASentenceToAllPlugIns(const wxString &sentence) {
   for (unsigned int i = 0; i < plugin_array.GetCount(); i++) {
     PlugInContainer *pic = plugin_array[i];
     if (pic->m_bEnabled && pic->m_bInitState) {
-      if (pic->m_cap_flag & WANTS_NMEA_SENTENCES){
-
-
+      if (pic->m_cap_flag & WANTS_NMEA_SENTENCES) {
 #ifndef __WXMSW__
-        if (sigsetjmp(env_PIM, 1)){ //  Something in the "else" code block faulted.
+        if (sigsetjmp(env_PIM,
+                      1)) {  //  Something in the "else" code block faulted.
 
-          // Probably safest to assume that all variables in this method are trash..
-          // So, simply clean up and return.
-          sigaction(SIGSEGV, &sa_all_PIM_previous, NULL);  // reset signal handler
+          // Probably safest to assume that all variables in this method are
+          // trash.. So, simply clean up and return.
+          sigaction(SIGSEGV, &sa_all_PIM_previous,
+                    NULL);  // reset signal handler
           return;
-        }
-        else
+        } else
 #endif
         {
-          //volatile int *x = 0;
+          // volatile int *x = 0;
           //*x = 0;
           if (pic->m_pplugin)
             pic->m_pplugin->SetNMEASentence(decouple_sentence);
@@ -2982,9 +2986,8 @@ void PlugInManager::SendNMEASentenceToAllPlugIns(const wxString &sentence) {
   }
 
 #ifndef __WXMSW__
-    sigaction(SIGSEGV, &sa_all_PIM_previous, NULL);  // reset signal handler
+  sigaction(SIGSEGV, &sa_all_PIM_previous, NULL);  // reset signal handler
 #endif
-
 }
 
 int PlugInManager::GetJSONMessageTargetCount() {
@@ -3089,8 +3092,7 @@ void PlugInManager::SendPositionFixToAllPlugIns(GenericPosDatEx *ppos) {
     PlugInContainer *pic = plugin_array[i];
     if (pic->m_bEnabled && pic->m_bInitState) {
       if (pic->m_cap_flag & WANTS_NMEA_EVENTS)
-        if (pic->m_pplugin)
-          pic->m_pplugin->SetPositionFix(pfix);
+        if (pic->m_pplugin) pic->m_pplugin->SetPositionFix(pfix);
     }
   }
 
@@ -5047,8 +5049,9 @@ CatalogMgrPanel::CatalogMgrPanel(wxWindow *parent)
   SetBackgroundColour(wxColour(0x7c, 0xb0, 0xe9));  // light blue
   ocpn::ConfigVar<bool> expert("/PlugIns", "CatalogExpert", pConfig);
   if (!expert.get(false)) {
-    m_updateButton = new wxButton(this, wxID_ANY, _("Update Plugin Catalog: master"),
-                                  wxDefaultPosition, wxDefaultSize, 0);
+    m_updateButton =
+        new wxButton(this, wxID_ANY, _("Update Plugin Catalog: master"),
+                     wxDefaultPosition, wxDefaultSize, 0);
     itemStaticBoxSizer4->Add(m_updateButton, 0, wxALIGN_LEFT);
     m_updateButton->Bind(wxEVT_COMMAND_BUTTON_CLICKED,
                          &CatalogMgrPanel::OnUpdateButton, this);
@@ -5062,8 +5065,9 @@ CatalogMgrPanel::CatalogMgrPanel(wxWindow *parent)
                              wxSizerFlags().Border().Proportion(1));
     m_catalogText->SetLabel(GetCatalogText(false));
 
-    m_updateButton = new wxButton(this, wxID_ANY, _("Update Plugin Catalog:master"),
-                                  wxDefaultPosition, wxDefaultSize, 0);
+    m_updateButton =
+        new wxButton(this, wxID_ANY, _("Update Plugin Catalog:master"),
+                     wxDefaultPosition, wxDefaultSize, 0);
     itemStaticBoxSizer4->Add(m_updateButton, 0, wxALIGN_LEFT);
     m_updateButton->Bind(wxEVT_COMMAND_BUTTON_CLICKED,
                          &CatalogMgrPanel::OnUpdateButton, this);
@@ -5088,7 +5092,6 @@ CatalogMgrPanel::CatalogMgrPanel(wxWindow *parent)
     wxDEFINE_EVENT(EVT_CATALOG_CHANGE, wxCommandEvent);
     catalog.listen(this, EVT_CATALOG_CHANGE);
     Bind(EVT_CATALOG_CHANGE, [&](wxCommandEvent &) { SetUpdateButtonLabel(); });
-
   }
 
 #endif
@@ -5101,7 +5104,7 @@ CatalogMgrPanel::~CatalogMgrPanel() {
                          &CatalogMgrPanel::OnUpdateButton, this);
   if (m_tarballButton)
     m_tarballButton->Unbind(wxEVT_COMMAND_BUTTON_CLICKED,
-                          &CatalogMgrPanel::OnTarballButton, this);
+                            &CatalogMgrPanel::OnTarballButton, this);
 }
 
 static const char *const DOWNLOAD_REPO_PROTO =
@@ -5303,7 +5306,6 @@ void CatalogMgrPanel::OnPluginSettingsButton(wxCommandEvent &event) {
 #ifdef __OCPN__ANDROID__
   androidEnableRotation();
 #endif
-
 }
 
 void CatalogMgrPanel::OnTarballButton(wxCommandEvent &event) {
@@ -5857,7 +5859,7 @@ PluginPanel::PluginPanel(wxPanel *parent, wxWindowID id, const wxPoint &pos,
   double iconSize = GetCharWidth() * 4;
   wxImage plugin_icon;
   ocpnStyle::Style *style = g_StyleManager->GetCurrentStyle();
-  if (m_pPlugin->m_bitmap) {
+  if (m_pPlugin->m_bitmap && m_pPlugin->m_bitmap->IsOk()) {
     plugin_icon = m_pPlugin->m_bitmap->ConvertToImage();
   }
   wxBitmap bitmap;
@@ -6054,7 +6056,7 @@ PluginPanel::PluginPanel(wxPanel *parent, wxWindowID id, const wxPoint &pos,
   }
 
   m_itemStatusIconBitmap = new wxStaticBitmap(this, wxID_ANY, statusBitmap);
-  m_itemStatusIconBitmap->SetToolTip( message_by_status(stat) );
+  m_itemStatusIconBitmap->SetToolTip(message_by_status(stat));
 
   itemBoxSizer01->Add(m_itemStatusIconBitmap, 0, wxEXPAND | wxALL, 20);
 
@@ -6280,7 +6282,7 @@ void PluginPanel::SetSelected(bool selected) {
   // m_pButtonUninstall->Hide();
 
   Fit();
-  //m_PluginListPanel->m_pitemBoxSizer01->Layout();
+  // m_PluginListPanel->m_pitemBoxSizer01->Layout();
 #endif
 }
 
@@ -6323,7 +6325,6 @@ void PluginPanel::OnPluginEnableToggle(wxCommandEvent &event) {
   SetEnabled(!m_pPlugin->m_bEnabled);
   if (m_pVersion->GetLabel().IsEmpty())
     m_pVersion->SetLabel(m_pPlugin->GetVersion().to_string());
-
 }
 
 void PluginPanel::OnPluginUninstall(wxCommandEvent &event) {
@@ -6695,8 +6696,7 @@ InitReturn ChartPlugInWrapper::Init(const wxString &name,
       }
 
       bReadyToRender = m_ppicb->IsReadyToRender();
-    }
-    else{
+    } else {
       //  Mark the chart as unable to render
       m_ChartType = CHART_TYPE_UNKNOWN;
       m_ChartFamily = CHART_FAMILY_UNKNOWN;
@@ -7802,7 +7802,8 @@ int PI_PLIBRenderAreaToDC(wxDC *pdc, PI_S57Obj *pObj, PlugIn_ViewPort *vp,
       if (!tess) return 1;  // bail on empty data
 
       PolyTriGroup *ptg = new PolyTriGroup;
-      ptg->tri_prim_head = tess->Get_PolyTriGroup_head()->tri_prim_head;  // tph;
+      ptg->tri_prim_head =
+          tess->Get_PolyTriGroup_head()->tri_prim_head;  // tph;
       ptg->bsingle_alloc = false;
       ptg->data_type = DATA_TYPE_DOUBLE;
       tess->Set_PolyTriGroup_head(ptg);
@@ -7960,7 +7961,7 @@ bool PlugInPlaySoundEx(wxString &sound_file, int deviceIndex) {
     wxLogWarning("Cannot load sound file: %s", sound_file);
     return false;
   }
-  auto cmd_sound = dynamic_cast<SystemCmdSound*>(g_PluginSound);
+  auto cmd_sound = dynamic_cast<SystemCmdSound *>(g_PluginSound);
   if (cmd_sound) cmd_sound->SetCmd(g_CmdSoundString.mb_str(wxConvUTF8));
 
   g_PluginSound->SetFinishedCallback(onPlugInPlaySoundExFinished, NULL);
@@ -8867,20 +8868,13 @@ ListOfPI_S57Obj *PlugInManager::GetLightsObjRuleListVisibleAtLatLon(
 WX_DEFINE_LIST(Plugin_WaypointExList);
 
 //  The class implementations
-PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex()
-{
-  InitDefaults();
-}
+PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex() { InitDefaults(); }
 
-PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex(double lat, double lon,
-                                 const wxString &icon_ident,
-                                 const wxString &wp_name,
-                                 const wxString &GUID,
-                                 const double ScaMin,
-                                 const bool bNameVisible,
-                                 const int nRangeRings,
-                                 const double RangeDistance,
-                                 const wxColor RangeColor ) {
+PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex(
+    double lat, double lon, const wxString &icon_ident, const wxString &wp_name,
+    const wxString &GUID, const double ScaMin, const bool bNameVisible,
+    const int nRangeRings, const double RangeDistance,
+    const wxColor RangeColor) {
   InitDefaults();
 
   wxDateTime now = wxDateTime::Now();
@@ -8897,11 +8891,9 @@ PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex(double lat, double lon,
   nrange_rings = nRangeRings;
   RangeRingSpace = RangeDistance;
   RangeRingColor = RangeColor;
-
 }
 
-void PlugIn_Waypoint_Ex::InitDefaults()
-{
+void PlugIn_Waypoint_Ex::InitDefaults() {
   m_HyperlinkList = NULL;
   scamin = 1e9;
   b_useScamin = false;
@@ -8914,26 +8906,21 @@ void PlugIn_Waypoint_Ex::InitDefaults()
   IsActive = false;
   m_lat = 0;
   m_lon = 0;
-
 }
 
-bool PlugIn_Waypoint_Ex::GetFSStatus()
-{
+bool PlugIn_Waypoint_Ex::GetFSStatus() {
   RoutePoint *prp = pWayPointMan->FindRoutePointByGUID(m_GUID);
   if (!prp) return false;
 
-  if (prp->m_bIsInRoute && !prp->IsShared())
-    return false;
+  if (prp->m_bIsInRoute && !prp->IsShared()) return false;
 
   return true;
 }
 
-int PlugIn_Waypoint_Ex::GetRouteMembershipCount()
-{
+int PlugIn_Waypoint_Ex::GetRouteMembershipCount() {
   // Search all routes to count the membership of this point
   RoutePoint *pWP = pWayPointMan->FindRoutePointByGUID(m_GUID);
-  if (!pWP)
-    return 0;
+  if (!pWP) return 0;
 
   int nCount = 0;
   wxRouteListNode *node = pRouteList->GetFirst();
@@ -8942,8 +8929,7 @@ int PlugIn_Waypoint_Ex::GetRouteMembershipCount()
     wxRoutePointListNode *pnode = (proute->pRoutePointList)->GetFirst();
     while (pnode) {
       RoutePoint *prp = pnode->GetData();
-      if (prp == pWP)
-        nCount++;
+      if (prp == pWP) nCount++;
       pnode = pnode->GetNext();
     }
 
@@ -8951,15 +8937,14 @@ int PlugIn_Waypoint_Ex::GetRouteMembershipCount()
   }
 
   return nCount;
-
 }
 
-
-
 PlugIn_Waypoint_Ex::~PlugIn_Waypoint_Ex() {}
 
 //      PlugInRouteExtended implementation
-PlugIn_Route_Ex::PlugIn_Route_Ex(void) { pWaypointList = new Plugin_WaypointExList; }
+PlugIn_Route_Ex::PlugIn_Route_Ex(void) {
+  pWaypointList = new Plugin_WaypointExList;
+}
 
 PlugIn_Route_Ex::~PlugIn_Route_Ex(void) {
   pWaypointList->DeleteContents(false);  // do not delete Waypoints
@@ -8968,12 +8953,11 @@ PlugIn_Route_Ex::~PlugIn_Route_Ex(void) {
   delete pWaypointList;
 }
 
-
 //  The utility methods implementations
 
 // translate O route class to PlugIn_Waypoint_Ex
 static void PlugInExFromRoutePoint(PlugIn_Waypoint_Ex *dst,
-                                 /* const*/ RoutePoint *src) {
+                                   /* const*/ RoutePoint *src) {
   dst->m_lat = src->m_lat;
   dst->m_lon = src->m_lon;
   dst->IconName = src->GetIconName();
@@ -9020,7 +9004,8 @@ static void PlugInExFromRoutePoint(PlugIn_Waypoint_Ex *dst,
   dst->IsActive = src->m_bIsActive;
 }
 
-static void cloneHyperlinkListEx(RoutePoint *dst, const PlugIn_Waypoint_Ex *src) {
+static void cloneHyperlinkListEx(RoutePoint *dst,
+                                 const PlugIn_Waypoint_Ex *src) {
   //  Transcribe (clone) the html HyperLink List, if present
   if (src->m_HyperlinkList == nullptr) return;
 
@@ -9041,10 +9026,9 @@ static void cloneHyperlinkListEx(RoutePoint *dst, const PlugIn_Waypoint_Ex *src)
   }
 }
 
-RoutePoint *CreateNewPoint( const PlugIn_Waypoint_Ex *src, bool b_permanent ) {
-  RoutePoint *pWP =
-      new RoutePoint(src->m_lat, src->m_lon, src->IconName,
-                     src->m_MarkName, src->m_GUID);
+RoutePoint *CreateNewPoint(const PlugIn_Waypoint_Ex *src, bool b_permanent) {
+  RoutePoint *pWP = new RoutePoint(src->m_lat, src->m_lon, src->IconName,
+                                   src->m_MarkName, src->m_GUID);
 
   pWP->m_bIsolatedMark = true;  // This is an isolated mark
 
@@ -9052,7 +9036,7 @@ RoutePoint *CreateNewPoint( const PlugIn_Waypoint_Ex *src, bool b_permanent ) {
 
   pWP->m_MarkDescription = src->m_MarkDescription;
 
-  if ( src->m_CreateTime.IsValid() )
+  if (src->m_CreateTime.IsValid())
     pWP->SetCreateTime(src->m_CreateTime);
   else {
     wxDateTime dtnow(wxDateTime::Now());
@@ -9062,27 +9046,25 @@ RoutePoint *CreateNewPoint( const PlugIn_Waypoint_Ex *src, bool b_permanent ) {
   pWP->m_btemp = (b_permanent == false);
 
   // Extended fields
-  pWP->SetIconName( src->IconName );
-  pWP->SetWaypointRangeRingsNumber( src->nrange_rings );
-  pWP->SetWaypointRangeRingsStep( src->RangeRingSpace );
-  pWP->SetWaypointRangeRingsColour( src->RangeRingColor );
-  pWP->SetScaMin( src->scamin);
-  pWP->SetUseSca( src->b_useScamin );
-  pWP->SetNameShown( src->IsNameVisible );
-  pWP->SetVisible( src->IsVisible );
+  pWP->SetIconName(src->IconName);
+  pWP->SetWaypointRangeRingsNumber(src->nrange_rings);
+  pWP->SetWaypointRangeRingsStep(src->RangeRingSpace);
+  pWP->SetWaypointRangeRingsColour(src->RangeRingColor);
+  pWP->SetScaMin(src->scamin);
+  pWP->SetUseSca(src->b_useScamin);
+  pWP->SetNameShown(src->IsNameVisible);
+  pWP->SetVisible(src->IsVisible);
 
   return pWP;
 }
-bool GetSingleWaypointEx(wxString GUID, PlugIn_Waypoint_Ex *pwaypoint)
-{
-    //  Find the RoutePoint
+bool GetSingleWaypointEx(wxString GUID, PlugIn_Waypoint_Ex *pwaypoint) {
+  //  Find the RoutePoint
   RoutePoint *prp = pWayPointMan->FindRoutePointByGUID(GUID);
 
   if (!prp) return false;
 
   PlugInExFromRoutePoint(pwaypoint, prp);
 
-
   return true;
 }
 
@@ -9105,7 +9087,7 @@ bool AddSingleWaypointEx(PlugIn_Waypoint_Ex *pwaypointex, bool b_permanent) {
 
   if (!b_unique) return false;
 
-  RoutePoint *pWP = CreateNewPoint( pwaypointex, b_permanent );
+  RoutePoint *pWP = CreateNewPoint(pwaypointex, b_permanent);
 
   pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
   if (b_permanent) pConfig->AddNewWayPoint(pWP, -1);
@@ -9157,14 +9139,13 @@ bool UpdateSingleWaypointEx(PlugIn_Waypoint_Ex *pwaypoint) {
         }
       }
 
-        // Extended fields
-      prp->SetWaypointRangeRingsNumber( pwaypoint->nrange_rings );
-      prp->SetWaypointRangeRingsStep( pwaypoint->RangeRingSpace );
-      prp->SetWaypointRangeRingsColour( pwaypoint->RangeRingColor );
-      prp->SetScaMin( pwaypoint->scamin);
-      prp->SetUseSca( pwaypoint->b_useScamin );
-      prp->SetNameShown( pwaypoint->IsNameVisible );
-
+      // Extended fields
+      prp->SetWaypointRangeRingsNumber(pwaypoint->nrange_rings);
+      prp->SetWaypointRangeRingsStep(pwaypoint->RangeRingSpace);
+      prp->SetWaypointRangeRingsColour(pwaypoint->RangeRingColor);
+      prp->SetScaMin(pwaypoint->scamin);
+      prp->SetUseSca(pwaypoint->b_useScamin);
+      prp->SetNameShown(pwaypoint->IsNameVisible);
     }
 
     if (prp) prp->ReLoadIcon();
@@ -9198,8 +9179,8 @@ bool AddPlugInRouteEx(PlugIn_Route_Ex *proute, bool b_permanent) {
     pwaypointex = pwpnode->GetData();
 
     pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->m_GUID);
-    if (!pWP){
-      pWP = CreateNewPoint( pwaypointex, b_permanent );
+    if (!pWP) {
+      pWP = CreateNewPoint(pwaypointex, b_permanent);
       pWP->m_bIsolatedMark = false;
     }
 
@@ -9212,7 +9193,6 @@ bool AddPlugInRouteEx(PlugIn_Route_Ex *proute, bool b_permanent) {
                                          pWP->m_lat, pWP->m_lon, pWP_src, pWP,
                                          route);
 
-
     plannedDeparture = pwaypointex->m_CreateTime;
     ip++;
     pWP_src = pWP;
@@ -9302,7 +9282,8 @@ std::unique_ptr<PlugIn_Route_Ex> GetRouteEx_Plugin(const wxString &GUID) {
   return r;
 }
 
-wxString GetActiveWaypointGUID(void) {	// if no active waypoint, returns wxEmptyString
+wxString GetActiveWaypointGUID(
+    void) {  // if no active waypoint, returns wxEmptyString
   RoutePoint *rp = g_pRouteMan->GetpActivePoint();
   if (!rp)
     return wxEmptyString;
@@ -9310,7 +9291,8 @@ wxString GetActiveWaypointGUID(void) {	// if no active waypoint, returns wxEmpty
     return rp->m_GUID;
 }
 
-wxString GetActiveRouteGUID(void) {	// if no active route, returns wxEmptyString
+wxString GetActiveRouteGUID(
+    void) {  // if no active route, returns wxEmptyString
   Route *rt = g_pRouteMan->GetpActiveRoute();
   if (!rt)
     return wxEmptyString;
diff --git a/src/update_mgr.cpp b/src/update_mgr.cpp
index 8826a64c..6dbc3a0e 100644
--- a/src/update_mgr.cpp
+++ b/src/update_mgr.cpp
@@ -280,7 +280,7 @@ public:
     vbox->Add(1, 1, 1, wxEXPAND);  // Expanding, stretchable spacer
     m_info_btn = new UpdateWebsiteButton(this, plugin->info_url.c_str());
     m_info_btn->Hide();
-    vbox->Add(m_info_btn, flags.DoubleBorder().Bottom().Right());
+    vbox->Add(m_info_btn, flags.DoubleBorder().Right());
     SetSizer(vbox);
     Fit();
   }
@@ -408,7 +408,7 @@ public:
     auto butt_box = new wxBoxSizer(wxHORIZONTAL);
     auto cancel_btn = new wxButton(this, wxID_CANCEL, _("Dismiss"));
     butt_box->Add(1, 1, 1, wxEXPAND);  // Expanding, stretchable spacer
-    butt_box->Add(cancel_btn, wxSizerFlags().Right().Border());
+    butt_box->Add(cancel_btn, wxSizerFlags().Border());
     box->Add(butt_box, wxSizerFlags().Proportion(0).Expand());
 
     SetSizer(box);
@@ -431,7 +431,8 @@ public:
     for (auto plugin : m_updates) {
       grid->Add(new PluginIconPanel(this, plugin.name), flags.Expand());
       auto buttons = new CandidateButtonsPanel(this, &plugin);
-      PluginTextPanel* tpanel = new PluginTextPanel(this, &plugin, buttons, m_updates.size() > 1);
+      PluginTextPanel* tpanel =
+          new PluginTextPanel(this, &plugin, buttons, m_updates.size() > 1);
       tpanel->m_isDesc = true;
       grid->Add(tpanel, flags.Proportion(1).Right());
       grid->Add(buttons, flags.DoubleBorder());