make primitive implementation more...

flexible