structure refactored