closes #14871 closes #15597 closes #16106 closes #16489
Implementation of the approach described in #9974.