diff --git a/src/org/openstreetmap/josm/data/validation/tests/SharpAngles.java b/src/org/openstreetmap/josm/data/validation/tests/SharpAngles.java
index 676eb47f10..ecbe50d25a 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/SharpAngles.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/SharpAngles.java
@@ -16,6 +16,7 @@ import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -28,19 +29,26 @@ public class SharpAngles extends Test {
     private static final int SHARPANGLESCODE = 3800;
     /** The code for a sharp angle */
     private static final int SHARP_ANGLES = SHARPANGLESCODE + 0;
-    /** The maximum angle for sharp angles */
-    private double maxAngle = 45.0; // degrees
-    /** The length that at least one way segment must be shorter than */
-    private double maxLength = 10.0; // meters
+    /** The maximum angle for sharp angles (degrees) */
+    private double maxAngle;
+    /** The length that at least one way segment must be shorter than (meters) */
+    private double maxLength;
     /** Specific highway types to ignore */
     private final Collection<String> ignoreHighways = new TreeSet<>(
             Arrays.asList("platform", "rest_area", "services", "via_ferrata"));
+    /** Specific railway types to ignore */
+    private final Collection<String> ignoreRailway = new TreeSet<>(
+            Arrays.asList("crossing_box", "loading_ramp", "platform", "roundhouse", "signal_box", "station",
+                    "traverser", "wash", "workshop")
+    );
 
     /**
      * Construct a new {@code IntersectionIssues} object
      */
     public SharpAngles() {
-        super(tr("Sharp angles"), tr("Check for sharp angles on roads"));
+        super(tr("Sharp angles"), tr("Check for sharp angles on man made transportation ways"));
+        this.maxLength = Config.getPref().getDouble("validator.sharpangles.maxlength", 10.0); // meters
+        this.maxAngle = Config.getPref().getDouble("validator.sharpangles.maxlength", 45.0); // degrees
     }
 
     @Override
@@ -61,8 +69,9 @@ public class SharpAngles extends Test {
      * @return {@code true} if the way should be checked.
      */
     public boolean shouldBeTestedForSharpAngles(Way way) {
-        return (way.hasKey("highway") && !way.hasTag("area", "yes") && !way.hasKey("via_ferrata_scale") &&
-                !ignoreHighways.contains(way.get("highway")));
+        return !way.hasTag("area", "yes") &&
+                ((way.hasKey("highway") && !way.hasKey("via_ferrata_scale") && !ignoreHighways.contains(way.get("highway")))
+                    || (way.hasKey("railway") && !ignoreRailway.contains(way.get("railway"))));
     }
 
     /**
@@ -144,6 +153,15 @@ public class SharpAngles extends Test {
         ignoreHighways.add(highway);
     }
 
+    /**
+     * Add a railway to ignore
+     * @param railway The highway type to ignore (e.g., if you want to ignore miniature railways, use "miniature")
+     * @since xxx
+     */
+    public void addIgnoredRailway(String railway) {
+        ignoreRailway.add(railway);
+    }
+
     /**
      * Set the maximum angle
      * @param angle The maximum angle in degrees.
