JamesChen25 templated
JamesChen25 finished