public void update(final int index, final DataTableObject dataTableObject) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				if(index >= _firstRow && index <= _lastRow) {
					int upperHeight = _emptyDummyUpperViewportPanel.getSize().height;
					int viewportHeight = _viewportPanel.getSize().height;
					int lowerHeight = _lowerViewportPanel.getSize().height;
					int value = _verticalScrollBar.getModel().getValue();
					_screenHeight = _verticalScrollBar.getVisibleAmount();
					
					int position = index - _firstRow;
					
					// entfernen
					_rowHeaderPanel.remove(position);
					_viewportPanel.remove(position);
					
					DataTableObjectRenderer renderer = _dtoRenderers.get(index);
					int height = renderer.getHeight();
					viewportHeight -= height;
					renderer.unsetLinks();
					// einfügen
					DataTableObjectRenderer newRenderer = new DataTableObjectRenderer(_headerGrid, dataTableObject, _selectionManager);
					_dtoRenderers.set(index, newRenderer);
					newRenderer.setLinks();
					height = newRenderer.getHeight();
					viewportHeight += height;
					
					/* Kode wie dieser läßt einen Gruseln: die Höhen der beiden Komponeneten sind
					 * voneinander abhängig, und was man nicht sieht: die Reihenfolge ist wichtig, 
					 * wenn man irgendetwas an anderen Stellen ändert, z.B. bei der Behebung eines
					 * Bugs zu Zeilenhöhen bei leeren Arrays! Also Vorsicht hier!
					 */
					JComponent rowHeaderRow = newRenderer.getRowHeaderRow(TIME_FORMAT);
					JComponent viewportRow = newRenderer.getViewportRow();
					
					rowHeaderRow.setPreferredSize(new Dimension(rowHeaderRow.getPreferredSize().width, height));
					rowHeaderRow.setMaximumSize(new Dimension(rowHeaderRow.getMaximumSize().width, height));
					viewportRow.setMaximumSize(new Dimension(viewportRow.getMaximumSize().width, height));
					
					_rowHeaderPanel.add(rowHeaderRow, position);
					_viewportPanel.add(viewportRow, position);
					
					// ist die Höhe auch hoch genug? ist auch genug im Fenster sichtbar?
					DataTableObjectRenderer firstRenderer = _dtoRenderers.get(_firstRow);
					int firstRowHeight = firstRenderer.getHeight();
					if(upperHeight + viewportHeight < value + _screenHeight + firstRowHeight) {
						_lastRow++;
						while((upperHeight + viewportHeight < value + _screenHeight + firstRowHeight) && (_lastRow < _dtoRenderers.size())) {
							DataTableObjectRenderer lastRenderer = _dtoRenderers.get(_lastRow++);
							lastRenderer.setLinks();
							
							/* Kode wie dieser läßt einen Gruseln: die Höhen der beiden Komponeneten sind
							 * voneinander abhängig, und was man nicht sieht: die Reihenfolge ist wichtig, 
							 * wenn man irgendetwas an anderen Stellen ändert, z.B. bei der Behebung eines
							 * Bugs zu Zeilenhöhen bei leeren Arrays! Also Vorsicht hier!
							 */
							JComponent rowHeaderRow2 = lastRenderer.getRowHeaderRow(TIME_FORMAT);
							JComponent viewportRow2 = lastRenderer.getViewportRow();
							
							int lastRowHeight = lastRenderer.getHeight();
							viewportHeight += lastRowHeight;
							lowerHeight -= lastRowHeight;
							
							rowHeaderRow2.setPreferredSize(new Dimension(rowHeaderRow2.getPreferredSize().width, lastRowHeight));
							rowHeaderRow2.setMaximumSize(new Dimension(rowHeaderRow2.getMaximumSize().width, lastRowHeight));
							viewportRow2.setMaximumSize(new Dimension(viewportRow2.getMaximumSize().width, lastRowHeight));
							
							_rowHeaderPanel.add(rowHeaderRow2);
							_viewportPanel.add(viewportRow2);
						}
						_lastRow--;
						
						// untere Platzhalter bestimmen
						setLowerPanel(lowerHeight);
					}
					int anzahl = _viewportPanel.getComponentCount();
					if(anzahl != ((_lastRow - _firstRow) + 1)) {
						_debug.error("Anzahl der Komponenten stimmt nicht mit _firstRow und _lastRow überein!");
					}
					_scrollPane.validate();
				}
				else {
					DataTableObjectRenderer renderer = new DataTableObjectRenderer(_headerGrid, dataTableObject, _selectionManager);
					DataTableObjectRenderer oldRenderer = _dtoRenderers.get(index);
					int diff = renderer.getHeight() - oldRenderer.getHeight();
					_dtoRenderers.set(index, renderer);
					if(index < _firstRow) {
						setUpperPanel(_emptyDummyUpperViewportPanel.getSize().height + diff);
					}
					else { // index > _lastRow
						setLowerPanel(_lowerViewportPanel.getSize().height + diff);
					}
					_scrollPane.validate();
				}
			}
		});
	}