Developed. First Draft, to be refactored