Improve compiler; add documentation