@SuppressWarnings("unchecked")
	private void appendCellKeys( final Data data, String prefix, final List<CellKey> cellKeys) {
		if ( data == null) {
			final CellKey newCellKey = new CellKey( prefix, true);
			newCellKey.setCellText( DataTableObjectRenderer.getTextForState(getDataState()));
			cellKeys.add( newCellKey);
			return;
		}
		if ( data.isPlain()) {
			final CellKey newCellKey = new CellKey( prefix, false);
			newCellKey.setCellText( data.valueToString());
			cellKeys.add( newCellKey);
		}
		else {
			if ( data.isList()) {
				Iterator it = data.iterator();
				while( it.hasNext()) {
					Data nextData = (Data)it.next();
					String nextPrefix = prefix + CellKey.getSECOND_SEPARATOR() + nextData.getName();
					appendCellKeys( nextData, nextPrefix, cellKeys);
				}
			}
			if ( data.isArray()) {
				Data.Array dataArray = data.asArray();
				final int length = dataArray.getLength();
				if ( length == 0) { // um auch leere Arrays selektierbar zu machen
					cellKeys.add( new CellKey( prefix, false));
				}
				for(int i = 0; i < length; i++) {
					Data nextData = dataArray.getItem(i);
					String nextPrefix = prefix + "[" + i + "]";
					appendCellKeys(nextData, nextPrefix, cellKeys);
				}
			}
		}
	}