Revert "Revert "Many changes""

This reverts commit 30b02e0042759564d41aaa608d8b10a52b139819.