void findPossibleMoves(Vector<Move> lMoves) {

	    lMoves.clear();
	    
	    if (mLastMove.isEOG()) {
	    	return;
	    } // End if
	    
	    if (mMovesUntilDraw <= 0) {
	    	lMoves.add(new Move(Move.MoveType.MOVE_DRAW));
	    	return;
	    } // End if

	    // Normal moves are forbidden if any jump is found
	    boolean lFound = false;
	    int[] lPieces = new int[GameState.cPlayerPieces];
	    int[] lMoveBuffer = new int[GameState.cPlayerPieces];
		//Vector<Move> lMoves = new Vector<Move>();
		
	    int lNumPieces=0;
	    for (int i = 1; i <= cSquares; i++) {
	        // Is this a piece which belongs to the player making the move?
	        if (0 != (this.get(i) & mNextPlayer)) {
	            boolean lIsKing = 0 != (this.get(i) & Constants.CELL_KING);

	            if (this.tryJump(lMoves, GameState.cellToRow(i), GameState.cellToCol(i), lIsKing, lMoveBuffer)) {
	                lFound=true;
	            } // End if
	            lPieces[lNumPieces++]=i;
	        } // End if
	    } // End for

	    // Try normal moves if no jump was found
	    if (!lFound) {
	        for (int k = 0; k < lNumPieces; k++) {
	            int lCell = lPieces[k];
	            boolean lIsKing = 0 != (this.get(lCell) & Constants.CELL_KING);
	            this.tryMove(lMoves, lCell, lIsKing);
	        } // End for
	    } // End if
	    
	    
	    // Admit loss if no moves can be found
		if (lMoves.size() == 0) {
			lMoves.add(new Move(mNextPlayer == Constants.CELL_WHITE ?
					Move.MoveType.MOVE_RW : Move.MoveType.MOVE_WW));
	    }
	    

		return;


		/*
	    // Convert moves to GameStates
	    for (int i = 0; i < lMoves.size(); i++) {
	    	try {
				pStates.add(new GameState((GameState) this.clone(), lMoves.elementAt(i)));
			} catch (CloneNotSupportedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    } // End for
	    
	    
	    // Admit loss if no moves can be found
	    if (pStates.size() == 0) {
	    	try {
				pStates.add(
						new GameState((GameState) this.clone(), 
						new Move(mNextPlayer == Constants.CELL_WHITE ? Move.MoveType.MOVE_RW : Move.MoveType.MOVE_WW)));
			} catch (CloneNotSupportedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    } // End if
	    */
	    
	    
	} // End FindPossibleMoves