working and somewhat tested; but printing suxx