Index: applications/editors/josm/plugins/smed2/src/s57/S57map.java
===================================================================
--- applications/editors/josm/plugins/smed2/src/s57/S57map.java	(revision 30281)
+++ applications/editors/josm/plugins/smed2/src/s57/S57map.java	(revision 30282)
@@ -316,10 +316,21 @@
 				feature.geom.refs.add(comp);
 				ListIterator<S57map.Prim> ite = feature.geom.elems.listIterator();
+				long first = 0;
 				while (ite.hasNext()) {
 					Prim prim = ite.next();
-					if (prim.outer) {
-						comp.size++;
-						
+					Edge edge = edges.get(prim.id);
+					if (!prim.outer) {
+						if (first == 0) {
+							feature.geom.inners++;
+							comp = new Comp(ref++, 0);
+							feature.geom.refs.add(comp);
+							first = edge.first;
+						} else {
+							if (edge.last == first) {
+								first = 0;
+							}
+						}
 					}
+					comp.size++;
 				}
 			}
@@ -609,11 +620,15 @@
 		}
 		
-		public long nextRef() {
+		public long nextRef(boolean all) {
 			long ref = eit.nextRef();
-			if (ref == lastref) {
+			if (!all && (ref == lastref)) {
 				ref = eit.nextRef();
 			}
 			lastref = ref;
 			return ref;
+		}
+		
+		public long nextRef() {
+			return nextRef(false);
 		}
 		
Index: applications/editors/josm/plugins/smed2/src/s57/S57obj.java
===================================================================
--- applications/editors/josm/plugins/smed2/src/s57/S57obj.java	(revision 30281)
+++ applications/editors/josm/plugins/smed2/src/s57/S57obj.java	(revision 30282)
@@ -131,6 +131,6 @@
 		ObjStr.put(Obj.TS_FEB, "tidal_stream");	ObjStr.put(Obj.NOTMRK, "notice");	ObjStr.put(Obj.WTWAXS, "waterway_axis"); ObjStr.put(Obj.WTWPRF, "waterway_profile");
 		ObjStr.put(Obj.BRGARE, "bridge_area"); ObjStr.put(Obj.BUNSTA, "bunker_station");	ObjStr.put(Obj.COMARE, "communication_area");	ObjStr.put(Obj.HRBBSN, "harbour_basin");
-		ObjStr.put(Obj.LOKARE, "lock_area"); ObjStr.put(Obj.LKBSPT, "lock_basin_part"); ObjStr.put(Obj.PRTARE, "port_area");	ObjStr.put(Obj.BCNWTW, "beacon_waterway");
-		ObjStr.put(Obj.BOYWTW, "buoy_waterway"); ObjStr.put(Obj.REFDMP, "refuse_dump"); ObjStr.put(Obj.RTPLPT, "route_planning_point"); ObjStr.put(Obj.TERMNL, "terminal");
+		ObjStr.put(Obj.LOKARE, "lock_area"); ObjStr.put(Obj.LKBSPT, "lock_basin_part"); ObjStr.put(Obj.PRTARE, "port_area");	ObjStr.put(Obj.BCNWTW, "beacon_lateral");
+		ObjStr.put(Obj.BOYWTW, "buoy_lateral"); ObjStr.put(Obj.REFDMP, "refuse_dump"); ObjStr.put(Obj.RTPLPT, "route_planning_point"); ObjStr.put(Obj.TERMNL, "terminal");
 		ObjStr.put(Obj.TRNBSN, "turning_basin"); ObjStr.put(Obj.WTWARE, "waterway_area"); ObjStr.put(Obj.WTWGAG, "waterway_gauge"); ObjStr.put(Obj.TISDGE, "time_schedule");
 		ObjStr.put(Obj.VEHTRF, "vehicle_transfer"); ObjStr.put(Obj.EXCNST, "exceptional_structure");
