Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerAction.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerAction.java	(revision 12891)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerAction.java	(revision 12892)
@@ -258,5 +258,5 @@
             }
 
-            way.put("created_by", "Dshpak_landsat_lakes");
+            way.put("source", Main.pref.get(LakewalkerPreferences.PREF_SOURCE, "water"));
             commands.add(new AddCommand(way));
 
@@ -277,5 +277,5 @@
     }
 
-    way.put("created_by", "Dshpak_landsat_lakes");
+    way.put("source", Main.pref.get(LakewalkerPreferences.PREF_SOURCE, "water"));
 
     way.nodes.add(fn);
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 12891)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 12892)
@@ -1,4 +1,5 @@
 package org.openstreetmap.josm.plugins.lakewalker;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -12,139 +13,148 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
+
 public class LakewalkerPreferences implements PreferenceSetting {
+    public static final String[] DIRECTIONS = new String[]
+    {marktr("east"), marktr("northeast"), marktr("north"), marktr("northwest"),
+    marktr("west"), marktr("southwest"), marktr("south"), marktr("southeast")};
+    public static final String[] WAYTYPES = new String[]
+    {marktr("water"), marktr("coastline"), marktr("land"), marktr("none")};
+    public static final String[] WMSLAYERS = new String[] {"IR1", "IR2", "IR3"};
 
-  // TODO: Make these translatable
-  public static final String[] DIRECTIONS = new String[] {"east", "northeast", "north", "northwest", "west", "southwest", "south", "southeast"};
-  public static final String[] WAYTYPES = new String[] {"water", "coastline", "land", "none"};
-  public static final String[] WMSLAYERS = new String[] {"IR1", "IR2", "IR3"};
+    public static final String PREF_MAX_SEG = "lakewalker.max_segs_in_way";
+    public static final String PREF_MAX_NODES = "lakewalker.max_nodes";
+    public static final String PREF_THRESHOLD_VALUE = "lakewalker.thresholdvalue";
+    public static final String PREF_EPSILON = "lakewalker.epsilon";
+    public static final String PREF_LANDSAT_RES = "lakewalker.landsat_res";
+    public static final String PREF_LANDSAT_SIZE = "lakewalker.landsat_size";
+    public static final String PREF_EAST_OFFSET = "lakewalker.east_offset";
+    public static final String PREF_NORTH_OFFSET = "lakewalker.north_offset";
+    public static final String PREF_START_DIR = "lakewalker.startdir";
+    public static final String PREF_WAYTYPE = "lakewalker.waytype";
+    public static final String PREF_WMS = "lakewalker.wms";
+    public static final String PREF_SOURCE = "lakewalker.source";
+    public static final String PREF_MAXCACHESIZE = "lakewalker.maxcachesize";
+    public static final String PREF_MAXCACHEAGE = "lakewalker.maxcacheage";
 
-  public static final String PREF_MAX_SEG = "lakewalker.max_segs_in_way";
-  public static final String PREF_MAX_NODES = "lakewalker.max_nodes";
-  public static final String PREF_THRESHOLD_VALUE = "lakewalker.thresholdvalue";
-  public static final String PREF_EPSILON = "lakewalker.epsilon";
-  public static final String PREF_LANDSAT_RES = "lakewalker.landsat_res";
-  public static final String PREF_LANDSAT_SIZE = "lakewalker.landsat_size";
-  public static final String PREF_EAST_OFFSET = "lakewalker.east_offset";
-  public static final String PREF_NORTH_OFFSET = "lakewalker.north_offset";
-  public static final String PREF_START_DIR = "lakewalker.startdir";
-  public static final String PREF_WAYTYPE = "lakewalker.waytype";
-  public static final String PREF_WMS = "lakewalker.wms";
-  public static final String PREF_MAXCACHESIZE = "lakewalker.maxcachesize";
-  public static final String PREF_MAXCACHEAGE = "lakewalker.maxcacheage";
-    
-  protected IntConfigurer maxSegsConfig = new IntConfigurer();
-  protected JLabel maxSegsLabel = new JLabel(tr("Maximum number of segments per way"));
-  protected IntConfigurer maxNodesConfig = new IntConfigurer();
-  protected JLabel maxNodesLabel = new JLabel(tr("Maximum number of nodes in initial trace"));
-  protected IntConfigurer thresholdConfig = new IntConfigurer();
-  protected JLabel thresholdLabel = new JLabel(tr("Maximum gray value to count as water (0-255)"));
-  protected DoubleConfigurer epsilonConfig = new DoubleConfigurer();
-  protected JLabel epsilonLabel = new JLabel(tr("Line simplification accuracy (degrees)"));
-  protected IntConfigurer landsatResConfig = new IntConfigurer();
-  protected JLabel landsatResLabel = new JLabel(tr("Resolution of Landsat tiles (pixels per degree)"));
-  protected IntConfigurer landsatSizeConfig = new IntConfigurer();
-  protected JLabel landsatSizeLabel = new JLabel(tr("Size of Landsat tiles (pixels)"));
-  protected DoubleConfigurer eastOffsetConfig = new DoubleConfigurer();
-  protected JLabel eastOffsetLabel = new JLabel(tr("Shift all traces to east (degrees)"));
-  protected DoubleConfigurer northOffsetConfig = new DoubleConfigurer();
-  protected JLabel northOffsetLabel = new JLabel(tr("Shift all traces to north (degrees)"));
-  protected StringEnumConfigurer startDirConfig = new StringEnumConfigurer(DIRECTIONS);
-  protected JLabel startDirLabel = new JLabel(tr("Direction to search for land"));
-  protected StringEnumConfigurer lakeTypeConfig = new StringEnumConfigurer(WAYTYPES);
-  protected JLabel lakeTypeLabel = new JLabel(tr("Tag ways as"));
-  protected StringEnumConfigurer wmsConfig = new StringEnumConfigurer(WMSLAYERS);
-  protected JLabel wmsLabel = new JLabel(tr("WMS Layer"));
-  protected IntConfigurer maxCacheSizeConfig = new IntConfigurer();
-  protected JLabel maxCacheSizeLabel = new JLabel(tr("Maximum cache size (MB)"));
-  protected IntConfigurer maxCacheAgeConfig = new IntConfigurer();
-  protected JLabel maxCacheAgeLabel = new JLabel(tr("Maximum cache age (days)"));
-  
-  public void addGui(PreferenceDialog gui) {
-    maxSegsConfig.setToolTipText(tr("Maximum number of segments allowed in each generated way. Default 250."));
-    maxNodesConfig.setToolTipText(tr("Maximum number of nodes to generate before bailing out (before simplifying lines). Default 50000."));
-    thresholdConfig.setToolTipText(tr("Maximum gray value to accept as water (based on Landsat IR-1 data). Can be in the range 0-255. Default 90."));
-    epsilonConfig.setToolTipText(tr("Accuracy of Douglas-Peucker line simplification, measured in degrees.<br>Lower values give more nodes, and more accurate lines. Default 0.0003."));
-    landsatResConfig.setToolTipText(tr("Resolution of Landsat tiles, measured in pixels per degree. Default 4000."));
-    landsatSizeConfig.setToolTipText(tr("Size of one landsat tile, measured in pixels. Default 2000."));
-    eastOffsetConfig.setToolTipText(tr("Offset all points in East direction (degrees). Default 0."));   
-    northOffsetConfig.setToolTipText(tr("Offset all points in North direction (degrees). Default 0."));   
-    startDirConfig.setToolTipText(tr("Direction to search for land. Default east."));
-    lakeTypeConfig.setToolTipText(tr("Tag ways as water, coastline, land or nothing. Default is water."));
-    wmsConfig.setToolTipText(tr("Which WMS layer to use for tracing against. Default is IR1."));
-    maxCacheSizeConfig.setToolTipText(tr("Maximum size of each cache directory in bytes. Default is 300MB"));
-    maxCacheAgeConfig.setToolTipText(tr("Maximum age of each cached file in days. Default is 100"));
-    
-    String description = tr("An plugin to trace water bodies on Landsat imagery.");
-    JPanel prefPanel = gui.createPreferenceTab("lakewalker.png", I18n.tr("Lakewalker Plugin Preferences"), description);
-    buildPreferences(prefPanel);
-    
-    maxSegsConfig.setValue(Main.pref.getInteger(PREF_MAX_SEG, 500));
-    maxNodesConfig.setValue(Main.pref.getInteger(PREF_MAX_NODES, 50000));
-    thresholdConfig.setValue(Main.pref.getInteger(PREF_THRESHOLD_VALUE, 90));
-    epsilonConfig.setValue(Main.pref.getDouble(PREF_EPSILON, 0.0003));
-    landsatResConfig.setValue(Main.pref.getInteger(PREF_LANDSAT_RES, 4000));
-    landsatSizeConfig.setValue(Main.pref.getInteger(PREF_LANDSAT_SIZE, 2000));
-    eastOffsetConfig.setValue(Main.pref.getDouble(PREF_EAST_OFFSET, 0.0));
-    northOffsetConfig.setValue(Main.pref.getDouble(PREF_NORTH_OFFSET, 0.0));
-    startDirConfig.setValue(Main.pref.get(PREF_START_DIR, "east"));
-    lakeTypeConfig.setValue(Main.pref.get(PREF_WAYTYPE, "water"));
-    wmsConfig.setValue(Main.pref.get(PREF_WMS, "IR1"));
-    maxCacheSizeConfig.setValue(Main.pref.getInteger(PREF_MAXCACHESIZE, 300));
-    maxCacheAgeConfig.setValue(Main.pref.getInteger(PREF_MAXCACHEAGE, 100));
-  }
-  
-  public void buildPreferences(JPanel prefPanel) {
-    GBC labelConstraints = GBC.std().insets(10,5,5,0);
-    GBC dataConstraints = GBC.eol().insets(0,5,0,0).fill(GBC.HORIZONTAL);
-    
-    prefPanel.add(maxSegsLabel, labelConstraints);
-    prefPanel.add(maxSegsConfig.getControls(), dataConstraints);
-    prefPanel.add(maxNodesLabel, labelConstraints);
-    prefPanel.add(maxNodesConfig.getControls(), dataConstraints);
-    prefPanel.add(thresholdLabel, labelConstraints);
-    prefPanel.add(thresholdConfig.getControls(), dataConstraints);
-    prefPanel.add(epsilonLabel, labelConstraints);
-    prefPanel.add(epsilonConfig.getControls(), dataConstraints);
-    prefPanel.add(landsatResLabel, labelConstraints);
-    prefPanel.add(landsatResConfig.getControls(), dataConstraints);
-    prefPanel.add(landsatSizeLabel, labelConstraints);
-    prefPanel.add(landsatSizeConfig.getControls(), dataConstraints);    
-    prefPanel.add(eastOffsetLabel, labelConstraints);
-    prefPanel.add(eastOffsetConfig.getControls(), dataConstraints);
-    prefPanel.add(northOffsetLabel, labelConstraints);
-    prefPanel.add(northOffsetConfig.getControls(), dataConstraints);
-    prefPanel.add(startDirLabel, labelConstraints);
-    prefPanel.add(startDirConfig.getControls(), dataConstraints);    
-    prefPanel.add(lakeTypeLabel, labelConstraints);
-    prefPanel.add(lakeTypeConfig.getControls(), dataConstraints);
-    prefPanel.add(wmsLabel, labelConstraints);
-    prefPanel.add(wmsConfig.getControls(), dataConstraints);
-    prefPanel.add(maxCacheSizeLabel, labelConstraints);
-    prefPanel.add(maxCacheSizeConfig.getControls(), dataConstraints);
-    prefPanel.add(maxCacheAgeLabel, labelConstraints);
-    prefPanel.add(maxCacheAgeConfig.getControls(), dataConstraints);
+    protected IntConfigurer maxSegsConfig = new IntConfigurer();
+    protected JLabel maxSegsLabel = new JLabel(tr("Maximum number of segments per way"));
+    protected IntConfigurer maxNodesConfig = new IntConfigurer();
+    protected JLabel maxNodesLabel = new JLabel(tr("Maximum number of nodes in initial trace"));
+    protected IntConfigurer thresholdConfig = new IntConfigurer();
+    protected JLabel thresholdLabel = new JLabel(tr("Maximum gray value to count as water (0-255)"));
+    protected DoubleConfigurer epsilonConfig = new DoubleConfigurer();
+    protected JLabel epsilonLabel = new JLabel(tr("Line simplification accuracy (degrees)"));
+    protected IntConfigurer landsatResConfig = new IntConfigurer();
+    protected JLabel landsatResLabel = new JLabel(tr("Resolution of Landsat tiles (pixels per degree)"));
+    protected IntConfigurer landsatSizeConfig = new IntConfigurer();
+    protected JLabel landsatSizeLabel = new JLabel(tr("Size of Landsat tiles (pixels)"));
+    protected DoubleConfigurer eastOffsetConfig = new DoubleConfigurer();
+    protected JLabel eastOffsetLabel = new JLabel(tr("Shift all traces to east (degrees)"));
+    protected DoubleConfigurer northOffsetConfig = new DoubleConfigurer();
+    protected JLabel northOffsetLabel = new JLabel(tr("Shift all traces to north (degrees)"));
+    protected StringEnumConfigurer startDirConfig = new StringEnumConfigurer(DIRECTIONS);
+    protected JLabel startDirLabel = new JLabel(tr("Direction to search for land"));
+    protected StringEnumConfigurer lakeTypeConfig = new StringEnumConfigurer(WAYTYPES);
+    protected JLabel lakeTypeLabel = new JLabel(tr("Tag ways as"));
+    protected StringEnumConfigurer wmsConfig = new StringEnumConfigurer(WMSLAYERS);
+    protected JLabel wmsLabel = new JLabel(tr("WMS Layer"));
+    protected IntConfigurer maxCacheSizeConfig = new IntConfigurer();
+    protected JLabel maxCacheSizeLabel = new JLabel(tr("Maximum cache size (MB)"));
+    protected IntConfigurer maxCacheAgeConfig = new IntConfigurer();
+    protected JLabel maxCacheAgeLabel = new JLabel(tr("Maximum cache age (days)"));
+    protected StringConfigurer sourceConfig = new StringConfigurer();
+    protected JLabel sourceLabel = new JLabel(tr("Source text"));
 
-    prefPanel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
+    public void addGui(PreferenceDialog gui) {
+        maxSegsConfig.setToolTipText(tr("Maximum number of segments allowed in each generated way. Default 250."));
+        maxNodesConfig.setToolTipText(tr("Maximum number of nodes to generate before bailing out (before simplifying lines). Default 50000."));
+        thresholdConfig.setToolTipText(tr("Maximum gray value to accept as water (based on Landsat IR-1 data). Can be in the range 0-255. Default 90."));
+        epsilonConfig.setToolTipText(tr("Accuracy of Douglas-Peucker line simplification, measured in degrees.<br>Lower values give more nodes, and more accurate lines. Default 0.0003."));
+        landsatResConfig.setToolTipText(tr("Resolution of Landsat tiles, measured in pixels per degree. Default 4000."));
+        landsatSizeConfig.setToolTipText(tr("Size of one landsat tile, measured in pixels. Default 2000."));
+        eastOffsetConfig.setToolTipText(tr("Offset all points in East direction (degrees). Default 0."));   
+        northOffsetConfig.setToolTipText(tr("Offset all points in North direction (degrees). Default 0."));   
+        startDirConfig.setToolTipText(tr("Direction to search for land. Default east."));
+        lakeTypeConfig.setToolTipText(tr("Tag ways as water, coastline, land or nothing. Default is water."));
+        wmsConfig.setToolTipText(tr("Which WMS layer to use for tracing against. Default is IR1."));
+        maxCacheSizeConfig.setToolTipText(tr("Maximum size of each cache directory in bytes. Default is 300MB"));
+        maxCacheAgeConfig.setToolTipText(tr("Maximum age of each cached file in days. Default is 100"));
+        sourceConfig.setToolTipText(tr("Data source text. Default is Landsat."));
 
-  }
+        String description = tr("An plugin to trace water bodies on Landsat imagery.");
+        JPanel prefPanel = gui.createPreferenceTab("lakewalker.png", I18n.tr("Lakewalker Plugin Preferences"), description);
+        buildPreferences(prefPanel);
 
-  /*
-   * Save entered preference values on OK button
-   */
-  public boolean ok() {
-    Main.pref.put(PREF_MAX_SEG, maxSegsConfig.getValueString());
-    Main.pref.put(PREF_MAX_NODES, maxNodesConfig.getValueString());
-    Main.pref.put(PREF_THRESHOLD_VALUE, thresholdConfig.getValueString());
-    Main.pref.put(PREF_EPSILON, epsilonConfig.getValueString());
-    Main.pref.put(PREF_LANDSAT_RES, landsatResConfig.getValueString());
-    Main.pref.put(PREF_LANDSAT_SIZE, landsatSizeConfig.getValueString());
-    Main.pref.put(PREF_EAST_OFFSET, eastOffsetConfig.getValueString());
-    Main.pref.put(PREF_NORTH_OFFSET, northOffsetConfig.getValueString());
-    Main.pref.put(PREF_START_DIR, startDirConfig.getValueString());
-    Main.pref.put(PREF_WAYTYPE, lakeTypeConfig.getValueString());
-    Main.pref.put(PREF_WMS, wmsConfig.getValueString());
-    Main.pref.put(PREF_MAXCACHESIZE, maxCacheSizeConfig.getValueString());
-    Main.pref.put(PREF_MAXCACHEAGE, maxCacheAgeConfig.getValueString());
-    return false;
-  }
+        maxSegsConfig.setValue(Main.pref.getInteger(PREF_MAX_SEG, 500));
+        maxNodesConfig.setValue(Main.pref.getInteger(PREF_MAX_NODES, 50000));
+        thresholdConfig.setValue(Main.pref.getInteger(PREF_THRESHOLD_VALUE, 90));
+        epsilonConfig.setValue(Main.pref.getDouble(PREF_EPSILON, 0.0003));
+        landsatResConfig.setValue(Main.pref.getInteger(PREF_LANDSAT_RES, 4000));
+        landsatSizeConfig.setValue(Main.pref.getInteger(PREF_LANDSAT_SIZE, 2000));
+        eastOffsetConfig.setValue(Main.pref.getDouble(PREF_EAST_OFFSET, 0.0));
+        northOffsetConfig.setValue(Main.pref.getDouble(PREF_NORTH_OFFSET, 0.0));
+        startDirConfig.setValue(Main.pref.get(PREF_START_DIR, "east"));
+        lakeTypeConfig.setValue(Main.pref.get(PREF_WAYTYPE, "water"));
+        wmsConfig.setValue(Main.pref.get(PREF_WMS, "IR1"));
+        sourceConfig.setValue(Main.pref.get(PREF_SOURCE, "Landsat"));
+        maxCacheSizeConfig.setValue(Main.pref.getInteger(PREF_MAXCACHESIZE, 300));
+        maxCacheAgeConfig.setValue(Main.pref.getInteger(PREF_MAXCACHEAGE, 100));
+    }
+
+    public void buildPreferences(JPanel prefPanel) {
+        GBC labelConstraints = GBC.std().insets(10,5,5,0);
+        GBC dataConstraints = GBC.eol().insets(0,5,0,0).fill(GBC.HORIZONTAL);
+
+        prefPanel.add(maxSegsLabel, labelConstraints);
+        prefPanel.add(maxSegsConfig.getControls(), dataConstraints);
+        prefPanel.add(maxNodesLabel, labelConstraints);
+        prefPanel.add(maxNodesConfig.getControls(), dataConstraints);
+        prefPanel.add(thresholdLabel, labelConstraints);
+        prefPanel.add(thresholdConfig.getControls(), dataConstraints);
+        prefPanel.add(epsilonLabel, labelConstraints);
+        prefPanel.add(epsilonConfig.getControls(), dataConstraints);
+        prefPanel.add(landsatResLabel, labelConstraints);
+        prefPanel.add(landsatResConfig.getControls(), dataConstraints);
+        prefPanel.add(landsatSizeLabel, labelConstraints);
+        prefPanel.add(landsatSizeConfig.getControls(), dataConstraints);    
+        prefPanel.add(eastOffsetLabel, labelConstraints);
+        prefPanel.add(eastOffsetConfig.getControls(), dataConstraints);
+        prefPanel.add(northOffsetLabel, labelConstraints);
+        prefPanel.add(northOffsetConfig.getControls(), dataConstraints);
+        prefPanel.add(startDirLabel, labelConstraints);
+        prefPanel.add(startDirConfig.getControls(), dataConstraints);    
+        prefPanel.add(lakeTypeLabel, labelConstraints);
+        prefPanel.add(lakeTypeConfig.getControls(), dataConstraints);
+        prefPanel.add(wmsLabel, labelConstraints);
+        prefPanel.add(wmsConfig.getControls(), dataConstraints);
+        prefPanel.add(maxCacheSizeLabel, labelConstraints);
+        prefPanel.add(maxCacheSizeConfig.getControls(), dataConstraints);
+        prefPanel.add(maxCacheAgeLabel, labelConstraints);
+        prefPanel.add(maxCacheAgeConfig.getControls(), dataConstraints);
+        prefPanel.add(sourceLabel, labelConstraints);
+        prefPanel.add(sourceConfig.getControls(), dataConstraints);
+
+        prefPanel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
+    }
+
+    /*
+    * Save entered preference values on OK button
+    */
+    public boolean ok() {
+        Main.pref.put(PREF_MAX_SEG, maxSegsConfig.getValueString());
+        Main.pref.put(PREF_MAX_NODES, maxNodesConfig.getValueString());
+        Main.pref.put(PREF_THRESHOLD_VALUE, thresholdConfig.getValueString());
+        Main.pref.put(PREF_EPSILON, epsilonConfig.getValueString());
+        Main.pref.put(PREF_LANDSAT_RES, landsatResConfig.getValueString());
+        Main.pref.put(PREF_LANDSAT_SIZE, landsatSizeConfig.getValueString());
+        Main.pref.put(PREF_EAST_OFFSET, eastOffsetConfig.getValueString());
+        Main.pref.put(PREF_NORTH_OFFSET, northOffsetConfig.getValueString());
+        Main.pref.put(PREF_START_DIR, startDirConfig.getValueString());
+        Main.pref.put(PREF_WAYTYPE, lakeTypeConfig.getValueString());
+        Main.pref.put(PREF_WMS, wmsConfig.getValueString());
+        Main.pref.put(PREF_MAXCACHESIZE, maxCacheSizeConfig.getValueString());
+        Main.pref.put(PREF_MAXCACHEAGE, maxCacheAgeConfig.getValueString());
+        Main.pref.put(PREF_SOURCE, sourceConfig.getValueString());
+        return false;
+    }
 }
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerReader.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerReader.java	(revision 12891)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerReader.java	(revision 12892)
@@ -1,6 +1,6 @@
 /* LakewalkerReader.java
- * 
+ *
  * Read and process data from a Lakwalker python module
- * 
+ *
  */
 package org.openstreetmap.josm.plugins.lakewalker;
@@ -22,125 +22,106 @@
 
 public class LakewalkerReader {
-  
-  protected Collection<Command> commands = new LinkedList<Command>();
-  protected Collection<Way> ways = new ArrayList<Way>();
-  protected boolean cancel;
-  
-  /*
-   * Read the data
-   */
-  public void read(BufferedReader input) {
+    protected Collection<Command> commands = new LinkedList<Command>();
+    protected Collection<Way> ways = new ArrayList<Way>();
+    protected boolean cancel;
+
     /*
-     * Lakewalker will output data it stdout. Each line has a code in
-     * character 1 indicating the type of data on the line:
-     * 
-     * m text - Status message l name [size] - Access landsat image name. size
-     * is returned if it needs to be downloaded. e text - Error message s nnn -
-     * Start node data stream, nnn seperate tracings to follow t nnn - Start
-     * tracing, nnn nodes to follow x [o] - End of Tracing. o indicates do not
-     * connect last node to first n lat lon [o] - Node. o indicates it is an
-     * open node (not connected to the previous node) z - End of data stream
-     */
+    * Read the data
+    */
+    public void read(BufferedReader input) {
+        /*
+        * Lakewalker will output data it stdout. Each line has a code in
+        * character 1 indicating the type of data on the line:
+        *
+        * m text - Status message l name [size] - Access landsat image name. size
+        * is returned if it needs to be downloaded. e text - Error message s nnn -
+        * Start node data stream, nnn seperate tracings to follow t nnn - Start
+        * tracing, nnn nodes to follow x [o] - End of Tracing. o indicates do not
+        * connect last node to first n lat lon [o] - Node. o indicates it is an
+        * open node (not connected to the previous node) z - End of data stream
+        */
 
-    Way way = new Way();
-    String line;
-    setStatus("Initializing");
-    double eastOffset = Main.pref.getDouble(LakewalkerPreferences.PREF_EAST_OFFSET, 0.0);
-    double northOffset = Main.pref.getDouble(LakewalkerPreferences.PREF_NORTH_OFFSET, 0.0);
-    char option = ' ';
-    
-    try {
-        
-      Node n = null;  // The current node being created
-      Node tn = null; // The last node of the previous way
-      Node fn = null; // Node to hold the first node in the trace
-        
-      while ((line = input.readLine()) != null) {
-        if (cancel) {
-          return;
+        Way way = new Way();
+        String line;
+        setStatus("Initializing");
+        double eastOffset = Main.pref.getDouble(LakewalkerPreferences.PREF_EAST_OFFSET, 0.0);
+        double northOffset = Main.pref.getDouble(LakewalkerPreferences.PREF_NORTH_OFFSET, 0.0);
+        char option = ' ';
+
+        try {
+            Node n = null;  // The current node being created
+            Node tn = null; // The last node of the previous way
+            Node fn = null; // Node to hold the first node in the trace
+
+            while ((line = input.readLine()) != null) {
+                if (cancel)
+                    return;
+                System.out.println(line);
+                option = line.charAt(0);
+                switch (option) {
+                case 'n':
+                    String[] tokens = line.split(" ");
+
+                    if(tn==null){
+                        try {
+                            LatLon ll = new LatLon(Double.parseDouble(tokens[1])+northOffset,
+                            Double.parseDouble(tokens[2])+eastOffset);
+                            n = new Node(ll);
+                            if(fn==null)
+                                fn = n;
+                            commands.add(new AddCommand(n));
+                        }
+                        catch (Exception ex) {}
+                    } else {
+                        // If there is a last node, and this node has the same coordinates
+                        // then we substitute for the previous node
+                        n = tn;
+                        tn = null;
+                    }
+                    way.nodes.add(n);
+                    break;
+                case 's':
+                    setStatus(line.substring(2));
+                    break;
+                case 'x':
+                    String waytype = Main.pref.get(LakewalkerPreferences.PREF_WAYTYPE, "water");
+
+                    if(!waytype.equals("none"))
+                        way.put("natural",waytype);
+                    way.put("source", Main.pref.get(LakewalkerPreferences.PREF_SOURCE, "water"));
+                    commands.add(new AddCommand(way));
+                    break;
+                case 't':
+                    way = new Way();
+                    tn = n;
+                    break;
+                case 'e':
+                    String error = line.substring(2);
+                    cancel = true;
+                    break;
+                }
+            }
+            input.close();
+
+            // Add the start node to the end of the trace to form a closed shape 
+            way.nodes.add(fn);
         }
-        System.out.println(line);
-        option = line.charAt(0);
-        switch (option) {
-        case 'n':
-          String[] tokens = line.split(" ");
-          
-          if(tn==null){
-              try {         
-                LatLon ll = new LatLon(Double.parseDouble(tokens[1])+northOffset, Double.parseDouble(tokens[2])+eastOffset);
-                n = new Node(ll);
-                if(fn==null){
-                  fn = n;
-                }
-                commands.add(new AddCommand(n));
-              }
-              catch (Exception ex) {
-                  
-              }
-          
-          } else {
-            // If there is a last node, and this node has the same coordinates
-            // then we substitute for the previous node
-            n = tn;
-            tn = null;          
-          }
-          
-          way.nodes.add(n);
-          
-          break;
+        catch (Exception ex) { }
 
-        case 's':
-          setStatus(line.substring(2));
-          break;
-          
-        case 'x':
-          String waytype = Main.pref.get(LakewalkerPreferences.PREF_WAYTYPE, "water");
-          
-          if(!waytype.equals("none")){
-              way.put("natural",waytype);
-          }
-          
-          way.put("created_by", "Dshpak_landsat_lakes");
-          commands.add(new AddCommand(way));
-          
-          break;
-        
-        case 't':       
-            way = new Way();
-            tn = n;
-            break;
-          
-        case 'e':
-          String error = line.substring(2);
-          cancel = true;
-          break;
+        if (!commands.isEmpty()) {
+            Main.main.undoRedo.add(new SequenceCommand(tr("Lakewalker trace"), commands));
+            Main.ds.setSelected(ways);
         }
-      } 
-      input.close();
-
-      // Add the start node to the end of the trace to form a closed shape 
-      way.nodes.add(fn);
     }
 
-    catch (Exception ex) {
+    /*
+    * User has hit the cancel button
+    */
+    public void cancel() {
+        cancel = true;
     }
-    
-    if (!commands.isEmpty()) {
-      Main.main.undoRedo.add(new SequenceCommand(tr("Lakewalker trace"), commands));
-      Main.ds.setSelected(ways);
+    protected void setStatus(String s) {
+        Main.pleaseWaitDlg.currentAction.setText(s);
+        Main.pleaseWaitDlg.repaint();
     }
-  }
-  
-  /*
-   * User has hit the cancel button
-   */
-  public void cancel() {
-    cancel = true;
-  }
-  
-  protected void setStatus(String s) {
-    Main.pleaseWaitDlg.currentAction.setText(s);
-    Main.pleaseWaitDlg.repaint();
-  }
-  
 }
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/StringEnumConfigurer.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/StringEnumConfigurer.java	(revision 12891)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/StringEnumConfigurer.java	(revision 12892)
@@ -27,4 +27,6 @@
 package org.openstreetmap.josm.plugins.lakewalker;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.Component;
 import java.awt.Dimension;
@@ -40,84 +42,66 @@
  */
 public class StringEnumConfigurer extends Configurer {
-  protected String[] validValues;
-  protected JComboBox box;
-  protected Box panel;
-  protected String tooltipText = "";
- 
-  public StringEnumConfigurer(String key, String name, String[] validValues) {
-    super(key, name);
-    this.validValues = validValues;
-  }
+    protected String[] validValues;
+    protected String[] transValues;
+    protected JComboBox box;
+    protected Box panel;
+    protected String tooltipText = "";
 
-  public StringEnumConfigurer(String[] validValues) {
-    this(null, "", validValues);
-  }
-  
-  public void setToolTipText(String s) {
-    tooltipText = s;
-  }
-  public Component getControls() {
-    if (panel == null) {
-      panel = Box.createHorizontalBox();
-      panel.add(new JLabel(name));
-      box = new JComboBox(validValues);
-      box.setToolTipText(tooltipText);
-      box.setMaximumSize(new Dimension(box.getMaximumSize().width,box.getPreferredSize().height));
-      if (isValidValue(getValue())) {
-        box.setSelectedItem(getValue());
-      }
-      else if (validValues.length > 0) {
-        box.setSelectedIndex(0);
-      }
-      box.addActionListener(new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          noUpdate = true;
-          setValue(box.getSelectedItem());
-          noUpdate = false;
+    public StringEnumConfigurer(String key, String name, String[] validValues) {
+        super(key, name);
+        this.validValues = validValues;
+        transValues = new String[validValues.length];
+        for(int i = 0; i < validValues.length; ++i)
+            transValues[i] = tr(validValues[i]);
+    }
+
+    public StringEnumConfigurer(String[] validValues) {
+        this(null, "", validValues);
+    }
+
+    public void setToolTipText(String s) {
+        tooltipText = s;
+    }
+    public Component getControls() {
+        if (panel == null) {
+            panel = Box.createHorizontalBox();
+            panel.add(new JLabel(name));
+            box = new JComboBox(transValues);
+            box.setToolTipText(tooltipText);
+            box.setMaximumSize(new Dimension(box.getMaximumSize().width,box.getPreferredSize().height));
+            setValue(value);
+            box.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    noUpdate = true;
+                    setValue(box.getSelectedIndex());
+                    noUpdate = false;
+                }
+            });
+            panel.add(box);
         }
-      });
-      panel.add(box);
+        return panel;
     }
-    return panel;
-  }
+    public void setValue(Object o) {
+        if(o == null)
+            o = new Integer(0);
+        super.setValue(o);
+        if(!noUpdate && box != null)
+            box.setSelectedIndex((Integer)o);
+    }
 
-  public boolean isValidValue(Object o) {
-    for (int i = 0; i < validValues.length; ++i) {
-      if (validValues[i].equals(o)) {
-        return true;
-      }
+    public void setValue(String s) {
+        Integer n = 0;
+        for (int i = 0; i < transValues.length; ++i)
+        {
+            if (transValues[i].equals(s) || validValues[i].equals(s)){
+                n = i;
+                break;
+            }
+        }
+        setValue(n);
     }
-    return false;
-  }
 
-  public String[] getValidValues() {
-    return validValues;
-  }
-
-  public void setValidValues(String[] s) {
-    validValues = s;
-    if (box == null) {
-      getControls();
+    public String getValueString() {
+        return validValues[(Integer)value];
     }
-    box.setModel(new DefaultComboBoxModel(validValues));
-  }
-  
-  public void setValue(Object o) {
-    if (validValues == null
-        || isValidValue(o)) {
-      super.setValue(o);
-      if (!noUpdate && box != null) {
-        box.setSelectedItem(o);
-      }
-    }
-  }
-
-  public String getValueString() {
-    return box != null ? (String) box.getSelectedItem() : validValues[0];
-  }
-
-  public void setValue(String s) {
-    setValue((Object) s);
-  }
-
 }
