Brings back 4 reverted commits

This reverts commit e6a83adb0ec9eca521016976638bfa0c6b3aa057.
This reverts commit e84ebc0c2c2f0c9ee67188f383a9d9a86878ce5d.
This reverts commit 6d388612a09ba9bcc9841c49d9762d0f9ed9cca5.
This reverts commit 817fa664cb3dfde450a144429aee599e005ce94e.
7 files changed