for (Iterator holdIt = holding.holdingArrayList.iterator(); holdIt.hasNext();){ //We are going to create multiple clones of the puzzle. One for each possible //Node value. Object o = holdIt.next(); System.err.println("Poss Val: "+o.toString()); ArrayList cloned = (ArrayList) starterCopy.clone(); //for (Iterator stIt = cloned.iterator(); stIt.hasNext();){ for (int i = 0; i < cloned.size(); i++){ //Clone the pacls cloned.set(i, (PanelArrayListCombined)((PanelArrayListCombined)cloned.get(i)).clone()); cloned.get(i).holdingArrayList = (ArrayList) cloned.get(i).holdingArrayList.clone(); //Clone the contents of the ArrayList for (int j = 0; j < cloned.get(i).holdingArrayList.size(); j++){ cloned.get(i).holdingArrayList.set(j, (Integer)cloned.get(i).holdingArrayList.get(j).clone()); } } } ######################################### clone() has protected access in java.lang.Object cloned.get(i).holdingArrayList.set(j, (Integer)cloned.get(i).holdingA rrayList.get(j).clone()); ^