public MatrixTableModel getCopy(int newArtifactCount,
			int newReplicationFactor) {
		MatrixTableModel newMatrixTableModel = new MatrixTableModel(
				newArtifactCount, newReplicationFactor);

		// reset the design of the new matrix
		newMatrixTableModel.resetDesign();
		boolean[][] newDesign = newMatrixTableModel.getDesignMatrix();

		// copy values to new judgment matrix, artifacts and notes
		double[][] newJudgmentMatrix = new double[newArtifactCount][newArtifactCount];
		String[] newArtifacts = new String[newArtifactCount];
		String[] newArtifactNotes = new String[newArtifactCount];
		int min = 0;
		if (artifactCount <= newArtifactCount) {
			min = artifactCount;
		} else {
			min = newArtifactCount;
		}
		for (int i = 0; i < min; i++) {
			newArtifacts[i] = artifacts[i];
			newArtifactNotes[i] = artifactNotes[i];
			for (int j = 0; j < min; j++) {

				// copy old values only if the new design requires it
				if (newDesign[i][j]) {
					newJudgmentMatrix[i][j] = judgmentMatrix[i][j];
				}
			}
		}
		newMatrixTableModel.setJudgmentMatrix(newJudgmentMatrix);
		newMatrixTableModel.setArtifacts(newArtifacts);

		// set reference index and size
		if (referenceIndex < artifactCount) {
			newMatrixTableModel.setReferenceIndex(referenceIndex);
			newMatrixTableModel.setReferenceSize(referenceSize);
		}

		return newMatrixTableModel;
	}