refactored some of the typesystem - better now :)