base structure refactored