Add Documentation. Add generalization to makefile