public void fromJSONObject(JSONObject obj) throws ParseException {
		numInitialContestants = ((Number) obj.get(KEY_NUM_CONTEST)).intValue();

		// tribes
		JSONArray ts = (JSONArray) obj.get(KEY_TRIBES);
		setTribeNames((String) ts.get(0), (String) ts.get(1));

		// week info:
		weeksRem = Utils.numToInt(obj.get(KEY_WEEKS_REMAIN));
		weeksPassed = Utils.numToInt(obj.get(KEY_WEEKS_PASSED));

		seasonStarted = (Boolean) obj.get(KEY_SEASON_STARTED);
		
		if(seasonStarted){
			betAmount = Utils.numToInt(obj.get(KEY_BET_AMOUNT));
			totalAmount = Utils.numToInt(obj.get(KEY_POOL_TOTAL));
		}

		// Contestants must be loaded before users, but after others!
		allContestants = new ArrayList<Contestant>(numInitialContestants);

		// load the contestant array.
		JSONArray cons = (JSONArray) obj.get(KEY_CONTESTANTS);
		for (int i = 0; i < cons.size(); i++) {
			Contestant c = new Contestant();
			c.fromJSONObject((JSONObject)cons.get(i));
			try {
				addContestant(c);
				if(c.getCastDate() == getCurrentWeek()){
					this.setElimCont(c);
					this.setElimExists(true);
				}
				if(c.isCastOff())
					castOffs[i] = c;
		
			} catch (InvalidFieldException ie) {
			}
		}
		
		// users:
		JSONArray users = (JSONArray) obj.get(KEY_USERS);
		allUsers = new ArrayList<User>(users.size());
		for (int i = 0; i < users.size(); i++) {
			User u = new User();
			u.fromJSONObject((JSONObject)users.get(i));
			try {
				addUser(u);
			} catch (InvalidFieldException ie) {
			}
			if(getCurrentWeek() >= 2);
		}
		
		Collections.sort(allContestants, Utils.getComparator(Utils.CompType.ID, Contestant.class));
		Collections.sort(allUsers, Utils.getComparator(Utils.CompType.ID, User.class));

		notifyAdd();
	}