base structure and classes