delegate logic to primitives, preserve attributes on typecasting