NOT A USABLE COMMIT ; I think abstractions are mostly done, everything works as before but it's all different