A lot fo changes made to the public interface, eliminating duplicated logic, enabled scanf like reading, inout direction, changed function names, implemented init function