private List<CardMove> movesFromDiscardPileToSuitStack(GameModelView pModel) {
   ArrayList<CardMove> moves = new ArrayList<CardMove>();
   if (!pModel.isEmptyDiscardPile()) {
     for (SuitStackIndex index : SuitStackIndex.values()) {
       if (pModel.isLegalMove(pModel.peekDiscardPile(), index)) {
         moves.add(new CardMove(pModel.peekDiscardPile(), index));
         if (pModel.isEmptySuitStack(index)) {
           break; // we take the first possible blank space
         }
       }
     }
   }
   return moves;
 }
 private List<CardMove> movesFromWorkingStacksToSuitStacks(GameModelView pModel) {
   ArrayList<CardMove> moves = new ArrayList<CardMove>();
   for (StackIndex index : StackIndex.values()) {
     CardView[] stack = pModel.getStack(index);
     if (stack.length > 0) {
       Card card = stack[stack.length - 1].getCard();
       for (SuitStackIndex index2 : SuitStackIndex.values()) {
         if (pModel.isLegalMove(card, index2)) {
           moves.add(new CardMove(card, index2));
           if (pModel.isEmptySuitStack(index2)) {
             break; // we take the first possible blank space
           }
         }
       }
     }
   }
   return moves;
 }