Tons of changes. Functioning. Needs some testing.