diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
index a5111b2b24..3708debda4 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
@@ -71,6 +71,113 @@ public final class MapPaintSettings implements PreferenceChangedListener {
         Config.getPref().addPreferenceChangeListener(this);
     }
 
+    /**
+     * Constructs new MapPaintSettings with custom values. Used for rendering where preferences should not be used.
+     * @param useRealWidth if true, real width of ways should be used
+     * @param showDirectionArrow if true, directional arrows should be displayed
+     * @param showOnewayArrow if true, arrows for oneways should be displayed
+     * @param defaultSegmentWidth default width for ways segments
+     * @param showOrderNumber if true, segment numbers of ways should be displayed
+     * @param showOrderNumberOnSelectedWay if true, segment numbers of ways should be displayed on selected way
+     * @param showHeadArrowOnly if true, only the last arrow of a way should be displayed
+     * @param showNamesDistance the distance at which names should be drawn
+     * @param useStrokesDistance the distance at which strokes should be used
+     * @param showIconsDistance the distance at which icons should be drawn
+     * @param selectedNodeSize the size of selected nodes
+     * @param connectionNodeSize the size of multiply connected nodes
+     * @param unselectedNodeSize the size of unselected nodes
+     * @param taggedNodeSize the size of tagged nodes
+     * @param fillSelectedNode if true, selected nodes should be filled
+     * @param fillUnselectedNode if true, unselected nodes should be filled
+     * @param fillTaggedNode if true, tagged nodes should be filled
+     * @param fillConnectionNode if true, multiply connected nodes should be filled
+     * @param outlineOnly if true, only the data area outline should be drawn
+     * @param selectedColor color for selected objects
+     * @param relationSelectedColor color for selected relations
+     * @param highlightColor color for highlighted objects
+     * @param inactiveColor color for inactive objects
+     * @param nodeColor color for nodes
+     * @param taggedColor color for tagged nodes
+     * @param connectionColor color for multiply connected nodes
+     * @param taggedConnectionColor color for tagged and multiply connected nodes
+     */
+    public MapPaintSettings(boolean useRealWidth, boolean showDirectionArrow, boolean showOnewayArrow,
+                            int defaultSegmentWidth, boolean showOrderNumber, boolean showOrderNumberOnSelectedWay,
+                            boolean showHeadArrowOnly, int showNamesDistance, int useStrokesDistance,
+                            int showIconsDistance, int selectedNodeSize, int connectionNodeSize,
+                            int unselectedNodeSize, int taggedNodeSize, boolean fillSelectedNode,
+                            boolean fillUnselectedNode, boolean fillTaggedNode, boolean fillConnectionNode,
+                            boolean outlineOnly, Color selectedColor, Color relationSelectedColor,
+                            Color highlightColor, Color inactiveColor, Color nodeColor, Color taggedColor,
+                            Color connectionColor, Color taggedConnectionColor) {
+        this.useRealWidth = useRealWidth;
+        this.showDirectionArrow = showDirectionArrow;
+        this.showOnewayArrow = showOnewayArrow;
+        this.defaultSegmentWidth = defaultSegmentWidth;
+        this.showOrderNumber = showOrderNumber;
+        this.showOrderNumberOnSelectedWay = showOrderNumberOnSelectedWay;
+        this.showHeadArrowOnly = showHeadArrowOnly;
+        this.showNamesDistance = showNamesDistance;
+        this.useStrokesDistance = useStrokesDistance;
+        this.showIconsDistance = showIconsDistance;
+        this.selectedNodeSize = selectedNodeSize;
+        this.connectionNodeSize = connectionNodeSize;
+        this.unselectedNodeSize = unselectedNodeSize;
+        this.taggedNodeSize = taggedNodeSize;
+        this.fillSelectedNode = fillSelectedNode;
+        this.fillUnselectedNode = fillUnselectedNode;
+        this.fillTaggedNode = fillTaggedNode;
+        this.fillConnectionNode = fillConnectionNode;
+        this.outlineOnly = outlineOnly;
+        this.selectedColor = selectedColor;
+        this.relationSelectedColor = relationSelectedColor;
+        this.highlightColor = highlightColor;
+        this.inactiveColor = inactiveColor;
+        this.nodeColor = nodeColor;
+        this.taggedColor = taggedColor;
+        this.connectionColor = connectionColor;
+        this.taggedConnectionColor = taggedConnectionColor;
+    }
+
+    /**
+     * Creates MapPaintSettings with most neutral settings, that do not override MapCSS.
+     * Useful for MapCSS CLI/Plugin rendering, via {@link org.openstreetmap.josm.gui.mappaint.RenderingHelper}
+     * @return a new MapPaintSettings instance with neutral values.
+     */
+    public static MapPaintSettings createNeutralSettings() {
+        // Use current INSTANCE to get default colors and other non-arrow-related settings
+        MapPaintSettings instance = MapPaintSettings.INSTANCE;
+        return new MapPaintSettings(
+                false, // Real width is not used (at least currently)
+                false, // Direction arrows are turned off
+                false, // One way arrows are disabled
+                instance.getDefaultSegmentWidth(),
+                false, // Segment numbers are disabled
+                false, // Segment numbers are disabled on selected ways
+                false, // Direction arrows are turned off on way head
+                0, // Forced labels are disabled
+                instance.getUseStrokesDistance(),
+                instance.getShowIconsDistance(),
+                instance.getSelectedNodeSize(),
+                instance.getConnectionNodeSize(),
+                instance.getUnselectedNodeSize(),
+                instance.getTaggedNodeSize(),
+                instance.isFillSelectedNode(),
+                instance.isFillUnselectedNode(),
+                instance.isFillTaggedNode(),
+                instance.isFillConnectionNode(),
+                false, //Polygons are filled as per MapCSS style,
+                instance.getSelectedColor(),
+                instance.getRelationSelectedColor(),
+                instance.getHighlightColor(),
+                instance.getInactiveColor(),
+                instance.getNodeColor(),
+                instance.getTaggedColor(),
+                instance.getConnectionColor(),
+                instance.getTaggedConnectionColor()
+        );
+    }
+
     private void load() {
         showDirectionArrow = Config.getPref().getBoolean("draw.segment.direction", false);
         showOnewayArrow = Config.getPref().getBoolean("draw.oneway", true);
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
index f49eb1e332..47909742c1 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -382,6 +382,23 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         this.styles = MapPaintStyles.getStyles();
     }
 
+    /**
+     * Constructs a new {@code StyledMapRenderer} with custom map paint settings.
+     *
+     * @param g the graphics context. Must not be null.
+     * @param nc the map viewport. Must not be null.
+     * @param isInactiveMode if true, the paint visitor shall render OSM objects such that they
+     * look inactive. Example: rendering of data in an inactive layer using light gray as color only.
+     * @param paintSettings the map paint settings to use. Must not be null.
+     * @throws IllegalArgumentException if {@code g} is null
+     * @throws IllegalArgumentException if {@code nc} is null
+     * @throws IllegalArgumentException if {@code paintSettings} is null
+     */
+    public StyledMapRenderer(Graphics2D g, NavigatableComponent nc, boolean isInactiveMode, MapPaintSettings paintSettings) {
+        this(g, nc, isInactiveMode);
+        this.paintSettings = paintSettings;
+    }
+
     /**
      * Set the {@link ElemStyles} instance to use for this renderer.
      * @param styles the {@code ElemStyles} instance to use
@@ -1410,7 +1427,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     @Override
     public void getSettings(boolean virtual) {
         super.getSettings(virtual);
-        paintSettings = MapPaintSettings.INSTANCE;
+        if (paintSettings == null) {
+            paintSettings = MapPaintSettings.INSTANCE;
+        }
 
         circum = nc.getDist100Pixel();
         scale = nc.getScale();
diff --git a/src/org/openstreetmap/josm/gui/mappaint/RenderingHelper.java b/src/org/openstreetmap/josm/gui/mappaint/RenderingHelper.java
index 93f524a944..c8fab26cae 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/RenderingHelper.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/RenderingHelper.java
@@ -26,6 +26,7 @@ import org.openstreetmap.josm.data.projection.ProjectionRegistry;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
 import org.openstreetmap.josm.gui.mappaint.styleelement.StyleElement;
+import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
@@ -183,7 +184,7 @@ public class RenderingHelper {
             g.setColor(Optional.ofNullable(backgroundColor).orElse(elemStyles.getBackgroundColor()));
             g.fillRect(0, 0, imgDimPx.width, imgDimPx.height);
         }
-        StyledMapRenderer smr = new StyledMapRenderer(g, nc, false);
+        StyledMapRenderer smr = new StyledMapRenderer(g, nc, false, MapPaintSettings.createNeutralSettings());
         smr.setStyles(elemStyles);
         smr.render(ds, false, bounds);
 
