big refactoring, kind checking, tons of stuff