Index: /applications/editors/josm/plugins/smed2/src/S57/S57dat.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/S57/S57dat.java	(revision 28937)
+++ /applications/editors/josm/plugins/smed2/src/S57/S57dat.java	(revision 28938)
@@ -1,5 +1,22 @@
 package S57;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Dimension;
+import java.awt.event.ActionListener;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import javax.swing.*;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.data.osm.DataSet;
+
+import panels.PanelMain;
+
+import smed2.Smed2Action;
 
 import S57.S57obj;
@@ -7,12 +24,118 @@
 import S57.S57val;
 
-public class S57dat {
+public class S57dat extends JPanel {
 	
-	private class LRleader {
-		public int rlen;
+	private enum S57field { DSID, DSSI, DSPM, DSPR, DSRC, DSHT, DSAC, CATD, CATX, DDDF, DDDR, DDDI, DDOM, DDRF, DDSI, DDSC,
+		FRID, FOID, ATTF, NATF, FFPC, FFPT, FSPC, FSPT, VRID, ATTV, VRPC, VRPT, SGCC, SG2D, SG3D, ARCC, AR2D, EL2D, CT2D }
+	private enum S57dsid { RCNM, RCID, EXPP, INTU, DSNM, EDTN, UPDN, UADT, ISDT, STED, PRSP, PSDN, PRED, PROF, AGEN, COMT }
+	private enum S57dssi { DSTR, AALL, NALL, NOMR, NOCR, NOGR, NOLR, NOIN, NOCN, NOED, NOFA }
+	private enum S57dspm { RCNM, RCID, HDAT, VDAT, SDAT, CSCL, DUNO, HUNI, PUNI, COUN, COMF, SOMF, COMT }
+	private enum S57dspr { PROJ, PRP1, PRP2, PRP3, PRP4, FEAS, FNOR, FPMF, COMT }
+	private enum S57dsrc { RPID, RYCO, RXCO, CURP, FPMF, RXVL, RYVL, COMT }
+	private enum S57dsht { RCNM, RCID, PRCO, ESDT, LSDT, DCRT, CODT, COMT }
+	private enum S57dsac { RCNM, RCID, PACC, HACC, SACC, FPMF, COMT }
+	private enum S57catd { RCNM, RCID, FILE, LFIL, VOLM, IMPL, SLAT, WLON, NLAT, ELON, CRCS, COMT }
+	private enum S57catx { RCNM, RCID, NAM1, NAM2, COMT }
+	private enum S57dddf { RCNM, RCID, OORA, OAAC, OACO, OALL, OATY, DEFN, AUTH, COMT }
+	private enum S57dddr { RFTP, RFVL }
+	private enum S57dddi { RCNM, RCID, ATLB, ATDO, ADMU, ADFT, AUTH, COMT }
+	private enum S57ddom { RAVA, DVAL, DVSD, DEFN, AUTH }
+	private enum S57ddrf { RFTP, RFVL }
+	private enum S57ddsi { RCNM, RCID, OBLB }
+	private enum S57ddsc { ATLB, ASET, AUTH }
+	private enum S57frid { RCNM, RCID, PRIM, GRUP, OBJL, RVER, RUIN }
+	private enum S57foid { AGEN, FIDN, FIDS }
+	private enum S57attf { ATTL, ATVL }
+	private enum S57natf { ATTL, ATVL }
+	private enum S57ffpc { FFUI, FFIX, NFPT }
+	private enum S57ffpt { LNAM, RIND, COMT }
+	private enum S57fspc { FSUI, FSIX, NSPT }
+	private enum S57fspt { NAME, ORNT, USAG, MASK }
+	private enum S57vrid { RCNM, RCID, RVER, RUIN }
+	private enum S57attv { ATTL, ATVL }
+	private enum S57vrpc { VPUI, VPIX, NVPT }
+	private enum S57vrpt { NAME, ORNT, USAG, TOPI, MASK }
+	private enum S57sgcc { CCUI, CCIX, CCNC }
+	private enum S57sg2d { YCOO, XCOO }
+	private enum S57sg3d { YCOO, XCOO, VE3D }
+	private enum S57arcc { ATYP, SURF, ORDR, RESO, FPMF }
+	private enum S57ar2d { STPT, CTPT, ENPT, YCOO, XCOO }
+	private enum S57el2d { STPT, CTPT, ENPT, CDPM, CDPR, YCOO, XCOO }
+	private enum S57ct2d { YCOO, XCOO }
+	
+	private File importFile;
+	private FileInputStream inp;
+	private OsmDataLayer layer;
+	private DataSet data;
+
+	private JButton importButton;
+	private ActionListener alImport = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			if (e.getSource() == importButton) {
+				readFile();
+		    Smed2Action.panelS57.setVisible(false);
+		    Smed2Action.panelMain.setVisible(true);
+        PanelMain.messageBar.setText("File imported");
+      }
+		}
+	};
+	private JButton cancelButton;
+	private ActionListener alCancel = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			if (e.getSource() == cancelButton) {
+				try {
+					inp.close();
+				} catch (IOException e1) {}
+		    Smed2Action.panelS57.setVisible(false);
+		    Smed2Action.panelMain.setVisible(true);
+        PanelMain.messageBar.setText("Import cancelled");
+      }
+		}
+	};
+
+	public S57dat() {
+		
+		setLayout(null);
+		setSize(new Dimension(480, 480));
+		cancelButton = new JButton();
+		cancelButton.setBounds(250, 430, 100, 20);
+		cancelButton.setText(tr("Cancel"));
+		cancelButton.addActionListener(alCancel);
+		add(cancelButton);
+		importButton = new JButton();
+		importButton.setBounds(370, 430, 100, 20);
+		importButton.setText(tr("Import"));
+		importButton.addActionListener(alImport);
+		add(importButton);
 	}
 
-	public S57dat(File file) {
-		
+	public void startImport(File file) {
+		importFile = file;
+		try {
+			inp = new FileInputStream(file);
+		} catch (IOException e) {
+      PanelMain.messageBar.setText("Failed to open file");
+			return;
+		}
+    Smed2Action.panelMain.setVisible(false);
+    Smed2Action.panelS57.setVisible(true);
+	}
+
+	private void readFile() {
+		// Read & convert file.
+			// read record at a time
+				// read leader
+				// if DDR, build conversion tables
+				// if DR, build data structures
+		// Extract list of features & present on chooser panel
+	}
+
+	private void importData() {
+		data = new DataSet();
+		// Transfer selected features
+		layer = new OsmDataLayer(data, importFile.getName(), null);
+		layer.setUploadDiscouraged(true);
+		Main.main.addLayer(layer);
+
 	}
 }
Index: /applications/editors/josm/plugins/smed2/src/S57/S57obj.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/S57/S57obj.java	(revision 28937)
+++ /applications/editors/josm/plugins/smed2/src/S57/S57obj.java	(revision 28938)
@@ -11,5 +11,5 @@
 		DMPGRD, DYKCON, EXEZNE, FAIRWY, FNCLNE, FERYRT, FSHZNE, FSHFAC, FSHGRD, FLODOC, FOGSIG, FORSTC, FRPARE, GATCON, GRIDRN, HRBARE,
 		HRBFAC, HULKES, ICEARE, ICNARE, ISTZNE, LAKARE, LAKSHR, LNDARE, LNDELV, LNDRGN, LNDMRK, LIGHTS, LITFLT, LITVES, LOCMAG, LOKBSN,
-		LOGPON, MAGVAR, MARCUL, MIPARE, MORFAC, NAVLNE, OBSTRN, OFSPLF, OSPARE, OILBAR, PILPNT, PILBOP, PIPARE, PIPOHD, PIPSOL, PONTON,
+		LOGPON, MAGVAR, MARCUL, MIPARE, MORFAC, /*MPAARE,*/ NAVLNE, OBSTRN, OFSPLF, OSPARE, OILBAR, PILPNT, PILBOP, PIPARE, PIPOHD, PIPSOL, PONTON,
 		PRCARE, PRDARE, PYLONS, RADLNE, RADRNG, RADRFL, RADSTA, RTPBCN, RDOCAL, RDOSTA, RAILWY, RAPIDS, RCRTCL, RECTRC, RCTLPT, RSCSTA,
 		RESARE, RETRFL, RIVERS, RIVBNK, ROADWY, RUNWAY, SNDWAV, SEAARE, SPLARE, SBDARE, SLCONS, SISTAT, SISTAW, SILTNK, SLOTOP, SLOGRD,
@@ -40,4 +40,5 @@
 		ObjS57.put(Obj.LIGHTS,75); ObjS57.put(Obj.LITFLT,76); ObjS57.put(Obj.LITVES,77); ObjS57.put(Obj.LOCMAG,78); ObjS57.put(Obj.LOKBSN,79);
 		ObjS57.put(Obj.LOGPON,80); ObjS57.put(Obj.MAGVAR,81); ObjS57.put(Obj.MARCUL,82); ObjS57.put(Obj.MIPARE,83); ObjS57.put(Obj.MORFAC,84);
+//		ObjS57.put(Obj.MPAARE,?); 
 		ObjS57.put(Obj.NAVLNE,85); ObjS57.put(Obj.OBSTRN,86); ObjS57.put(Obj.OFSPLF,87); ObjS57.put(Obj.OSPARE,88); ObjS57.put(Obj.OILBAR,89);
 		ObjS57.put(Obj.PILPNT,90); ObjS57.put(Obj.PILBOP,91);	ObjS57.put(Obj.PIPARE,92); ObjS57.put(Obj.PIPOHD,93); ObjS57.put(Obj.PIPSOL,94);
Index: /applications/editors/josm/plugins/smed2/src/S57/S57val.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/S57/S57val.java	(revision 28937)
+++ /applications/editors/josm/plugins/smed2/src/S57/S57val.java	(revision 28938)
@@ -550,9 +550,9 @@
 	  Functn.put(FncFNC.FNC_PILO, new S57enum(11, "pilot_office")); Functn.put(FncFNC.FNC_PILL, new S57enum(12, "pilot_lookout")); Functn.put(FncFNC.FNC_BANK, new S57enum(13, "bank"));
 	  Functn.put(FncFNC.FNC_DIST, new S57enum(14, "district_control")); Functn.put(FncFNC.FNC_TRNS, new S57enum(15, "transit_shed")); Functn.put(FncFNC.FNC_FCTY, new S57enum(16, "factory"));
-	  Functn.put(FncFNC.FNC_POWR, new S57enum(17, "power_station")); Functn.put(FncFNC.FNC_ADMIN, new S57enum(18, "administrative")); Functn.put(FncFNC.FNC_EDUC, new S57enum(19, "eduCational"));
+	  Functn.put(FncFNC.FNC_POWR, new S57enum(17, "power_station")); Functn.put(FncFNC.FNC_ADMIN, new S57enum(18, "administrative")); Functn.put(FncFNC.FNC_EDUC, new S57enum(19, "educational"));
 	  Functn.put(FncFNC.FNC_CHCH, new S57enum(20, "church")); Functn.put(FncFNC.FNC_CHPL, new S57enum(21, "chapel")); Functn.put(FncFNC.FNC_TMPL, new S57enum(22, "temple"));
 	  Functn.put(FncFNC.FNC_PGDA, new S57enum(23, "pagoda")); Functn.put(FncFNC.FNC_SHSH, new S57enum(24, "shinto_shrine")); Functn.put(FncFNC.FNC_BTMP, new S57enum(25, "buddhist_temple"));
 	  Functn.put(FncFNC.FNC_MOSQ, new S57enum(26, "mosque")); Functn.put(FncFNC.FNC_MRBT, new S57enum(27, "marabout")); Functn.put(FncFNC.FNC_LOOK, new S57enum(28, "lookout"));
-	  Functn.put(FncFNC.FNC_COMM, new S57enum(29, "communiCation")); Functn.put(FncFNC.FNC_TV, new S57enum(30, "television")); Functn.put(FncFNC.FNC_RADO, new S57enum(31, "radio"));
+	  Functn.put(FncFNC.FNC_COMM, new S57enum(29, "communication")); Functn.put(FncFNC.FNC_TV, new S57enum(30, "television")); Functn.put(FncFNC.FNC_RADO, new S57enum(31, "radio"));
 	  Functn.put(FncFNC.FNC_RADR, new S57enum(32, "radar")); Functn.put(FncFNC.FNC_LGHT, new S57enum(33, "light_support")); Functn.put(FncFNC.FNC_MCWV, new S57enum(34, "microwave"));
 	  Functn.put(FncFNC.FNC_COOL, new S57enum(35, "cooling")); Functn.put(FncFNC.FNC_OBS, new S57enum(36, "observation")); Functn.put(FncFNC.FNC_TMBL, new S57enum(37, "time_ball"));
@@ -1014,5 +1014,5 @@
 		keys.put(Att.DRVAL1, new S57key(Conv.F, null)); keys.put(Att.DRVAL2, new S57key(Conv.F, null)); keys.put(Att.DUNITS, new S57key(Conv.E, Dunits));
 		keys.put(Att.ELEVAT, new S57key(Conv.F, null)); keys.put(Att.ESTRNG, new S57key(Conv.F, null)); keys.put(Att.EXCLIT, new S57key(Conv.E, Exclit));
-		keys.put(Att.EXPSOU, new S57key(Conv.E, Expsou)); keys.put(Att.FUNCTN, new S57key(Conv.L, Functn)); keys.put(Att.HEIGHT, new S57key(Conv.A, null));
+		keys.put(Att.EXPSOU, new S57key(Conv.E, Expsou)); keys.put(Att.FUNCTN, new S57key(Conv.L, Functn)); keys.put(Att.HEIGHT, new S57key(Conv.F, null));
 		keys.put(Att.HUNITS, new S57key(Conv.E, Hunits)); keys.put(Att.HORACC, new S57key(Conv.F, null)); keys.put(Att.HORCLR, new S57key(Conv.F, null));
 		keys.put(Att.HORLEN, new S57key(Conv.F, null)); keys.put(Att.HORWID, new S57key(Conv.F, null)); keys.put(Att.ICEFAC, new S57key(Conv.F, null));
@@ -1020,5 +1020,5 @@
 		keys.put(Att.$JUSTV, new S57key(Conv.E, null)); keys.put(Att.LIFCAP, new S57key(Conv.F, null)); keys.put(Att.LITCHR, new S57key(Conv.E, Litchr));
 		keys.put(Att.LITVIS, new S57key(Conv.L, Litvis)); keys.put(Att.MARSYS, new S57key(Conv.E, Marsys)); keys.put(Att.MLTYLT, new S57key(Conv.I, null));
-		keys.put(Att.NATION, new S57key(Conv.A, null)); keys.put(Att.NATCON, new S57key(Conv.L, Natcon)); keys.put(Att.NATSUR, new S57key(Conv.L, Natsur));
+		keys.put(Att.NATION, new S57key(Conv.A, null)); keys.put(Att.NATCON, new S57key(Conv.E, Natcon)); keys.put(Att.NATSUR, new S57key(Conv.L, Natsur));
 		keys.put(Att.NATQUA, new S57key(Conv.L, Natqua)); keys.put(Att.NMDATE, new S57key(Conv.A, null)); keys.put(Att.OBJNAM, new S57key(Conv.S, null));
 		keys.put(Att.ORIENT, new S57key(Conv.F, null)); keys.put(Att.PEREND, new S57key(Conv.A, null)); keys.put(Att.PERSTA, new S57key(Conv.A, null));
Index: /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java	(revision 28937)
+++ /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java	(revision 28938)
@@ -7,9 +7,10 @@
 import java.awt.Rectangle;
 import java.awt.event.ActionListener;
-import java.io.File;
 
 import javax.swing.*;
 
 import org.openstreetmap.josm.Main;
+
+import smed2.Smed2Action;
 
 import S57.S57dat;
@@ -28,14 +29,16 @@
 		}
 	};
-	public JButton openButton = null;
+	private JButton openButton = null;
 	final JFileChooser fc = new JFileChooser();
 	private ActionListener alOpen = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
 			if (e.getSource() == openButton) {
+        messageBar.setText("Select file");
         int returnVal = fc.showOpenDialog(Main.parent);
         if (returnVal == JFileChooser.APPROVE_OPTION) {
-            new S57dat(fc.getSelectedFile());
-            messageBar.setText("Opening file");
-        }
+          Smed2Action.panelS57.startImport(fc.getSelectedFile());
+         } else {
+           messageBar.setText("");
+         }
       }
 		}
@@ -55,14 +58,14 @@
 		
     messageBar = new JTextField();
-    messageBar.setBounds(new Rectangle(40, 430, 320, 20));
+    messageBar.setBounds(40, 430, 320, 20);
     messageBar.setEditable(false);
     messageBar.setBackground(Color.WHITE);
     add(messageBar);
 		openButton = new JButton(new ImageIcon(getClass().getResource("/images/fileButton.png")));
-		openButton.setBounds(new Rectangle(10, 430, 20, 20));
+		openButton.setBounds(10, 430, 20, 20);
 		add(openButton);
 		openButton.addActionListener(alOpen);
 		saveButton = new JButton();
-		saveButton.setBounds(new Rectangle(370, 430, 100, 20));
+		saveButton.setBounds(370, 430, 100, 20);
 		saveButton.setText(tr("Save"));
 		add(saveButton);
Index: /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java	(revision 28937)
+++ /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java	(revision 28938)
@@ -15,4 +15,6 @@
 import org.openstreetmap.josm.Main;
 
+import S57.S57dat;
+
 import panels.PanelMain;
 
@@ -21,7 +23,8 @@
 	private static final long serialVersionUID = 1L;
 	private static String editor = tr("SeaMap Editor");
-	private JFrame frame = null;
+	public static JFrame frame = null;
+	public static S57dat panelS57;
 	private boolean isOpen = false;
-	public PanelMain panelMain = null;
+	public static PanelMain panelMain = null;
 	public ImageryLayer rendering;
 
@@ -58,4 +61,7 @@
 		panelMain = new PanelMain();
 		frame.add(panelMain);
+		panelS57 = new S57dat();
+		panelS57.setVisible(false);
+		frame.add(panelS57);
 System.out.println("hello");
 		rendering = ImageryLayer.create(new ImageryInfo("OpenSeaMap"));
