diff --git a/CMakeLists.txt b/CMakeLists.txt
index b934c8d..f5f4694 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -51,6 +51,7 @@ set(IMPPG_VERSION_MINOR 1)
 set(IMPPG_VERSION_SUBMINOR 0)
 
 target_compile_definitions(imppg PRIVATE
+    IMPPG_LOCALE_DIR="${CMAKE_INSTALL_FULL_LOCALEDIR}"
     IMPPG_VERSION_MAJOR=${IMPPG_VERSION_MAJOR}
     IMPPG_VERSION_MINOR=${IMPPG_VERSION_MINOR}
     IMPPG_VERSION_SUBMINOR=${IMPPG_VERSION_SUBMINOR}
diff --git a/src/about.cpp b/src/about.cpp
index 14656c8..c48c877 100755
--- a/src/about.cpp
+++ b/src/about.cpp
@@ -38,6 +38,7 @@ File description:
 #include <wx/event.h>
 #include <wx/filename.h>
 #include <wx/gdicmn.h>
+#include <wx/hyperlink.h>
 #include <wx/msgdlg.h>
 #include <wx/panel.h>
 #include <wx/sizer.h>
@@ -279,6 +280,21 @@ c_AboutDialog::c_AboutDialog(wxWindow* parent)
     info->SetForegroundColour(*wxWHITE);
     szContents->Add(info, 0, wxALIGN_LEFT | wxALL, 5);
 
+    // Notice identifying this as a modified build, as required by GPL v3 section 5(a).
+    wxSizer* szBuild = new wxBoxSizer(wxHORIZONTAL);
+    wxStaticText* buildInfo = new wxStaticText(this, wxID_ANY, "Unofficial macOS build by Josef Kreidl —");
+    buildInfo->SetForegroundColour(*wxWHITE);
+    szBuild->Add(buildInfo, 0, wxALIGN_CENTER_VERTICAL, 0);
+
+    wxHyperlinkCtrl* siteLink = new wxHyperlinkCtrl(this, wxID_ANY, "finisky.com", "https://finisky.com");
+    // The dialog paints a dark background, so the default dark-blue link colours would be unreadable.
+    siteLink->SetNormalColour(wxColour(120, 190, 255));
+    siteLink->SetVisitedColour(wxColour(120, 190, 255));
+    siteLink->SetHoverColour(*wxWHITE);
+    szBuild->Add(siteLink, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 4);
+
+    szContents->Add(szBuild, 0, wxALIGN_LEFT | (wxLEFT | wxRIGHT | wxBOTTOM), 5);
+
     wxSizer* szSysInfo = new wxBoxSizer(wxHORIZONTAL);
     wxStaticText* cpuInfo = new wxStaticText(this, wxID_ANY, wxString::Format(_("Using %d logical CPU(s)."), omp_get_num_procs()));
     cpuInfo->SetForegroundColour(*wxWHITE);
diff --git a/src/backend/CMakeLists.txt b/src/backend/CMakeLists.txt
index f0b0aa3..b62a29c 100644
--- a/src/backend/CMakeLists.txt
+++ b/src/backend/CMakeLists.txt
@@ -32,6 +32,8 @@ target_include_directories(backend PRIVATE src ${Boost_INCLUDE_DIRS})
 if(USE_OPENGL_BACKEND)
     if(WIN32)
         target_link_libraries(backend PRIVATE opengl32)
+    elseif(APPLE)
+        target_link_libraries(backend PRIVATE "-framework OpenGL")
     else()
         target_link_libraries(backend PRIVATE GL)
     endif()
diff --git a/src/wxapp.cpp b/src/wxapp.cpp
index 86f9f51..8a8aef8 100755
--- a/src/wxapp.cpp
+++ b/src/wxapp.cpp
@@ -92,6 +92,12 @@ bool c_MyApp::OnInit()
             m_Language = static_cast<wxLanguage>(langInfo->Language);
     }
     wxFileTranslationsLoader::AddCatalogLookupPathPrefix("./lang");
+#ifdef IMPPG_LOCALE_DIR
+    // The relative "./lang" prefix above only works when ImPPG is started from its source/build
+    // directory. When launched from a bundle or an installed location (e.g. via Finder on macOS,
+    // where the working directory is "/"), the catalogs must be looked up at their install path.
+    wxFileTranslationsLoader::AddCatalogLookupPathPrefix(IMPPG_LOCALE_DIR);
+#endif
     m_Locale.Init(m_Language);
     m_Locale.AddCatalog("wxstd3"); ///< The wxWidgets catalog (translated captions of standard menu items like "Open", control buttons like "Browse" etc.)
     m_Locale.AddCatalog("imppg");
