public void set (int i, int j)
	// set a new move, if the board position is empty
	{
		Action a;
		synchronized (Pos)
		{
			if (P.color(i, j) == 0) // empty?
			{
				if (Pos.node().actions() != null || Pos.parentPos() == null)
				// create a new node, if there the current node is not
				// empty, else use the current node. exception is the first
				// move, where we always create a new move.
				{
					Node n = new Node(++number);
					if (P.color() > 0)
					{
						a = new Action("B", Field.string(i, j));
					}
					else
					{
						a = new Action("W", Field.string(i, j));
					}
					n.addaction(a); // note the move action
					setaction(n, a, P.color()); // display the action
					// !!! We alow for suicide moves
					TreeNode newpos = new TreeNode(n);
					Pos.addchild(newpos); // note the move
					n.main(Pos);
					Pos = newpos; // update current position pointer
				}
				else
				{
					Node n = Pos.node();
					if (P.color() > 0)
					{
						a = new Action("B", Field.string(i, j));
					}
					else
					{
						a = new Action("W", Field.string(i, j));
					}
					n.addaction(a); // note the move action
					setaction(n, a, P.color()); // display the action
					// !!! We alow for suicide moves
				}
			}
		}
	}