restructure to be a gem