Constructor refactored, all logic moved to methods