Separated into modules and header files