Updated To Do
Re-write with modularization