Many changes. All implemented now