primitives complete, untested