publish! and unpublish! methods
cleaning this up and refactoring it