cleaned, commented, ready to submit