separated general setup from implementation specifics