added unique* and some argument checking