Index: /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/DrawnPolyLine.java
===================================================================
--- /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/DrawnPolyLine.java	(revision 26302)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/DrawnPolyLine.java	(revision 26303)
@@ -8,4 +8,5 @@
 import java.util.ListIterator;
 import java.util.Set;
+import javax.xml.stream.events.StartDocument;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -105,4 +106,19 @@
     }
     
+    /**
+     * Increase epsilon to fit points count in maxPKM point per 1 km
+     */
+    double autoSimplify(double initEpsilon,double ekf,double maxPKM) {
+        double e=initEpsilon;
+        if (e<1e-3) e=1e-3;
+        if (ekf<1+1e-2) ekf=1.01;
+        do {
+             e=e*ekf;
+             simplify(e);
+             //System.out.printf("eps=%f n=%d\n", e,simplePoints.size());
+        } while (getNodesPerKm()>maxPKM && e<1e3);
+        return e;
+    }
+            
     /**
      * Simplified drawn line, not touching the nodes includes in "fixed" set.
@@ -302,4 +318,27 @@
          }
     }
+    public double getNodesPerKm() {
+        if (points.size()<2) return 0;
+        Point p1, p2;
+        LatLon pp1, pp2=null;
+        Iterator<LatLon> it1,it2;
+        
+        it1=points.listIterator(0);
+        it2=points.listIterator(1);
+        int n=points.size();
+        double len=0;
+        for (int i = 0; i < n-1; i++) {
+                pp1 = it1.next();
+                //p1 = getPoint(pp1);
+                pp2 = it2.next();
+                //p2 = getPoint(pp2);
+                len+=pp1.greatCircleDistance(pp2);
+            }
+        if (isClosed()) len+=pp2.greatCircleDistance(points.get(0));
+        return Math.round((wasSimplified()?simplePoints.size():points.size())
+                /len*1000);
+        
+            
+    }
 
 }
Index: /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java
===================================================================
--- /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java	(revision 26302)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java	(revision 26303)
@@ -20,4 +20,6 @@
     /// Initial tolerance for Douglas-Pecker algorithm
     public double startingEps;    
+    /// Maximum number of points per 1 km of way
+    public double maxPointsPerKm;
     
     public void loadPrefs() {
@@ -32,4 +34,5 @@
         minPixelsBetweenPoints = Main.pref.getDouble("fastdraw.mindelta", 20);
         startingEps = Main.pref.getDouble("fastdraw.startingEps", 20);
+        maxPointsPerKm = Main.pref.getDouble("fastdraw.maxpkm", 200);
     }
 
@@ -45,4 +48,5 @@
          Main.pref.putDouble("fastdraw.mindelta",minPixelsBetweenPoints);
          Main.pref.putDouble("fastdraw.startingEps",startingEps);
+         Main.pref.putDouble("fastdraw.maxpkm",maxPointsPerKm);
          try {Main.pref.save();} catch (IOException e) {
              System.err.println(tr("Can not save preferences"));
Index: /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java
===================================================================
--- /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 26302)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 26303)
@@ -29,14 +29,18 @@
         JLabel label1=new JLabel(tr("Epsilon multiplier"));
         JLabel label2=new JLabel(tr("Starting Epsilon"));
+        JLabel label3=new JLabel(tr("Max points count per 1 km"));
         JFormattedTextField text1=new JFormattedTextField(NumberFormat.getInstance());
         JFormattedTextField text2=new  JFormattedTextField(NumberFormat.getInstance());
+        JFormattedTextField text3=new  JFormattedTextField(NumberFormat.getInstance());
         layout.setHorizontalGroup(
             layout.createSequentialGroup()
                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                     .addComponent(label1)
-                    .addComponent(label2))
+                    .addComponent(label2)
+                    .addComponent(label3))
                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                     .addComponent(text1)
                     .addComponent(text2)
+                    .addComponent(text3)
                 )
                 );
@@ -49,8 +53,12 @@
                     .addComponent(label2)
                     .addComponent(text2))
+                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
+                    .addComponent(label3)
+                    .addComponent(text3))
                 );
         
         text1.setValue(settings.epsilonMult);
         text2.setValue(settings.startingEps);
+        text3.setValue(settings.maxPointsPerKm);
         
         ExtendedDialog dialog = new ExtendedDialog(Main.parent,
@@ -71,4 +79,5 @@
             settings.epsilonMult=NumberFormat.getInstance().parse(text1.getText()).doubleValue();
             settings.startingEps=NumberFormat.getInstance().parse(text2.getText()).doubleValue();
+            settings.maxPointsPerKm=NumberFormat.getInstance().parse(text3.getText()).doubleValue();
             settings.savePrefs();
             } catch (ParseException e) {
Index: /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java
===================================================================
--- /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 26302)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 26303)
@@ -364,6 +364,8 @@
             // first Enter = simplify, second = save the way
             if (!line.wasSimplified()) {
-                line.simplify(eps);
-                setStatusLine(tr("Eps={0}, {1} points", eps, line.getSimplePointsCount())+" "+SIMPLIFYMODE_MESSAGE);
+                //line.simplify(eps);
+                eps = line.autoSimplify(settings.startingEps, settings.epsilonMult, settings.maxPointsPerKm);
+                repaint();
+                showSimplifyHint();
             } else saveAsWay();
         }
@@ -389,8 +391,10 @@
                 Toolkit.getDefaultToolkit().removeAWTEventListener(this);
                 new FastDrawConfigDialog(settings);
+                eps = line.autoSimplify(settings.startingEps, settings.epsilonMult, settings.maxPointsPerKm);
+                //System.out.println("final eps="+eps);
                 Toolkit.getDefaultToolkit().addAWTEventListener(this,
                     AWTEvent.KEY_EVENT_MASK);
             } catch (SecurityException ex) {  }
-            eps=settings.startingEps;
+            repaint();
         }
     }
@@ -485,5 +489,5 @@
         line.simplify(eps);
         /* I18N: Eps = Epsilon, the tolerance parameter */ 
-        setStatusLine(tr("Eps={0}, {1} points", eps, line.getSimplePointsCount()));
+        showSimplifyHint();
         repaint();
     }
@@ -538,3 +542,8 @@
 // </editor-fold>
 
+    private void showSimplifyHint() {
+            setStatusLine(tr("Eps={0}, {1} points, {2} p/km", 
+                eps, line.getSimplePointsCount(),line.getNodesPerKm())+" "
+            +SIMPLIFYMODE_MESSAGE);
+    }
 }
