Index: applications/editors/josm/plugins/seachart/jrenderpgsql/src/jrenderpgsql/JrenderPgsql.java
===================================================================
--- applications/editors/josm/plugins/seachart/jrenderpgsql/src/jrenderpgsql/JrenderPgsql.java	(revision 35109)
+++ applications/editors/josm/plugins/seachart/jrenderpgsql/src/jrenderpgsql/JrenderPgsql.java	(revision 35110)
@@ -34,4 +34,5 @@
 import org.postgis.LineString;
 import org.postgis.Polygon;
+import org.postgis.MultiPolygon;
 import org.postgis.LinearRing;
 import org.postgis.PGgeometry;
@@ -109,9 +110,26 @@
     }
 
+    private static void addpoly(Polygon po, String table, String osmid) 
+    {
+        if (po.numRings() > 1)
+        {
+            System.err.println("warning: polygons with holes not supported (" + table + " id=" + osmid + ")");
+        }
+        LinearRing lr = (LinearRing) po.getRing(0);
+        waybuf.append("<way id=\"");
+        waybuf.append(++wid);
+        waybuf.append("\" version=\"1\" user=\"1\" uid=\"1\" changeset=\"1\" timestamp=\"1980-01-01T00:00:00Z\">\n");
+        for (int i=0; i < lr.numPoints(); i++)
+        {
+            int n = addnode ((Point) lr.getPoint(i), true);
+            waybuf.append("<nd ref=\"" + n + "\" />\n");
+        }
+    }
+
     /**
      *  helper for adding a PostGIS geometry to pseudo OSM XML
      *  @returns either the node or the way string buffer, depending on geom type
      */
-    private static StringBuilder decode_geom(PGgeometry geom)
+    private static StringBuilder decode_geom(PGgeometry geom, String table, String osmid)
     {
         if (geom.getGeoType() == Geometry.POINT) 
@@ -135,17 +153,13 @@
         else if (geom.getGeoType() == Geometry.POLYGON)
         {
-            Polygon po = (Polygon) geom.getGeometry();
-            if (po.numRings() > 1)
-            {
-                System.err.println("warning: polygons with holes not supported");
-            }
-            LinearRing lr = (LinearRing) po.getRing(0);
-            waybuf.append("<way id=\"");
-            waybuf.append(++wid);
-            waybuf.append("\" version=\"1\" user=\"1\" uid=\"1\" changeset=\"1\" timestamp=\"1980-01-01T00:00:00Z\">\n");
-            for (int i=0; i < lr.numPoints(); i++)
-            {
-                int n = addnode ((Point) lr.getPoint(i), true);
-                waybuf.append("<nd ref=\"" + n + "\" />\n");
+            addpoly((Polygon) geom.getGeometry(), table, osmid);
+            return waybuf;
+        }
+        else if (geom.getGeoType() == Geometry.MULTIPOLYGON)
+        {
+            MultiPolygon po = (MultiPolygon) geom.getGeometry();
+            for (Polygon p : po.getPolygons())
+            {
+                addpoly(p, table, osmid);
             }
             return waybuf;
@@ -299,4 +313,5 @@
             int geomcol = 0;
             int tagscol = 0;
+            int idcol = 0;
             for (int i = 1; i<colCount; i++)
             {
@@ -306,4 +321,6 @@
                 } else if (n.equals("tags")) {
                     tagscol = i;
+                } else if (n.equals("osm_id")) {
+                    idcol = i;
                 } else if (n.equals("mygeom")) {
                     geomcol = i;
@@ -330,5 +347,6 @@
             {
                 PGgeometry geom = (PGgeometry) rs.getObject(geomcol);
-                StringBuilder currentbuf = decode_geom(geom);
+                String osmid = (idcol> 0) ? rs.getString(idcol) : "nil";
+                StringBuilder currentbuf = decode_geom(geom, table, osmid);
 
                 for (int i = 1; i<colCount; i++)
