Fully Commented version - FINAL SUBMISSION-ready