Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/Lakewalker.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/Lakewalker.java	(revision 6948)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/Lakewalker.java	(revision 6949)
@@ -223,4 +223,8 @@
 	public ArrayList<double[]> duplicateNodeRemove(ArrayList<double[]> nodes){
 		
+		if(nodes.size() <= 1){
+			return nodes;
+		}
+		
 		double lastnode[] = new double[] {nodes.get(0)[0], nodes.get(0)[1]};
 		
@@ -251,5 +255,5 @@
 		
 		// Check if node list is empty
-		if(nodes.size()==0){
+		if(nodes.size()<=1){
 			return nodes;
 		}
@@ -286,8 +290,73 @@
 	}
 	
+	public ArrayList<double[]> douglasPeuckerNR(ArrayList<double[]> nodes, double epsilon){
+		/*
+		command_stack = [(0, len(nodes) - 1)]
+		                 
+		Vector result_stack = new Vector();
+
+        while(command_stack.size() > 0){
+        	cmd = command_stack.pop();
+        	if(type(cmd) == tuple){
+        		(start, end) = cmd
+        		(node, dist) = dp_findpoint(nodes, start, end)
+        		if(dist > epsilon){
+        			command_stack.append("+")
+        			command_stack.append((start, node))
+        			command_stack.append((node, end))
+        		} else {
+        			result_stack.append((start, end))
+        		}
+        	} elseif(cmd == "+"){
+        		first = result_stack.pop()
+        		second = result_stack.pop()
+        		if(first[-1] == second[0]){
+        			result_stack.append(first + second[1:])
+        			//print "Added %s and %s; result is %s" % (first, second, result_stack[-1])
+        		}else {
+        			error("ERROR: Cannot connect nodestrings!")
+        			#print first
+        			#print second
+        			return;
+        		}
+        	} else {
+        		error("ERROR: Can't understand command \"%s\"" % (cmd,))
+        		return
+ 
+		if(len(result_stack) == 1){
+			return [nodes[x] for x in result_stack[0]];
+		} else {
+			error("ERROR: Command stack is empty but result stack has %d nodes!" % len(result_stack));
+			return;
+		}
+        		
+		farthest_node = None
+		farthest_dist = 0
+		first = nodes[0]
+		last = nodes[-1]
+             
+		for(i in xrange(1, len(nodes) - 1){
+			d = point_line_distance(nodes[i], first, last)
+			if(d > farthest_dist){
+				farthest_dist = d
+				farthest_node = i
+     		}
+		}
+		if(farthest_dist > epsilon){
+			seg_a = douglas_peucker(nodes[0:farthest_node+1], epsilon)
+			seg_b = douglas_peucker(nodes[farthest_node:-1], epsilon)
+			//print "Minimized %d nodes to %d + %d nodes" % (len(nodes), len(seg_a), len(seg_b))
+			nodes = seg_a[:-1] + seg_b
+		} else {
+			return [nodes[0], nodes[-1]];
+		}
+		*/
+		return nodes;
+	}
+	
 	public ArrayList<double[]> douglasPeucker(ArrayList<double[]> nodes, double epsilon){
 		
 		// Check if node list is empty
-		if(nodes.size()==0){
+		if(nodes.size()<=1){
 			return nodes;
 		}
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 6948)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerAction.java	(revision 6949)
@@ -106,5 +106,5 @@
 	final int waylen = Integer.parseInt(Main.pref.get(LakewalkerPreferences.PREF_MAX_SEG, "500"));
 	final int maxnode = Integer.parseInt(Main.pref.get(LakewalkerPreferences.PREF_MAX_NODES, "50000"));
-	final int threshold = Integer.parseInt(Main.pref.get(LakewalkerPreferences.PREF_THRESHOLD, "35"));
+	final int threshold = Integer.parseInt(Main.pref.get(LakewalkerPreferences.PREF_THRESHOLD_VALUE, "90"));
 	final double epsilon = Double.parseDouble(Main.pref.get(LakewalkerPreferences.PREF_EPSILON, "0.0003"));
 	final int resolution = Integer.parseInt(Main.pref.get(LakewalkerPreferences.PREF_LANDSAT_RES, "4000"));
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerActionOld.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerActionOld.java	(revision 6948)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerActionOld.java	(revision 6949)
@@ -40,6 +40,6 @@
   
   public LakewalkerActionOld(String name) {
-    super(name, "lakewalker-sml", tr("Lake Walker."), KeyEvent.VK_L, KeyEvent.CTRL_MASK
-        | KeyEvent.SHIFT_MASK, true);
+    super(name, "lakewalker-sml", tr("Lake Walker (Old)"), KeyEvent.VK_L, KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK
+        | KeyEvent.SHIFT_MASK, false);
     this.name = name;
     setEnabled(true);
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPlugin.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPlugin.java	(revision 6948)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPlugin.java	(revision 6949)
@@ -36,4 +36,5 @@
     if (toolsMenu == null) {
       toolsMenu = new JMenu(name);
+      toolsMenu.add(new JMenuItem(new LakewalkerActionOld(name2)));
       toolsMenu.add(new JMenuItem(new LakewalkerAction(name)));
       Main.main.menu.add(toolsMenu, 2);
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 6948)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 6949)
@@ -21,4 +21,5 @@
   public static final String PREF_MAX_NODES = "lakewalker.max_nodes";
   public static final String PREF_THRESHOLD = "lakewalker.threshold";
+  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";
@@ -37,5 +38,7 @@
   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 JLabel thresholdLabel = new JLabel(tr("Maximum gray value to count as water (0-255) [For old script]"));
+  protected IntConfigurer thresholdConfigNew = new IntConfigurer();
+  protected JLabel thresholdLabelNew = 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)"));
@@ -60,4 +63,5 @@
     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 35."));
+    thresholdConfigNew.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."));
@@ -77,4 +81,5 @@
     maxNodesConfig.setValue(Main.pref.get(PREF_MAX_NODES, "50000"));
     thresholdConfig.setValue(Main.pref.get(PREF_THRESHOLD, "35"));
+    thresholdConfigNew.setValue(Main.pref.get(PREF_THRESHOLD_VALUE, "90"));    
     epsilonConfig.setValue(Main.pref.get(PREF_EPSILON, "0.0003"));
     landsatResConfig.setValue(Main.pref.get(PREF_LANDSAT_RES, "4000"));
@@ -99,4 +104,6 @@
     prefPanel.add(thresholdLabel, labelConstraints);
     prefPanel.add(thresholdConfig.getControls(), dataConstraints);
+    prefPanel.add(thresholdLabelNew, labelConstraints);
+    prefPanel.add(thresholdConfigNew.getControls(), dataConstraints);
     prefPanel.add(epsilonLabel, labelConstraints);
     prefPanel.add(epsilonConfig.getControls(), dataConstraints);
@@ -125,4 +132,5 @@
     Main.pref.put(PREF_MAX_NODES, maxNodesConfig.getValueString());
     Main.pref.put(PREF_THRESHOLD, thresholdConfig.getValueString());
+    Main.pref.put(PREF_THRESHOLD_VALUE, thresholdConfigNew.getValueString());
     Main.pref.put(PREF_EPSILON, epsilonConfig.getValueString());
     Main.pref.put(PREF_LANDSAT_RES, landsatResConfig.getValueString());
