move some stuff inside traits