Move type logic to type, make type wagneerable