Working but not completely Generic/Tidy Yet. so dont judge me!
All tests pass but not very pretty