seems excessive to have all these in different packages, but I don't really know go style