Refactored a lot. Removed things like str for now, will add back in later