Bring back 4 reverted commits

This reverts commit 2ad626b9821c58cce81d43b77bc22455857700e0.
This reverts commit 93d93cdc8caab5bd51a21cfcdc097eb94ca920e9.
This reverts commit 3b4e53f37d71f1c054aa5d94eaf22dc399c0d003.
This reverts commit a5bc8efcecb31c525c0911788a0d34862695973b.
4 files changed