public void chargeProvinceRent(Player player) {
		String playerName = player.getName();
		String worldName = player.getWorld().getName();

		String query = "SELECT * FROM `Monarchy_Provinces` WHERE `player` = ? AND `world` = ? ORDER BY `time` ASC;";

		Connection con = getSQLConnection();

		try {

			PreparedStatement statement = con.prepareStatement(query);
			statement.setString(1, playerName);
			statement.setString(2, worldName);

			ResultSet result = statement.executeQuery();

			double lastPaid, secondsSince;

			double rentTime;
			int rentDue;
			int totalDue = 0;
			int totalPaid = 0;

			List<provinceInfo> paidProvinces = new ArrayList<provinceInfo>();
			List<provinceInfo> lateProvinces = new ArrayList<provinceInfo>();

			int x, z;
			provinceInfo province;
			while (result.next()) {

				lastPaid = result.getTimestamp(8).getTime() / 1000D;

				secondsSince = (Monarchy.getUnixTime() - lastPaid);

				rentTime = (secondsSince / (Config.provinceRentTime * 60 * 60));
				rentDue = (int) Math.floor(rentTime * Config.provinceRentFee);
				totalDue += rentDue;

				// x = result.getInt(4);
				// z = result.getInt(5);

				// plugin.info("x:"+x+",z:"+z+", seconds: " + secondsSince +
				// ", rentTime:" +rentTime + ", rentDue:"+rentDue);
				// provinceRentFee

				province = new provinceInfo(result.getInt(1), // id
					result.getString(2),// player
					result.getString(3),// world
					result.getInt(4),// x
					result.getInt(5),// z
					result.getInt(6),// parent
					//result.getInt(7),// permitted
					result.getString(7),// invited
					(result.getTimestamp(8).getTime() / 1000D) // time
				);

				if (rentDue > 0) {
					if (Monarchy.getTotalExperience(player) >= rentDue) {
						totalPaid += rentDue;
						Monarchy.takeExp(player, rentDue);
						paidProvinces.add(province);
					} else {
						lateProvinces.add(province);
					}
				}
			}

			if (totalPaid > 0)
				plugin.sendMessage(player, F("stPaidProvinceFees", totalPaid));

			// plugin.info(playerName + " owes " + totalDue + " exp.");

			/**/
			int success;

			query = "UPDATE `Monarchy_Provinces` SET `time` = CURRENT_TIMESTAMP WHERE `id` = ?;";
			statement = con.prepareStatement(query);
			for (int i = 0; i < paidProvinces.size(); i++) {
				statement.setInt(1, paidProvinces.get(i).id);
				success = statement.executeUpdate();
				// plugin.info("Updated " + paidProvinces.get(i).id +
				// " to current date.");
			}

			query = "DELETE FROM `Monarchy_Provinces` WHERE `id` = ?;";
			statement = con.prepareStatement(query);
			for (int i = lateProvinces.size() - 1; i >= 0; i--) {
				lastPaid = lateProvinces.get(i).time;
				secondsSince = (Monarchy.getUnixTime() - lastPaid);

				if (secondsSince > (Config.provinceRentExpire * 60 * 60)) {
					statement.setInt(1, lateProvinces.get(i).id);
					success = statement.executeUpdate();
					// plugin.info("Removed " + lateProvinces.get(i) +
					// " from db.");
					plugin.sendMessage(player, F("stLostProvinceClaim", worldName, lateProvinces.get(i).x * 16, lateProvinces.get(i).z * 16));
				} else {
					int due = (int) ((Config.provinceRentExpire * 60 * 60) - secondsSince) / 60 / 60;
					plugin.sendMessage(player, F("stProvinceRentIsLate", worldName, lateProvinces.get(i).x * 16, lateProvinces.get(i).z * 16, due));

				}
			}

			statement.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}