A lot of major additions, nearly complete with file input