Working Implementation - Needs to remove none CS31 function calls