Almsot done, might have to refaactor/clean up a thing or two