add type selection use traits