Massive Refactor... Tests Broken need fixing