public void update() {
    boolean structureChanged = false;

    ArrayList<Download> al =
        new ArrayList<Download>(ui.getCore().getNetworkManager().getDownloadManager().downloads());
    for (Download d : al) {
      DownloadWrapper dw = getWrapperFor(d);
      if (dw == null) {
        structureChanged = true;
        dw = new DownloadWrapper(d);
        rows.add(dw);
      }
      dw.update();
    }

    for (Iterator i = rows.iterator(); i.hasNext(); ) {
      DownloadWrapper w = (DownloadWrapper) i.next();
      if (!ui.getCore().getNetworkManager().getDownloadManager().contains(w.download)) {
        structureChanged = true;
        i.remove();
      }
    }

    if (structureChanged) {
      model.fireTableStructureChanged();
    } else {
      model.fireTableRowsUpdated(0, rows.size());
    }

    showTotalBytesReceived();

    selectDownloadToShowOnDownloadGrid();

    updateDownloadingFromAndUploadingToText();

    downloadGrid.repaint();
  }