refactored *most* of the code for the sign.. double check TODOs