public Move(Move mv) { startingLocation = mv.startingLocation; endingLocation = mv.endingLocation; becomeKing = mv.becomeKing; captures = mv.captures; whoseTurn = mv.whoseTurn; theSteps = new java.util.ArrayList<Step>(); int howManySteps = mv.theSteps.size(); for (int i = 0; i < howManySteps; i++) { // loop and copy Step myStep = new Step(); Step oldStep = mv.theSteps.get(i); myStep.startLocation = oldStep.startLocation; myStep.endLocation = oldStep.endLocation; myStep.rankAtStart = oldStep.rankAtStart; myStep.rankAtEnd = oldStep.rankAtEnd; theSteps.add(myStep); // with check is ok, but takes unnecessary time, because starting is ok } rankAtStart = mv.rankAtStart; rankAtEnd = mv.rankAtEnd; }