Brings back 4 reverted commits

This reverts commit aec733bb622c5d811850870baad69c2b01eb7e8c.
This reverts commit d8cd0fb43498ce1b52113887e693526c1fab9c41.
This reverts commit ccadcea2e3b76091b9de692033062c70981dc3b6.
This reverts commit 07facabafae72c34bed1ee399992af8f18e57d19.
6 files changed