diff --git a/src/common/option.hpp b/src/common/option.hpp
index 1f4a21fd8..89bbf59bc 100644
--- a/src/common/option.hpp
+++ b/src/common/option.hpp
@@ -25,7 +25,7 @@
** various _alternative modes,_ like starting "headless" (without UI), script
** driven or as node in a renderfarm network.
**
- ** [Boost program options library] : http://www.boost.org/doc/libs/1_55_0/doc/html/program_options.html
+ ** [Boost program options library] : https://www.boost.org/doc/libs/1_83_0/doc/html/program_options.html
**
** @see basic-setup.hpp
** @see lumiera::AppState
diff --git a/src/lib/format-obj.cpp b/src/lib/format-obj.cpp
index 3b04b2faf..57dc1191c 100644
--- a/src/lib/format-obj.cpp
+++ b/src/lib/format-obj.cpp
@@ -184,7 +184,7 @@ apologies for that."
* the cache, so it doesn't make much of a difference if we scan
* the same comparatively short string multiple times
*
- * [stdRegEx-threadsafe]: http://stackoverflow.com/questions/15752910/is-stdregex-thread-safe
+ * [stdRegEx-threadsafe]: https://stackoverflow.com/questions/15752910/is-stdregex-thread-safe
*/
string
humanReadableTypeID (Literal rawType)
diff --git a/src/lib/hash-standard.hpp b/src/lib/hash-standard.hpp
index 5afdecdc7..b603c8e6f 100644
--- a/src/lib/hash-standard.hpp
+++ b/src/lib/hash-standard.hpp
@@ -38,7 +38,7 @@
** push it aside and plant our own definition instead.
**
** @note this trick was proposed by user "enobayram" on Stackoverflow at Oct 5, 2012
- ** http://stackoverflow.com/questions/12753997/check-if-type-is-hashable
+ ** https://stackoverflow.com/questions/12753997/check-if-type-is-hashable
**
** @warning this header includes and manipulates the standard header ``.
** Please ensure it is always included _before_ the latter. Failing to do so will result
diff --git a/src/lib/ios-savepoint.hpp b/src/lib/ios-savepoint.hpp
index 3ae0ec796..49bcbc012 100644
--- a/src/lib/ios-savepoint.hpp
+++ b/src/lib/ios-savepoint.hpp
@@ -25,7 +25,7 @@
** @see IosSavepoint_test
**
** [qbert220]: https://stackoverflow.com/users/617617/qbert220
- ** [stackoverflow]: https://stackoverflow.com/a/18822888 "Restore state of `std::cout` after manipulating it"
+ ** [stackoverflow]: https://stackoverflow.com/questions/2273330/restore-the-state-of-stdcout-after-manipulating-it/18822888#18822888 "Restore state of `std::cout` after manipulating it"
**
**
*/
diff --git a/src/lib/meta/function.hpp b/src/lib/meta/function.hpp
index e5ffd4a5a..0717d16e4 100644
--- a/src/lib/meta/function.hpp
+++ b/src/lib/meta/function.hpp
@@ -135,8 +135,8 @@ namespace meta{
* unless you bind it beforehand into a std::function with correct signature.
* @see FunctionSignature_test
*
- * [kennytm]: http://stackoverflow.com/users/224671/kennytm
- * [stackoverflow]: http://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda/7943765#7943765 "figure out parameter and return type of a Lambda"
+ * [kennytm]: https://stackoverflow.com/users/224671/kennytm
+ * [stackoverflow]: https://stackoverflow.com/questions/7943525/is-it-possible-to-figure-out-the-parameter-type-and-return-type-of-a-lambda/7943765#7943765 "figure out parameter and return type of a Lambda"
*/
template
struct _Fun
diff --git a/src/lib/meta/typeseq-util.hpp b/src/lib/meta/typeseq-util.hpp
index 67f6e5909..33756c0ac 100644
--- a/src/lib/meta/typeseq-util.hpp
+++ b/src/lib/meta/typeseq-util.hpp
@@ -48,7 +48,7 @@ namespace meta {
/**
* Find the index of the first incidence of a type in a type-sequence.
* @note static assertion if the type is not in the type sequence
- * @see https://stackoverflow.com/a/60868425/444796
+ * @see https://stackoverflow.com/questions/18063451/get-index-of-a-tuple-elements-type/60868425#60868425
*/
template
constexpr size_t
diff --git a/src/lib/meta/util.hpp b/src/lib/meta/util.hpp
index fce8b979c..12a455e90 100644
--- a/src/lib/meta/util.hpp
+++ b/src/lib/meta/util.hpp
@@ -81,7 +81,7 @@ namespace meta {
* variant here, which is slightly stripped down and a tiny bit
* more concise than the boost variant. This way, we can avoid
* a lot of boost inclusions, which always bear some weight.
- * @see [std::enable_if](http://en.cppreference.com/w/cpp/types/enable_if)
+ * @see [std::enable_if](https://en.cppreference.com/w/cpp/types/enable_if.html)
*/
template
using enable_if = enable_if_c::type;
diff --git a/src/lib/nocopy.hpp b/src/lib/nocopy.hpp
index ca9691efc..0b8332a82 100644
--- a/src/lib/nocopy.hpp
+++ b/src/lib/nocopy.hpp
@@ -20,7 +20,7 @@
** with mutable state and confusion regarding equality.
** @remark inspired by [Boost-Noncopyable]
**
- ** [Boost-Noncopyable]: http://www.boost.org/doc/libs/1_55_0/libs/utility/utility.htm#Class_noncopyable
+ ** [Boost-Noncopyable]: https://www.boost.org/doc/libs/1_55_0/libs/utility/utility.htm#Class_noncopyable
*/
diff --git a/src/lib/random.hpp b/src/lib/random.hpp
index 44ce7abe9..fb2c800b3 100644
--- a/src/lib/random.hpp
+++ b/src/lib/random.hpp
@@ -19,7 +19,7 @@
** For simplified usage, two default instances are exposed as global variable
** - lib::defaultGen uses fixed seeding (planned: make this configurable)
** - lib::entropyGen always uses true randomness as seed value.
- ** [C++ random number framework]: https://en.cppreference.com/w/cpp/numeric/random
+ ** [C++ random number framework]: https://en.cppreference.com/w/cpp/numeric/random.html
** @see Random_test
*/
diff --git a/src/lib/thread.hpp b/src/lib/thread.hpp
index 1e57b01f1..abfbdfc7f 100644
--- a/src/lib/thread.hpp
+++ b/src/lib/thread.hpp
@@ -108,7 +108,7 @@
** C++ standard library. Design and semantics were retained, while implemented
** using modern features, notably the new _Atomics_ synchronisation framework.
**
- ** [syncs-with definition] : https://en.cppreference.com/w/cpp/atomic/memory_order#Synchronizes_with
+ ** [syncs-with definition] : https://en.cppreference.com/w/cpp/atomic/memory_order.html#Synchronizes_with
*/
diff --git a/src/lib/time/timevalue.hpp b/src/lib/time/timevalue.hpp
index fbb85baa3..183cd58ba 100644
--- a/src/lib/time/timevalue.hpp
+++ b/src/lib/time/timevalue.hpp
@@ -735,7 +735,7 @@ namespace time {
/** derive a hash from the µ-tick value
* @return rotation of the raw value to produce a suitable spacing for consecutive time
* @remark picked up by Boost-hash, or std. hashtables with the help of `hash-standard.h`
- * @see https://stackoverflow.com/a/31488147
+ * @see https://stackoverflow.com/questions/31387778/near-constant-time-rotate-that-does-not-violate-the-standards/31488147#31488147
*/
inline HashVal
hash_value (TimeValue const& time)
diff --git a/src/lib/uninitialised-storage.hpp b/src/lib/uninitialised-storage.hpp
index 29ecf9b88..6b3ab6960 100644
--- a/src/lib/uninitialised-storage.hpp
+++ b/src/lib/uninitialised-storage.hpp
@@ -52,7 +52,7 @@
** - an implicit conversion path to the corresponding array type is provided
** - subscript operators enable direct access to the raw storage
** - helper functions allow for placement new and delete.
- ** [deprecated again]: https://stackoverflow.com/a/71828512
+ ** [deprecated again]: https://stackoverflow.com/questions/71828288/why-is-stdaligned-storage-to-be-deprecated-in-c23-and-what-to-use-instead/71828512#71828512
** @see extent-family.hpp
** @see vault::gear::TestChainLoad::Rule where this setup matters
*/
diff --git a/src/lib/util-quant.hpp b/src/lib/util-quant.hpp
index d7612c596..a9f67f9eb 100644
--- a/src/lib/util-quant.hpp
+++ b/src/lib/util-quant.hpp
@@ -171,7 +171,7 @@ namespace util {
* @see ZoomWindow_test
*
* [ToddLehman]: https://stackoverflow.com/users/267551/todd-lehman
- * [stackoverflow]: https://stackoverflow.com/a/24748637 "How to do an integer log2()"
+ * [stackoverflow]: https://stackoverflow.com/questions/994593/how-to-do-an-integer-log2-in-c/24748637#24748637 "How to do an integer log2()"
*/
template
inline constexpr int
diff --git a/src/lib/verb-visitor.hpp b/src/lib/verb-visitor.hpp
index 1efe6950f..c8265ce91 100644
--- a/src/lib/verb-visitor.hpp
+++ b/src/lib/verb-visitor.hpp
@@ -64,8 +64,8 @@
** special twist that we don't use a pre-bound function, but rather need to combine the
** actual invocation target at the moment of the invocation.
**
- ** [member pointer]: https://en.cppreference.com/w/cpp/language/pointer
- ** [std::apply]: https://en.cppreference.com/w/cpp/utility/apply
+ ** [member pointer]: https://en.cppreference.com/w/cpp/language/pointer.html
+ ** [std::apply]: https://en.cppreference.com/w/cpp/utility/apply.html
**
** @see [drawing on the track canvas](\ref body-canvas-widget.cpp)
** @see VerbVisitorDispatch_test
diff --git a/src/stage/ctrl/state-map-grouping-storage.hpp b/src/stage/ctrl/state-map-grouping-storage.hpp
index 514b0285b..b939c52d7 100644
--- a/src/stage/ctrl/state-map-grouping-storage.hpp
+++ b/src/stage/ctrl/state-map-grouping-storage.hpp
@@ -183,8 +183,8 @@ namespace ctrl {
* comparator has to define a suitable `operator()` and in addition a marker type
* `is_transparent`. See [transparent-cmp] and the [reference][cind-cpp14] for explanation.
* //////////////////////////////////TICKET #991
- * [find-cpp14]: http://en.cppreference.com/w/cpp/container/set/find
- * [transparent-cmp]: http://stackoverflow.com/questions/20317413/what-are-transparent-comparators
+ * [find-cpp14]: https://en.cppreference.com/w/cpp/container/set/find
+ * [transparent-cmp]: https://stackoverflow.com/questions/20317413/what-are-transparent-comparators
*/
static GenNode const&
getState (Record const& entry, string propertyKey)
diff --git a/src/stage/ctrl/ui-dispatcher.hpp b/src/stage/ctrl/ui-dispatcher.hpp
index 9ab580651..e6b5d5e3f 100644
--- a/src/stage/ctrl/ui-dispatcher.hpp
+++ b/src/stage/ctrl/ui-dispatcher.hpp
@@ -56,8 +56,8 @@
** given receiver thread (here the UI event loop thread) will _share a single pipe for signalling._
** Under heavy load this queue might fill up and block the sender on dispatch.
**
- ** [Glib-Dispatcher]: https://developer.gnome.org/glibmm/2.42/classGlib_1_1Dispatcher.html
- ** [GTKmm-tutorial]: https://developer.gnome.org/gtkmm-tutorial/3.12/sec-using-glib-dispatcher.html.en
+ ** [Glib-Dispatcher]: https://web.archive.org/web/20210306110019/https://developer.gnome.org/glibmm/2.42/classGlib_1_1Dispatcher.html
+ ** [GTKmm-tutorial]: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-using-glib-dispatcher.html
** @see NotificationService
** @see CallQueue_test
*/
diff --git a/src/stage/dialog/test-control.hpp b/src/stage/dialog/test-control.hpp
index d7e27bc67..45ccf97a4 100644
--- a/src/stage/dialog/test-control.hpp
+++ b/src/stage/dialog/test-control.hpp
@@ -113,7 +113,7 @@ namespace dialog {
* struct, which is actually heap allocated and managed automatically. This way, each child page
* gets its own namespace, and wiring to other components is made explicit by passing named ctor
* arguments -- while the overall structure of building and wiring of widgets stays close to the
- * habits of [programming with GTKmm](https://developer.gnome.org/gtkmm-tutorial/stable/).
+ * habits of [programming with GTKmm](https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/).
* - define the pages as custom widgets, typically just as locally known struct types
* - invoke #buildPage passing the type and tab label for each page
* - define the wiring of the components within a page in the page's ctor
@@ -121,7 +121,7 @@ namespace dialog {
* @note the page widgets are actually heap allocated and managed automatically
* @see stage::dialog::TestControl as a usage example
*
- * [Notebook]: https://developer.gnome.org/gtkmm-tutorial/stable/sec-multi-item-containers.html.en#sec-notebook
+ * [Notebook]: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-multi-item-containers.html#sec-notebook
*/
class Notebook
: public Gtk::Notebook
diff --git a/src/stage/model/tangible.hpp b/src/stage/model/tangible.hpp
index 41fb96beb..039362078 100644
--- a/src/stage/model/tangible.hpp
+++ b/src/stage/model/tangible.hpp
@@ -108,8 +108,8 @@
** These slots are defined to be `sigc::trackable` for automated disconnection
** see [sigc-track] for an explanation.
**
- ** [MVC-Pattern]: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
- ** [sigc-track]: http://issues.lumiera.org/ticket/940#comment:3 "Ticket #940"
+ ** [MVC-Pattern]: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
+ ** [sigc-track]: https://issues.lumiera.org/ticket/940#comment:3 "Ticket #940"
**
** @see \ref AbstractTangible_test
** @see \ref BusTerm_test
diff --git a/src/stage/model/w-link.hpp b/src/stage/model/w-link.hpp
index bf793d351..210b0a27b 100644
--- a/src/stage/model/w-link.hpp
+++ b/src/stage/model/w-link.hpp
@@ -37,7 +37,7 @@
** a dead functor. We make use of the same mechanism here to
** install a callback to invalidate this smart-handle.
**
- ** [trackable]: https://developer.gnome.org/libsigc++/stable/structsigc_1_1trackable.html#details "`sigc::trackable`"
+ ** [trackable]: https://libsigcplusplus.github.io/libsigcplusplus/reference/html/structsigc_1_1trackable.html#details "`sigc::trackable`"
**
** @see \ref WLink_test
** @see \ref NotificationHub (usage example)
diff --git a/src/stage/ui-bus.hpp b/src/stage/ui-bus.hpp
index 63e35401f..88388345c 100644
--- a/src/stage/ui-bus.hpp
+++ b/src/stage/ui-bus.hpp
@@ -83,7 +83,7 @@
** @see ctrl/nexus.hpp
** @see ctrl/core-service.hpp
**
- ** [MVC-Pattern]: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
+ ** [MVC-Pattern]: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
*/
diff --git a/src/stage/widget/error-log-display.hpp b/src/stage/widget/error-log-display.hpp
index 5a8f3b3ae..b2e6c3c69 100644
--- a/src/stage/widget/error-log-display.hpp
+++ b/src/stage/widget/error-log-display.hpp
@@ -190,7 +190,7 @@ namespace widget {
* but also stores a [Mark] to bookmark the presence of this
* error entry. And finally expand the display if collapsed.
*
- * [Mark]: https://developer.gnome.org/gtkmm-tutorial/stable/sec-textview-buffer.html.en#textview-marks
+ * [Mark]: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/chapter-textview.html#textview-marks
*/
void
addError (string text)
@@ -303,9 +303,9 @@ namespace widget {
* The handling of marks and tags is described in the [GTKmm tutorial].
* @warning Each entry creates a new pair of marks. Not sure about the impact on performance...
*
- * [GTKmm tutorial]: https://developer.gnome.org/gtkmm-tutorial/stable/sec-textview-buffer.html.en#textview-marks
- * [insert-mark]: https://developer.gnome.org/gtkmm/3.22/classGtk_1_1TextMark.html#details
- * [API doc]: https://developer.gnome.org/gtkmm/3.22/classGtk_1_1TextView.html#a8412941c4da9a71a381052d6049164e4
+ * [GTKmm tutorial]: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/chapter-textview.html#textview-marks
+ * [insert-mark]: https://web.archive.org/web/20210306120221/https://developer.gnome.org/gtkmm/3.22/classGtk_1_1TextMark.html#details
+ * [API doc]: https://web.archive.org/web/20210306120223/https://developer.gnome.org/gtkmm/3.22/classGtk_1_1TextView.html#a8412941c4da9a71a381052d6049164e4
*/
Entry
addEntry (string const& text, Literal markupTagName =nullptr)
diff --git a/src/steam/control/command-def.hpp b/src/steam/control/command-def.hpp
index 0260af1bd..1c7dd59f1 100644
--- a/src/steam/control/command-def.hpp
+++ b/src/steam/control/command-def.hpp
@@ -247,7 +247,7 @@ namespace control {
/**
* Helper class used solely for _defining_ a Command-Object.
- * This technique is known as "fluent API", see http://en.wikipedia.org/wiki/Fluent_interface
+ * This technique is known as "fluent API", see https://en.wikipedia.org/wiki/Fluent_interface
* The basic idea is for the user to create a disposable instance of this definition helper,
* only for calling a chain of definition functions, which internally build the actual Command object.
* Finally, the created Command object will be stored into a registry or handed over to the
diff --git a/tests/library/util-identity-test.cpp b/tests/library/util-identity-test.cpp
index 455fa6d1b..7caca2033 100644
--- a/tests/library/util-identity-test.cpp
+++ b/tests/library/util-identity-test.cpp
@@ -48,7 +48,7 @@ namespace test {
* pointers, disregarding any type information, thereby
* _»unpacking«_ the address information contained in a
* pointer is (i.e. the address of the pointee is used)
- * [object]: https://en.cppreference.com/w/cpp/language/type
+ * [object]: https://en.cppreference.com/w/cpp/language/type.html
*/
class UtilIdentity_test : public Test
{