Trivial backport of most of !1981 (merged), minus the large number of new tests.
Fixes: #2325 (closed)