Reworked pretty much everything, code still not finished.