trying to figure out traits and implementations