extract functionality
there is no reason why type() should be linked to an instanc