public Object[][] getCells() {
    int			i;
    int			n;
    Vector<Object[]>	result;
    Object[]		row;
    int			rowCount;
    boolean		proceed;
    
    initialize();

    result = new Vector<Object[]>();

    try {
      
      // do know the number of rows?
      rowCount = getRowCount();
      if (rowCount == -1) {
	rowCount = getMaxRows();
	proceed  = m_ResultSet.next();
      }
      else {
	proceed = m_ResultSet.first();
      }
      
      if (proceed) {
	i = 0;
	while (true) {
	  row = new Object[getColumnCount()];
	  result.add(row);

	  for (n = 0; n < getColumnCount(); n++) {
	    try {
	      // to get around byte arrays when using getObject(int)
	      if (getColumnClasses()[n] == String.class)
		row[n] = m_ResultSet.getString(n + 1);
	      else
		row[n] = m_ResultSet.getObject(n + 1);
	    }
	    catch (Exception e) {
	      row[n] = null;
	    }
	  }

	  // get next row, if possible
	  if (i == rowCount - 1) {
	    break;
	  }
	  else {
	    // no more rows -> exit
	    if (!m_ResultSet.next())
	      break;
	  }

	  i++;
	}
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }

    return result.toArray(new Object[result.size()][getColumnCount()]);
  }