public void update (int i, int j)
	// update the field (i,j) in the offscreen image Active
	// in dependance of the board position P.
	// display the last move mark, if applicable.
	{
		if (ActiveImage == null) return;
		if (i < 0 || j < 0) return;
		Graphics g = ActiveImage.getGraphics();
		int xi = O + OTU + i * D;
		int xj = O + OTU + j * D;
		synchronized (this)
		{
			g.drawImage(Empty, xi, xj, xi + D, xj + D, xi, xj, xi + D, xj + D,
				this);
			if (GF.getParameter("shadows", true)
				&& GF.getParameter("beauty", true)
				&& GF.getParameter("beautystones", true))
			{
				if (P.color(i, j) != 0)
				{
					g.drawImage(EmptyShadow, xi - OP / 2, xj + OP / 2, xi + D
						- OP / 2, xj + D + OP / 2, xi - OP / 2, xj + OP / 2, xi
						+ D - OP / 2, xj + D + OP / 2, this);
				}
				else
				{
					g.drawImage(Empty, xi - OP / 2, xj + OP / 2, xi + D - OP
						/ 2, xj + D + OP / 2, xi - OP / 2, xj + OP / 2, xi + D
						- OP / 2, xj + D + OP / 2, this);
				}
				g.setClip(xi - OP / 2, xj + OP / 2, D, D);
				update1(g, i - 1, j);
				update1(g, i, j + 1);
				update1(g, i - 1, j + 1);
				g.setClip(xi, xj, D, D);
				if (i < S - 1 && P.color(i + 1, j) != 0)
				{
					g.drawImage(EmptyShadow, xi + D - OP / 2, xj + OP / 2, xi
						+ D, xj + D, xi + D - OP / 2, xj + OP / 2, xi + D, xj
						+ D, this);
				}
				if (j > 0 && P.color(i, j - 1) != 0)
				{
					g.drawImage(EmptyShadow, xi, xj, xi + D - OP / 2, xj + OP
						/ 2, xi, xj, xi + D - OP / 2, xj + OP / 2, this);
				}
			}
		}
		g.setClip(xi, xj, D, D);
		update1(g, i, j);
		g.dispose();
	}