new type, refactor, cleanup