abstract primitaves out into their own classes
abstract primitaves out into their own classes