public void doAllTheThings() {
        //clear
        currentChord = 0;
        for (int i = currentChord; i < bass.length; ++i) //clear chords later since this change
        {
            tenor[i] = null;
            alto[i] = null;
            soprano[i] = null;
        }

        ArrayList<ArrayList<Object[]>> masterList = new ArrayList<ArrayList<Object[]>>();
        int[] elementVisited = new int[bass.length];
        boolean isOverallFail = false;

        for (currentChord = 0; currentChord < bass.length; ++currentChord) {
            if (masterList.size() <= currentChord) //good; we request chord positions that work
            {
                ArrayList<Object[]> result = next();

                if (result.size() > 0) //we got a non-empty list, proceed with scrambling, then pick top one
                {
                    masterList.add(result);

                    //scramble
                    Collections.shuffle(result);

                    //Import list of notes
                    Pitch[] possiblePitches;
                    if (!chord[currentChord].isSeventh) {
                        possiblePitches = chord[currentChord].notes;
                    } else {
                        possiblePitches = chord[currentChord].notes;
                    }

                    int index = 0;
                    int[][] referenceArray = (int[][]) (result.get(index)[0]);
                    int element = (int) (Integer) (result.get(index)[1]);

                    tenor[currentChord] = new Note(possiblePitches[referenceArray[element][1]], (bass[currentChord].getLetterNum() + referenceArray[element][6] - 1) / 7);
                    alto[currentChord] = new Note(possiblePitches[referenceArray[element][2]], (bass[currentChord].getLetterNum() + referenceArray[element][7] - 1) / 7);
                    soprano[currentChord] = new Note(possiblePitches[referenceArray[element][3]], (bass[currentChord].getLetterNum() + referenceArray[element][8] - 1) / 7);

                    //Is successful; do not need to manually increment
                } else //request returns an empty list
                {
                    elementVisited[currentChord] = 0;
                    tenor[currentChord] = null;
                    alto[currentChord] = null;
                    soprano[currentChord] = null;
                    currentChord -= 2;
                }
            } else //if(masterList.size()>currentChord) //only reason it will not be null is if it is a failed attempt somewhere later
            {
                elementVisited[currentChord]++;

                ArrayList<Object[]> result = masterList.get(currentChord);
                if (elementVisited[currentChord] < result.size()) {
                    //Import list of notes
                    Pitch[] possiblePitches;
                    if (!chord[currentChord].isSeventh) {
                        possiblePitches = chord[currentChord].notes;
                    } else {
                        possiblePitches = chord[currentChord].notes;
                    }

                    int index = elementVisited[currentChord];
                    int[][] referenceArray = (int[][]) (result.get(index)[0]);
                    int element = (int) (Integer) (result.get(index)[1]);

                    tenor[currentChord] = new Note(possiblePitches[referenceArray[element][1]], (bass[currentChord].getLetterNum() + referenceArray[element][6] - 1) / 7);
                    alto[currentChord] = new Note(possiblePitches[referenceArray[element][2]], (bass[currentChord].getLetterNum() + referenceArray[element][7] - 1) / 7);
                    soprano[currentChord] = new Note(possiblePitches[referenceArray[element][3]], (bass[currentChord].getLetterNum() + referenceArray[element][8] - 1) / 7);
                } else //if (elementVisited[currentChord]>=result.size())
                {
                    masterList.remove(masterList.size() - 1);
                    elementVisited[currentChord] = 0;
                    tenor[currentChord] = null;
                    alto[currentChord] = null;
                    soprano[currentChord] = null;
                    currentChord -= 2;
                }
            }
            if (currentChord <= -2) {
                isOverallFail = true;
                currentChord = bass.length; //break out of loop
            }
        }
        if (isOverallFail) {
            System.out.println("Surprisingly, you generated a progression with no good voice leading. Better luck next time.");
        }
    }