Refactoring the project. Developing Optional Header. Adding documentation.