pretty big refactoring, more types