hopefully a comprehensive setup