Revert "Many changes"

This reverts commit 4b6efbfce0d79061cbe81b67706b5db4ada616fa.
Revert "Revert "Many changes""

This reverts commit 131600f7654f38093b2e059e2c1e4ccd54926746.