decomposed into several smaller header files