Index: applications/editors/josm/plugins/opendata/includes/org/apache/poi/hssf/usermodel/HSSFRow.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/apache/poi/hssf/usermodel/HSSFRow.java	(revision 31942)
+++ applications/editors/josm/plugins/opendata/includes/org/apache/poi/hssf/usermodel/HSSFRow.java	(revision 34072)
@@ -18,11 +18,7 @@
 package org.apache.poi.hssf.usermodel;
 
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
 import org.apache.poi.hssf.record.CellValueRecordInterface;
 import org.apache.poi.hssf.record.RowRecord;
 import org.apache.poi.ss.SpreadsheetVersion;
-import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 
@@ -102,4 +98,5 @@
      *   the maximum number of columns supported by the Excel binary format (.xls)
      */
+    @Override
     public HSSFCell createCell(int column)
     {
@@ -119,4 +116,5 @@
      *   the maximum number of columns supported by the Excel binary format (.xls)
      */
+    @Override
     public HSSFCell createCell(int columnIndex, int type)
     {
@@ -164,4 +162,5 @@
      * @throws IndexOutOfBoundsException if the row number is not within the range 0-65535.
      */
+    @Override
     public void setRowNum(int rowIndex) {
         int maxrow = SpreadsheetVersion.EXCEL97.getLastRowIndex();
@@ -180,4 +179,5 @@
      * @return the row number (0 based)
      */
+    @Override
     public int getRowNum()
     {
@@ -190,9 +190,9 @@
      * @return the HSSFSheet that owns this row
      */
+    @Override
     public HSSFSheet getSheet()
     {
         return sheet;
     }
-
 
     /**
@@ -240,5 +240,4 @@
     }
 
-
     /**
      * Get the hssfcell representing a given column (logical cell)
@@ -250,4 +249,5 @@
      * @return HSSFCell representing that column or null if undefined.
      */
+    @Override
     public HSSFCell getCell(int cellnum) {
         return getCell(cellnum, book.getMissingCellPolicy());
@@ -263,4 +263,5 @@
      * @return representing that column or null if undefined + policy allows.
      */
+    @Override
     public HSSFCell getCell(int cellnum, MissingCellPolicy policy) {
         HSSFCell cell = retrieveCell(cellnum);
@@ -285,4 +286,31 @@
 
     /**
+     * Gets the index of the last cell contained in this row <b>PLUS ONE</b>. The result also
+     * happens to be the 1-based column number of the last cell.  This value can be used as a
+     * standard upper bound when iterating over cells:
+     * <pre>
+     * short minColIx = row.getFirstCellNum();
+     * short maxColIx = row.getLastCellNum();
+     * for(short colIx=minColIx; colIx&lt;maxColIx; colIx++) {
+     *   HSSFCell cell = row.getCell(colIx);
+     *   if(cell == null) {
+     *     continue;
+     *   }
+     *   //... do something with cell
+     * }
+     * </pre>
+     *
+     * @return short representing the last logical cell in the row <b>PLUS ONE</b>, or -1 if the
+     *  row does not contain any cells.
+     */
+    @Override
+    public short getLastCellNum() {
+        if (row.isEmpty()) {
+            return -1;
+        }
+        return (short) row.getLastCol();
+    }
+
+    /**
      * get the lowlevel RowRecord represented by this object - should only be called
      * by other parts of the high level API
@@ -290,5 +318,4 @@
      * @return RowRecord this row represents
      */
-
     protected RowRecord getRowRecord()
     {
@@ -296,68 +323,5 @@
     }
 
-    /**
-     * @return cell iterator of the physically defined cells.
-     * Note that the 4th element might well not be cell 4, as the iterator
-     *  will not return un-defined (null) cells.
-     * Call getCellNum() on the returned cells to know which cell they are.
-     * As this only ever works on physically defined cells,
-     *  the {@link org.apache.poi.ss.usermodel.Row.MissingCellPolicy} has no effect.
-     */
-    public Iterator<Cell> cellIterator()
-    {
-      return new CellIterator();
-    }
-    /**
-     * Alias for {@link #cellIterator} to allow
-     *  foreach loops
-     */
-    public Iterator<Cell> iterator() {
-       return cellIterator();
-    }
-
-    /**
-     * An iterator over the (physical) cells in the row.
-     */
-    private class CellIterator implements Iterator<Cell> {
-      int thisId=-1;
-      int nextId=-1;
-
-      public CellIterator()
-      {
-        findNext();
-      }
-
-      public boolean hasNext() {
-        return nextId<cells.length;
-      }
-
-      public Cell next() {
-          if (!hasNext())
-              throw new NoSuchElementException("At last element");
-        HSSFCell cell=cells[nextId];
-        thisId=nextId;
-        findNext();
-        return cell;
-      }
-
-      public void remove() {
-          if (thisId == -1)
-              throw new IllegalStateException("remove() called before next()");
-        cells[thisId]=null;
-      }
-
-      private void findNext()
-      {
-        int i=nextId+1;
-        for(;i<cells.length;i++)
-        {
-          if(cells[i]!=null) break;
-        }
-        nextId=i;
-      }
-
-    }
-
-
+    @Override
     public boolean equals(Object obj)
     {
Index: applications/editors/josm/plugins/opendata/includes/org/apache/poi/ss/usermodel/Row.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/apache/poi/ss/usermodel/Row.java	(revision 31942)
+++ applications/editors/josm/plugins/opendata/includes/org/apache/poi/ss/usermodel/Row.java	(revision 34072)
@@ -18,10 +18,8 @@
 package org.apache.poi.ss.usermodel;
 
-import java.util.Iterator;
-
 /**
  * High level representation of a row of a spreadsheet.
  */
-public interface Row extends Iterable<Cell> {
+public interface Row {
 
     /**
@@ -75,5 +73,5 @@
      */
     Cell getCell(int cellnum);
-    
+
     /**
      * Returns the cell at the given (0 based) index, with the specified {@link org.apache.poi.ss.usermodel.Row.MissingCellPolicy}
@@ -88,8 +86,23 @@
 
     /**
-     * @return Cell iterator of the physically defined cells.  Note element 4 may
-     * actually be row cell depending on how many are defined!
+     * Gets the index of the last cell contained in this row <b>PLUS ONE</b>. The result also
+     * happens to be the 1-based column number of the last cell.  This value can be used as a
+     * standard upper bound when iterating over cells:
+     * <pre>
+     * short minColIx = row.getFirstCellNum();
+     * short maxColIx = row.getLastCellNum();
+     * for(short colIx=minColIx; colIx&lt;maxColIx; colIx++) {
+     *   Cell cell = row.getCell(colIx);
+     *   if(cell == null) {
+     *     continue;
+     *   }
+     *   //... do something with cell
+     * }
+     * </pre>
+     *
+     * @return short representing the last logical cell in the row <b>PLUS ONE</b>,
+     *   or -1 if the row does not contain any cells.
      */
-    Iterator<Cell> cellIterator();
+    short getLastCellNum();
 
     /**
