add unique (untested as of yet); swap around . function