ALOT of changes. work in progress!!